summaryrefslogtreecommitdiffstats
path: root/completions/gdb
diff options
context:
space:
mode:
Diffstat (limited to 'completions/gdb')
-rw-r--r--completions/gdb47
1 files changed, 47 insertions, 0 deletions
diff --git a/completions/gdb b/completions/gdb
new file mode 100644
index 0000000..f78f8a5
--- /dev/null
+++ b/completions/gdb
@@ -0,0 +1,47 @@
+# bash completion for gdb -*- shell-script -*-
+
+_gdb()
+{
+ local cur prev words cword i
+ _init_completion || return
+
+ # gdb [options] --args executable-file [inferior-arguments ...]
+ for ((i = 1; i < cword; i++)); do
+ if [[ ${words[i]} == --args ]]; then
+ _command_offset $((i + 1))
+ return $?
+ fi
+ done
+
+ # gdb [options] [executable-file [core-file or process-id]]
+ if ((cword == 1)); then
+ local IFS
+ compopt -o filenames
+ if [[ $cur == */* ]]; then
+ # compgen -c works as expected if $cur contains any slashes.
+ IFS=$'\n'
+ COMPREPLY=($(PATH="$PATH:." compgen -d -c -- "$cur"))
+ else
+ # otherwise compgen -c contains Bash's built-in commands,
+ # functions and aliases. Thus we need to retrieve the program
+ # names manually.
+ IFS=":"
+ local path_array=($(
+ command sed -e 's/:\{2,\}/:/g' -e 's/^://' -e 's/:$//' <<<"$PATH"
+ ))
+ IFS=$'\n'
+ COMPREPLY=($(compgen -d -W '$(find "${path_array[@]}" . \
+ -mindepth 1 -maxdepth 1 -not -type d -executable \
+ -printf "%f\\n" 2>/dev/null)' -- "$cur"))
+ fi
+ elif ((cword == 2)); then
+ COMPREPLY=($(compgen -W "$(command ps axo comm,pid |
+ awk '{if ($1 ~ /^'"${prev##*/}"'/) print $2}')" -- "$cur"))
+ compopt -o filenames
+ COMPREPLY+=($(compgen -f -X '!?(*/)core?(.?*)' -o plusdirs \
+ -- "$cur"))
+ fi
+} &&
+ complete -F _gdb gdb
+
+# ex: filetype=sh