Haben Sie eine urxvt "Sticky Shell" mit Fluxbox?

710
Levans

Ich versuche, eine Schale an meiner Gentoo Fluxbox an einen Schlüssel gebunden zu haben. Die Idee ist, eine Shell zu haben, die bei jedem Drücken angezeigt oder ausgeblendet F11wird, wobei die gleiche Shell beibehalten wird und nicht jedes Mal eine neue erstellt wird.

Im Moment habe ich es irgendwie geschafft.

Ich habe ich mein eingefügt .fluxbox/keys:

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

wo das aufgerufene Skript einfach ist:

##!/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 

Und mein angepasst .fluxbox/appsmit:

[app] (name=surxvt) [Hidden]  [Layer]  [Position] (WINCENTER)  [Deco]  [Tab]  [FocusNewWindow]  [Sticky]  [end] 

Um meine Schale am Leben zu erhalten, verwende ich sie also screen. Aber ich habe das Gefühl, dass es keine "saubere" Lösung ist.

Meine Frage ist also: Gibt es einen saubereren Weg, um dies zu erreichen?

Ist es beispielsweise möglich, ein Fenster mit Fluxbox durch Drücken einer Taste selektiv ein- / auszublenden?

1
Meinen Sie damit zu fragen, ob ein Fenster mit einem Fluxbox-Befehl aus einem Shell-Skript (oder ~ / .fluxbox / keys) minimiert werden kann? Etwas exotischer? Benötigen Sie die Hülle, um nach den Fluxbox-Matrizen am Leben zu bleiben? Ярослав Рахматуллин vor 10 Jahren 0
@ ЯрославРахматуллин Wenn ein Fluxbox-Befehl in `.fluxbox / keys` ein bestimmtes Fenster minimieren oder maximieren kann, wäre es genau das, wonach ich suche und bisher nicht gefunden hatte. Es ist mir egal, ob die Hülle mit Fluxbox stirbt oder nicht. Levans vor 10 Jahren 0

1 Antwort auf die Frage

2
Ярослав Рахматуллин
  1. 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 
  2. Starten Sie ein "benanntes" Terminal

    urxvt -name moo

  3. Schreiben Sie Ihr Toggle-Minimalskript mit

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

  4. 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 tmuxdie 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 | grepBefehl in der Ausgabe übereinstimmt .

Das alles ist pingelig ... Die Daumenregeln sind.

  1. Nehmen Sie nicht an, dass die Ausgabe eines Programms x Zeichen breit oder y Zeilen lang ist.
  2. lange reguläre Ausdrücke (strenger) sind fast immer besser als kurze.
Danke, ich werde es ausprobieren. Ich denke, mit 'wmctrl -l' werde ich in der Lage sein, die Situationen zu bewältigen, in denen ich versehentlich die Hülle getötet habe (`^ D` kommt so leicht ...). Nur neugierig, wie können die Dinge, die Sie erwähnen, in meinem Ansatz verbessert werden? Levans vor 10 Jahren 0