diff options
author | Tobias Geerinckx-Rice <me@tobias.gr> | 2022-05-22 02:00:00 +0200 |
---|---|---|
committer | Tobias Geerinckx-Rice <me@tobias.gr> | 2022-05-29 02:00:20 +0200 |
commit | dc6d92ac93cedd65f6c99daa530b69f43f6039ec (patch) | |
tree | b56ec8ebc679fbb2e5653f711448801eeef99543 | |
parent | 4cb6994790d1b499bc07f183ac9d7b4fbfc3c9bc (diff) | |
download | guix-dc6d92ac93cedd65f6c99daa530b69f43f6039ec.tar guix-dc6d92ac93cedd65f6c99daa530b69f43f6039ec.tar.gz |
bash completion: Fix & unify option parsing.
We now correctly recognise ‘guix -Abcdef’ as equivalent to ‘guix -f’.
* etc/completion/bash/guix (_guix_is_short_option, guix_is_long_option):
New functions.
(_guix_is_dash_f, _guix_is_dash_l, _guix_is_dash_L, _guix_is_dash_m)
(_guix_is_dash_C, _guix_is_dash_p): Use them.
-rw-r--r-- | etc/completion/bash/guix | 61 |
1 files changed, 31 insertions, 30 deletions
diff --git a/etc/completion/bash/guix b/etc/completion/bash/guix index 6b1b70aac1..7b1f639371 100644 --- a/etc/completion/bash/guix +++ b/etc/completion/bash/guix @@ -117,58 +117,59 @@ _guix_is_removing () $result } +_guix_is_short_option () +{ + case "${COMP_WORDS[$COMP_CWORD - 1]}" in + --*) false;; + -*$1) true ;; + *) false ;; + esac +} + +_guix_is_long_option () +{ + # Don't handle (non-GNU?) ‘--long-option VALUE’, as Guix doesn't either. + case "${COMP_WORDS[$COMP_CWORD]}" in + --$1=*) true ;; + *) false ;; + esac +} + _guix_is_dash_f () { - [ "${COMP_WORDS[$COMP_CWORD - 1]}" = "-f" ] \ - || { case "${COMP_WORDS[$COMP_CWORD]}" in - --file=*|--install-from-file=*) true;; - *) false;; - esac } + _guix_is_short_option f || + _guix_is_long_option file || + _guix_is_long_option install-from-file } _guix_is_dash_l () { - [ "${COMP_WORDS[$COMP_CWORD - 1]}" = "-l" ] \ - || { case "${COMP_WORDS[$COMP_CWORD]}" in - --load=*) true;; - *) false;; - esac } + _guix_is_short_option l || + _guix_is_long_option load } _guix_is_dash_L () { - [ "${COMP_WORDS[$COMP_CWORD - 1]}" = "-L" ] \ - || { case "${COMP_WORDS[$COMP_CWORD]}" in - --load-path=*) true;; - *) false;; - esac } + _guix_is_short_option L || + _guix_is_long_option load-path } _guix_is_dash_m () { - [ "${COMP_WORDS[$COMP_CWORD - 1]}" = "-m" ] \ - || { case "${COMP_WORDS[$COMP_CWORD]}" in - --manifest=*) true;; - *) false;; - esac } + _guix_is_short_option m || + _guix_is_long_option manifest } _guix_is_dash_C () { - [ "${COMP_WORDS[$COMP_CWORD - 1]}" = "-C" ] \ - || { case "${COMP_WORDS[$COMP_CWORD]}" in - --channels=*) true;; - *) false;; - esac } + _guix_is_short_option C || + _guix_is_long_option channels } _guix_is_dash_p () { - [ "${COMP_WORDS[$COMP_CWORD - 1]}" = "-p" ] \ - || { case "${COMP_WORDS[$COMP_CWORD]}" in - --profile=*) true;; - *) false;; - esac } + _guix_is_short_option p || + _guix_is_long_option profile } _guix_complete_file () |