Adicionando mais ligações do tipo Emacs ao editor de linhas do ZSH (ZLE)

5

Eu tenho algumas perguntas sobre as ligações de teclado do tipo emacs no Zsh. Como pano de fundo para todas as perguntas: Eu tenho ativação de teclas do tipo Emacs ativada com bindkey -e (ativada por padrão)

Copiar e destaque da região:

No Emacs, se você executar C-space ( set-mark ), selecionar uma região e copiá-la usando M-w , o Emacs colocará a região no anel kill e parará de selecionar o texto (ou seja, se eu mover o ponto, não há mais texto selecionado).

No entanto, não consigo ter o mesmo comportamento em ZLE . Depois de copiar uma região com M-W , o modo de seleção ainda está ativado e, se eu mover meu cursor, a seleção continuará mudando.

Parar seleção:

No Emacs, se eu estiver selecionando uma região, e pressionando C-g , a seleção será interrompida (a marca atual será eliminada). No Zsh, por padrão, C-g inicia uma nova linha no shell. Então, há um comando ZLE que eu possa ligar (talvez usando algo diferente de C-g ) para parar uma seleção em andamento?

    
por Amelio Vazquez-Reina 01.09.2011 / 23:12

1 resposta

4

Para desativar a seleção, execute set-mark-command com um argumento negativo: ESC - Ctrl+Space .

Para copiar a região e desativar a seleção, escreva uma função que execute as duas ações e, em seguida, declara-o como um widget com zle -N e vincule esse widget a uma chave.

copy-region-as-kill-deactivate-mark () {
  zle copy-region-as-kill
  zle set-mark-command -n -1
}
zle -N copy-region-as-kill-deactivate-mark
bindkey '\ew' copy-region-as-kill-deactivate-mark
    
por 02.09.2011 / 02:01