Ich führe ein Matlab
Skript in der workspace 1
. Dies erzeugt mehrere Diagramme. In der Zwischenzeit wechsle ich workspace 2
dorthin und arbeite dort. Mein Problem ist, dass die Handlungen auftauchen workspace 2
. Ist es möglich, Software in einem Arbeitsbereich zu sperren? Also, während ich Matlab
die Plots in generiere workspace 1
, kann ich workspace 2
ohne Unterbrechung der Popup-Plots arbeiten?
14.04
unity
workspaces
matlab
OHLÁLÁ
quelle
quelle
xprop WM_CLASS
Können Sie dies mit dem Befehl überprüfen und dann auf das Fenster klicken?) Fügen Sie auch die WM_CLASS von Matlab hinzu.Antworten:
WICHTIGE BEARBEITUNG
Unten eine umgeschriebene Version des Skripts aus der ersten Antwort (unten). Die Unterschiede:
WM_CLASS
und der Zielarbeitsbereich sind jetzt Argumente zum Ausführen des Skripts. Verwenden Sie nur entweder den ersten oder den zweiten (identifizierenden) Teil desWM_CLASS
(siehe weiter unten: Verwendung)Wenn das Skript gestartet wird, wird eine Benachrichtigung angezeigt (Beispiel
gedit
):Das Skript
Wie benutzt man
Das Skript benötigt beides
wmctrl
undxdotool
:Kopieren Sie das obige Skript in eine leere Datei und speichern Sie es unter
lock_towspace.py
Finden Sie unter Ihrer spezifischen Anwendung Folgendes heraus
WM_CLASS
: Öffnen Sie Ihre Anwendung, führen Sie sie in einem Terminal aus:Die Ausgabe sieht wie folgt aus (in Ihrem Fall):
Verwenden Sie entweder den ersten oder den zweiten Teil des Befehls, um das Skript auszuführen.
Der Befehl zum Ausführen des Skripts lautet dann:
Im Befehl der letzte Abschnitt;
2,2
ist der Arbeitsbereich, in dem Sie die Anwendung (ohne Leerzeichen: (!) Spalte, Zeile ) im "menschlichen" Format sperren möchten ; Die erste Spalte / Zeile ist1,1
Veraltete Antwort:
(zweite) TESTVERSION
Das folgende Skript sperrt eine bestimmte Anwendung an ihren ursprünglichen Arbeitsbereich. Wenn das Skript gestartet wird, bestimmt es, auf welchem Arbeitsbereich sich die Anwendung befindet. Alle zusätzlichen Fenster, die die Anwendung erstellt, werden in Sekundenbruchteilen in denselben Arbeitsbereich verschoben.
Das Fokusproblem wird gelöst, indem automatisch auf das Fenster fokussiert wird, das vor der Erstellung des zusätzlichen Fensters fokussiert wurde.
Das Skript
Wie benutzt man
Das Skript benötigt sowohl
wmctrl
undxdotool
Kopieren Sie das Skript in eine leere Datei und speichern Sie es unter
keep_workspace.py
Bestimmen Sie die WM_CLASS Ihrer Anwendung, indem Sie die Anwendung öffnen, dann ein Terminal öffnen und den folgenden Befehl ausführen:
Klicken Sie dann auf das Fenster Ihrer Anwendung. Kopieren Sie die Ausgabe wie
"sun-awt-X11-XFramePeer", "MATLAB R2015a - academic use"
in Ihrem Fall und platzieren Sie sie wie angegeben zwischen einfachen Anführungszeichen im Kopfbereich des Skripts.Führen Sie das Skript mit dem folgenden Befehl aus:
Wenn es so funktioniert, wie Sie möchten, füge ich eine Umschaltfunktion hinzu. Obwohl es auf meinem System bereits einige Stunden funktioniert, muss es möglicherweise zuerst angepasst werden.
Anmerkungen
Auch wenn Sie es nicht bemerken sollte, wird das Skript tut etwas Prozessorlast zum System hinzuzufügen. Bei meinem älteren System bemerkte ich einen Anstieg von 3-10%. Wenn Ihnen die Funktionsweise gefällt, werde ich sie wahrscheinlich weiter optimieren, um die Last zu reduzieren.
Das Skript geht davon aus, dass die sekundären Fenster zur selben Klasse gehören wie das Hauptfenster, wie Sie in einem Kommentar angegeben haben. Mit einem (sehr) einfache Änderung, die sekundären Fenster können jedoch einer anderen Klasse sein.
Erläuterung
Obwohl das Skript für einen durchschnittlichen Leser wahrscheinlich nicht sehr interessant ist, berechnet es in Vektoren. Beim Start berechnet das Skript:
wmctrl -d
wmctrl -lG
Von da an sucht das Skript nach neuen Fenstern derselben Anwendung mit der Ausgabe von
xprop WM_CLASS
, sucht ihre Position auf die gleiche Weise wie oben und verschiebt sie in den "ursprünglichen" Arbeitsbereich.Da das neu erstellte Fenster den Fokus aus dem zuletzt verwendeten Fenster "gestohlen" hat, an dem der Benutzer gearbeitet hat, wird der Fokus anschließend auf das Fenster gesetzt, das zuvor den Fokus hatte.
quelle
application
undworkspace
setzen kann. Wenn Sie auf mögliche Fehler stoßen, erwähnen Sie diese bitte!WM_CLASS
identisch sind, wird die zweite zu der im Befehl festgelegten verschoben.