Entendendo o que está acontecendo quando eu despejo uma seqüência de caracteres de terminal com Ctrl-v?

1

Se eu quiser ligar um mapeamento de teclas a uma função ou widget em zsh, aprendi que primeiro tenho que pressionar Ctrl + v - em um prompt, em seguida, insira a sequência de teclas que desejo usar e use a saída no comando key-binding.
Por exemplo, se eu quiser mapear Ctrl + x Ctrl + v para a ação de abrir o conteúdo da linha de comando atual em um editor, eu preciso

  • pressione Ctrl + v - para entrar no modo "dump key"
  • tecle Ctrl + x Ctrl + v
    • No meu caso, isso produz ^X^E
  • pegue o ^X^E e use-o no meu comando de atalho, por exemplo
bindkey "^X^E" edit-command-line

Por que isso é necessário e o que realmente está acontecendo "nos bastidores" quando eu faço isso?

    
por the_velour_fog 20.05.2016 / 05:22

1 resposta

5

Quando você pressiona Ctrl - V , o shell começa ignorando as interrupções do teclado e simplesmente pega a combinação de teclas pressionada como caractere de entrada. Isso é facilmente possível, pois o ASCII é projetado para conter todos os caracteres de controle.

É claro que, em exibição, ele precisa enganar um pouco e mostrar o ^ seguido pela chave correspondente ou, caso contrário, exibiria caracteres de controle em vez do que você precisa ver.

Note que a documentação de bindkey mostra que suporta duas notações para caracteres de controle: (os exemplos se referem a Ctrl - X )

  • notação de caret que deve escrever explicitamente o cursor ( ^ ) seguido pelo caractere de controle correspondente textualmente (não precisando da Ctrl - V método nesta questão); exemplo: ^X
  • C- seguido pelo caractere de controle; exemplo: C-x . Isso faz com que algumas combinações de teclas exijam escape (mesmo se você não usá-lo). Você provavelmente deve ler todo o manual screen and bindkey .
por 20.05.2016 / 06:38