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.
This commit is contained in:
Zbigniew Jędrzejewski-Szmek 2013-02-25 15:24:10 +01:00
parent 3679d1126b
commit 1883552c3d
1 changed files with 14 additions and 0 deletions

View File

@ -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 /<TAB><TAB> 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") )