Adventskalender 15. Dezember 2023 - Schummeln für Fortgeschrittene
Verfasst: 15.12.2023 07:41:33
In media res...
Lasst uns schummeln!
Wie gestern schon angedeutet bietet der AwesomeWM eine Art Hilfesystem, nämlich die Möglichkeit, sich die in der rc.lua gesetzten Tastenkombinationen plus einiger weiterer als eine Art Schummelzettel anzeigen zu lassen. Und genau das ist für mich eines der Features, die Awesome für mich einzigartig macht.
Gut, natürlich kann man jetzt sagen Brauch ich nicht, ich kenne meine Tastenkombinationen, wozu hab' ich ein Hirn, ist doch Bloat...! Dem ist auch nichts entgegenzuhalten.
Für mich ist das aber einerseits eine gute Stütze bei Programmen, die ich nicht so oft verwende, andererseits ist es eine gute Gelegenheit, sich mit den jeweiligen Programmen auseinanderzusetzen und sich so nochmal die wichtigsten Shortcuts zusammenzusuchen bzw. zu konfigurieren und darüber hinaus: ich finde es einfach nett, das zu haben, hat Stil.
Das hotkeys_popup
Das sogenannte hotkeys_popup zeigt einerseits die Tastenkombinationen, die man sich in der rc.lua setzt an, andererseits werden für bestimmte Programme auch welche angezeigt, wenn das jeweilige Programm offen ist. Wo kommt das her?
Die Magie passiert in /usr/share/awesome/lib/awful/hotkeys_popup, also nicht bei uns zuhause, sondern im Systembereich:
Ich werde auf die Default-Einstellungen jetzt nicht näher eingehen. Wen es interessiert, der kann sich dort umschauen und sich seine AHA!-Erlebnisse nochmal selbst erarbeiten.
Mir geht es aber um Folgendes: AwesomeWM (und wahrscheinlich die meisten anderen Fenstermanager) wird grundsätzlich im ~/ des Users konfiguriert. Macht man da einen Fehler (was zumindest mir mit Lua leicht mal passiert), dann fällt der Fenstermanager auf Default zurück und man ist zumindest noch in X.
Wenn wir jetzt aber (wie ich das lange getan habe) an den Dateien im Systembereich herumbasteln und dort einen Fehler machen, dann ist das lästig. Dann werden wir nämlich beim nächsten Reload von Awesome rausgeschmissen aus X und müssen fröhlich in der TTY korrigieren. Das ist kein Drama. Aber unbequem und eigentlich blöd.
Deshalb werden wir jetzt die benötigten
Module im User-Home nachbauen und bereitstellen
und anschließend für meine Terminalprogramme (lxterminal, cmus, fzf, lf und micro), den firefox-esr und mpv die Schummelzettel erstellen, die nur dann eingeblendet werden, wenn das Programm offen UND im Fokus ist.
Los geht's:
Zuerst benötigen wir einmal das eigentliche Widget, aufgrund der der Einfachheit und Übersichtlichkeit halber hier via NoPaste:
42046
Und die init.lua zum Widget:
Wir wechseln in den Unterordner und legen dort erst mal eine init.lua an, in der wir definieren, welche "Schummelzettel" berücksichtigt werden sollen. Hier habe ich meine restlichen auskommentiert:
In Folge die eigentlichen Skripte für die drei Programme (die oben erwähnten Terminalprogramme werden immer zusammengefasst angezeigt, sobald Lxterminal geöffnet und im Fokus ist):
Fast geschafft.
Wer die einzelnen Skripte aufmerksam überfliegt wird feststellen, dass der aktuelle Schummler immer in Weiss hervorgehoben wird. Und großgeschriebene Buchstaben bedeuten bei mir auch die Einbindung der Shift-Taste (ich hatte das anfangs anders dargestellt, das wurde dann aber reichlich kompliziert).
Wir schließen die Sache ab, in dem wir Awesome in der ~/.config/awesome/rc.lua noch mitteilen, dass das hotkeys_popup jetzt woanders geladen werden soll. Dazu ändern wir ziemlich zu Beginn der Datei zwei Zeilen:
Nun verstehen wir auch, wie Dateipfade in Lua angegeben werden. Ich zumindest...
Jetzt laden wir den Fenstermanager per Ctrl+Super+r neu und hoffen ... ... ... dass wir alles richtig gemacht haben (und ich hoffentlich keine Copy-Paste-Fehler hier reingepfuscht habe). Gibt Awesome keinen Fehler aus und/oder fällt auf Default zurück, dann können wir jetzt zB. Lxterminal öffnen und wenn wir Super+h drücken, dann sollte das in etwa so aussehen:
Für Firefox sähe die Sache so aus:
Und so könnte man das immer weiter...
Fazit
Ganz schön viel Code hier aber hat man den Dreh mal raus, ist es im Endeffekt keine große Sache - abgesehen von Lua. Aber deshalb auch unterschiedliche Schummler, damit man sieht, wie die einzelnen Tastenkombinationen in den Lua-Skripten geschrieben und voneinander getrennt werden. Und genau deshalb auch der Nachbau in unserem ~/. Was habe ich anfangs in der TTY nachbessern müssen, frage nicht!
Sollte jetzt tatsächlich jemand getriggert sein, in der ~/.config/awesome/awsmwidgets/hotkeys/keys/init.lua seht ihr, welche Schummler ich noch parat hätte, ich reiche gerne nach bei Interesse.
Ich wünsche euch allen noch eine schöne Vorweihnachtszeit, wir lesen uns!
Lasst uns schummeln!
Wie gestern schon angedeutet bietet der AwesomeWM eine Art Hilfesystem, nämlich die Möglichkeit, sich die in der rc.lua gesetzten Tastenkombinationen plus einiger weiterer als eine Art Schummelzettel anzeigen zu lassen. Und genau das ist für mich eines der Features, die Awesome für mich einzigartig macht.
Gut, natürlich kann man jetzt sagen Brauch ich nicht, ich kenne meine Tastenkombinationen, wozu hab' ich ein Hirn, ist doch Bloat...! Dem ist auch nichts entgegenzuhalten.
Für mich ist das aber einerseits eine gute Stütze bei Programmen, die ich nicht so oft verwende, andererseits ist es eine gute Gelegenheit, sich mit den jeweiligen Programmen auseinanderzusetzen und sich so nochmal die wichtigsten Shortcuts zusammenzusuchen bzw. zu konfigurieren und darüber hinaus: ich finde es einfach nett, das zu haben, hat Stil.
Das hotkeys_popup
Das sogenannte hotkeys_popup zeigt einerseits die Tastenkombinationen, die man sich in der rc.lua setzt an, andererseits werden für bestimmte Programme auch welche angezeigt, wenn das jeweilige Programm offen ist. Wo kommt das her?
Die Magie passiert in /usr/share/awesome/lib/awful/hotkeys_popup, also nicht bei uns zuhause, sondern im Systembereich:
Code: Alles auswählen
$ ll /usr/share/awesome/lib/awful/hotkeys_popup/
drwxr-xr-x 3 root root 4,0K 2023-11-01 16:37 ./
drwxr-xr-x 7 root root 4,0K 2023-11-01 16:37 ../
drwxr-xr-x 2 root root 4,0K 2023-11-01 16:44 keys/ # Hier liegen die einzelnen Shortcutdateien u. eine init.lua
-rw-r--r-- 1 root root 1,3K 2023-02-04 23:46 init.lua # Die init.lua für das Widget
-rw-r--r-- 1 root root 23K 2023-11-01 16:44 widget.lua # Das eigentliche Widget
$
Mir geht es aber um Folgendes: AwesomeWM (und wahrscheinlich die meisten anderen Fenstermanager) wird grundsätzlich im ~/ des Users konfiguriert. Macht man da einen Fehler (was zumindest mir mit Lua leicht mal passiert), dann fällt der Fenstermanager auf Default zurück und man ist zumindest noch in X.
Wenn wir jetzt aber (wie ich das lange getan habe) an den Dateien im Systembereich herumbasteln und dort einen Fehler machen, dann ist das lästig. Dann werden wir nämlich beim nächsten Reload von Awesome rausgeschmissen aus X und müssen fröhlich in der TTY korrigieren. Das ist kein Drama. Aber unbequem und eigentlich blöd.
Deshalb werden wir jetzt die benötigten
Module im User-Home nachbauen und bereitstellen
und anschließend für meine Terminalprogramme (lxterminal, cmus, fzf, lf und micro), den firefox-esr und mpv die Schummelzettel erstellen, die nur dann eingeblendet werden, wenn das Programm offen UND im Fokus ist.
Los geht's:
Code: Alles auswählen
mkdir -p ~/.config/awesome/awsmwidgets/hotkeys/keys
42046
Und die init.lua zum Widget:
Code: Alles auswählen
-- ~/.config/awesome/awsmwidgets/hotkeys/init.lua
local hotkeys_popup = {
widget = require("awsmwidgets.hotkeys.widget"),
}
hotkeys_popup.show_help = hotkeys_popup.widget.show_help
return hotkeys_popup
Code: Alles auswählen
-- ~/.config/awesome/awsmwidgets/hotkeys/keys/init.lua
local keys = {
firefox = require("awsmwidgets.hotkeys.keys.firefox"),
-- libreoffice = require("awsmwidgets.hotkeys.keys.libreoffice"),
mpv = require("awsmwidgets.hotkeys.keys.mpv"),
-- gpicview = require("awsmwidgets.hotkeys.keys.gpicview"),
-- claws = require("awsmwidgets.hotkeys.keys.claws"),
-- zathura = require("awsmwidgets.hotkeys.keys.zathura"),
-- lazpaint = require("awsmwidgets.hotkeys.keys.lazpaint"),
-- audacity = require ("awsmwidgets.hotkeys.keys.audacity"),
lxterminal = require ("awsmwidgets.hotkeys.keys.lxterminal"),
}
return keys
Code: Alles auswählen
-- ~/.config/awesome/awsmwidgets/hotkeys/keys/firefox.lua
local hotkeys_popup = require("awsmwidgets.hotkeys.widget")
local fire_rule = { class = { "Firefox" } }
for group_name, group_data in pairs({
["firefox"] = { color = "#FFFFFF", rule_any = fire_rule }
}) do
hotkeys_popup.add_group_rules(group_name, group_data)
end
local firefox_keys = {
["firefox"] = {{
modifiers = { "Mod1" },
keys = {
['Left'] = "zurück",
['Right'] = "vorwärts",
['Pos1'] = "startseite",
['1..9'] = "zu tab"
}
}, {
modifiers = { "Ctrl" },
keys = {
-- t = 'neuer tab',
w = 'schließe tab',
l = 'urlbar',
d = 'setze lesezeichen',
s = 'seite speichern unter',
b = 'bookmarks',
-- n = 'neues fenster',
f = 'in seite suchen',
['Up'] = 'seitenanfang',
['Down'] = 'seitenende',
['+,-,0'] = 'zoom',
['F5'] = 'reload inkl cache',
O = 'lesezeichen verwalten',
['Tab'] = 'nächster tab'
}
}, {
modifiers = { "Ctrl", "Mod1" },
keys = {
r = 'lesemodus an/aus'
},
}}
}
hotkeys_popup.add_hotkeys(firefox_keys)
Code: Alles auswählen
-- ~/.config/awesome/awsmwidgets/hotkeys/keys/lxterminal.lua
local hotkeys_popup = require("awsmwidgets.hotkeys.widget")
local lxterminal_rule = { class = { "Lxterminal" } }
for group_name, group_data in pairs({
["term: lf"] = { color = "#FFFFFF", rule_any = lxterminal_rule },
["term: micro"] = { color = "#FFFFFF", rule_any = lxterminal_rule },
["term: cmus"] = { color = "#FFFFFF", rule_any = lxterminal_rule },
["term: fzf"] = { color = "#FFFFFF", rule_any = lxterminal_rule },
["term"] = { color = "#FFFFFF", rule_any = lxterminal_rule },
}) do
hotkeys_popup.add_group_rules(group_name, group_data)
end
local lxterminal_keys = {
["term: lf"] = {{
modifiers = {},
keys = {
q = "quit",
['g..'] = "goto",
['j..'] = "jump vor/zrk",
['t..'] = "trash ...",
['xx'] = "delete",
h = "home",
l = "m lazpaint",
v = "view",
e = "edit",
y = "path to clipboard",
['.'] = "versteckte",
['*'] = "all/invert",
['?'] = "help/doc",
B = "bulkrename",
C = "clear buffers",
['c/X/p'] = "copy/cut/paste",
d = "details",
['E'] = "eject media",
f = "fzf jump",
['nd/f'] = "dir/file neu",
['ma/d/s'] = "selmode all/dir/show",
P = "print file",
R = "reload",
r = "rename",
s = "speicherverbrauch",
S = "sha256sum",
w = "terminal x",
U = "unselect"
}
}},
["term: fzf"] = {{
modifiers = { "Ctrl" },
keys = {
t = "dateien",
r = "history"
}
}, {
modifiers = { "Mod1" },
keys = {
c = "verzeichnisse"
}},
},
["term: micro"] = {{
modifiers = { "Ctrl" },
keys = {
["7"] = "einauskommentieren",
e = "eingabezeile",
b = "kommandoprompt",
l = "goto line",
d = "duplicate line",
r = "ruler"
}
}, {
modifiers = { "Mod1" },
keys = {
["9"] = "springe zur klammer",
["0"] = "colorcolumn 0",
["1"] = "colorcolumn 109",
["2"] = "colorcolumn 22",
["Enter"] = "insertline below",
["s"] = "suche cursorstring",
["r"] = "replace x y",
["t"] = "tasten shortcuts ein/aus",
S = "save as"
}
}},
["term"] = {{
modifiers = { "Ctrl" },
keys = {
l = "clear",
c = "cancel",
u = "löschen bis anfang",
k = "löschen bis ende"
}
}, { modifiers = { "Mod1" },
keys = {
d = "löschen bis wortende"
}},
},
["term: cmus"] = {{
modifiers = {},
keys = {
e = "edit/expand",
C = "clear playlist",
f = "filter",
F = "folge",
c = "clear filter",
a = "add",
N = "neue playlist",
S = "save playlist as ...",
d = "delete",
i = "info",
m = "modes all/artist/album",
s = "shuffle",
x = "mixtapes",
z = "meizeig",
['$'] = "shell",
['1'] = "tree",
['2'] = "sorted",
['3'] = "playlist",
['4'] = "filters",
['5'] = "settings",
[',.'] = "vol 5%",
['?'] = "manual",
['/'] = "suche"
}
}},
}
hotkeys_popup.add_hotkeys(lxterminal_keys)
Code: Alles auswählen
-- ~/.config/awesome/awsmwidgets/hotkeys/keys/mpv.lua
local hotkeys_popup = require("awsmwidgets.hotkeys.widget")
local mpv_rule = { class = { "mpv" } }
for group_name, group_data in pairs({
["mpv"] = { color = "#FFFFFF", rule_any = mpv_rule }
}) do
hotkeys_popup.add_group_rules(group_name, group_data)
end
local mpv_keys = {
["mpv"] = {{
modifiers = { "Mod1" },
keys = {
['+ -'] = "zoom",
f = "filenavigator",
['Backspace'] = "zoom reset"
}
}, {
modifiers = {},
keys = {
['ri/le'] = 'vor/zurück 5 sek',
['up/dwn'] = 'vor/zurück 1 min',
['[ ]'] = 'geschwindigkeit 10%',
['{ }'] = 'geschwindigkeit halb/doppelt',
['Backspace'] = 'geschwindigkeit normal',
['Space'] = 'pause',
Q = 'quit mit stand gespeichert',
f = 'fullscreen',
o = 'fortschrittsbalken',
O = 'fortschritt permanent',
h = 'home msk',
['1 2'] = 'kontrast',
['3 4'] = 'helligkeit',
['5 6'] = 'gamma',
['7 8'] = 'sättigung',
['9 0'] = 'volume',
T = 'bleibe top',
q = 'quit'
}
}}
}
hotkeys_popup.add_hotkeys(mpv_keys)
Wer die einzelnen Skripte aufmerksam überfliegt wird feststellen, dass der aktuelle Schummler immer in Weiss hervorgehoben wird. Und großgeschriebene Buchstaben bedeuten bei mir auch die Einbindung der Shift-Taste (ich hatte das anfangs anders dargestellt, das wurde dann aber reichlich kompliziert).
Wir schließen die Sache ab, in dem wir Awesome in der ~/.config/awesome/rc.lua noch mitteilen, dass das hotkeys_popup jetzt woanders geladen werden soll. Dazu ändern wir ziemlich zu Beginn der Datei zwei Zeilen:
Code: Alles auswählen
-- libraries & widgets
-- ...
local hotkeys_popup = require("awsmwidgets.hotkeys")
require("awsmwidgets.hotkeys.keys")
-- ...
Jetzt laden wir den Fenstermanager per Ctrl+Super+r neu und hoffen ... ... ... dass wir alles richtig gemacht haben (und ich hoffentlich keine Copy-Paste-Fehler hier reingepfuscht habe). Gibt Awesome keinen Fehler aus und/oder fällt auf Default zurück, dann können wir jetzt zB. Lxterminal öffnen und wenn wir Super+h drücken, dann sollte das in etwa so aussehen:
Für Firefox sähe die Sache so aus:
Und so könnte man das immer weiter...
Fazit
Ganz schön viel Code hier aber hat man den Dreh mal raus, ist es im Endeffekt keine große Sache - abgesehen von Lua. Aber deshalb auch unterschiedliche Schummler, damit man sieht, wie die einzelnen Tastenkombinationen in den Lua-Skripten geschrieben und voneinander getrennt werden. Und genau deshalb auch der Nachbau in unserem ~/. Was habe ich anfangs in der TTY nachbessern müssen, frage nicht!
Sollte jetzt tatsächlich jemand getriggert sein, in der ~/.config/awesome/awsmwidgets/hotkeys/keys/init.lua seht ihr, welche Schummler ich noch parat hätte, ich reiche gerne nach bei Interesse.
Ich wünsche euch allen noch eine schöne Vorweihnachtszeit, wir lesen uns!