Tendo um “sticky shell” de urxvt com o fluxbox?

1

Estou tentando ter um shell ligado a uma chave, no meu fluxbox do gentoo. A idéia é ter um shell que mostre ou oculte toda vez que eu pressionar F11 , mas mantendo o mesmo shell, não criando um novo a cada vez.

Por enquanto, eu de alguma forma consegui fazer isso.

Eu inseri o meu .fluxbox/keys :

F11 :ExecCommand /home/me/script/toogle-sticky-shell

em que o script chamado é simplesmente:

##!/bin/sh
pid=$(ps -ef | grep surxv | head -n -1 | head -c 14 | tail -c 5)
if [ $pid ]
    kill $pid
else
    urxvt -name surxvt -e screen -RD StickyShell &
fi

E adaptou meu .fluxbox/apps com:

[app] (name=surxvt)
  [Hidden]  {yes}
  [Layer]   {2}
  [Position]    (WINCENTER) {0 0}
  [Deco]    {BORDER}
  [Tab]     {no}
  [FocusNewWindow] {yes}
  [Sticky]  {yes}
[end]

Então, basicamente, para manter meu shell ativo, estou usando screen . Mas sinto que não é uma solução 'limpa'.

Então, minha pergunta é: existe uma maneira mais limpa de conseguir isso?

Por exemplo, é possível ocultar / mostrar seletivamente uma janela com o fluxbox pressionando uma tecla?

    
por Levans 23.07.2013 / 22:42

1 resposta

2
  1. Instalar o wmctrl

    x11-misc/wmctrl
      Homepage:     http://tomas.styblo.name/wmctrl/
      Description:  command line tool to interact with an EWMH/NetWM compatible
                    X Window Manager
    
  2. Iniciar um terminal "nomeado"

    urxvt -name moo

  3. Escreva o seu script para minimizar / alternar usando

    wmctrl -x -r moo.URxvt -b toggle,hidden

  4. e ligue se a partir do arquivo de chaves.

    F11 :ExecCommand /home/me/script/toogle-hidden moo

Se você precisar de mais dicas, ficarei feliz em ajudar.

A propósito, não acho que sua abordagem anterior seja ruim. Além da maneira como você encontra o pid e algumas advertências da tela (não críticas), não há nada de errado com isso.

atualização:

A tela de retorno não é realmente um problema, porque você pode fazer a rolagem (no modo de cópia, pressionando ^ A + [) e porque X pode ser alcançado, definindo DISPLAY. Algumas pessoas querem que você acredite que tmux é a próxima melhor coisa para a iluminação, mas eu costumo escrevê-las como faço com os zelotes zsh ...

A outra coisa é insegura porque você procura pelo pid em deslocamentos de cadeia específicos (head -c) e porque a palavra-chave grep é obrigada a fornecer um pid errado (várias linhas) em algum momento. por exemplo:

$ ps -ef | grep moo
jaroslav 20089     1  0 Jul23 ?       00:00:00 SCREEN -dR moo
jaroslav 26545 26420  0 08:21 pts/10  00:00:01 rxvt-unicode -name moo
jaroslav 27702 26981  0 08:52 pts/12  00:00:00 /usr/bin/perl /usr/bin/cowsay moo
jaroslav 27704 26771  0 08:52 pts/7   00:00:00 grep --colour=auto moo

Isso mataria a tela e não o emulador de terminal. É "inseguro" supor que ps produz uma quantidade específica de linhas ou que algumas colunas são de uma determinada largura (acho que você assumiu 3 linhas com cabeçalhos e 14 caracteres para as duas primeiras colunas).

Eu usaria algo assim:

ps 'pidof rxvt-unicode' | grep -m1 -e '-nam[e] moo' | awk '{ print $1 }'

ou

ps ax  | awk '$0 ~ /rxvt-unicode.*-nam[e] moo/ {print $1; exit}'

Com ambos, pelo menos tenho certeza que o pid pertence a um terminal rxvt que foi iniciado com -name moo como dois de seus argumentos. E absolutamente certo de que a saída terá no máximo um pid. O -nam [e] é um truque antigo para evitar a correspondência do comando ps | grep na saída.

Tudo isso é problemático ... As regras práticas são.

  1. não pressupõe que a saída de um programa seja x caracteres largos ou y linhas longas.
  2. expressões regulares longas (mais rigorosas) são quase sempre melhores do que as curtas.
por 23.07.2013 / 23:38