Aplique alterações de .Xdefaults em terminais rxvt em execução

1

Existe uma maneira de aplicar (por exemplo, a fonte (tamanho)) alterações em .Xdefaults a todos os terminais em execução em uma sessão?

Eu posso aplicá-lo a novos terminais através do carregamento de xrdb-load .Xdefaults, mas isso não se aplica a todos os terminais em execução.

Se for importante, estou usando o urxvt (no modo daemon) como terminal e o xmonad como gerenciador de janelas no ubuntu 15.10.

Apenas para os tamanhos de fonte, tive a idéia de que era possível usar a extensão perl de tamanho de fonte para injetar uma alteração de tamanho de fonte em cada terminal aberto, mas não sei como fazer isso.

    
por student 09.02.2016 / 17:53

2 respostas

1

Uma leitura rápida de urxvt(1) e depois da sinopse do mencionado urxvt(7) revela que rxvt-unicode terminais suportam sequências de escape que podem alterar p. ex. a fonte:

SYNOPSIS
          # set a new font set
          printf ']50;%s
SYNOPSIS
          # set a new font set
          printf ']50;%s%pre%7' 9x15,xft:Kochi" Mincho"
7' 9x15,xft:Kochi" Mincho"

Estes teriam que ser impressos em cada terminal aberto, e provavelmente seria necessária alguma tradução para converter o formato .Xdefaults em algo adequado para tal impressão.

    
por 09.02.2016 / 18:48
1

Recarregar a configuração é um recurso que nem todos os programas suportam. Os recursos do X, em particular, geralmente são lidos quando um programa é iniciado; não há protocolo para notificar um aplicativo de que ele deve usar novos recursos¹. O Rxvt tende a ser pequeno, então não é surpresa que ele não suporte o recarregamento de sua configuração após a inicialização.

Algumas configurações podem ser alteradas dinamicamente. Em particular, a fonte pode ser alterada por meio de seqüências de controle . Você pode emitir essas sequências de controle de qualquer lugar, apenas redirecionar a saída para o dispositivo terminal correto:

printf ']50;%s
for pts in $(ps x -o tty= | sort -u); do
  case "$pts" in pts/*) printf … >"/dev/$pts";; esac
done
7' … >/dev/pts/42

Não consigo pensar em uma maneira de listar os dispositivos de terminal que o rxvt está fornecendo. Você pode listar facilmente os dispositivos onde você tem processos em execução, isso pode ser bom o suficiente.

printf ']50;%s
for pts in $(ps x -o tty= | sort -u); do
  case "$pts" in pts/*) printf … >"/dev/$pts";; esac
done
7' … >/dev/pts/42

¹ Na verdade, existe um - editres - mas quem ouviu falar de editres? Ninguém é quem.

    
por 11.02.2016 / 00:45