“Xterm” ou “xterm” no arquivo de configuração

5

Depois de começar a usar o Arch, mudei para o terminal xterm e urxvt e aproveitei a flexibilidade deles (esp. scaleHeight resource). No entanto, não entendo por que algumas vezes as configurações funcionam com Xterm e, às vezes, com xterm ou XTerm (menor versus maiúscula x e t ).

Por exemplo, eu tenho essa configuração estranha que está funcionando no Ubuntu:

XTerm*faceName: terminus
XTerm*faceSize: 11
XTerm*saveLines: 16384
XTerm*loginShell: true
XTerm*charClass: 33:48,35:48,37:48,43:48,45-47:48,64:48,95:48,126:48
XTerm*termName: xterm-color
XTerm*eightBitInput: false
xterm*VT100.geometry: 100x80    ! <------ this line would not work with "Xterm" or "XTerm"
XTerm*scaleHeight: 1.3          ! <----- but all others work with "XTerm"

No entanto, minha caixa do Arch é executada no "xterm". O mesmo é válido para o terminal URxvt: não posso simplesmente portar minha caixa de trabalho Arch .Xresources para Ubuntu14, porque partes dela param de funcionar e recebo diferentes configurações após a execução:

xrdb -merge .Xresources

O X.org no xterm não possui nenhum exemplo (a pesquisa por "xterm *" não retornou nada nessa página). Eu vejo exemplos com Xterm , xterm e XTerm online ... Confunde-me que a configuração acima funciona, pois está sintaticamente desativada. Por que esse é o caso? Será que isso tem algo a ver com recursos novos ou antigos no X? Obrigado!

O xterm no Ubuntu é o Xterm (297). Eu não tenho acesso à minha caixa do Arch no momento, mas seria bem atual. Eu não sei como dizer a versão do Xterm dos repositórios do Arch, mas talvez isso: link Então, se esse link estiver certo, então sim, estou executando versões Xterm diferentes.

Eu tentei atualizar o xterm, mas ainda é 297.

apt-get update && apt-get install --only-upgrade xterm

Não consigo fazer isso agora, mas posso tentar recompilar a versão mais recente para ver se o problema está presente.

Seguindo as sugestões do ILMostro_7 abaixo, tentei XTerm.vt100.geometry , o que ainda não funcionou. Este é o Xterm (297) no Ubuntu14. Então, basicamente, . ou * parece funcionar apenas com pouco xt .

Resultado de appres XTerm xterm | grep geometry graças a Gilles. Eu não pensei em procurar exatamente o que xrdb -merge faz que resultou nessa bagunça. Então, meu palpite é que um deles tem precedência sobre todo o resto?

xterm.VT100.geometry:   100x100
xterm*VT100.geometry:   100x80
xterm*VT100*geometry:   50x50
xterm.vt100.geometry:   160x40
xterm*vt100.geometry:   100x20
xterm.geometry: 5x5
xterm*geometry: 100x20
XTerm.VT100.geometry:   100x100
XTerm*VT100.geometry:   50x50
XTerm*VT100*geometry:   20x10
XTerm.vt100.geometry:   100x5
XTerm*vt100.geometry:   40x40
XTerm*geometry: 50x50

Na verdade, parece que xterm.vt100.geometry: 160x40 tem precedência sobre os outros desde que a instância que eu estou recebendo. Além disso, eu de alguma forma consegui estragar completamente os menus do Xterm (Ctrl + clique do mouse) - eles aparecem como uma pequena linha amarela. Hehe

    
por Serge Poele 17.07.2015 / 14:57

2 respostas

7

Recursos do X11 têm um nome que consiste em uma série de componentes separados por um ponto, como xterm.vt100.geometry . O primeiro componente é o nome do aplicativo, o segundo componente é um widget nesse aplicativo e o último componente é uma propriedade do widget. Os widgets podem ser aninhados, portanto, pode haver mais de três componentes ou apenas dois para uma propriedade do aplicativo.

As especificações dos recursos do X podem se aplicar a um único recurso ou a um conjunto de recursos que correspondam a um padrão. Existem duas maneiras de fazer uma especificação se aplicar a vários recursos.

  • Você pode usar um nome de classe em vez de um nome de instância para qualquer componente. Convencionalmente, os nomes das instâncias começam com uma letra minúscula, enquanto os nomes das classes começam com uma letra maiúscula.

    • No nível do aplicativo, o nome da classe geralmente é fixo para um determinado aplicativo, normalmente para o nome do aplicativo em maiúsculas e, às vezes, outras letras também estão em maiúsculas, por exemplo, XTerm , XCalc , GV , NetHack , ... As aplicações que utilizam o X toolkit suportam um opção -class para definir o nome da classe, bem como -name para definir o nome da instância (cujo padrão é o nome base do executável). Por exemplo, XTerm.vt100.geometry define um valor da propriedade geometry para o widget vt100 de qualquer instância da classe XTerm ; aplica-se a xterm -name foo , mas não a xterm -class Foo .
    • No nível do widget, pode haver vários widgets com a mesma classe, por exemplo, vários botões na mesma janela. O Xterm tem um único widget da classe VT100 , chamado vt100 , que é a parte do emulador de terminal que cobre a janela inteira. Outros widgets incluem os menus mainMenu , fontMenu e vtMenu da classe SimpleMenu .
  • Existem curingas: ? significa "qualquer widget" e * significa "qualquer sequência de widgets". Por exemplo, xterm*background define um fundo para absolutamente tudo dentro da janela do Xterm.

