|
|
- #!/bin/bash
-
- ##################################################
- # .functions
- # ------------
- # Based on the amazing work of Jess Frazelle
- #
- # :author: Levi Olson
- # :date: 1 Feb 2018
- # :version: 0.0.1
- ##################################################
-
-
- # Simple calculator
- calc() {
- local result=""
- result="$(printf "scale=10;%s\\n" "$*" | bc --mathlib | tr -d '\\\n')"
- # └─ default (when `--mathlib` is used) is 20
-
- if [[ "$result" == *.* ]]; then
- # improve the output for decimal numbers
- # add "0" for cases like ".5"
- # add "0" for cases like "-.5"
- # remove trailing zeros
- printf "%s" "$result" |
- sed -e 's/^\./0./' \
- -e 's/^-\./-0./' \
- -e 's/0*$//;s/\.$//'
- else
- printf "%s" "$result"
- fi
- printf "\\n"
- }
-
- # mkdir, cd into it
- mkcd() {
- mkdir -p "$@"
- cd "$1"
- }
-
- # save path on cd
- cd() {
- builtin cd $@
- pwd > ~/.last_dir
- }
-
-
- # Syntax-highlight JSON strings or files
- # Usage: `json '{"foo":42}'` or `echo '{"foo":42}' | json`
- json() {
- if [ -t 0 ]; then # argument
- python -mjson.tool <<< "$*" | pygmentize -l javascript
- else # pipe
- python -mjson.tool | pygmentize -l javascript
- fi
- }
-
- # Call from a local repo to open the repository on github/bitbucket in browser
- # Modified version of https://github.com/zeke/ghwd
- repo() {
- # Figure out github repo base URL
- local base_url
- base_url=$(git config --get remote.origin.url)
- base_url=${base_url%\.git} # remove .git from end of string
-
- # Fix git@github.com: URLs
- base_url=${base_url//git@github\.com:/https:\/\/github\.com\/}
-
- # Fix git://github.com URLS
- base_url=${base_url//git:\/\/github\.com/https:\/\/github\.com\/}
-
- # Fix git@bitbucket.org: URLs
- base_url=${base_url//git@bitbucket.org:/https:\/\/bitbucket\.org\/}
-
- # Fix git@gitlab.com: URLs
- base_url=${base_url//git@gitlab\.com:/https:\/\/gitlab\.com\/}
-
- # Validate that this folder is a git folder
- if ! git branch 2>/dev/null 1>&2 ; then
- echo "Not a git repo!"
- exit $?
- fi
-
- # Find current directory relative to .git parent
- full_path=$(pwd)
- git_base_path=$(cd "./$(git rev-parse --show-cdup)" || exit 1; pwd)
- relative_path=${full_path#$git_base_path} # remove leading git_base_path from working directory
-
- # If filename argument is present, append it
- if [ "$1" ]; then
- relative_path="$relative_path/$1"
- fi
-
- # Figure out current git branch
- # git_where=$(command git symbolic-ref -q HEAD || command git name-rev --name-only --no-undefined --always HEAD) 2>/dev/null
- git_where=$(command git name-rev --name-only --no-undefined --always HEAD) 2>/dev/null
-
- # Remove cruft from branchname
- branch=${git_where#refs\/heads\/}
-
- [[ $base_url == *bitbucket* ]] && tree="src" || tree="tree"
- url="$base_url/$tree/$branch$relative_path"
-
-
- echo "Calling $(type open) for $url"
-
- open "$url" &> /dev/null || (echo "Using $(type open) to open URL failed." && exit 1);
- }
-
- # Get colors in manual pages
- man() {
- env \
- LESS_TERMCAP_mb="$(printf '\e[1;31m')" \
- LESS_TERMCAP_md="$(printf '\e[1;31m')" \
- LESS_TERMCAP_me="$(printf '\e[0m')" \
- LESS_TERMCAP_se="$(printf '\e[0m')" \
- LESS_TERMCAP_so="$(printf '\e[1;44;33m')" \
- LESS_TERMCAP_ue="$(printf '\e[0m')" \
- LESS_TERMCAP_us="$(printf '\e[1;32m')" \
- man "$@"
- }
-
- # get dbus session
- dbs() {
- local t=$1
- if [[ -z "$t" ]]; then
- local t="session"
- fi
-
- dbus-send --$t --dest=org.freedesktop.DBus \
- --type=method_call --print-reply \
- /org/freedesktop/DBus org.freedesktop.DBus.ListNames
- }
-
- # get the name of a x window
- xname(){
- local window_id=$1
-
- if [[ -z $window_id ]]; then
- echo "Please specifiy a window id, you find this with 'xwininfo'"
-
- return 1
- fi
-
- local match_string='".*"'
- local match_qstring='"[^"\\]*(\\.[^"\\]*)*"' # NOTE: Adds 1 backreference
-
- # get the name
- xprop -id "$window_id" | \
- sed -nr \
- -e "s/^WM_CLASS\\(STRING\\) = ($match_qstring), ($match_qstring)$/instance=\\1\\nclass=\\3/p" \
- -e "s/^WM_WINDOW_ROLE\\(STRING\\) = ($match_qstring)$/window_role=\\1/p" \
- -e "/^WM_NAME\\(STRING\\) = ($match_string)$/{s//title=\\1/; h}" \
- -e "/^_NET_WM_NAME\\(UTF8_STRING\\) = ($match_qstring)$/{s//title=\\1/; h}" \
- -e "\${g; p}"
- }
|