DotFiles/Shells/zsh/MenuSelection

Материал из ALT Linux Wiki
Freesource-logo.png Blue Glass Arrow.svg MediaWiki logo.png
Эта страница была перемещена с freesource.info.
Эта страница наверняка требует чистки и улучшения — смело правьте разметку и ссылки.
Просьба по окончанию убрать этот шаблон со страницы.


Меню в 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