# # zsh/functions.zsh # # execute 'functions ' to show function details. # ## Check the existence/accessibility of a command # Credit: https://stackoverflow.com/a/677212/4856091 function exists() { # 'command' is POSIX-compliant and more portable; # 'hash' only searches for commands; # while 'type' also considers builtins and keywords. type "$1" >/dev/null 2>&1 } ## Check whether the program is running function is_running() { pgrep -x -u "${USER}" $1 &> /dev/null } function zsh_recompile() { autoload -U zrecompile rm -f ~/.zsh/*.zwc [[ -f ~/.zshrc ]] && zrecompile -p ~/.zshrc [[ -f ~/.zshrc.zwc.old ]] && rm -f ~/.zshrc.zwc.old for f in ~/.zsh/**/*.zsh; do [[ -f $f ]] && zrecompile -p $f [[ -f $f.zwc.old ]] && rm -f $f.zwc.old done [[ -f ~/.zcompdump ]] && zrecompile -p ~/.zcompdump [[ -f ~/.zcompdump.zwc.old ]] && rm -f ~/.zcompdump.zwc.old source ~/.zshrc } function extract() { echo Extracting $1 ... if [ -f "$1" ] ; then case "$1" in *.tar.bz2) tar xjf "$1";; *.tar.gz) tar xzf "$1";; *.bz2) bunzip2 "$1";; *.rar) unrar x "$1";; *.gz) gunzip "$1";; *.tar) tar xf "$1";; *.tbz2) tar xjf "$1";; *.tgz) tar xzf "$1";; *.zip) unzip "$1";; *.Z) uncompress "$1";; *.7z) 7z x "$1";; *) echo "'$1' cannot be extracted via extract()" ;; esac else echo "'$1' is not a valid file" fi } function trash() { local path for path in "$@"; do # ignore any arguments if [[ "${path}" = -* ]]; then : else local dst="${path##*/}" # append the time if necessary while [ -e ~/.trash/"${dst}" ]; do dst="${dst} "$(date +%H-%M-%S) done command mv "${path}" ~/.trash/"${dst}" fi done } function strip_diff_leading_symbols() { local color_code_regex="(\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K])" # simplify the unified patch diff header sed -r "s/^($color_code_regex)diff --git .*$//g" | \ sed -r "s/^($color_code_regex)index .*$/\n\1$(rule)/g" | \ sed -r "s/^($color_code_regex)\+\+\+(.*)$/\1+++\5\n\1$(rule)\x1B\[m/g" |\ # actually strips the leading symbols sed -r "s/^($color_code_regex)[\+\-]/\1 /g" } ## Print a horizontal rule function rule() { printf "%$(tput cols)s\n" | tr ' ' '-' } # vim: set ts=8 sw=4 tw=0 fenc=utf-8 ft=zsh: #