Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
Re: [PATCH] new function to complete names of running process (and three example usage)
> 2018/06/21 22:46、dana <dana@xxxxxxx>のメール:
>
> From what i can tell, though, DTrace's execname variable (what `dtruss -n`
> matches against) seems to use pr_fname, and that's limited to 16 bytes.
dtruss accepts long process name; it just uses at most 16 bytes of it.
So I *think* it is OK (or "acceptable") to complete long process names
without truncation.
diff --git a/Completion/Unix/Type/_process_names b/Completion/Unix/Type/_process_names
new file mode 100644
index 000000000..c6108373c
--- /dev/null
+++ b/Completion/Unix/Type/_process_names
@@ -0,0 +1,44 @@
+#autoload
+#
+# complete names of running processes
+#
+# options:
+# -a: include all processes (owned by others, no tty, etc.)
+# -t: use truncated process names (e.g., those in /proc/PID/stat)
+# (this option is supported only on Linux and BSDs)
+#
+# this name has been used in _killall and documented in zshcompsys(1)
+local tagname='processes-names'
+typeset -a expl opts names all truncate
+
+zparseopts -E -D 'a=all' 't=truncate'
+(( $#all )) && opts=( -A )
+
+local hyphen=''
+# on Linux, use BSD-style option to include processes on other ttys
+[[ $OSTYPE != linux* ]] && hyphen='-'
+
+case $OSTYPE in
+ (linux*|freebsd*|openbsd*|netbsd*)
+ if (( $#truncate )); then
+ if [[ $OSTYPE == netbsd* ]]; then
+ opts+=(-co args=)
+ else
+ opts+=(${hyphen}o comm=)
+ fi
+ names=( ${${(f)"$(_call_program $tagname ps $opts 2>/dev/null)"}#-} )
+ else
+ opts+=(${hyphen}o args=)
+ names=( ${(f)"$(_call_program $tagname ps $opts 2>/dev/null )"} )
+ names=( ${${${${${names:#\[*]}%% *}%:}#-}:t}
+ ${${${(M)names:#\[*]}#\[}%]} )
+ fi
+ ;;
+ (*)
+ # ignore -t option
+ opts+=(-o comm=)
+ names=( ${${${(f)"$(_call_program $tagname ps $opts 2>/dev/null)"}#-}:t} )
+ ;;
+esac
+
+_wanted $tagname expl 'process name' compadd "$@" -F '(ps)' -a - names
Messages sorted by:
Reverse Date,
Date,
Thread,
Author