diff --git a/etc/bash_completion b/etc/bash_completion new file mode 100644 index 0000000000..ea09863978 --- /dev/null +++ b/etc/bash_completion @@ -0,0 +1,76 @@ + +__gimp() +{ + COMPREPLY=() + local current="${COMP_WORDS[COMP_CWORD]}" + local prev="${COMP_WORDS[COMP_CWORD-1]}" + + # GIMP options, sorted alphabetically + # + # Note that we don't specify short options here, since they're quite unintuitive + options=( + "--as-new" + "--batch" + "--batch-interpreter" + "--console-messages" + "--debug-handlers" + "--dump-gimprc" + "--dump-gimprc-manpage" + "--dump-gimprc-system" + "--dump-pdb-procedures-deprecated" + "--g-fatal-warnings" + "--gimprc" + "--help" + "--help-all" + "--help-gegl" + "--help-gtk" + "--license" + "--new-instance" + "--no-cpu-accel" + "--no-data" + "--no-fonts" + "--no-interface" + "--no-shm" + "--no-splash" + "--pdb-compat-mode" + "--session" + "--show-playground" + "--stack-trace-mode" + "--system-gimprc" + "--verbose" + "--version" + ) + + # + # Different completions for specific options + # + case "${prev}" in + # Options that shouldn't be used in combination with something else + help | license | version) + return 0 + ;; + # Expect a filename + gimprc | session | system-gimprc) + COMPREPLY=( $(compgen -f -- ${current}) ) + return 0 + ;; + # Expect *some* argument, so don't complete + b | batch | display) + return 0 + ;; + batch-interpreter) + # FIXME: we should try to get the list of interpreters somehow + local interpreters=$(gimp --LIST_INTERPRETERS) + COMPREPLY=("python-fu-eval" "plug-in-script-fu-eval") + return 0 + ;; + *) + ;; + esac + + # Default: complete with either an option "-W" or a filename "-f" + COMPREPLY=($(compgen -W "${options[*]}" -f -- ${current})) + return 0 +} + +complete -F __gimp gimp diff --git a/etc/meson.build b/etc/meson.build index c4cae6f864..f9a574dfd0 100644 --- a/etc/meson.build +++ b/etc/meson.build @@ -19,3 +19,25 @@ install_data( ], install_dir: gimpsysconfdir, ) + +# Bash completion +have_bash = find_program('bash', required : false).found() # For completion scripts +bash_comp_dep = dependency('bash-completion', version: '>=2.0', required: false) +if have_bash + + bash_comp_inst_dir = '' + if bash_comp_dep.found() + bash_comp_dir_override = bash_comp_dep.version().version_compare('>= 2.10') ? ['datadir', get_option('datadir')] : ['prefix', get_option('prefix')] + bash_comp_inst_dir = bash_comp_dep.get_variable('completionsdir', define_variable: bash_comp_dir_override) + endif + + if bash_comp_inst_dir == '' + message('Found bash-completion but the .pc file did not set \'completionsdir\', fallback to a predefined path') + bash_comp_inst_dir = get_option('datadir') / 'bash-completion' / 'completions' + endif + + install_data('bash_completion', + install_dir: bash_comp_inst_dir, + rename: 'gimp', + ) +endif