Comecei a testar o MUD recentemente. Pelo terminal no Mac, não tive problemas. Então tentei fazer login pelo meu computador Linux, em RXVT-unicode /Bash.
$ echo $TERM
rxvt-unicode-256color
$ telnet aardwolf.org
Trying 23.111.142.226...
Digamos que eu digite as teclas Backspace, Cima (seta), Baixo, Direita Esquerda, e vejo:
> ^?^[[A^[[B^[[C^[[D
A exibição do texto proveniente do servidor MUD parece boa, com cores etc.
Tentei TERM=xterm telnet aardwolf.org
sem sucesso. Imagino que seja alguma configuração de terminal ou algo com Telnet, mas nenhuma quantidade de mecanismo de busca parece atingir o problema exato e não sou especialista o suficiente em todas as tecnologias que estão interagindo aqui para defini-lo.
Alguém pode explicar o que está errado aqui?
Isso parece um resultado normal se o programa remoto não suportar teclas de seta.
O cliente Telnet Linux não tem edição de linha embutida. Se o servidor Telnet solicitar o modo "cooked" (edição de linha local), você obtém apenas o modo "cooked" que o recurso de terminal do SO local fornece – e no Linux ou outros similares ao Unix que não incluem nenhum suporte para teclas de seta; tudo o que você pode fazer é backspace antes de finalmente confirmar a linha. (Por exemplo, você pode ver isso executando localmente
/bin/dash
oucat > /dev/null
.) O Windows é o único que tem edição de linha real no nível do console.E se o servidor solicitar o modo "raw", então ele recebe cada pressionamento de tecla individual e cabe ao servidor interpretá-los de acordo com o TERM. Assim como com programas locais, no entanto, o programa com o qual você está interagindo via Telnet pode não fazer nenhuma interpretação desse tipo — o Bash, por exemplo, precisa carregar explicitamente uma biblioteca como 'readline' para implementar a capacidade de cursor dentro da linha que está sendo editada; e se um programa não fizer nada parecido, então ele simplesmente não terá suporte para teclas de seta e mostrará as sequências de teclas recebidas como texto simples. (Mesmo exemplo: se você fosse usar o Telnet para outra máquina Linux e executasse /bin/dash remotamente, ele também não teria edição de linha.)
O Telnet não se envolve realmente no último modo; ele apenas encaminha as sequências de teclas para o servidor como estão. Embora tenha um "Network Virtual Terminal" abstrato, que especifica apenas o uso de ASCII e bytes de 8 bits (ao contrário de, digamos, EBCDIC ou SIXBIT) e o uso de CRLF – é um protocolo antigo que até mesmo antecede o TCP/IP, e todo o seu design também antecede o terminal VT110 em uma década, então ele não faz nenhuma tradução para chaves VT especiais.
Então, se seu terminal Rxvt envia
ESC [ A
uma tecla de seta (que é a sequência "padrão"), então é isso que o servidor recebe, e é o programa do lado do servidor que tem que interpretá-lo. Tudo o que o Telnet faz é encaminhar o valor de TERM para a extremidade remota para que o servidor saiba como interpretá-lo, mas o programa ainda pode não fazer isso.Pelo que ouvi, MUDs são mais comumente acessados usando clientes especializados como Tintin++ ou Mudlet, que adicionam edição de linha local, entre outras coisas. Este tópico também sugere rlwrap, que adiciona edição de linha Bash a qualquer programa.