Как работать с именами файлов, содержащими одинарную кавычку внутри функции завершения zsh?

Если у вас все еще есть проблема No such interface 'org.freedesktop.Secret.Collection' on object at path /org/freedesktop/secrets/collection/login, проверьте:

https://wiki.archlinux.org/index.php/GNOME/Keyring

Если вы используете консольный вход, убедитесь, что у вас есть обе команды PAM и .xinitrc. У меня обе команды работают на i3.

4
22.05.2017, 16:10
1 ответ

Если мы настаиваем на том, чтобы поступать неправильно™

#compdef vc

declare -a cheatsheets
cheatsheets=(${(f)"$(ls ~/.cheat/)"})
_arguments '1:cheatsheets:(${cheatsheets})' && return 0

Фу! Это, конечно, сломается, если имя файла содержит новую строку, так как (f) разбивается на них. Синтаксический анализ ls в любом случае плохая идея; ZSH может помещать файлы прямо в массив:

% mkdir ~/.lojban
% touch ~/.lojban/{go\'i,na\ go\'i}
% words=(~/.lojban/*) 
% print -l ${words:t}
go'i
na go'i
% words=(~/.lojban/*(On))
% print -l ${words:t}    
na go'i
go'i
% 

Но нам, вероятно, не нужен локальный массив; _files может завершаться на глобусе:

#compdef vc
_arguments '1:cheatsheets:_files -g "~/.cheat/*"' && return 0

Это возвращает полные пути к файлам; если требуется только голое имя файла из каталога поиска, мы можем вместо этого использовать:

#compdef vc
_arguments '1:cheatsheets:_files -W ~/.cheat' && return 0
3
27.01.2020, 20:57

Теги

Похожие вопросы