ещё раз про completion в zsh

2007-10-09 Пенетрантность sergio

Всем привет.

Хочется двух вещей:
когда я нажимаю на таб:
если есть что дописать --- то дописать и показать возможные варианты.
если дописать нечего --- показать возможные варианты.
если дописать нечего и список уже показан --- включить menu-select.

показывать возможные варианты после первого нажатия на TAB делается при 
помощи 	setopt no_list_ambiguous

дальше сложнее.


была попытка написать вот так, это не то, что хотелось бы..
(по первому нажатию на таб --- делается expand-or-complete-prefix
по второму -- включается menu-select)
( это не то потому, что если что-нить подредактировать после нажатия на 
таб -- следующее нажатие на таб будет делать menu-select а не дополнять)

более того, в этом месте zsh сигфолтится.

% ls
asdf  asdlkjg
% ls # ls жмём tab
% ls asd # дописываем l и жмём таб. хотелось бы что бы 
вызывалсяexpand-or-complete-prefix но вызывается

menu-select и zsh падает

foo(){
_main_complete;
bindkey '\t' my-menu-select
}
zle -C my-expand-or-complete-prefix .expand-or-complete-prefix foo
bindkey '\t' my-expand-or-complete-prefix

zle -N my-menu-select
my-menu-select(){
zle menu-select;
bindkey '\t' my-expand-or-complete-prefix
}

ПОМОГИИТЕ..
хотя я так понимаю, здесь только один человек может давать ответы про zsh

--
sergio.


--
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of unsubscribe. Trouble? Contact [EMAIL PROTECTED]



ещё раз про completion в zsh

2007-10-09 Пенетрантность Michael Kostylev
At Tue, 09 Oct 2007 11:23:04 +0400,
sergio wrote:

 s хотя я так понимаю, здесь только один человек может давать ответы про zsh

Очередное нажатие на таб даже в zsh-users ажиотажа не вызывает.

Michael


-- 
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of unsubscribe. Trouble? Contact [EMAIL PROTECTED]



Re: ещё раз про completion в zsh

2007-10-09 Пенетрантность Artem Chuprina
sergio - debian-russian@lists.debian.org  @ Tue, 09 Oct 2007 11:23:04 +0400:

 s Хочется двух вещей:
 s когда я нажимаю на таб:
 s если есть что дописать --- то дописать и показать возможные варианты.
 s если дописать нечего --- показать возможные варианты.
 s если дописать нечего и список уже показан --- включить menu-select.

 s показывать возможные варианты после первого нажатия на TAB делается при 
помощи
 s setopt no_list_ambiguous
 s дальше сложнее.


 s была попытка написать вот так, это не то, что хотелось бы..
 s (по первому нажатию на таб --- делается expand-or-complete-prefix
 s по второму -- включается menu-select)
 s ( это не то потому, что если что-нить подредактировать после нажатия на таб 
--
 s следующее нажатие на таб будет делать menu-select а не дополнять)
 s более того, в этом месте zsh сигфолтится.

 s % ls
 s asdf  asdlkjg
 s % ls # ls жмём tab
 s % ls asd # дописываем l и жмём таб. хотелось бы что бы
 s вызывалсяexpand-or-complete-prefix но вызывается
 s menu-select и zsh падает

 s foo(){
 s _main_complete;
 s bindkey '\t' my-menu-select
 s }
 s zle -C my-expand-or-complete-prefix .expand-or-complete-prefix foo
 s bindkey '\t' my-expand-or-complete-prefix

 s zle -N my-menu-select
 s my-menu-select(){
 s zle menu-select;
 s bindkey '\t' my-expand-or-complete-prefix
 s }

 s ПОМОГИИТЕ..
 s хотя я так понимаю, здесь только один человек может давать ответы про zsh

... и у этого человека у самого, правда, в другом месте, включаешь - не
работает.  Ну, общий-то принцип понятен - надо не перевешивать
биндинги, а вешать биндинг на функцию, аккуратно запоминающую
состояние.  И не забывающую его своевременно сбросить, главное.
Подозреваю, что она должна смотреть на $LASTWIDGET.

А зачем он падает - это думать надо...

-- 
Artem Chuprina
RFC2822: ran{}ran.pp.ru Jabber: [EMAIL PROTECTED]

Проспрягайте, хлопцы, коней...
М. Черкашин


-- 
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of unsubscribe. Trouble? Contact [EMAIL PROTECTED]



Re: ещё раз про completion в zsh

2007-10-09 Пенетрантность sergio

Artem Chuprina wrote:


 s когда я нажимаю на таб:
 s если есть что дописать --- то дописать и показать возможные варианты.
 s если дописать нечего --- показать возможные варианты.
 s если дописать нечего и список уже показан --- включить menu-select.




Ну, общий-то принцип понятен - надо не перевешивать
биндинги, а вешать биндинг на функцию, аккуратно запоминающую
состояние.  И не забывающую его своевременно сбросить, главное.
Подозреваю, что она должна смотреть на $LASTWIDGET.


не спорю. (:
но я пока плохо понимаю как это сделать одной функцией.
о! придумал (:

zle -N my-tab
bindkey '\t' my-tab
my-tab(){
if [[ $LASTWIDGET == $WIDGET ]]; then
zle menu-select
else
zle expand-or-complete-prefix
fi
}

это то, что хочется. только всё равно сегфолтится в определённые моменты.

ls TAB -- всё ok. ещё раз таб --- тоже всё ok
ls /tmTAB -- всё ok. ещё раз таб --- сегфолт.

--
sergio.


--
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of unsubscribe. Trouble? Contact [EMAIL PROTECTED]