Adventskalender 15. Dezember 2023 - Schummeln für Fortgeschrittene

Smalltalk
Antworten
dasebastian
Beiträge: 1886
Registriert: 12.07.2020 11:21:17

Adventskalender 15. Dezember 2023 - Schummeln für Fortgeschrittene

Beitrag von dasebastian » 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.

4494

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
$ 
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 (Debianlxterminal, Debiancmus, Debianfzf, Debianlf und Debianmicro), den Debianfirefox-esr und Debianmpv 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
Zuerst benötigen wir einmal das eigentliche Widget, aufgrund der der Einfachheit und Übersichtlichkeit halber hier via NoPaste:
NoPaste-Eintrag42046

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
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:

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
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):

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)
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:

Code: Alles auswählen

-- libraries & widgets
-- ...
local hotkeys_popup = require("awsmwidgets.hotkeys")
require("awsmwidgets.hotkeys.keys")
-- ...
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:

4495

Für Firefox sähe die Sache so aus:

4496

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!

chrbr
Beiträge: 550
Registriert: 29.10.2022 15:53:26

Re: Adventskalender 15. Dezember 2023 - Schummeln für Fortgeschrittene

Beitrag von chrbr » 15.12.2023 11:05:42

Moin dasebastian,
das ist ein sehr interessanter Beitrag. Bei meinem Gedächnis muss ich das unbedingt ausprobieren. Hoffentlich vergesse ich das nicht.
Vielen Dank,
Christoph

dasebastian
Beiträge: 1886
Registriert: 12.07.2020 11:21:17

Re: Adventskalender 15. Dezember 2023 - Schummeln für Fortgeschrittene

Beitrag von dasebastian » 15.12.2023 12:52:56

Gern. Es ist eine nette Spielerei. :wink:

Benutzeravatar
mn77de
Beiträge: 155
Registriert: 23.11.2003 16:53:53
Wohnort: Übersee
Kontaktdaten:

Re: Adventskalender 15. Dezember 2023 - Schummeln für Fortgeschrittene

Beitrag von mn77de » 15.12.2023 13:05:11

Öhm ... "Was hast du anfangs in der TTY nachbessern müssen"? :lol: :wink:

Vielen Dank für dieses Türchen, Awesome wird mir immer sympathischer!
Um die Weihnachtstage wird sich sicherlich mal etwas Zeit finden, das alles auszuprobieren/einzurichten. 8)
Im Moment ist bei mir nur gerade noch etwas sehr viel los. :wink:
OpenSource! :THX:

dasebastian
Beiträge: 1886
Registriert: 12.07.2020 11:21:17

Re: Adventskalender 15. Dezember 2023 - Schummeln für Fortgeschrittene

Beitrag von dasebastian » 15.12.2023 13:29:57

mn77de hat geschrieben: ↑ zum Beitrag ↑
15.12.2023 13:05:11
Öhm ... "Was hast du anfangs in der TTY nachbessern müssen"? :lol: :wink:
Vor allem Beistriche und Klammern und Kombinationen aus beiden... :facepalm: :lol:

Benutzeravatar
TRex
Moderator
Beiträge: 8086
Registriert: 23.11.2006 12:23:54
Wohnort: KA

Re: Adventskalender 15. Dezember 2023 - Schummeln für Fortgeschrittene

Beitrag von TRex » 15.12.2023 14:31:37

Das ist cool, hab ich nie viel drüber nachgedacht :)
Jesus saves. Buddha does incremental backups.
Windows ist doof, Linux funktioniert nichtDon't break debian!Wie man widerspricht


Benutzeravatar
mn77de
Beiträge: 155
Registriert: 23.11.2003 16:53:53
Wohnort: Übersee
Kontaktdaten:

Re: Adventskalender 15. Dezember 2023 - Schummeln für Fortgeschrittene

Beitrag von mn77de » 16.12.2023 13:12:12

dasebastian hat geschrieben: ↑ zum Beitrag ↑
15.12.2023 13:29:57
mn77de hat geschrieben: ↑ zum Beitrag ↑
15.12.2023 13:05:11
Öhm ... "Was hast du anfangs in der TTY nachbessern müssen"? :lol: :wink:
Vor allem Beistriche und Klammern und Kombinationen aus beiden... :facepalm: :lol:
Hoffe, der Witz ist angekommen ... "Frage nicht!" ... doch gefragt! :lol: :facepalm: :wink: :roll:

Ich hab' mich nun etwa 6 Stunden intensiv mit Awesome beschäftigt und mittlerweile das Meiste nach meinen Vorstellungen am laufen.
Aber ... Halleluja! :roll: :facepalm:

Von Mate bin ich es gewohnt, dass sich beide Monitore synchron (durch die Tags) bewegen. Finde ich auch gut so.
Dieses Verhalten mit Awesome umzusetzen, war etwas Arbeit.
Aber ... es ist quasi alles möglich. 8O Man kann sich seinen Desktop komplett nach den eigenen Vorlieben konfigurieren.
DAS ist definitiv Awesome!
OpenSource! :THX:

dasebastian
Beiträge: 1886
Registriert: 12.07.2020 11:21:17

Re: Adventskalender 15. Dezember 2023 - Schummeln für Fortgeschrittene

Beitrag von dasebastian » 16.12.2023 17:49:15

Das ist ja toll, dass du so reingehauen hast! Ja, wenn man die Fähigkeiten hat, sind die Möglichkeiten praktisch grenzenlos, man findet im Netz auch die wildesten Sachen...

Viel Spaß mit dem Ding! :THX:

EDIT:
mn77de hat geschrieben: ↑ zum Beitrag ↑
16.12.2023 13:12:12
... mit Awesome umzusetzen, war etwas Arbeit.
Aber ... es ist quasi alles möglich. 8O Man kann sich seinen Desktop komplett nach den eigenen Vorlieben konfigurieren.
Fühl dich auch frei, hier rein zu stellen, wenn du was deiner Meinung nach Interessantes zusammengebastelt hast! :THX:

Du hast jetzt praktisch MATE und ein Awesome oben drauf?

Benutzeravatar
mn77de
Beiträge: 155
Registriert: 23.11.2003 16:53:53
Wohnort: Übersee
Kontaktdaten:

Re: Adventskalender 15. Dezember 2023 - Schummeln für Fortgeschrittene

Beitrag von mn77de » 17.12.2023 13:04:33

Danke danke!
Es ist mega aufwändig, das Ding zu konfigurieren. Aber, nach und nach entsteht eine komplett individuelle und perfekt zugeschnittene Desktop-Umgebung. 8)

Mate mit Awesome als WindowManager habe ich anfangs überlegt, mittlerweile läuft Awesome mit ein paar zusätzlichen Mate-Elementen. :lol:

Ich bin immer noch am Einrichten und teste, wie es sich in der Praxis bewährt.
Sobald ich zufrieden bin, stelle ich meine Skripts hier rein. :THX:
OpenSource! :THX:

dasebastian
Beiträge: 1886
Registriert: 12.07.2020 11:21:17

Re: Adventskalender 15. Dezember 2023 - Schummeln für Fortgeschrittene

Beitrag von dasebastian » 17.12.2023 14:20:27

Ich kam auch von MATE (meiner Meinung nach immer noch das beste fertige DE) und hatte zu Beginn Awesome oben drauf gesetzt. Mittlerweile ist von MATE aber nichts mehr übrig...

Bin gespannt! Und Screenshot!

Antworten