Привет. У меня есть несколько тем иконок(значков), я их периодически меняю/смотрю как с ними что-то выглядит. Для удобства сделал функцию в .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 нет. Что тут нужно переделать?
> ";done< <(find -L $HOME/.local/share/icons -maxdepth 2 -type f -name index.theme -prune
> -printf "%P\n"))может быть -iname
> может быть -inameнет конечно, мимо совсем.
На выходе этого поиска названия каталогов первого уровня с index.theme внутри.
А ты предлагаешь поискать ещё Index.themE или indeX.Theme
тут find только потому, то путей может быть несколько, а для одного пути проще конечно так:
local list=$(for i in $HOME/.local/share/themes/*;do [[ -e $i/index.theme ]] && echo -n "${i##*/} ";done)
но дело даже совсем не в переменной list, дело в игнорировании игнорирования регистра букв.
man bashshopt -s nocasematch
> тут find только потому, то путей может быть несколько, а для одного
> пути проще конечно так:
> local list=$(for i in $HOME/.local/share/themes/*;do [[ -e $i/index.theme ]] && echo
> -n "${i##*/} ";done)
> но дело даже совсем не в переменной list, дело в игнорировании игнорирования
> регистра букв.
> 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, дело в игнорировании игнорирования
>> регистра букв.
>shopt -s nocasematch
>shopt -s nocaseglobне работает для моего случая