Merge branch 'wip/nielsdg/bash-completion' into 'master'

WIP: Add a Bash completion file

See merge request GNOME/gimp!266
This commit is contained in:
Niels De Graef 2025-07-03 01:13:21 +00:00
commit 1c1a7f59cc
2 changed files with 122 additions and 0 deletions

90
etc/bash_completion.in Normal file
View file

@ -0,0 +1,90 @@
__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_MAIN_EXE@
if command -v @GIMP_SYMLINK1@ 2>&1 > /dev/null
then
complete -F __gimp @GIMP_SYMLINK1@
complete -F __gimp @GIMP_SYMLINK2@
fi
if command -v @GIMP_CONSOLE_EXE@ 2>&1 > /dev/null
then
complete -F __gimp @GIMP_CONSOLE_EXE@
if command -v @GIMP_CONSOLE_SYMLINK1@ 2>&1 > /dev/null
then
complete -F __gimp @GIMP_CONSOLE_SYMLINK1@
complete -F __gimp @GIMP_CONSOLE_SYMLINK2@
fi
fi

View file

@ -19,3 +19,35 @@ 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', pkgconfig_define: 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
bash_completion_conf = configuration_data()
bash_completion_conf.set('GIMP_MAIN_EXE', gimpmain_exe_name)
bash_completion_conf.set('GIMP_SYMLINK1', 'gimp-' + gimp_app_version_major.to_string())
bash_completion_conf.set('GIMP_SYMLINK2', 'gimp')
bash_completion_conf.set('GIMP_CONSOLE_EXE', gimpconsole_exe_name)
bash_completion_conf.set('GIMP_CONSOLE_SYMLINK1', 'gimp-console-' + gimp_app_version_major.to_string())
bash_completion_conf.set('GIMP_CONSOLE_SYMLINK2', 'gimp-console')
configure_file(input : 'bash_completion.in',
output: 'gimp-' + gimp_app_version,
configuration: bash_completion_conf,
install: true,
install_dir: bash_comp_inst_dir)
endif