aboutsummaryrefslogtreecommitdiffstats
path: root/_zsh/40-functions.zsh
diff options
context:
space:
mode:
authorAaron LI <aaronly.me@gmail.com>2016-04-30 15:13:55 +0800
committerAaron LI <aaronly.me@gmail.com>2016-04-30 15:13:55 +0800
commitc381c0c531a78ff4b1a1907c10da4ff54a112f0a (patch)
treeb194beb791c36b31fd1f3333d2f20f07462fe516 /_zsh/40-functions.zsh
parent3d6f015f851398d0ce1e509cd6fd88e74c7626f6 (diff)
downloaddotfiles-c381c0c531a78ff4b1a1907c10da4ff54a112f0a.tar.bz2
_zsh: simplify initialization; order by perfix
Diffstat (limited to '_zsh/40-functions.zsh')
-rw-r--r--_zsh/40-functions.zsh95
1 files changed, 95 insertions, 0 deletions
diff --git a/_zsh/40-functions.zsh b/_zsh/40-functions.zsh
new file mode 100644
index 0000000..46da01c
--- /dev/null
+++ b/_zsh/40-functions.zsh
@@ -0,0 +1,95 @@
+#
+# zsh/functions.zsh
+#
+# execute 'functions <func_name>' to show function details.
+#
+
+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: #