É possível invocar manualmente uma função de conclusão do zsh?

3

Se eu estiver em um prompt zsh e eu tiver o "contexto" atual (comando de linha de comando parcialmente concluído)

% man gr_
        ^ here I have used _ to  represent the cursor 

Se eu invoco a função _complete_help Ctrl X h

Diz-me que o contexto é

% man gr_
tags in context :completion::complete:man::
    manuals  (_man)

Se eu estiver lendo esta saída corretamente - eu posso ver que existe uma função _man que é capaz de listar todas as páginas man conhecidas - o que seria invocado se eu batesse na tecla Tab neste momento.
Minha pergunta é, posso chamar a função _man completer manualmente? em vez de ter _man sendo invocado por compsys (que é invocado por Tab )?

Eu tentei usar o zle minibuffer <Esc>x , depois digite _man<Enter> , mas acho que o mini-buffer só é capaz de entender os comandos zle, não executar funções gerais.

    
por the_velour_fog 11.08.2016 / 02:00

2 respostas

3

Descobri que sim é possível e utilizável para funções de conclusão simples, mas como essa função específica _man faz algum trabalho de análise e validação, ele gera um erro quando invocado fora de seu contexto esperado.

Veja o que fiz para vincular a função _man completion a uma combinação de teclas para que pudesse ser invocada manualmente.

Defina uma função de wrapper que defina as opções necessárias.

_man_autonomous () {
  eval $_comp_setup
  _man "$@"
}

Registre um novo widget com o editor de linhas:

zle -C complete-man expand-or-complete _man_autonomous

liga o widget a Ctrl + T

bindkey '^T' complete-man

Existe um exemplo desta técnica que utiliza _files na FAQ do zsh .

    
por 11.08.2016 / 11:13
0

Não sei por que o zsh não oferece essa funcionalidade ... Por sorte, alguém fez um hack: link

$ capture.zsh 'man gr'
grep
<snip>
groff
<snip>
    
por 20.09.2016 / 04:51