Por que precisamos de tantos pacotes de emuladores de terminal e qual a utilidade deles?

8

Isso é algo que me confunde há muito tempo.
Estou usando Linux, mas tenho lacunas no meu entendimento de certos aspectos e um é sobre o terminal.
Pelo que entendi, o que queremos dizer com o console é um emulador de terminais antigos.
Mas não consigo entender qual é o problema.
Enquanto eu lia, os melhores terminais antigos eram a série VT e o tipo de gráficos vetoriais (Tektronix).
Portanto, suponho que os emuladores atuais os emulem.
Agora, minhas necessidades no Linux em relação à apresentação de exibição chegaram ao ponto de usar um esquema de cores para o vim e apreciar cores ao fazer diff em arquivos.
Mas quando tenho problemas, geralmente encontro conselhos para definir xterm-256ou screen-256etc.
Além disso, quando faço:ls /lib/terminfo/ Eu vejo cerca de uma dúzia de diretórios com configuração para (eu assumo) tipos diferentes de tipos de emulador.

Então, minha pergunta é: como esses xterm-256ou screen-256o resto se encaixam na idéia de emular apenas os principais terminais nas últimas décadas?
Qual é a necessidade de ter tantos tipos de terminais? É algo que eu deveria procurar mais?
E por que hoje, com a tecnologia moderna, precisamos imitar esses terminais antigos como o VT e não ter algo novo?

Talvez minhas necessidades sejam muito simples, também aprecio as sutilezas disso, mas é algo que me intrigou bastante. Como, por exemplo, se eu tiver um problema com um esquema de cores, basta copiar e colar o que encontro no google sobre o TERM, etc., sem realmente entender o que estou fazendo ou qual é o problema.

Se alguém me ajudar a entender isso, seria muito apreciado

Jim
fonte
2
Observação tangencial: definir o seu $ TERM é invariavelmente maus conselhos (a menos que seja em screenou tmux) ...
jasonwryan
@jasonwryan: Em quaisquer problemas de exibição todas as mensagens mencionar interruptor TERM para isto ou aquilo e isso faz com que a minha confusão pior
Jim
Deixe o terminfo db fazer seu trabalho; soluções alternativas como definir um valor de termo .bashrcsão, na melhor das hipóteses, mascarando um problema subjacente e provavelmente causam problemas adicionais.
precisa saber é o seguinte
A idéia não é oferecer suporte apenas aos principais terminais das últimas décadas, mas oferecer suporte a praticamente todos os terminais existentes. Os terminfos não são criados exclusivamente para serem usados ​​em sistemas Linux, mas têm um histórico mais longo.
Sami Laine
@SamiLaine: to support pretty much any terminal there might be..Mas por quê? Por que queremos emular um terminal dos anos 70 ou 80 sem gráficos ou uma tela verde?
Jim

Respostas:

9

Aspectos estranhos do Unix geralmente existem por um bom motivo, então você está certo em procurar um. Nesse caso, porém, a boa razão já se tornou obsoleta e você está vendo um artefato antigo de uma época passada.

Quase o único "terminal" existente hoje é o xterm & variantes. Suas capacidades variam muito pouco, de maneiras que são importantes para apenas alguns programas. Se você acabou de usar o xterm e nunca tocar na variável TERM ou espiar o banco de dados terminfo, sua vida geralmente será melhor.

A variável TERM comunica informações sobre o terminal para o aplicativo através do ambiente, cf. homem xterm . Mudá-lo não muda o terminal ; representa apenas uma funcionalidade de terminal diferente para o aplicativo.

Nos dias de terminais conectados, era necessário definir TERM para representar o terminal conectado. No caso do xterm, o software pode definir a própria variável. Um rápido tour pelos documentos do vim mostra (como você mencionou no seu comentário) que você precisa alterá-lo para dar suporte à cor. Isso é progresso para você.

por que hoje ... emular esses terminais antigos como o VT e não ter algo novo?

A resposta é tanto antropológica quanto técnica.

Antes da GUI, o acesso às máquinas Unix era através de terminais burros, por exemplo, o VT-100. Conchas e utilitários como top já existiam. Quando a GUI se tornou tecnologicamente prática (na qual X desempenhou um papel) na década de 1980, os usuários do Unix ainda precisavam usar esses programas, então o xterm foi inventado para imitar o velho VT-100.

