DotFiles/Shells/zsh/MenuSelection
Меню в zsh, или Хана mc
raorn@ нагуглил по просьбе vyt@ рецепт прикручивания к дополнению в zsh меню:
> Добавил в ~/.zshrc zmodload zsh/complist setopt menucomplete zstyle ':completion:*' menu yes select
Date: Mon, 11 Jul 2005 14:09:41 +0400 From: "Alexey I. Froloff" <raorn@> To: ALT Linux Community <community@> Subject: Re: [Comm] [SUMMARY] zsh: coloured menu selection * Vitaly Ostanin <vyt@> [050708 18:05]: > Пытаюсь получить выбор вариантов автодополнения в zsh в виде меню > с подсветкой текущего варианта. Возможность такая в zsh вроде бы > есть: > http://zsh.sunsite.dk/Doc/Release/zsh_21.html#SEC146 Там есть такой апзац: When using the completion system based on shell functions, the ( Ну прям как у нас --raorn) MENUSELECT parameter should not be used (like the ZLS_COLORS and ZLS_COLOURS parameters described above). Instead, the menu style should be used with the select=... keyword. > Попробовал завести своими силами - чувствую, уже едет... > Кто-нибудь осилил? Осилил. Погуглил по "zsh menu selection example", нашёл: http://grml.org/zsh/zsh-lovers.html > Добавил в ~/.zshrc zmodload zsh/complist setopt menucomplete zstyle ':completion:*' menu yes select > в автодополнении ничего не изменилось. mc ненужен. -- Regards, Sir Raorn.
и далее про раскраску, опять raorn@ со своим сверхтяжёлым в гуглинге:
* Vitaly Ostanin <vyt@> [050711 14:31]: > А так всё классно, mc действительно отдыхает :) Пойду цвета > настраивать :) Спасибо! Опять info zsh, рассказ про стандартные стили: list-colors If the zsh/complist module is loaded, this style can be used to set color specifications. This mechanism replaces the use of the ZLS_COLORS and ZLS_COLOURS parameters described in *Note The zsh/complist Module::, but the syntax is the same. ... It is possible to use any color specifications already set up for the GNU version of the ls command: zstyle ':completion:*:default' list-colors ${(s.:.)LS_COLORS} The default colors are the same as for the GNU ls command and can be obtained by setting the style to an empty string (i.e. ''). Самое сложное в чтении доков (которые как известно источник знаний) это найти где конкретно в этой доке находится источник тех знаний, которые нужны в данный момент...
From: Vitaly Ostanin <vyt@> > А у меня enter не заработал. Чтоб я делал без гугля: bindkey -M menuselect "^M" .accept-line Это заклинание при нажатии в меню Enter сразу принимает вариант. Например, при переходе в каталог не надо жать Enter дважды.
Отсебятина от raorn@ (от'raorn'ятина):
Автодополнение для kill показывает очень мало:
zstyle ':completion:*:processes' command 'ps -xuf' zstyle ':completion:*:processes' sort false
То же самое для killall. Почему-то по умолчанию processes-names вызывает ps ho command для пользователя и ps xaho command для root. Добавим себе x:
zstyle ':completion:*:processes-names' command 'ps xho command'
Например cd. cd <Tab>, выбрали каталог, хотим выбрать следующий, уровнем ниже (рекомендуется для использования совместно с описаным vyt@ "^M" .accept-line):
bindkey -M menuselect "/" accept-and-infer-next-history
Ходим по меню, выделяем об'екты пробелом:
bindkey -M menuselect " " accept-and-menu-complete
Автодополнение хостов для ssh/scp (кажется icct на #debian-russian поделился, я зопатчил):
hosts=(${${${${(f)"$(<$HOME/.ssh/known_hosts)"}:#[0-9]*}% % *}% %,*}) zstyle ':completion:*:(ssh|scp):*' hosts $hosts
(Тут между процентами стоят пробелы только для wakowiki!!!) Тут только ssh/scp берут хосты из ~/.ssh/known_hosts, все остальные ходят по умолчанию.
Другой (более кошерный) способ автодополнения хостов описан здесь.
Чтоб юзеров локальных не пыталось подставлять (raorn@):
zstyle ':completion:*:(ssh|scp):*' tag-order '! users'
Научить menuselect понимать PgUp/PgDown:
[[ -z "$terminfo[kpp]" ]] || bindkey -M menuselect "$terminfo[kpp]" vi-backward-word [[ -z "$terminfo[kdp]" ]] || bindkey -M menuselect "$terminfo[kdp]" vi-forward-word
Однако этот способ не заработал, пока я не прописал такие же биндинги в основной раскладке (bindkey и bindkey -a) (--raorn)
Как заставить BackSpace отменять последнее дополнение? А похоже что никак. Зато можно повесить это на Ctrl-BackSpace:
bindkey -M menuselect "^H" undo