From: Zbigniew Jędrzejewski-Szmek Date: Mon, 25 Feb 2013 14:24:10 +0000 (+0100) Subject: bash-completion: journalctl query by binary and device X-Git-Tag: v198~172 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=commitdiff_plain;h=1883552c3d80d44f4cb368874d54c1cb15b83e61;ds=sidebyside bash-completion: journalctl query by binary and device The approach taken is different between the two: - since there are many files in /usr, but messages appear only for a tiny subset, the completion is performed only for stuff shown by journalctl -F _EXE. This makes sense because the list is already in proper form. - since it is hard to convert _KERNEL_DEVICE to device file name, simply all files in /dev/ are used as possible completions. Unfortunately zsh completion requires more work and is not covered by this commit. --- diff --git a/shell-completion/systemd-bash-completion.sh b/shell-completion/systemd-bash-completion.sh index 1132b3c02..7848bafc1 100644 --- a/shell-completion/systemd-bash-completion.sh +++ b/shell-completion/systemd-bash-completion.sh @@ -334,6 +334,20 @@ _journalctl() { elif [[ $cur = *=* ]]; then mapfile -t field_vals < <(journalctl -F "${prev%=}" 2>/dev/null) COMPREPLY=( $(compgen -W '${field_vals[*]}' -- "${cur#=}") ) + elif [[ $cur = /dev* ]]; then + compopt -o filenames + COMPREPLY=( $(compgen -f -- "${cur}") ) + elif [[ $cur = /* ]]; then + # Append /dev/ to the list of completions, so that + # after typing / the user sees /dev/ as one + # of the alternatives. Later on the rule above will + # take care of showing device files in /dev/. + mapfile -t field_vals < <(journalctl -F "_EXE" 2>/dev/null; echo '/dev/') + COMPREPLY=( $(compgen -W '${field_vals[*]}' -- "${cur}") ) + if [[ "${COMPREPLY[@]}" = '/dev/' ]]; then + compopt -o filenames + COMPREPLY=( $(compgen -f -- "${cur}") ) + fi elif [[ $prev = '=' ]]; then mapfile -t field_vals < <(journalctl -F "${COMP_WORDS[COMP_CWORD-2]}" 2>/dev/null) COMPREPLY=( $(compgen -W '${field_vals[*]}' -- "$cur") )