Frage Einstellung, um nur Anwendungen des aktuellen Arbeitsbereichs im Launcher anzuzeigen?


Ist es möglich, die geöffneten Anwendungen des aktuellen Arbeitsbereichs im Startprogramm zu haben, aber nicht die aus anderen Arbeitsbereichen?


22
2018-06-09 09:02


Ursprung


Ich denke, Strg + (1,2,3,4) wird zum Wechseln von Arbeitsbereichen verwendet. Aber überprüfen Sie Verknüpfungen in den Systemeinstellungen ... - Alvar
Halten Sie die SUPER-Taste (Windows-Taste) gedrückt, um eine Übersicht aller verfügbaren Unity-Verknüpfungen anzuzeigen. Schau dir auch diese Frage an. - Glutanimate
Ich habe Ihre zweite Frage bezüglich der Abkürzungen aus Ihrem Post bearbeitet, weil es ein Duplikat ist und zuvor beantwortet wurde. Ich sehe, dass dies deine erste Frage ist (Willkommen bei Askubuntu!): Es ist einfacher für uns, dir zu helfen, wenn du nur eine Frage pro Post stellst. Bitte beachten Sie dies bei der Verwendung von AU in Zukunft. - Glutanimate
Gleiche Frage wie Hier. Allerdings fehlt dieser eine Antwort. - RPi Awesomeness
Wahrscheinlich nicht die Antwort, nach der Sie suchen, aber mangelnde Individualisierbarkeit der Einheit. Wenn Sie bestimmte Anforderungen haben oder mehr Kontrolle über Ihren Desktop haben möchten, sollten Sie in eine flexiblere Desktop-Umgebung wie KDE wechseln. - Conchylicultor


Antworten:


Wie können Anwendungen in (anderen) Arbeitsbereichen nicht gefunden werden?

Verwenden xdotoolist es windowunmap, es ist möglich, ein Fenster vollständig zu verbergen. Das Fenster oder seine Anwendung tritt nicht mehr im Launcher-Symbol auf und wird in der Ausgabe von nicht mehr aufgeführt wmctrl.

Theoretisch, das könnte mit der "workspace-engine" verbunden sein, die in Dies und Dies Antworten. Das wäre die eleganteste Lösung gewesen.

Der Prozess der nur Fenster auf anderen Arbeitsbereichen ausblenden und automatisch die auf den anderen erhöhen aktueller Arbeitsbereich ist zu anspruchsvoll, um in einem laufenden zu verwenden Hintergrund Skript (für jetzt), und nicht unwahrscheinlich, "sich auch zu erkälten". Da im Fehlerfall Fenster für immer verloren gehen, habe ich mich entschieden, das Verfahren nicht als automatischen (Hintergrund-) Prozess anzubieten.

Ob diese Antwort für Sie nützlich ist oder nicht, hängt von der Situation und dem Grund ab, warum Sie Symbole von Anwendungen ausblenden möchten, die auf anderen Arbeitsbereichen ausgeführt werden. Das ist deine Entscheidung.

Die Lösung; was es ist und wie es in der Praxis funktioniert

  • Ein Skript, das unter einem Shortcut-Schlüssel verfügbar ist und scheinbar alle Fenster aktiviert der aktuelle Arbeitsbereich (und damit Anwendungen) verschwinden völlig. Das bedeutet, dass das Symbol der Anwendung im Unity-Startprogramm keine Aktivität der Anwendung anzeigt:

    Drei laufende Anwendungen: enter image description here Nach dem Drücken der Tastenkombination: enter image description here

  • Durch erneutes Drücken der Tastenkombination schortcut werden die Fenster und ihre Anwendungen erneut angezeigt.

  • Da die Tastenkombination nur die Fenster und Anwendungen aus dem verstecken wird aktueller Arbeitsbereich, können Sie anschließend zu einem anderen Arbeitsbereich wechseln, ohne zu wissen, was im aktuellen Arbeitsbereich (versteckt) ist.
  • Ebenfalls sich verstecken ist (nur) auf dem aktuellen Arbeitsbereich gemacht, also kurz gesagt, der Prozess des Verbergens und Enthüllens ist völlig unabhängig pro Arbeitsbereich.

Das Skript

#!/usr/bin/env python3
import subprocess    
import os
import time

datadir = os.environ["HOME"]+"/.config/maptoggle"
if not os.path.exists(datadir):
    os.makedirs(datadir)
workspace_data = datadir+"/wspacedata_"

def get_wlist(res):
    res = get_res()
    try:
        wlist = [l.split() for l in subprocess.check_output(["wmctrl", "-lG"]).decode("utf-8").splitlines()]
        return [w for w in wlist if all([
            0 < int(w[2]) < res[0],
            0 < int(w[3]) < res[1],
            "_NET_WM_WINDOW_TYPE_NORMAL" in subprocess.check_output(["xprop", "-id", w[0]]).decode("utf-8"),
            ])]
    except subprocess.CalledProcessError:
        pass

def get_res():
    # get resolution
    xr = subprocess.check_output(["xrandr"]).decode("utf-8").split()
    pos = xr.index("current")
    return [int(xr[pos+1]), int(xr[pos+3].replace(",", "") )]

