chiark / gitweb /
coredump: coredumpctl is so useful now, make it a first-class citizen
[elogind.git] / shell-completion / zsh / _coredumpctl
diff --git a/shell-completion/zsh/_coredumpctl b/shell-completion/zsh/_coredumpctl
new file mode 100644 (file)
index 0000000..d13bc70
--- /dev/null
@@ -0,0 +1,36 @@
+#compdef coredumpctl
+
+_coredumpctl_command(){
+    local -a _coredumpctl_cmds
+    _coredumpctl_cmds=(
+            'list:List available coredumps'
+            'dump:Print coredump to stdout'
+            'gdb:Start gdb on a coredump'
+    )
+    if (( CURRENT == 1 )); then
+        _describe -t commands 'coredumpctl command' _coredumpctl_cmds
+    else
+        local curcontext="$curcontext"
+        local -a _dumps
+        cmd="${${_coredumpctl_cmds[(r)$words[1]:*]%%:*}}"
+        if (( $#cmd  )); then
+            # user can set zstyle ':completion:*:*:coredumpctl:*' sort no for coredumps to be ordered by date, otherwise they get ordered by pid
+            _dumps=( "${(foa)$(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' \
+    {-F+,--field=}'[Show field in list output]:field' \
+    '--no-pager[Do not pipe output into a pager]' \
+    {-h,--help}'[Show this help]' \
+    '--version[Show package version]' \
+    '*::coredumpctl commands:_coredumpctl_command'