URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 10206
[ Назад ]

Исходное сообщение
"Свой 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"
Отправлено Аноним , 30-Мрт-18 07:34 

> ";done< <(find -L $HOME/.local/share/icons -maxdepth 2 -type f -name index.theme -prune
> -printf "%P\n"))

может быть -iname



"Свой bash-completion, нужен case-insensetive"
Отправлено Перспективный , 30-Мрт-18 07:51 
> может быть -iname

нет конечно, мимо совсем.
На выходе этого поиска названия каталогов первого уровня с index.theme внутри.
А ты предлагаешь поискать ещё Index.themE или indeX.Theme



"Свой bash-completion, нужен case-insensetive"
Отправлено Перспективный , 30-Мрт-18 10:56 
тут 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 , 30-Мрт-18 14:14 
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 , 30-Мрт-18 14:17 
> 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, дело в игнорировании игнорирования
>> регистра букв.


"Свой bash-completion, нужен case-insensetive"
Отправлено Перспективный , 30-Мрт-18 17:09 
>shopt -s nocasematch
>shopt -s nocaseglob

не работает для моего случая