def current(res):
    # get the current viewport
    vp_data = subprocess.check_output(
        ["wmctrl", "-d"]
        ).decode("utf-8").split()
    dt = [int(n) for n in vp_data[3].split("x")]
    cols = int(dt[0]/res[0])
    curr_vpdata = [int(n) for n in vp_data[5].split(",")]
    curr_col = int(curr_vpdata[0]/res[0])+1
    curr_row = int(curr_vpdata[1]/res[1])
    return str(curr_col+curr_row*cols)

res = get_res()

try:
    f = workspace_data+current(res)
    wlist = eval(open(f).read().strip())
    for w in wlist:
        subprocess.Popen(["xdotool", "windowmap", w[0]])
    os.remove(f)
except FileNotFoundError:
    current_windows = get_wlist(res)
    open(f, "wt").write(str(current_windows))
    for w in current_windows:
        subprocess.Popen(["xdotool", "windowunmap", w[0]])

Wie benutzt man

  1. Das Skript benötigt beides wmctrl und xdotool:

    sudo apt-get install wmctrl xdotool
    
  2. Kopieren Sie das Skript in eine leere Datei, speichern Sie es unter toggle_visibility.py
  3. Testen Sie das Skript: Führen Sie in einem Terminalfenster den folgenden Befehl aus:

    python3 /path/to/toggle_visibility.py
    

    Öffnen Sie nun ein neues Terminalfenster (da das erste scheinbar von der Erdoberfläche verschwunden ist) und führen Sie denselben Befehl erneut aus. Alle Fenster sollten wieder erscheinen.

    NBStellen Sie sicher, dass Sie beim Testen keine "wertvollen" Fenster geöffnet haben

  4. Wenn alles funktioniert, fügen Sie den Befehl einer Tastenkombination hinzu: Wählen Sie: Systemeinstellungen> "Tastatur"> "Tastenkombinationen"> "Benutzerdefinierte Tastenkombinationen". Klicken Sie auf das "+" und fügen Sie den Befehl hinzu:

    python3 /path/to/toggle_visibility.py
    

Erläuterung

Wie gesagt, das Skript verwendet xdotoolist es windowunmap, um (vollständig) Fenster und die Anwendungen, zu denen sie gehören, zu verbergen. Das Skript:

  • liest, was der aktuelle Arbeitsbereich ist
  • liest die Fenster, die existieren auf dem aktuellen Arbeitsbereich (nur)
  • schreibt die Fensterliste in eine Datei, die nach dem aktuellen Arbeitsbereich benannt ist
  • verbirgt die Fenster

Beim nächsten Lauf das Skript:

  • prüft, ob die Datei, die der aktuelle Arbeitsbereich existiert
  • Wenn ja, liest sie die Fensterliste und blendet die Fenster aus.

Dadurch wird die Sichtbarkeit von Fenstern und Anwendungen im aktuellen Arbeitsbereich umgeschaltet.


8
2017-11-08 21:42



Groß. Jetzt nur, wenn ich eine Möglichkeit finde, das Skript automatisch auszuführen, wenn ich in den anderen Arbeitsbereich gehe, so dass sie einfach magisch verschwinden und dann wieder erscheinen, wenn ich zurückkehre. Vielleicht könnte ich ein Python-Skript schreiben, um den Tastaturkürzel für zu ersetzen ctrl+shift+arrow key - Thu Yein Tun
Am 17.10 ist dies nun möglich. Siehe andere Antworten. - Martin Melka


Nun, andere Antworten sind ziemlich alt, daher denke ich, dass es sich lohnt, aktuelle Antworten hinzuzufügen. Es ist möglich, dies jetzt zu tun und nicht zu schwer tbh (mit Ubuntu 17.10 und es Gnome).

Benutz einfach Dconf-Editor:

sudo apt install dconf-editor

Navigieren Sie zu org> gnome> shell> Erweiterungen> Dash-to-Dock und prüfe Arbeitsbereiche isolieren enter image description here


7
2018-02-01 12:39



Die Frage hat absolut nichts mit der Gnome-Erweiterung von Dash To Dock zu tun. Die Frage bezieht sich auf den Unity Launcher, der mit Dash To Dock nicht einmal mit Unity kompatibel ist. - crookedleaf
@crookedleaf Ubuntu hat mit einem rebaked Dash-to-Dock als Standard mit 17.10 zu GNOME gewechselt. - Seth♦
@Seth Aber OP benutzt Unity, nicht Gnome. Also hat entweder OP einfach das "Unity" -Tag versehentlich benutzt, oder sie benutzen eine Ubuntu-Version mit Unity. - crookedleaf
@crookedleaf Oder wir müssen nur die Fragen aktualisieren, damit sie auch die neuesten Antworten haben :) - Seth♦


Leider ist es unmöglich.

Unity zeigt immer alle Anwendungen von überall an und es gibt keine Möglichkeit, dies zu ändern. Es gibt einen Fehlerbericht - https://bugs.launchpad.net/ayatana-design/+bug/683170 Aber Entwickler scheinen nichts zu tun. Wahrscheinlich, wenn Sie oben auf der Seite markieren, dass dieser Fehler Sie beeinflusst, wird es den Entwicklern helfen, die Bedeutung solcher Option zu verstehen.


6
2017-09-01 21:29



Kommentieren Sie den Fehlerbericht nicht, sondern markieren Sie ihn am oberen Seitenrand. - Flimm
@Flimmst du zufällig wissen, welche Desktop-Manager diese Funktionalität hat? - Cesar
Die Einheit sieht gut aus, aber die fehlende Anpassbarkeit ist wirklich frustrierend. - Programster