Есть ли способ проверить, открыто ли меню завершения вкладок в ZSH?

Есть ли способ проверить, открыто ли меню завершения вкладок в ZSH?

Я задаю этот вопрос, потому что хочу привязать клавишу пробела к accept-search, чтобы я мог принять завершение с помощью клавиши space, но я хочу сделать это таким образом, чтобы это не мешало поведению клавиши space по умолчанию (вставка символ space). Кроме того, я хочу этого, потому что мне не нравится, что когда я закрываю меню завершения с помощью space, оно вставляет пробел.

Кто-то из reddit помог мне с этим фрагментом, но мне нужен способ проверить, открыто ли меню автодополнения или нет.

function space-or-accept-suggestion() {
  if <INSERT WAY TO CHECK IF AUTOCOMPLETION MENU IS OPEN>; then
    zle accept-search
  else
    zle self-insert
  fi
}

zle -N space-or-accept-suggestion
bindkey -M emacs ' ' space-or-accept-suggestion

person David Guevara    schedule 31.10.2020    source источник
comment
Вы должны четко понимать, какое состояние вы хотите проверить. Насколько я могу судить, то, что вы описываете, в любом случае является значением по умолчанию. автозаполнение, в отличие от завершения, запускаемого клавишей табуляции, обычно реализуется только с помощью какого-либо плагина, такого как автопредложения. Если вы имеете в виду, что выбор меню из модуля complist активен, в нем используется карта клавиш menuselect, поэтому вы можете по-разному связать пространство для него. Но по умолчанию он будет принят и вставлен пробел.   -  person okapi    schedule 01.11.2020
comment
Обновил вопрос. Это завершение, вызванное вкладкой. Спасибо!   -  person David Guevara    schedule 02.11.2020


Ответы (1)


Вам не нужно это проверять. Просто используйте это:

zmodload zsh/complist
bindkey -M menuselect ' ' accept-search

Дополнительную информацию можно найти здесь: http://zsh.sourceforge.net/Doc/Release/Zsh-Modules.html#Menu-selection

person Marlon Richert    schedule 30.11.2020
comment
Это, кажется, ничего не делает. Например, я набираю cd ~/ и нажимаю Tab, выбираю какую-то опцию, а затем нажимаю пробел, и он все еще вставляет пробел. Я думаю, что, возможно, мне следует просто приспособиться к поведению по умолчанию, а не пытаться его изменить, даже если только zsh не хочет так работать. - person David Guevara; 07.12.2020
comment
@DavidGuevara Извините, я забыл, что вам также нужно выполнить zmodload zsh/complist перед использованием этой команды bindkey. Я добавил это к своему ответу. Пожалуйста, попробуйте еще раз. - person Marlon Richert; 07.12.2020