É possível usar diferentes comportamentos de seleção de menu zsh para diferentes comandos?

13

Estou usando o comportamento menu select em zsh , que chama um menu abaixo do cursor, onde você pode ver as várias possibilidades. A opção .zshrc que eu defini para isso é

zstyle ':completion:*' menu select=2

Por padrão, pressionar Return para selecionar uma possibilidade neste menu só completa a palavra - ela não envia o comando. Por exemplo, eu posso ter um menu como este

~ % cd de<TAB>
completing directory:
[Desktop/]  Development/

Pressionar Return resultará em

~ % cd Desktop/

Eu então tenho que pressionar Return a segunda hora para realmente enviar o comando.

Eu posso modificar esse comportamento para fazer com que pressionar Return selecione a conclusão e envie o comando fazendo isso

bindkey -M menuselect '^M' .accept-line

No entanto, há um problema com isso: às vezes eu preciso completar um arquivo ou diretório sem enviar o comando. Por exemplo, talvez eu precise fazer ln -s Desktop Desktop2 - com esse comportamento de bindkey , tentar concluir o Desktop resultará em ln -s Desktop/ sendo enviado como o comando e, obviamente, não quero isso.

Estou ciente de que apenas pressionando o espaço vai me deixar seguir com o comando, mas agora é um hábito.
Sendo assim, existe uma maneira de fazer com que apenas alguns comandos some permitam que você pressione Return uma vez (como cd ), mas todos os outros outros exigem pressioná-lo duas vezes?

    
por kine 20.10.2011 / 00:22

2 respostas

3

Se você realmente precisa disso, teoricamente você pode definir uma função que verifica o comando que você está executando e completar ou enviar a linha.

Tente algo assim (não testado):

commands=(ls cd)
# define widget function
function check-command {
    zle beginning-of-line
    zle forward-word
    RBUFFER=" $RBUFFER"
    if [[ ${commands[(r)$LBUFFER]} == $LBUFFER ]] ; then ; zle accept-line ; else; zle     end-of-line ; fi
}

# create widget from function
zle -N check-command

# bind widget
bindkey -M menuselect '^M' check-command

Fonte: usando o comando personalizado do antigo .inputrc em zsh?

    
por 14.12.2012 / 23:31
0

Tecnicamente, não é possível do jeito que você está perguntando. Não sei se existe outra saída

    
por 20.11.2012 / 18:41