Facelifting XClock ao usar o Xrender: uma estrada longa e sinuosa

4

Basicamente, xclock é uma ótima ferramenta, e toda configuração básica do X a teria "onboard". No entanto, configurando xclock (analógico) enquanto mantendo XRender ativo definitivamente não é para os mais fracos de coração. Em particular, os iniciantes não terão nenhuma chance de configurar o relógio analógico sem mergulhar profundamente no .Xresource realm, já que tudo que você definir na linha de comando será para o modo não renderizado somente (requer a opção -norender ) e ignorado por padrão (o que significa que XRender está sendo usado). Além disso, a documentação sobre ele é péssima, e exemplos que realmente lidam com XRender são raros como dentes de galinha. Por isso, decidi começar minha própria abordagem.
Eu gostaria que houvesse uma maneira mais fácil de fazer tudo isso, mas aparentemente não há. Por um lado, essa pergunta provavelmente ajudará os novos usuários como um guia sobre como configurar as coisas para "their" xclock ; Por outro lado, eu também gostaria de perguntar a vocês se existe alguma maneira de melhorar meu "arquivo de configuração" (lembre-se das aspas). Curiosamente, .Xresources é amplamente considerado "obsoleto" e "último século", mas e se o aplicativo que você usa depender da maneira antiga, usando xrdb , .Xresources e o caboodle inteiro?

Eu pessoalmente gostei de um " design noturno " porque se encaixava perfeitamente no meu estilo de área de trabalho. Então foi o que eu fiz:

$ touch ~/.Xresources
$ vi ~/.Xresources

XClock*foreground: #fbfbfb
XClock*background: #000018
XClock*update: 1
XClock*geometry:          210x210+1020+12
XClock.Clock.majorColor:  rgba:f0/f0/19/7b
XClock.Clock.minorColor:  rgba:a0/c0/f0/c0
XClock.Clock.hourColor:   rgba:c9/66/11/72
XClock.Clock.minuteColor: rgba:00/82/9f/72
XClock.Clock.secondColor: rgba:50/93/30/6f

rgba significa "vermelho, verde, azul, alfa" - onde o quarto parâmetro, alfa , indicará o nível de opacidade em notação hexadecimal: a 00 fará o ponteiro do relógio ou marca de escala invisível; um ff desligará qualquer opacidade.
Por enquanto, tudo bem. Como não queremos reiniciar o servidor X para que essas coisas entrem em vigor, simplesmente mesclaremos nossas configurações naquelas que podem (ou, como de costume, não) já estarem lá:

$ xrdb -merge ~/.Xresources && xclock &

Embora eu odeie me gabar, eu sinceramente acho que parece caminho melhor do que o design chato que é padrão na minha área de trabalho.

Mas durante meus esforços para fazer isso funcionar do jeito que eu queria, também surgiu uma questão do meu lado: Na verdade, eu "roubei" a sintaxe XClock.Clock.<parameter> do seguinte arquivo de recurso:

/etc/X11/app-defaults/XClock-color

Curiosamente, TODOS os parâmetros que terminam em ...Color exigem a mesma sintaxe XClock. Clock .<parameter> como em app-defaults ; e. g. XClock*hourColor: rgba:ff/ff/ff/80 NÃO obterá o ponteiro das horas branco, nem definirá a opacidade para 0x80 .

Por que isso acontece?
Até agora, achei que o * era simplesmente um caractere curinga que significa XClock<whatever><parameter> .

    
por syntaxerror 03.09.2013 / 21:52

1 resposta

9

Sua suposição está correta. Uma especificação de recurso usando * é um curinga. Seu problema aqui está relacionado ao fato de que você provavelmente tem ambas especificações XClock* e XClock.Clock em seu banco de dados de recursos atualmente carregado. Neste caso, ele preferirá as entradas explícitas para os curingas. Você pode ver o que você definiu no seu banco de dados de recursos para o seu XClock com appres XClock :

 appres XClock
 XClock.input:   false

Se eu criar um arquivo de recurso com recursos de caractere curinga:

XClock*foreground: #fbfbfb
XClock*background: #000018
XClock*update: 1            
XClock*geometry:          210x210+1020+12
XClock*majorColor:  rgba:f0/f0/19/7b
XClock*minorColor:  rgba:a0/c0/f0/c0
XClock*hourColor:   rgba:c9/66/11/72
XClock*minuteColor: rgba:00/82/9f/72
XClock*secondColor: rgba:50/93/30/6f

E, em seguida, use um carregamento com uma operação xrdb -merge xclock , appres XClock agora mostra:

