Свой bash-completion, нужен case-insensetive, Перспективный, 29-Мрт-18, 21:10 [смотреть все]Привет. У меня есть несколько тем иконок(значков), я их периодически меняю/смотрю как с ними что-то выглядит. Для удобства сделал функцию в .bashrс:function theme-icon { theme=${1:-"hicolor"}; dconf write /org/gnome/desktop/interface/icon-theme "'$theme'"; } Ну и чтобы было совсем отлично сделал $HOME/.config/bash-completion.d/theme-icon: _theme-icon() { local cur=${COMP_WORDS[COMP_CWORD]} local list=$(while read line; do echo -n "${line%%/*} ";done< <(find -L $HOME/.local/share/icons -maxdepth 2 -type f -name index.theme -prune -printf "%P\n")) COMPREPLY=( $(compgen -W "${list}" -- $cur) ) } complete -F _theme-icon theme-icon Набираю theme-icon нажимаю Tab, выходит нужный список, нажимаю первую букву и т.д. как ожидалось, но приходится нажимать буквы в нужном регистре "А", а не "а", когда очень хочется case-insensetive. grep ignore < <(bind -v) set completion-ignore-case on То есть эта настройка работает в системе, но в случае моего theme-icon нет. Что тут нужно переделать? |
- Свой bash-completion, нужен case-insensetive,
Аноним, 07:34 , 30-Мрт-18 (1)> ";done< <(find -L $HOME/.local/share/icons -maxdepth 2 -type f -name index.theme -prune > -printf "%P\n")) может быть -iname
- Свой bash-completion, нужен case-insensetive,
Перспективный, 07:51 , 30-Мрт-18 (2)> может быть -iname нет конечно, мимо совсем. На выходе этого поиска названия каталогов первого уровня с index.theme внутри. А ты предлагаешь поискать ещё Index.themE или indeX.Theme
- Свой bash-completion, нужен case-insensetive,
Перспективный, 10:56 , 30-Мрт-18 (3)тут find только потому, то путей может быть несколько, а для одного пути проще конечно так: local list=$(for i in $HOME/.local/share/themes/*;do [[ -e $i/index.theme ]] && echo -n "${i##*/} ";done) но дело даже совсем не в переменной list, дело в игнорировании игнорирования регистра букв.
- Свой bash-completion, нужен case-insensetive,
B, 14:14 , 30-Мрт-18 (4)man bash shopt -s nocasematch > тут find только потому, то путей может быть несколько, а для одного > пути проще конечно так: > local list=$(for i in $HOME/.local/share/themes/*;do [[ -e $i/index.theme ]] && echo > -n "${i##*/} ";done) > но дело даже совсем не в переменной list, дело в игнорировании игнорирования > регистра букв.
- Свой bash-completion, нужен case-insensetive,
B, 14:17 , 30-Мрт-18 (5)> man bash > shopt -s nocasematch или shopt -s nocaseglob >> тут find только потому, то путей может быть несколько, а для одного >> пути проще конечно так: >> local list=$(for i in $HOME/.local/share/themes/*;do [[ -e $i/index.theme ]] && echo >> -n "${i##*/} ";done) >> но дело даже совсем не в переменной list, дело в игнорировании игнорирования >> регистра букв.
|