Foi concebido como um paliativo. "Todo mundo sabia" que os terminais eram o passado e as GUIs eram o futuro, e todos esperavam que "tudo" fosse acessado através da GUI. O Macintosh original, por exemplo, não tinha teclas de seta porque por que você precisaria delas ? Certamente a linha de comando enigmática do Unix, com suas vogais ausentes e ajuda indefesa

$ help
help: not found

em breve seguiria o caminho da memória de bateria e cartões perfurados. De certa forma, isso aconteceu: 9 usuários em 10 que executam o Windows ou OS X nunca veem a linha de comando, exceto quando o suporte técnico aparece para corrigir alguma coisa.

Então duas coisas aconteceram com a GUI do Unix, como era. O Windows, em particular, drenou o dinheiro do mercado. Houve uma grande mudança para padronizá-lo (cf. Sun News e OSF Motif), e então parou por volta de 1990. Naquela época, a Internet decolou e as coisas gráficas no Unix mudaram para o navegador da web. A motivação e o dinheiro (praticamente a mesma coisa) para criar uma GUI completa para Unix e tornar obsoleto tudo na seção 8 do manual desapareceram.

Há outro motivo, também, que poucos previram: a linha de comando tem certas vantagens sobre a GUI. Pipelines e expressões regulares são extraordinariamente poderosas, sem mencionar repetíveis no histórico e nos scripts do shell. Mesmo no contexto de uma GUI, a linha de comando permaneceu útil . Tanto é assim que continua a ser aprimorado ainda hoje.

Como sua pergunta sugere, o que é necessário é um reexame da suposição de que a GUI triunfaria e uma reinvenção do terminal como parte integrante dele. Precisamos de um novo terminal, com fontes proporcionais e gráficos endereçáveis ​​por bits no terminal .

Infelizmente, ninguém parece pronto para fazer isso. Nenhuma entidade corporativa o fará; o mercado é enorme, mas ainda é apenas uma pequena proporção de usuários de computador. O financiador lógico seria uma agência governamental como a DARPA, mas a pesquisa em interface humana é considerada "concluída" atualmente (não inventamos a GUI?). Até que mais pessoas - muito mais pessoas - reconheçam a necessidade, o xterm é seu amigo e provavelmente também o seu neto.

James K. Lowden
fonte
"" Todo mundo sabia "que os terminais eram o passado e as GUIs eram o futuro, e todos esperavam que" tudo "fosse acessado através da GUI." Citação necessária.
Faheem Mitha
+ 1.Boa resposta.Você nota: 1) If you just use xterm, and never touch the TERM...Como isso é possível? Qualquer esquema de cores para o vim requer essa configuração.Mesmo mais ao usá-lo dentro de um multiplexador. Portanto, não tenho certeza de como posso ser educado o suficiente para entender as alterações de configuração necessárias para cada problema? 2) ... today is xterm & variantsSobre o quê screen-*? Faz parte das variantes? Qual é o conjunto exato que um usuário precisa conhecer? 3) Se eu entendi corretamente, eles acharam mais simples oferecer suporte através de emuladores que todos os terminais já existiram do que construir algo do zero? ->
Jim
Que é (não criar algo novo e apoiar todos os terminais existentes sempre) muito estranho para mim
Jim
Obrigado pela atualização. Uma última pergunta: você menciona: The TERM variable communicates information about the terminal...Changing it doesn't change the terminal;eu realmente não entendo esse ponto. Quero dizer, se TERMnão mudar o terminal, o que constitui o terminal e como o linux sabe qual terminfo db usar?
Jim
O conteúdo da TERMvariável, de fato, é usado como um índice no banco de dados terminfo. Quando você o altera, altera o valor de uma variável de ambiente no processo de shell que o xterm está hospedando . Que a Shell pode muito bem estar em uma máquina diferente: xterm -e 'ssh _machine_name_'. Não é um valor que o xterm vê e, consequentemente, não afeta o comportamento do xterm de forma alguma. É confuso porque o xterm define a variável TERM (como um favor para você) refletindo sua configuração (try xterm -t), enquanto, ao mesmo tempo, o vim exige que você a defina.
James K. Lowden