No Terminal, não consigo digitar minúscula e

13

Se eu abrir uma janela do Terminal e digitar a letra "e" (sem aspas, é claro), ela emitirá um bipe e não digitará a letra. Todas as outras cartas funcionam bem no Terminal. E maiúsculo funciona também. Apenas o minúsculo e não faz.

Em todos os outros aplicativos no meu computador, minúsculas e funciona sem problema, por isso não é um problema de teclado.

Isso começou na última semana. Eu uso muito o Terminal no meu trabalho e isso nunca foi um problema. Eu reiniciei (não consertei). Eu tenho o terminal de reset (não consertei).

Como não sei a data exata em que isso começou, não tenho certeza se fiz alguma alteração ou software instalado. Estou tentando remover qualquer coisa que eu tenha instalado recentemente.

FYI Eu tentei usar o terceiro partido iTerm2 e faz a mesma coisa.

TAMBÉM - se eu colar algo com um e menor, faz a mesma coisa - não vai aguentar. Tem que ser algum problema de configuração bash terminal eu acho.

Na verdade, eu copiei o seguinte sentido e colei no terminal. O que aparece? sns e você pode ouvir dois bipes.

Além disso - caso não esteja claro - isso acontece com o teclado embutido no MBP, bem como com um teclado externo. Com base nisso e no problema de colagem, não acho que isso seja um problema de teclado físico.

Especificações: 2015 MacBook Pro, totalmente atualizado OS X

user3720729
fonte
1
O comportamento persistirá se você for para outro shell, como csh ou tcsh?
Kent
1
Isso é estranho ... tente abrir applescript pesquisando em destaque e digitando delay 10 em seguida, pressione voltar e escrever tell application "System Events" to keystroke "e" exatamente como escrito. Quando o jogo for pressionado, ele esperará 10 segundos e, em seguida, pressionará e por si mesmo. Vá para o terminal antes que o tempo expire e teste-o. Se isso não funcionar, você terá um sério problema interno com o seu computador.
ALX
1
O que acontece se você cat filnam.txt onde o arquivo chamado filnam.txt contém algum texto ASCII com e?
techraf
Isso é apenas no shell ou em qualquer programa em execução no Terminal?
agentroadkill

Respostas:

7

Vamos depurar isso.

  1. Troque os shells e tente novamente. (Crédito para @Kent) No terminal:
    • $(which zsh)
  2. Comente todas as linhas em .bash_profile, .bashrc, etc. e abra uma nova guia / janela de terminal. Se isso resolver o problema, algo que está sendo carregado no ambiente do shell está consumindo a letra e por razões que a ciência pode nunca ser capaz de explicar.
  3. Experimentar cat ing um arquivo que contém a letra e para ver se será exibido: (Crédito para @techraf)
    • Abra um editor de texto (não terminal)
    • Digite algum texto com alguns e s e salve o arquivo ( foo.txt?)
    • No terminal, cat o arquivo:
      • cd /path/to/folder; cat foo.txt
    • E se e s render então o terminal pode lidar com isso, se não, então isso é super estranho.
  4. Experimente o applescript. (Crédito para @ALX)

    • Abra o editor Applescript
    • Crie o arquivo Applescript com este conteúdo:

      delay 10
      tell application "System Events" to keystroke "e"
      
    • Execute o arquivo de script e navegue rapidamente até a janela do terminal. Em alguns segundos, ele praticamente pressionará o e chave e espero aparecer em seu terminal. Isso indicaria que poderia haver um problema de driver de entrada / dispositivo (embora eu não saiba o que isso poderia ser)

Eu não vou mentir, eu estou absolutamente fascinado por esta questão e não posso esperar para saber qual é a causa. Não é hardware porque funciona em outras aplicações, o que significa que é software e não consigo imaginar quem iria engolir a carta e com código.

Pierce
fonte
1
Melhor tentar uma concha C, por exemplo tcsh como ele não (não) pode ler os arquivos de inicialização do bash ou até mesmo iniciar um intérprete, e. python em perl e digite lá
Mark
1
Sim, estou realmente fascinado por esta questão
Manchineel
"Eu não posso imaginar quem iria engolir a letra e com o código" Esse cara pode saber alguma coisa ... upload.wikimedia.org/wikipedia/en/5/5e/Cisforcookie.jpg
Allan
3

