Alt-Esquerda para pular palavras não funciona em emuladores de terminal

16

Em uma máquina Debian Wheezy no trabalho anterior, eu me acostumei com Alt + Left e Alt + Right para pular entre as palavras na linha de comando ativa (no bash).

No entanto, como em casa eu atualizei para Jessie (Debian 8.0, ramo de testes) isso não funciona mais: em vez de pular para a palavra anterior, o Alt-Left imprime algo como Dou [D. OTOH, se eu abrir o ssh e me conectar ao meu Debian Wheezy decapitado, ele funcionará perfeitamente.

Além disso, acabei de instalar o Fedora 20 no meu novo trabalho e aqui o comportamento é o mesmo. Isso se aplica ao bash, csh e ksh (iniciado em env -i), bem como rxvt-unicode e xfce4-terminal, portanto, deve haver algo fora desse nível.

Em que outro lugar da pilha devo procurar para encontrar a diferença?

Alois Mahdal
fonte
4
Eu sugeriria tentar alt-be alt-f (assim como o restante das chaves de linha de leitura), pois elas são mais universais, e vários programas de linha de comando respeitam as ligações de linha de leitura.
recatada

Respostas:

21

Você provavelmente definiu um arquivo local ~/.inputrcou global /etc/inputrcque foi perdido na atualização. Uma solução fácil é criar um ~/.inputrcarquivo com as seguintes linhas:

## enable Alt-arrows 
"\e[1;3D": backward-word ### Alt left
"\e[1;3C": forward-word ### Alt right

Eles funcionarão com xterme terminatore, gnome-terminalmas podem precisar ser ajustados para outros terminais. Infelizmente, cada emulador de terminal pode usar uma sintaxe diferente. Para mais detalhes, veja minha resposta aqui .

terdon
fonte
Eu realmente quis dizer Alt, e ainda funciona na máquina remota. Ctrl + Esquerda / Direita já está em Rxvt para mover a guia para a esquerda e direita (Shift + Esquerda / Direita alternando as guias e Shift + Down abrindo uma nova).
Alois Mahdal
1
A propósito, enquanto Ctrl + Esquerda / Direita é comum em editores de GUI, os terminais são um mundo completamente diferente, onde eu ainda não vi essa combinação.
Alois Mahdal
10

Terdon me colocou na direção certa: arquivo inputrc .

O culpado é que, de maneira não intuitiva, o readline6 realmente usa ~ / .inputrc em vez de / etc / inputrc, que o readline (3) não enfatiza nem rebate:

O nome desse arquivo é obtido do valor da variável de ambiente INPUTRC. Se essa variável não estiver definida, o padrão é ~ / .inputrc. Se esse arquivo não existir ou não puder ser lido, o padrão final será / etc / inputrc.

Assim, enquanto em em ambas as máquinas Debian / etc / inputrc é idêntica à que é fornecida por libreadline6 pacote (a versão é o mesmo que bem), na máquina mais recente ~ / .inputrc existe com uma única linha: set bell-style none. Quando esse arquivo é excluído, tudo funciona bem (consulte as notas abaixo).

Não posso verificar o Fedora até amanhã, mas acho que é o mesmo problema. Atualização: No Fedora, ~ / .inputrc não existia, aqui o / etc / inputrc é simplesmente diferente, portanto, pode não ser definido. Como um hotfix, simplesmente salvei o inputrc do Debian como meu ~ / .inputrc.


Notas:

O mistério de como foi alterado durante a atualização 7> 8 permanece sem solução, mas em parte isso pode ser explicado pela minha memória ruim e pelo malabarismo não intencional de alguns arquivos de ponto. (Aliás, não foi a atualização do APT, mas reinstalar e mover manualmente o arquivo de pontos, então talvez o ~ .inputrc atrapalhe de alguma forma.)

Além disso, quando digo OK, quero dizer que ele funciona com Ctrl em todos os lugares, exceto Rxvt (OK, só verifiquei o xfce4-terminal, mas sabemos que Rxvt é o rebelde usual), onde isso é remapeado para Alt, aparentemente porque Ctrl é usado por Rxvt - funcionalidade específica - move a guia ativa na lista.

Como a página de manual menciona, com o bash você pode usar o comando de ligação interno para investigar o que você possui atualmente.

Alois Mahdal
fonte
Boa captura, +1. Na verdade, é mais intuitivo do que você pensa. O comportamento padrão é que os arquivos de ponto específicos do usuário tenham precedência sobre os padrões de todo o sistema. Caso contrário, os usuários não poderão alterar suas configurações.
terdon
Consulte a resposta atualizada para saber como ativar especificamente as teclas Alt +.
terdon
2
Isso é normal, você precisa $include /etc/inputrcno topo ~/.inputrcse quiser ler também.
Chris Baixo
@terdon perfeitamente faz sentido preferir as configurações do usuário antes de todo o sistema, mas o que eu consideraria mais intuitivo seria que ~ / .initrc seria "mesclado" em / etc / initrc (ou seja, / etc / initrc seria $included por padrão).
Alois Mahdal
1
Veja: 1. opções codificadas, 2. / etc / initrc, 3. ~ / .initrc --vs-- 1. opções codificadas 2. / etc / initrc OR ~ / .initrc. A primeira maneira é muito mais flexível, pois pode ser facilmente estendida para um nível mais baixo (por exemplo, por projeto, admito que este exemplo não faz muito sentido com a linha de leitura, mas você entendeu).
Alois Mahdal