Erzwingen, dass das Anwendungsfenster in dem Arbeitsbereich geöffnet wird, in dem es ausgeführt wurde

469
AmagicalFishy

Es dauert ein bis zwei Sekunden, um ein Programm zu öffnen (z. B. Anki oder Slack), und ich öffne oft mehrere Programme gleichzeitig - in verschiedenen Arbeitsbereichen. Folgendes würde ich gerne machen:

  • Drücken Sie Mod + Rund geben Sie in „Anki“ inWorkspace 1
  • Umschalten auf Workspace 2drücken Mod + Rund "Zwietracht" eingeben
  • Wechseln Sie zur Workspace 3Presse Mod + Rund geben Sie "libreoffice" ein
  • Wechseln Sie zu Workspace 4Firefox und durchsuchen Sie es
  • Anki öffnet sich Workspace 1, Discord öffnet sich Workspace 2, Libre Office öffnet sich Workspace 3, während ich schaue Workspace 4.

Stattdessen öffnen sich Anki, Discord und Libre Office Workspace 4, unabhängig davon, in welchem ​​Arbeitsbereich ich sie gerade ausgeführt habe.

Gibt es eine Möglichkeit, die oben beschriebene Situation zu erreichen, ohne ein Programm explizit einem Arbeitsbereich zuordnen zu müssen ? (Ich möchte nicht, dass Anki Workspace 1zum Beispiel immer dabei ist; ich möchte, dass es in einem Arbeitsbereich geöffnet wird, den ich beim Eingeben von "anki" angesehen habe.)

0

1 Antwort auf die Frage

0
ploth

Ich habe Ihre Frage zu meiner Aufgabe für heute Abend gemacht und es ist mir gelungen, eine funktionierende Version zu bekommen. Seien Sie vorsichtig, es ist ziemlich hackig! Soweit ich weiß, gibt es keine andere Möglichkeit, dies zu tun. Vor allem, weil es einen Fehler bei der Anwendung von Regeln gibt.

Was machst du? Bei der Ausführung Mod4 + rspeichern wir das aktuelle fokussierte Tag in einer Liste. Bei der Anwendung von Regeln auf erscheinende Fenster wird das entsprechende Tag aus der Liste angezeigt. Wir benötigen die einmalige Funktion, weil awesome im Moment einen Fehler hat und Regeln zweimal auf ein Fenster anwendet. Wir müssen unseren Terminal-Emulator (und alle anderen Programme, die wir mit der Tastenkombination beginnen) davon ausschließen, da er sonst an dem Tag geöffnet wird, an dem wir zuletzt gedrückt haben Mod4 + r.

Sie benötigen die folgenden Funktionen in Ihrer rc.lua.

local rule_count = 0 local tag_count = 0 local run_tag = {}  local function once() if rule_count == 1 then rule_count = 0 else rule_count = 1 end return rule_count end  local function get_run_tag() if once() == 1 then if tag_count > 0 then tag_count = tag_count - 1 return table.remove(run_tag) else return "1" end end end  local function push_run_tag(tag) table.insert(run_tag, tag) tag_count = tag_count + 1 end 

Suchen Sie dann in Ihrem rc.lua nach dem folgenden Teil:

{ rule_any = }, properties = { titlebars_enabled = false } -- or true }, 

Und füge ein paar Zeilen hinzu, damit es so aussieht:

{ rule_any = }, except_any = { class = { "Termite" }}, properties = { titlebars_enabled = false, tag = function() return  get_run_tag() end} }, 

Sie müssen Termiteden Konsolenemulator ersetzen, mit dem Sie normalerweise beginnen Mod4 + return. Zusätzlich müssen Sie jedes Programm der Klassentabelle hinzufügen, die Sie mit Schlüsselbindungen beginnen möchten.

Suchen Sie dann nach der Mod4 + rSchlüsselbindung. Im Moment sollte es dieser gefallen:

awful.key({ modkey }, "r", awful.screen.focused().mypromptbox:run() ), 

Ändern Sie es so, dass es so aussieht:

awful.key({ modkey }, "r", function () awful.screen.focused().mypromptbox:run() push_run_tag(awful.screen.focused().selected_tag.name) end, ), 

Ich würde bessere Lösungen schätzen!

PS: Dies funktioniert nicht für Anwendungen wie Steam, da mehrere Fenster geöffnet werden. Der erste bekommt den richtigen Tag. Das folgende ist das Tag "1".