Installieren Sie wmctrl
x11-misc/wmctrl Homepage: http://tomas.styblo.name/wmctrl/ Description: command line tool to interact with an EWMH/NetWM compatible X Window Manager
Starten Sie ein "benanntes" Terminal
urxvt -name moo
Schreiben Sie Ihr Toggle-Minimalskript mit
wmctrl -x -r moo.URxvt -b toggle,hidden
und rufen Sie if aus der Schlüsseldatei an.
F11 :ExecCommand /home/me/script/toogle-hidden moo
Wenn Sie weitere Tipps benötigen, stehe ich Ihnen gerne zur Verfügung.
Ich glaube übrigens nicht, dass Ihr bisheriger Ansatz schlecht ist. Abgesehen von der Art und Weise, wie Sie die PID und einige Vorbehalte des Bildschirms (nicht kritisch) finden, ist daran nichts auszusetzen.
aktualisieren:
Die Bildschirmrücknahme ist nicht wirklich ein Problem, da Sie scrollen können (im Kopiermodus durch Drücken von ^ A + [)) und weil X durch Einstellen von DISPLAY erreicht werden kann. Einige Leute werden Sie glauben machen, dass dies tmux
die nächstbeste Sache der Erleuchtung ist, aber ich neige dazu, sie abzuschreiben, wie ich es mit den Zsh-Eiferern mache ...
Die andere Sache ist unklug, weil Sie bei bestimmten String-Offsets (head -c) nach der PID suchen und weil das grep-Schlüsselwort Ihnen irgendwann eine falsche PID (mehrere Zeilen) geben wird. zum Beispiel:
$ 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
Dies würde den Bildschirm und nicht den Terminalemulator zerstören. Es ist "unsicher" anzunehmen, dass ps eine bestimmte Anzahl von Zeilen erzeugt oder dass einige Spalten eine bestimmte Breite haben (ich glaube, Sie haben 3 Zeilen mit Kopfzeilen und 14 Zeichen für die ersten beiden Spalten angenommen).
Ich würde stattdessen mit so etwas gehen:
ps `pidof rxvt-unicode` | grep -m1 -e '-nam[e] moo' | awk '{ print $1 }'
oder
ps ax | awk '$0 ~ /rxvt-unicode.*-nam[e] moo/ '
Bei beiden bin ich zumindest ziemlich sicher, dass die PID zu einem Rxvt-Terminal gehört, das mit -name moo als zwei ihrer Argumente gestartet wurde. Und absolut sicher, dass die Ausgabe höchstens eine PID haben wird. Der -nam [e] ist ein alter Trick, um zu vermeiden, dass der ps | grep
Befehl in der Ausgabe übereinstimmt .
Das alles ist pingelig ... Die Daumenregeln sind.
- Nehmen Sie nicht an, dass die Ausgabe eines Programms x Zeichen breit oder y Zeilen lang ist.
- lange reguläre Ausdrücke (strenger) sind fast immer besser als kurze.