about summary refs log tree commit diff
path: root/Functions
diff options
context:
space:
mode:
authorFrank Terbeck <bewater@users.sourceforge.net>2011-03-30 21:17:07 +0000
committerFrank Terbeck <bewater@users.sourceforge.net>2011-03-30 21:17:07 +0000
commitabe0ee3936c7f4a291666af3a9d70ed2a6d710f4 (patch)
tree8298dd598fd7d7ce375c13473e780c0c6e4259c5 /Functions
parentd7bcf2bb96047aa6a00d59885d1343ef4e0db54f (diff)
downloadzsh-abe0ee3936c7f4a291666af3a9d70ed2a6d710f4.tar.gz
zsh-abe0ee3936c7f4a291666af3a9d70ed2a6d710f4.tar.xz
zsh-abe0ee3936c7f4a291666af3a9d70ed2a6d710f4.zip
28960: Add functions to add/remove static hooks.
Diffstat (limited to 'Functions')
-rw-r--r--Functions/VCS_Info/.distfiles2
-rw-r--r--Functions/VCS_Info/vcs_info2
-rw-r--r--Functions/VCS_Info/vcs_info_hookadd22
-rw-r--r--Functions/VCS_Info/vcs_info_hookdel45
4 files changed, 71 insertions, 0 deletions
diff --git a/Functions/VCS_Info/.distfiles b/Functions/VCS_Info/.distfiles
index 988e7ada4..b6e55d2fc 100644
--- a/Functions/VCS_Info/.distfiles
+++ b/Functions/VCS_Info/.distfiles
@@ -1,6 +1,8 @@
 DISTFILES_SRC='
 .distfiles
 vcs_info
+vcs_info_hookadd
+vcs_info_hookdel
 VCS_INFO_adjust
 VCS_INFO_bydir_detect
 VCS_INFO_check_com
diff --git a/Functions/VCS_Info/vcs_info b/Functions/VCS_Info/vcs_info
index 6ce1cd702..385a451da 100644
--- a/Functions/VCS_Info/vcs_info
+++ b/Functions/VCS_Info/vcs_info
@@ -26,6 +26,8 @@ static_functions=(
     VCS_INFO_reposub
     VCS_INFO_set
 
+    vcs_info_hookadd
+    vcs_info_hookdel
     vcs_info_lastmsg
     vcs_info_printsys
     vcs_info_setsys
diff --git a/Functions/VCS_Info/vcs_info_hookadd b/Functions/VCS_Info/vcs_info_hookadd
new file mode 100644
index 000000000..867f7e271
--- /dev/null
+++ b/Functions/VCS_Info/vcs_info_hookadd
@@ -0,0 +1,22 @@
+## vim:ft=zsh
+## Written by Frank Terbeck <ft@bewatermyfriend.org>
+## Distributed under the same BSD-ish license as zsh itself.
+
+emulate -L zsh
+setopt extendedglob
+
+if (( ${#argv} < 2 )); then
+    print 'usage: vcs_info_hookadd <HOOK> <FUNCTION(s)...>'
+    return 1
+fi
+
+local hook func context
+local -a old
+
+hook=$1
+shift
+context=":vcs_info-static_hooks:${hook}"
+
+zstyle -a "${context}" hooks old
+zstyle "${context}" hooks "${old[@]}" "$@"
+return $?
diff --git a/Functions/VCS_Info/vcs_info_hookdel b/Functions/VCS_Info/vcs_info_hookdel
new file mode 100644
index 000000000..e09a0575e
--- /dev/null
+++ b/Functions/VCS_Info/vcs_info_hookdel
@@ -0,0 +1,45 @@
+## vim:ft=zsh
+## Written by Frank Terbeck <ft@bewatermyfriend.org>
+## Distributed under the same BSD-ish license as zsh itself.
+
+emulate -L zsh
+setopt extendedglob
+
+local -i all
+
+if [[ "x$1" == 'x-a' ]]; then
+    all=1
+    shift
+else
+    all=0
+fi
+
+if (( ${#argv} < 2 )); then
+    print 'usage: vcs_info_hookdel [-a] <HOOK> <FUNCTION(s)...>'
+    return 1
+fi
+
+local hook func context
+local -a old
+
+hook=$1
+shift
+context=":vcs_info-static_hooks:${hook}"
+
+zstyle -a "${context}" hooks old || return 0
+for func in "$@"; do
+    if [[ -n ${(M)old:#$func} ]]; then
+        old[(Re)$func]=()
+    else
+        printf 'Not statically registered to `%s'\'': "%s"\n' \
+            "${hook}" "${func}"
+        continue
+    fi
+    if (( all )); then
+        while [[ -n ${(M)old:#$func} ]]; do
+            old[(Re)$func]=()
+        done
+    fi
+done
+zstyle "${context}" hooks "${old[@]}"
+return $?