Um terminal de texto transmite apenas caracteres (mais precisamente, bytes), não chaves. As teclas e os acordes das teclas (teclas com modificadores) são codificados como seqüências de caracteres. As teclas que inserem caracteres imprimíveis são enviadas como elas mesmas; As teclas de função são enviadas como seqüências de escape. A maioria das seqüências de escape consiste no caractere Escape ( ?\e
na sintaxe do Emacs) seguido por dois ou mais caracteres imprimíveis. Consulte Teclas de controle e para cima / para baixo no terminal para uso pelo emacs e Como funcionam a entrada do teclado e a saída de texto? Para maiores informações.
O Emacs possui um mecanismo para converter seqüências de escape em sua própria noção de chaves. A tabela de conversão input-decode-map
é inicializada quando o Emacs é iniciado (ou mais precisamente, quando um novo quadro é aberto: essa variável tem um valor diferente em cada terminal). Às vezes, o Emacs não conhece todas as seqüências de escape enviadas pelo terminal.
No seu caso, parece que o Emacs tem a interpretação errada para a sequência de escape enviada por Shift+ Up. Você precisa dizer para interpretar isso como S-up
antes select
. Primeiro, descubra qual é a sequência de escape. No *scratch*
buffer, pressione Ctrl+ Qe Shift+ Up. O comando C-q
faz com que o próximo caractere, que é o caractere de escape, seja inserido literalmente, seguido pelo restante da sequência de escape. Digamos que o envio de Shift+ em nosso sistema, você precisará redefinir a entrada correspondente em :Up\e[1;2A
input-mode-map
(define-key input-decode-map "\e[1;2A" [S-up])
Em princípio, input-decode-map
deve ser definido por terminal. Na prática, é muito raro ter dois terminais nos quais a mesma sequência de escape codifica chaves diferentes, portanto, uma configuração global funcionará bem.
Are the (define-key ...)
comandos que deveriam entrar no init.el? Existe um exemplo detalhado em algum lugar que eu possa olhar?define-key
comandos @vfclists entram no seu arquivo init. Pode ser~/.emacs.d/init.el
ou alguns outros locais. Você encontrará vários exemplos de usosdefine-key
pesquisandodefine-key
, mas descobrir qual mapa vincular é outro problema. Vários mapas estão envolvidos:global-map
,input-decode-map
,function-key-map
,keyboard-translate-map
. Não sei como responder sua pergunta porque não conheço o Spacemacs. Eu não recomendo o uso de pacotes, como o Spacemacs, que redefinem as interfaces padrão.input-decode-map
depois de encontrar alguns exemplos. Possoinput-decode-map
aplicar isso quando o usuário está inserindo texto em um buffer?input-decode-map
é um dos mapas principais que se aplicam. Veja o manual para detalhes.No emacs, a região é delimitada pelo ponto (cursor) e pela marca (alguma posição anterior do cursor, que foi "marcada").
Assim, para "selecionar uma região", você precisa colocar essa marca e, em seguida, mover seu ponto.
A maneira mais fácil de colocar a marca é pressionar
C-SPC
. Em seguida, basta mover o cursor, você verá a "região" estender-se.Para "desmarcar a região", você pode pressionar
C-SPC
novamente.Como "shift + motion" é uma combinação de teclas comum em outro software, por padrão, ele simula esse comportamento de "selecionar região". No entanto, ele não funciona no terminal, porque o shift não pode ser enviado ao emacs como uma tecla modificadora.
Observe que, geralmente, o
C-SPC
método é muito mais poderoso do que outros métodos para selecionar uma região: você não está limitado a cima / baixo / esquerda / direita para movimento (você pode usar a pesquisa por exemplo ...) e não requer que você mantenha uma combinação desconfortável de teclas por um longo tempo.fonte