From 21257c087fdf8896cc7362ed432a76de7f4a1fff Mon Sep 17 00:00:00 2001 From: Marlon Richert Date: Sat, 5 Jun 2021 22:06:50 +0300 Subject: [PATCH] Let run-help filter $cmd_args before calling run-help- MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit …to make it easier to write run-help- functions. --- Functions/Misc/run-help | 15 +++-- Functions/Misc/run-help-btrfs | 4 -- Functions/Misc/run-help-git | 10 +--- Functions/Misc/run-help-ip | 4 -- Functions/Misc/run-help-p4 | 2 +- Functions/Misc/run-help-svk | 2 +- Functions/Misc/run-help-svn | 2 +- Test/Z03run-help.ztst | 103 ++++++++++++++++++++++++++++++++++ 8 files changed, 116 insertions(+), 26 deletions(-) create mode 100644 Test/Z03run-help.ztst diff --git a/Functions/Misc/run-help b/Functions/Misc/run-help index e351dd6a6..d52c1b032 100644 --- a/Functions/Misc/run-help +++ b/Functions/Misc/run-help @@ -101,12 +101,15 @@ do builtin getln cmd_args builtin print -z "$cmd_args" cmd_args=( ${(z)cmd_args} ) - # Discard environment assignments, etc. - while [[ $cmd_args[1] != ${run_help_orig_cmd:-$1} ]] - do - shift cmd_args || return 1 - done - eval "run-help-$1:t ${(q@)cmd_args[2,-1]}" + + # Discard the command itself & everything before it. + shift $cmd_args[(i)${run_help_orig_cmd:-$1}] cmd_args || + return + + # Discard options, parameter assignments & paths. + cmd_args=( ${cmd_args[@]:#([-+]*|*=*|*/*|\~*)} ) + + eval "run-help-$1:t ${(@q)cmd_args}" else POSIXLY_CORRECT=1 man $@:t fi diff --git a/Functions/Misc/run-help-btrfs b/Functions/Misc/run-help-btrfs index 0dc1dabcb..cb139e9b7 100644 --- a/Functions/Misc/run-help-btrfs +++ b/Functions/Misc/run-help-btrfs @@ -1,7 +1,3 @@ -while [[ $# != 0 && $1 == -* ]]; do - shift -done - case $1 in (b*) man btrfs-balance ;; (c*) man btrfs-check ;; diff --git a/Functions/Misc/run-help-git b/Functions/Misc/run-help-git index ce94d0d02..a841f89d6 100644 --- a/Functions/Misc/run-help-git +++ b/Functions/Misc/run-help-git @@ -1,9 +1 @@ -if [ $# -eq 0 ]; then - man git -else - local al - if al=$(git config --get "alias.$1"); then - 1=${al%% *} - fi - man git-$1 -fi +git help ${1:-git} diff --git a/Functions/Misc/run-help-ip b/Functions/Misc/run-help-ip index 8807f9ef1..b811ce352 100644 --- a/Functions/Misc/run-help-ip +++ b/Functions/Misc/run-help-ip @@ -14,10 +14,6 @@ if ! man -w ip-address >/dev/null 2>&1; then return fi -while [[ $# != 0 && $1 == -* ]]; do - shift -done - case $1 in (addrl*) man ip-addrlabel ;; (a*) man ip-address ;; diff --git a/Functions/Misc/run-help-p4 b/Functions/Misc/run-help-p4 index 662ce94fe..e48a4d068 100644 --- a/Functions/Misc/run-help-p4 +++ b/Functions/Misc/run-help-p4 @@ -2,4 +2,4 @@ if (( ! $# )); then p4 help commands else p4 help $1 -fi | ${=PAGER:-less} +fi | ${=PAGER:-more} diff --git a/Functions/Misc/run-help-svk b/Functions/Misc/run-help-svk index 92438a53f..782538246 100644 --- a/Functions/Misc/run-help-svk +++ b/Functions/Misc/run-help-svk @@ -1 +1 @@ -svk help ${${@:#-*}[1]} | ${=PAGER:-more} +svk help $1 | ${=PAGER:-more} diff --git a/Functions/Misc/run-help-svn b/Functions/Misc/run-help-svn index 5d1068588..d55a493a6 100644 --- a/Functions/Misc/run-help-svn +++ b/Functions/Misc/run-help-svn @@ -1 +1 @@ -svn help ${${@:#-*}[1]} | ${=PAGER:-more} +svn help $1 | ${=PAGER:-more} diff --git a/Test/Z03run-help.ztst b/Test/Z03run-help.ztst new file mode 100644 index 000000000..1f280fea7 --- /dev/null +++ b/Test/Z03run-help.ztst @@ -0,0 +1,103 @@ +%prep + PAGER=cat + unalias run-help + autoload +X -Uz $PWD/../Functions/Misc/run-help* + builtin() { + case "$1 $2" in + ( 'getln cmd_args' ) + cmd_args="$BUFFER_STACK" + ;; + ( 'print -z' ) + ;; + ( 'whence -va' ) + print -l "$3 is WHENCE:{$3}" + ;; + ( * ) + eval $@ + ;; + esac + } + man() { + [[ $1 == -w && -n $NO_SUBCMD_MANUALS ]] && + return 1 + print "MAN:{${(qq)@}}" + } + git svn () { + print "${(U)0}:{${(qq)@}}" + } + + +%test + + BUFFER_STACK='btrfs --help' + run-help btrfs +0:btrfs with option flag, no subcmd +>btrfs is WHENCE:{btrfs} +>MAN:{'btrfs'} + + BUFFER_STACK='btrfs subvolume snapshot –r /btrfs/SV1 /btrfs/SV1-rosnap' + run-help btrfs +0:btrfs with subcmd +>btrfs is WHENCE:{btrfs} +>MAN:{'btrfs-subvolume'} + + BUFFER_STACK="sudo $BUFFER_STACK" + run-help btrfs +0:sudo btrfs with subcmd +>btrfs is WHENCE:{btrfs} +>MAN:{'btrfs-subvolume'} + + BUFFER_STACK='ip addr add 192.168.50.5 dev eth1' + run-help ip +0:ip with subcmd +>ip is WHENCE:{ip} +>MAN:{'ip-address'} + + NO_SUBCMD_MANUALS=1 + run-help ip + unset NO_SUBCMD_MANUALS +0:ip with subcmd, but no subcmd manuals +>ip is WHENCE:{ip} +>MAN:{'ip'} + + BUFFER_STACK='ip -s -s link ls up' + run-help ip +0:ip with options and subcmd +>ip is WHENCE:{ip} +>MAN:{'ip-link'} + + BUFFER_STACK="sudo $BUFFER_STACK" + run-help ip +0:sudo ip with options and subcmd +>ip is WHENCE:{ip} +>MAN:{'ip-link'} + + BUFFER_STACK='svn -vq' + run-help svn +0:svn with options +>svn is WHENCE:{svn} +>SVN:{'help'} + + BUFFER_STACK+=' commit -m "log messages"' + run-help svn +0:svn with options and subcmd +>svn is WHENCE:{svn} +>SVN:{'help' 'commit'} + + BUFFER_STACK='git --exec-path' +0:git with option +>git is WHENCE:{git} +>GIT:{'help' 'git'} + + BUFFER_STACK='git -C $PWD/.. difftool --no-prompt --tool opendiff --dir-diff' +0:git with option, file & subcmd +>git is WHENCE:{git} +>GIT:{'help' 'difftool'} + + BUFFER_STACK='git -c http.proxy=someproxy clone https://github.com/user/repo.git' +0:git with option, assignment & subcmd +>git is WHENCE:{git} +>GIT:{'help' 'clone'} + + +%clean -- 2.30.1 (Apple Git-130)