mirror of
git://git.code.sf.net/p/zsh/code
synced 2025-09-02 10:01:11 +02:00
44210: add _findmnt and update _lsblk
This commit is contained in:
parent
6f35d6c0d0
commit
ba74b16716
3 changed files with 124 additions and 1 deletions
|
@ -1,3 +1,8 @@
|
|||
2019-04-10 Jun-ichi Takimoto <takimoto-j@kba.biglobe.ne.jp>
|
||||
|
||||
* 44210: Completion/Linux/Command/_findmnt,
|
||||
Completion/Linux/Command/_lsblk: Add _findmnt and update _lsblk.
|
||||
|
||||
2019-04-04 Matthew Martin <phy1729@gmail.com>
|
||||
|
||||
* 44202 (tweaked): Completion/Base/Core/_normal,
|
||||
|
|
114
Completion/Linux/Command/_findmnt
Normal file
114
Completion/Linux/Command/_findmnt
Normal file
|
@ -0,0 +1,114 @@
|
|||
#compdef findmnt
|
||||
#
|
||||
# Note for customization:
|
||||
# Options -N -k -m -s are in a group 'S' and need be specified as
|
||||
# 'S-option-N' etc. in the context for zstyle. For example, if you want
|
||||
# all PIDs to be completed for 'findmnt -N<TAB>', then
|
||||
# zstyle ':completion:*:findmnt:S-option-N-1:processes' command 'ps -A'
|
||||
#
|
||||
local curcontext=$curcontext state state_descr line ret=1
|
||||
typeset -A opt_args
|
||||
|
||||
_arguments -s -C \
|
||||
'(H -A --all)'{-A,--all}'[print all filesystems]' \
|
||||
'(H -a --ascii)'{-a,--ascii}'[use ascii characters for tree formatting]' \
|
||||
'(H -b --bytes)'{-b,--bytes}'[print SIZE etc. in bytes]' \
|
||||
'(H -c --nocanonicalize)'{-c,--nocanonicalize}'[do not canonicalize path]' \
|
||||
'(H -d --direction)'{-d+,--direction=}'[specify the search direction]:direction:(forward backward)' \
|
||||
'(H -e --evaluate)'{-e,--evaluate}'[convert LABEL/UUID/PARTLABEL/PARTUUID to the device name]' \
|
||||
'(H -F --tab-file)*'{-F+,--tab-file=}'[search in the specified tab file]:tab file:_files' \
|
||||
'(H -f --first-only)'{-f,--first-only}'[print the first matching filesystem only]' \
|
||||
'(H -i --invert)'{-i,--invert}'[invert the sense of matching]' \
|
||||
'(H -M --mountpoint :)'{-M+,--mountpoint=}'[specify the mountpoint]: :->targets' \
|
||||
'(H -n --noheadings)'{-n,--noheadings}'[do not print a header line]' \
|
||||
'(H -O --options)'{-O+,--options=}'[only print the filesystems with the specified options]:list of options: ' \
|
||||
'(H -o --output)'{-o+,--output=}'[specify output columns]: :->columns' \
|
||||
'(H -p --poll)'{-p+,--poll=}'[monitor changes in /proc/self/mountinfo]::action:(mount umount remount move)' \
|
||||
'(H -R --submounts)'{-R,--submounts}'[print recursively all submounts]' \
|
||||
'(H -S --source :)'{-S+,--source=}'[specify the mount source]: :->sources' \
|
||||
'(H -T --target :)'{-T+,--target=}'[specify the mount target]:target:_files' \
|
||||
'(H -t --types)'{-t+,--types=}'[specify the type of filesystems]:filesystem types:_sequence -s , _file_systems' \
|
||||
'--tree[use tree-like output if possible]' \
|
||||
'(H -U --uniq)'{-U,--uniq}'[ignore filesystems with duplicated mount targets]' \
|
||||
'(H -u --notruncate)'{-u,--notruncate}'[do not truncate text in columns]' \
|
||||
'(H -v --nofsroot)'{-v,--nofsroot}'[do not print \[/dir\] in the SOURCE column]' \
|
||||
'(H -w --timeout)'{-w+,--timeout}'[specify timeout for --poll]:miliseconds: ' \
|
||||
'(H -x --verify)'{-x,--verify}'[check mount table content]' \
|
||||
'(H)--verbose[print more information]' \
|
||||
'(H)1: :->sources_targets' \
|
||||
'(H)2:: :->targets' \
|
||||
+ '(format)' \
|
||||
'(H)'{-D,--df}'[imitate the output of df command]' \
|
||||
'(H)'{-J,--json}'[use JASON output format]' \
|
||||
'(H)'{-l,--list}'[use list output format]' \
|
||||
'(H)'{-P,--pairs}'[use key="value" output format]' \
|
||||
'(H)'{-r,--raw}'[use raw output format]' \
|
||||
+ '(S)' \
|
||||
'(H)'{-k,--kernel}'[search in /proc/self/mountinfo (default)]' \
|
||||
'(H)'{-m,--mtab}'[search in /etc/mtab]' \
|
||||
'(H)'{-N+,--task=}'[search /proc/<pid>/mountinfo]: :_pids' \
|
||||
'(H)'{-s,--fstab}'[search in /etc/fstab]' \
|
||||
+ '(H)' \
|
||||
'(- :)'{-h,--help}'[display help text and exit]' \
|
||||
'(- :)'{-V,--version}'[display version and exit]' \
|
||||
&& ret=0
|
||||
|
||||
__findmnt_mountpoints () {
|
||||
compadd "$@" \
|
||||
${(f)"$(_call_program mount-points findmnt $opts -oTARGET)"}
|
||||
}
|
||||
|
||||
case $state in
|
||||
columns)
|
||||
compset -P '+' || _describe -t list-prefixes prefix \
|
||||
'( +:"not replace but extend the list" )' -S '' && ret=0
|
||||
local -a columns=(
|
||||
${${${(f)"$(_call_program columns findmnt -h)"}[(r)Available*,-2]}[2,-1]}
|
||||
)
|
||||
columns=( ${${${${${${columns## #}//:/\\:}//\[/\\[}//]/\\]}/ /[}/%/]} )
|
||||
_values -s , -M 'm:{a-z}={A-Z}' column $columns && ret=0
|
||||
;;
|
||||
*) # call "findmnt $opts" to get possible sources/targets
|
||||
local opts='-lnve'
|
||||
if [[ -n $opt_args[(I)S-(-m|--mtab)] ]]; then
|
||||
opts+=' -m'
|
||||
elif [[ -n $opt_args[(I)S-(-s|--fstab)] ]]; then
|
||||
opts+=' -s'
|
||||
elif [[ -n $opt_args[(I)S-(-N|--task)] ]]; then
|
||||
opts+=" -N${(v)opt_args[(I)S-(-N|--task)]}"
|
||||
fi
|
||||
;|
|
||||
sources*) # 'sources' or 'sources_targets'
|
||||
local -a val
|
||||
if compset -P 'LABEL='; then
|
||||
val=( ${(f)"$(_call_program labels findmnt $opts -oLABEL)"} )
|
||||
_describe -t labels 'LABEL' val && ret=0
|
||||
elif compset -P 'PARTLABEL='; then
|
||||
val=( ${(f)"$(_call_program labels findmnt $opts -oPARTLABEL)"} )
|
||||
_describe -t labels 'PARTLABEL' val && ret=0
|
||||
elif compset -P 'UUID='; then
|
||||
val=( ${(f)"$(_call_program uuids findmnt $opts -oUUID)"} )
|
||||
_describe -t uuids 'UUID' val && ret=0
|
||||
elif compset -P 'PARTUUID='; then
|
||||
val=( ${(f)"$(_call_program uuids findmnt $opts -oPARTUUID)"} )
|
||||
_describe -t uuids 'PARTUUID' val && ret=0
|
||||
else
|
||||
local -a alts=(
|
||||
'devices:device:compadd \
|
||||
$(_call_program devices findmnt $opts -oSOURCE)'
|
||||
'device-numbers:major-minor:compadd \
|
||||
${$(_call_program device-numbers findmnt $opts -oMAJ:MIN)// /}'
|
||||
'prefixes:prefix:compadd -S "" LABEL= UUID= PARTLABEL= PARTUUID='
|
||||
)
|
||||
[[ $state = sources_targets ]] &&
|
||||
alts+=( 'mount-points:moutpoint:__findmnt_mountpoints' )
|
||||
_alternative $alts && ret=0
|
||||
fi
|
||||
;;
|
||||
targets)
|
||||
local expl
|
||||
_wanted mount-points expl 'mountpoint' __findmnt_mountpoints && ret=0
|
||||
;;
|
||||
esac
|
||||
|
||||
return ret
|
|
@ -38,6 +38,10 @@ _arguments -C -s -S \
|
|||
'(* -)'{-V,--version}'[display version information]' && ret=0
|
||||
|
||||
case $state in
|
||||
columnlist)
|
||||
compset -P '+' || _describe -t list-prefixes prefix \
|
||||
'( +:"not replace but extend the list" )' -S '' && ret=0
|
||||
;|
|
||||
*list)
|
||||
dedup=( ${(Ms.,.)PREFIX##*,} ${(Ms.,.)SUFFIX%%,*} )
|
||||
compset -S ',*' && suf=()
|
||||
|
@ -45,7 +49,7 @@ case $state in
|
|||
;|
|
||||
column*)
|
||||
values=(
|
||||
${${${${(f)"$(_call_program columns lsblk -h)"}[(r)Available*,-3]## #}[2,-1]//:/\\:}/ /:}
|
||||
${${${${(f)"$(_call_program columns lsblk -h)"}[(r)Available*,-2]## #}[2,-1]//:/\\:}/ /:}
|
||||
)
|
||||
_describe -t fields column values -M 'm:{a-z}={A-Z}' $suf -F dedup && ret=0
|
||||
;;
|
||||
|
|
Loading…
Reference in a new issue