Você pode explorar a árvore de recursos de um aplicativo que suporta o protocolo editres com editres . Poucas aplicações suportam este protocolo, mas o Xterm é um deles.

É possível que um determinado recurso seja correspondido por vários padrões. Nesse caso, as regras de precedência se aplicam. Consulte o manual para ver as regras completas.

No seu caso, é provável que exista outra entrada em algum lugar que corresponda mais a xterm.vt100.geometry do que xterm*VT100.geometry , e essa correspondência está substituindo sua configuração. Os outros não têm outra configuração, então o que você faz ganha.

    
por 18.07.2015 / 03:05
2

Alguns dos comentários, etc., não são precisos. A propósito, a descrição dos recursos do X está na página de manual do X (7) , na seção intitulada Recursos . Esse é o melhor lugar para começar a ler, e não faz sentido repetir aqui.

Veja alguns pontos ignorados:

  • os nomes dos recursos são diferenciam maiúsculas de minúsculas : XTerm não é o mesmo que Xterm não é o mesmo que xterm , etc.
  • convencionalmente os nomes dos recursos X usam uma letra maiúscula para o nome classe .
  • quando a primeira letra do nome da classe for X , há uma convenção para tornar a segunda letra em maiúscula. Então, obtemos XTerm . Outros exemplos incluem XCalc , XClock , XConsole , XLoad , XLogo .
  • por outro lado, temos Xedit (minúscula e ), Xfd , Xmag , Xman , Xmessage , Xvidtune . Então a convenção não é uma regra .
  • Aplicativos do X Toolkit (como xterm ) usam XtOpenApplication ou XtAppInitialize para inicializar seus recursos de aplicação. Essas chamadas recebem um nome e classe .
  • convencionalmente, o nome da instância é o nome real do programa (seu nome de arquivo). Se acontecer de você renomear o programa (como ocorre ocasionalmente, por exemplo, xterm.real ), isso altera o nome. O programa não tem para fazer isso, mas é feito com frequência. xterm faz isso.
  • geralmente o nome da classe é uma constante. Não está em xterm , porque espera uma de duas classes: XTerm ou UXTerm (3 capitais principais). O último é usado para o script uxterm , simplificando a maneira como as fontes são especificadas. Esta data de 2000 , tornando-se a meio caminho na história de X. Uma verificação rápida dos 30 programas na árvore de código-fonte do X a partir do início / meados de 2000 que usam XtAppInitialize não mostra nenhum outro programa usando uma variável para o nome da classe.
  • a opção -class é específica do xterm. Na verdade, dbedizzy aceita a opção -class , para a classe visual . Isso é diferente. X Toolkit não tem essa opção. Há uma lista das opções comuns do X Toolkit na página de manual do X (7) em Opções . O manual do xterm apresenta esses detalhes em Opções do X Toolkit .
  • editres , como indica a sua página de manual, funciona para qualquer programa que utilize o X Toolkit. Existem 36 programas na árvore-fonte X usando uma ou outra das duas chamadas de inicialização mencionadas, então não são "poucos programas" aos quais isso se aplica.
  • por outro lado, xterm é um dos poucos para os quais editres não é muito útil. Tem muitas configurações de recursos.

Os arquivos de padrões de aplicativos instalados para xterm e outros aplicativos convencionalmente especificam suas configurações de recursos começando com asterisco ( * ). Isso os torna independentes do nome instance . Um asterisco corresponde a qualquer número de níveis da hierarquia de widgets, o que geralmente é uma fonte de confusão, por exemplo, o FAQ do xterm Por que os menus são minúsculos? , onde é possível que um recurso de geometria destinado ao widget VT100 seja (mal) aplicado aos menus. Existem problemas semelhantes com correspondência muito generosa aplicada ao recurso font . A correção para ambos é usar correspondências mais específicas, referindo-se ao widget VT100 (específico), usando ponto ( . ), etc.

Como os arquivos de padrões de aplicativos evitam o uso desnecessário de '.' , eles são relativamente fáceis de substituir em sua própria configuração. Se você tiver problemas para obter um recurso como

xterm*VT100.geometry: 100.80

para aplicar, há apenas alguns lugares para procurar:

  • se você usou esse padrão antes, ele já está sendo usado e defini-lo novamente (mais tarde em seus arquivos de recursos) não afetará o valor usado.
  • uma configuração mais específica, como xterm.VT100.geometry , substitui as menos específicas usando curingas * e ? .
por 30.06.2016 / 02:02