$ appres XClock
XClock*secondColor:     rgba:50/93/30/6f
XClock*foreground:      #fbfbfb
XClock*hourColor:       rgba:c9/66/11/72
XClock*update:  1
XClock*background:      #000018
XClock*geometry:        210x210+1020+12
XClock*majorColor:      rgba:f0/f0/19/7b
XClock*minorColor:      rgba:a0/c0/f0/c0
XClock.input:   false
XClock*minuteColor:     rgba:00/82/9f/72

Se eu iniciar o xclock, recebo o seu tema brilhante "nocturno". Agora, se eu fosse editar esse arquivo de recurso e substituir os recursos curinga por recursos explícitos (note ! é uma linha de comentário):

XClock*foreground: #fbfbfb
XClock*background: #000018
XClock*update: 1
XClock*geometry:          210x210+1020+12
XClock.Clock.majorColor:  rgba:f0/f0/19/ff
XClock.Clock.minorColor:  rgba:a0/c0/f0/ff
XClock.Clock.hourColor:   rgba:c9/66/11/ff
XClock.Clock.minuteColor: rgba:00/82/9f/ff
XClock.Clock.secondColor: rgba:50/93/30/ff
!XClock*majorColor:  rgba:f0/f0/19/7b
!XClock*minorColor:  rgba:a0/c0/f0/c0
!XClock*hourColor:   rgba:c9/66/11/72
!XClock*minuteColor: rgba:00/82/9f/72
!XClock*secondColor: rgba:50/93/30/6f

e mesclar o arquivo de recursos novamente com um xrdb -merge xclock , appres XClock agora mostra:

XClock.Clock.secondColor:       rgba:50/93/30/ff
XClock.Clock.minorColor:        rgba:a0/c0/f0/ff
XClock.Clock.hourColor: rgba:c9/66/11/ff
XClock.Clock.minuteColor:       rgba:00/82/9f/ff
XClock.Clock.majorColor:        rgba:f0/f0/19/ff
XClock*secondColor:     rgba:50/93/30/6f
XClock*foreground:      #fbfbfb
XClock*hourColor:       rgba:c9/66/11/72
XClock*update:  1
XClock*background:      #000018
XClock*geometry:        210x210+1020+12
XClock*majorColor:      rgba:f0/f0/19/7b
XClock*minorColor:      rgba:a0/c0/f0/c0
XClock*minuteColor:     rgba:00/82/9f/72
XClock.input:   false

Observe como ambos recursos explícitos e curinga são listados contra a classe XClock. Neste exemplo, xclock preferirá o recurso explícito sobre o caractere curinga e eu obtenho o relógio com as cores não alfa.

Para corrigir o problema, use uma operação -load em vez de uma operação -merge (o padrão xrdb é -load se você não fornecer nenhuma opção, ou seja, xrdb file é igual a xrdb -load file ).

Isso limpa o banco de dados de recursos, carrega os padrões do sistema e adiciona as configurações do recurso XClock nesse arquivo. Um bom truque para saber é que você pode restaurar os "padrões do sistema" com xrdb /dev/null . Você pode obter uma cópia do banco de dados de recursos existente (incluindo os padrões do sistema) com: xrdb -query -all , que pode ser redirecionado para um arquivo e, em seguida, editado de acordo com o seu gosto.

Na maioria dos sistemas que os colocam em seu .Xresources ou .Xdefaults, eles serão carregados quando a sessão X for criada, assim você não precisa carregá-los manualmente da sessão X para a sessão X.

Eu uso curingas para definir a maioria dos aplicativos para fazer branco sobre preto (não sou fã de preto sobre branco):

*background: #000000
*foreground: #ffffff

Quanto aos recursos que você pode definir para xclock, eles são abordados na página do manual (a maioria dos comandos do X11 cobre seus recursos na página man).

Outra coisa que é útil saber (e não documentada com frequência) é que a maioria dos comandos X11 podem ser passados -name argumento que permite ter recursos separados das configurações padrão do aplicativo, portanto, por exemplo, se eu fosse tem:

Leary*background: #ff0000

como uma configuração de recursos e, em seguida, execute xclock com xclock -name Leary Eu receberei um xclock com um fundo vermelho violento. Todas as configurações de recursos XClock explícitas / curinga são carregadas e, em seguida, elas são substituídas por aquelas definidas pela classe Leary . Em seguida, posso usá-lo para aplicar as mesmas configurações para dizer xterm , com xterm -name Leary .

Existem várias opções de linha de comando "padrão" usadas pela maioria dos comandos do X11:

-display host:n
     Location of the X server. 
-geometry wxh+x+y
     Window size and location. 
-bg color
     Window background color. 
-fg color
     Text and graphics color. 
-fn font
    Text font. 
-iconic
    Initial window to be started iconized. 
-title strings
    Window header title. 
    
por 04.09.2013 / 03:59