stty settings são alterados patologicamente

4

Acabei de configurar um novo computador e, como de costume, tive que alterar as configurações em xterm para que as chaves de exclusão funcionassem corretamente. (Ctrl-H envia ^H , backspace envia ^? , delete envia ^[[3~ . Esta é, obviamente, a maneira objetivamente correta de fazê-lo.) Embora as configurações padrão do xterm sejam problemáticas, nesta configuração tudo funciona bem , pelo menos no final do xterm.

O problema é que, por algum motivo, as configurações de stty em um xterm são sempre definidas como erase = ^H . Além de atrapalhar as coisas na entrada padrão sem readline, isso também faz com que tmux comece a traduzir silenciosamente ^H para ^? em suas janelas, o que torna as coisas como emacs bastante penosas.

Não sei por que stty é definido dessa maneira. Não é a configuração padrão; digitar stty sozinho para exibir as diferenças do padrão mostra a linha erase = ^H; e digitar manualmente stty erase ^? remove essa linha. (Isso também corrige os problemas com stdin e tmux.) No entanto, digitando isso em cada terminal que eu começo é tedioso, e enquanto eu poderia colocá-lo em .bashrc ou algo assim, isso me parece ser o caminho certo para fazê-lo.

O que faz com que stty use essa configuração específica incorreta e não padrão? E como posso fazer isso parar?

    
por Tom Hunt 19.04.2015 / 02:34

1 resposta

2

Existem muitas maneiras de fazer isso. A maneira que você menciona pode ser uma. xterm é um programa que executa outro - ele envolve outro programa em um arquivo - geralmente seu shell - e canaliza a entrada que você o alimenta para os programas agrupados. A coisa sobre pseudo-terminais é que eles são apenas dispositivos emulados - e então xterm adivinha o dispositivo no qual você eventualmente estará digitando. Claro, você pode se tornar muito mais específico. xterm respeita todos os tipos de variáveis de ambiente - e, melhor ainda, xresources.

De man xterm :

  • ttyModes (classe TtyModes )
    • Especifica uma string contendo as palavras-chave de configuração do terminal e os caracteres aos quais eles podem estar vinculados. As palavras-chave permitidas incluem: brk , dsusp , e , eol , eol2 , < em> apagar , apagar2 , flush , intr , matar , lnext , sair , rprnt , iniciar , status , parar , susp , swtch e weras . Os caracteres de controle podem ser especificados como ^ char (por exemplo, ^c ou ^u ) e ^? pode ser usado para indicar exclusão (127). Use ^- para denotar undef. Use 4 para representar ^\ , pois uma barra invertida literal em um recurso X escapa do próximo caractere.
    • Isso é muito útil para substituir as configurações de terminal padrão sem ter que executar stty sempre que um xterm for iniciado. Observe, no entanto, que o programa stty em um determinado host pode usar palavras-chave diferentes; A tabela de xterm está incorporada.
    • Se o recurso ttyModes especificar um valor para apagar, isso substituirá a configuração do recurso ptyInitialErase , por exemplo, xterm inicializa o terminal para corresponder a esse valor.
por 19.04.2015 / 04:53

Tags