Acabei de encontrar este tópico depois de me deparar com o mesmo problema.

.inputrc

Eu tinha 2 linhas em .inputrc, adicionado em um momento de ignorância descuidada, começando com e e s (que são configurações bash válidas, mas não válidas readline config). Eles parecem ter sido interpretados como aliases de atalhos de teclado para personalização de readline.

Removendo as linhas de .inputrc, Eu confirmei, resolvi meu problema.

Obrigado @ user208052 para o lembrete relevante para verificar .inputrc.

A configuração Readline do shell

A concha bind comando permite a visualização e modificação da configuração Readline. (Vejo help bind. help é man para comandos internos do shell).

Visão bind -p (talvez cano para menos |less ou redirecionar para um arquivo > binds.txt ). isto "lista [s] funções e ligações em um formulário que pode ser reutilizado como entrada" .

Tem entradas como "c": self-insert para cada caractere na faixa ASCII, então a configuração defeituosa pode substituir self-insert com alguma outra função Readline.

Tem algumas pedras preciosas; visualizá-lo apenas me ensinou que C-= ( \e= ) imprime possíveis conclusões, na minha configuração padrão. Parece mostrar a configuração atual completa do Readline para o seu shell ... bastante útil e poderoso. Bom para explorar.

Teste de ponta a ponta

  1. e trabalho
  2. inserir linha errônea em .inputrcAbrir novo shell

    et completion-map-case on
    set completion-ignore-case on
    
  3. e aparentemente é um não-op

  4. bind -p ( | grep -i '"E"' ) mostra
    • "E": self-insert,
    • mas não "e": self-insert
    • enquanto que "A": self-insert e "a": self-insert estão presentes.
mcint
fonte
2

Estou um pouco enferrujado, mas colando no Terminal funciona de forma diferente do que colando em um programa GUI: cada caractere é enviado como um pressionamento de tecla separado, não como um memcopy da área de transferência para o buffer do aplicativo. Então, se o "e" foi remapeado, ele será remapeado na pasta também.

Verifique os seguintes locais:

System Preferences > Keyboard > Shortcuts

~/Library/KeyBindings/KeyBindings.dict

$ defaults read com.apple.Automator NSUserKeyEquivalents

zencraft
fonte
Verifique o que exatamente?
nohillside
Se o e chave foi remapeada.
zencraft
1
Assumindo que o OP não seja muito experiente em tais coisas: o que exatamente eles devem procurar? Um exemplo de tal mapeamento pode ser útil.
nohillside
1
Para atalhos de teclado, procure pelos principais remapeamentos: há uma lista de aplicativos à esquerda e uma lista de atalhos à direita. Certifique-se de que o Terminal não esteja na lista de aplicativos. Os outros dois devem estar vazios; Se KeyBindings.dict existir ou o comando defaults retornar algo, poste-o aqui para análise posterior.
zencraft
1

Outra coisa que você pode tentar é configurar o Terminal para abrir um editor de texto (emacs, vi, etc) quando uma nova janela for aberta. Por exemplo, nas preferências do Terminal para "Shell", você pode tê-lo Comando de execução tal como /usr/bin/emacs. Se você não pode entrar e no painel de preferências, então algo ainda mais estranho do que o que foi proposto até agora está acontecendo ...

Quando uma nova janela do Terminal é aberta, o emacs vai deve começar, e você pode tentar pressionar e Eu não tenho idéia do que vai acontecer, mas como @Pierce acima, estou curioso para saber o que está acontecendo.

Kent
fonte
0

Verifique a configuração stty e certifique-se de que 'e' acidentalmente não tenha sido definido como backspace ou similar. Estive lá, fiz isso. Stty algo \ e Faria isso A recomendação para desabilitar / comentar o .bash * provavelmente também o descobriria.

Daryl Monge
fonte
0

Eu tive o mesmo problema que foi causado por ter um erro de digitação /etc/inputrc:

et output-meta on

ao invés de

set output-meta on
fikovnik
fonte
-1

Basta apagar o arquivo .inputrc, ele está no diretório raiz. (É um arquivo oculto).

user208052
fonte