chiark / gitweb /
zsh_completion: Split out zsh _coredumpctl
[elogind.git] / shell-completion / zsh / _systemd-coredumpctl
diff --git a/shell-completion/zsh/_systemd-coredumpctl b/shell-completion/zsh/_systemd-coredumpctl
new file mode 100644 (file)
index 0000000..f5d12cb
--- /dev/null
@@ -0,0 +1,34 @@
+#compdef systemd-coredumpctl
+
+_systemd-coredumpctl_command(){
+    local -a _systemd_coredumpctl_cmds
+    _systemd_coredumpctl_cmds=(
+            'list:List available coredumps'
+            'dump:Print coredump to std'
+    )
+    if (( CURRENT == 1 )); then
+        _describe -t commands 'systemd-coredumpctl command' _systemd_coredumpctl_cmds
+    else
+        local curcontext="$curcontext"
+        local -a _dumps
+        cmd="${${_systemd_coredumpctl_cmds[(r)$words[1]:*]%%:*}}"
+        if (( $#cmd  )); then
+                       # user can set zstyle ':completion:*:*:systemd-coredumpctl:*' sort no for coredumps to be ordered by date, otherwise they get ordered by pid
+                       _dumps=( "${(foa)$(systemd-coredumpctl list | awk 'BEGIN{OFS=":"} /^\s/ {sub(/[[ \t]+/, ""); print $5,$0}' 2>/dev/null)}" )
+            if [[ -n "$_dumps" ]]; then
+                _describe -t pids 'coredumps' _dumps
+            else
+                _message "no coredumps"
+            fi
+        else
+            _message "no more options"
+        fi
+    fi
+}
+
+_arguments \
+    {-o,--output=}'[Write output to FILE]:output file:_files' \
+    '--no-pager[Do not pipe output into a pager]' \
+    {-h,--help}'[Show this help]' \
+    '--version[Show package version]' \
+    '*::systemd-coredumpctl commands:_systemd-coredumpctl_command'