<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="../assets/xml/rss.xsl" media="all"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Plain DrOps</title><link>https://plaindrops.de/</link><description>Besides the noble art of getting things done, there is the noble art of leaving things undone. </description><atom:link href="https://plaindrops.de/de/rss.xml" rel="self" type="application/rss+xml"></atom:link><language>de</language><copyright>Contents © 2026 &lt;a href="mailto:andy@plaindrops.de"&gt;Andy Drop&lt;/a&gt; </copyright><lastBuildDate>Fri, 14 Aug 2026 07:15:58 GMT</lastBuildDate><generator>Nikola (getnikola.com)</generator><docs>http://blogs.law.harvard.edu/tech/rss</docs><item><title>Eine Org Datei im Einsatz als Config-File</title><link>https://plaindrops.de/de/blog/2026/DeckServerConfig/</link><dc:creator>Andy Drop</dc:creator><description>&lt;p&gt;
Wer mich im Fediverse verfolgt wird mitbekommen haben, dass ich seit einiger Zeit nicht mehr versuche, mein Stream Deck dauerhaft zu konfigurieren, sondern mir stattdessen eine eigene Lösung programmiert habe.
&lt;/p&gt;
&lt;!-- TEASER_END --&gt;

&lt;p&gt;
Diese Lösung besteht ganz kurz gesagt aus zwei einzelnen Komponenten. Erstens, einem Client, der auf meinem Handy läuft und mir 32 Tasten mit kleinen Bildchen auf dem Bildschirm anzeigt, und zweitens einem Server, den ich DeckServer nenne, der verschiedene Buttonlayouts, die ich sonst auf dem Stream Deck gesehen habe, an diesen Client ausspielt.
&lt;/p&gt;
&lt;h2 class="collapsible" id="org6418e1a"&gt;Das Problem&lt;/h2&gt;
&lt;div id="outline-container-org6418e1a" class="outline-2 collapsme"&gt;
&lt;div class="outline-text-2" id="text-org6418e1a"&gt;
&lt;p&gt;
Der Deck Server läuft wie schon der Name nahelegt als Service im Hintergrund und hat keine eigene Oberfläche. Um die Buttons, die der Server an den Client ausspielen soll, zu konfigurieren, bräuchte ich also normalerweise ein kleines Programm mit einer Benutzeroberfläche, auf der ich den einzelnen Buttons Bilder zuweisen kann, dann festlegen kann, welche Befehle jeder einzelne Button ausführen soll, und wie zwischen den einzelnen Button Layouts hin- und hergeschaltet wird.
&lt;/p&gt;

&lt;p&gt;
Als ich ein wenig darüber nachgedacht habe, fiel mir jedoch eine sehr viel einfachere Lösung ein. Schließlich lebe ich quasi in meinem Emacs Editor und dort vor allem in Org-Mode Dateien.
&lt;/p&gt;

&lt;p&gt;
So eine Org-Mode Datei ist, wie auch die bekannten Konfigurationsdateien aus Windows, hierarchisch aufgebaut, kann dabei jedoch deutlich mehr Ebenen verwalten.
&lt;/p&gt;

&lt;p&gt;
Eine typische Hierarchie in einer Org-Mode-Datei für Konfigurationen könnte so aussehen:
&lt;/p&gt;

&lt;ol class="org-ol"&gt;
&lt;li&gt;&lt;b&gt;Hauptkategorien&lt;/b&gt; (z. B. &lt;code&gt;* Stream Deck Buttons&lt;/code&gt;)
&lt;ul class="org-ul"&gt;
&lt;li&gt;&lt;b&gt;Unterkategorien&lt;/b&gt; (z. B. &lt;code&gt;** Layouts&lt;/code&gt;)
&lt;ul class="org-ul"&gt;
&lt;li&gt;&lt;b&gt;Einzelne Buttons&lt;/b&gt; (z. B. &lt;code&gt;*** Button 1&lt;/code&gt;)
&lt;ul class="org-ul"&gt;
&lt;li&gt;&lt;b&gt;Attribute&lt;/b&gt; (z. B. &lt;code&gt;:BILD: ~/bilder/start.png&lt;/code&gt;, &lt;code&gt;:Befehl: systemctl start ...&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Navigation&lt;/b&gt; (z. B. &lt;code&gt;** Layout-Wechsel&lt;/code&gt;)
&lt;ul class="org-ul"&gt;
&lt;li&gt;&lt;b&gt;Tastenbelegung&lt;/b&gt; (z. B. &lt;code&gt;*** Taste 5 → Layout "Streaming"&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;
Org-Mode nutzt Überschriften (&lt;code&gt;*&lt;/code&gt;, &lt;code&gt;**&lt;/code&gt;, &lt;code&gt;***&lt;/code&gt;), um die Struktur abzubilden. Eigenschaften (&lt;code&gt;:PROP: wert&lt;/code&gt;) oder Listen (&lt;code&gt;- ...&lt;/code&gt;) definieren Details.
&lt;/p&gt;

&lt;p&gt;
Eine weitere Besonderheit von Org-Mode Dateien kam hier für die Konfiguration des Deck-Service allerdings sehr entgegen. Org-Mode kann Tabellen.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 class="collapsible" id="orgdf9de25"&gt;Die Lösung&lt;/h2&gt;
&lt;div id="outline-container-orgdf9de25" class="outline-2 collapsme"&gt;
&lt;div class="outline-text-2" id="text-orgdf9de25"&gt;
&lt;p&gt;
Tabellen in Org-Mode werden mit &lt;code&gt;|&lt;/code&gt; (Pipe), &lt;code&gt;-&lt;/code&gt; (Bindestrich) und &lt;code&gt;+&lt;/code&gt; (Plus) aufgebaut:
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;| Spalte 1 | Spalte 2 | Spalte 3 |
|----------+----------+----------|
| Wert A   | Wert B   | Wert C   |
| Wert D   | Wert E   | Wert F   |
&lt;/pre&gt;&lt;/div&gt;

&lt;ul class="org-ul"&gt;
&lt;li&gt;&lt;b&gt;Zeilen&lt;/b&gt;: Jede Zeile beginnt und endet mit &lt;code&gt;|&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Trennlinie&lt;/b&gt;: Eine Zeile mit &lt;code&gt;-&lt;/code&gt; (mind. 2) und &lt;code&gt;+&lt;/code&gt; definiert Spalten.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Ausrichtung&lt;/b&gt;: Bei Eingabe richtet Org-Mode automatisch nach dem längsten Eintrag aus.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Bei Änderung (z.B. einem längeren Befehl) passt Org-Mode die Spaltenbreite an.
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;| Name     | Befehl          | Icon          |
|----------+-----------------+---------------|
| Start    | systemctl start | ~/icons/start |
| Stop     | systemctl stop  | ~/icons/stop  |
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;
Ich habe mir also ein Layout, so wie ich es gerne hätte, in Ork Mode einfach zusammengeschrieben. Dazu habe ich es unter zwei Überschriften verpackt. Auf der obersten Ebene einfach nur das Wort Layout, darunter eine Überschrift mit dem Namen dieses einen spezifischen Layouts.
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;* Layouts
** Haptmenü
|--------+------+----------+-------+--------+-------+--------+---|
| Home   | Mail | Internet | Emacs | Musik  | Video |        |   |
|--------+------+----------+-------+--------+-------+--------+---|
|        |      |          |       |        |       |        |   |
|--------+------+----------+-------+--------+-------+--------+---|
|        |      |          |       |        |       |        |   |
|--------+------+----------+-------+--------+-------+--------+---|
| Zurück | Stop | Pause    | Vor   | Leiser | Stumm | Lauter |   |
|--------+------+----------+-------+--------+-------+--------+---|
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;
In der dritten Ebene habe ich dann für jeden der oben beschrifteten Buttons dessen Eigenschaften unter einer jeweils eigenen Überschrift zusammengeschrieben. Das sah zum Beispiel so aus;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;*** Home
:PROPERTIES:
:Label: Home    
:Image: /home/andy/ablage/icons/WhiteOnBlack/128/Very-Basic-Home-Filled-icon.png
:Actions: Layout
:Parameters: Home
:Color: #000000
:END:

*** Emacs
:PROPERTIES:
:Label: Emacs    
:Image: emacs.png
:Actions: Layout, Execute
:Parameters: EmacsMain, emacs 
:Color: #000000
:END:
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;
Wie man sieht wird hier für jeden Button festgelegt, welche Beschriftung auf ihm zu sehen sein soll, welches Bild und was passieren soll, wenn man den Button drückt. Im Falle des Emacs-Buttons zum Beispiel wird das Layout zum Layout EmacsMain gewechselt und anschließend der Befehl &lt;code&gt;emacs&lt;/code&gt; auf der Kommando-Zeile ausgeführt. 
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 class="collapsible" id="orgeb1e1c8"&gt;Die Vorteile&lt;/h2&gt;
&lt;div id="outline-container-orgeb1e1c8" class="outline-2 collapsme"&gt;
&lt;div class="outline-text-2" id="text-orgeb1e1c8"&gt;
&lt;p&gt;
Die Vorteile liegen auf der Hand.
&lt;/p&gt;
&lt;ul class="org-ul"&gt;
&lt;li&gt;Wenn mir spontan weitere Konfigurations-Möglichkeiten einfallen, kann ich dir einfach zusätzlich in die Datei schreiben und den Parser im Server für diese Datei ein wenig anfassen.&lt;/li&gt;

&lt;li&gt;Wenn ich ein weiteres Layout erstellen möchte, kopiere ich einfach ein vorhandenes und andere die Beschriftungen in der Tabelle. Fertig.&lt;/li&gt;

&lt;li&gt;Buttons die ähnliche Dinge tun, kann ich einfach kopieren und die Unterschiede direkt ändern.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
All das in dem Editor, den ich sowieso den ganzen Tag geöffnet habe. Emacs
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;</description><category>config</category><category>org</category><category>plaintext</category><guid>https://plaindrops.de/de/blog/2026/DeckServerConfig/</guid><pubDate>Thu, 13 Aug 2026 10:00:00 GMT</pubDate></item><item><title>Ein Ausflug ins Vibe Coding: Das SpaceCadetDeck</title><link>https://plaindrops.de/de/blog/2026/vibecodedspacecadetdeck/</link><dc:creator>Andy Drop</dc:creator><description>&lt;p&gt;
Aktuell stehe ich vor der Situation mich mit einer Menge neuer Technologien befassen zu müssen. Ich kann weder für Android noch in Webtechnologien wirklich flüssig programmieren und eine moderne Sprache wie C# steht auch auf der Tagesordnung. Dazu kommt noch das im Moment allgegenwärtige Thema KI. Dazu habe ich zwar eine Meinung, aber noch nicht wirklich viel Erfahrung. Daher habe ich beschlossen, ein Projekt zu starten um das zu ändern.
&lt;/p&gt;
&lt;!-- TEASER_END --&gt;

&lt;p&gt;
Das Projekt bot sich quasi von alleine an. Wir sind gerade umgezogen und bei dem Einrichten der Arbeitsumgebung auf meinem Schreibtisch, fiel mir natürlich wieder mein Stream Deck in die Hände, das zwar immer irgendwie einigermaßen lief, aber doch ständig seine Macken hatte. Die alte Software um die Oberfläche einzurichten, ist mittlerweile nicht mehr mit meinem System kompatibel. Die neue Software, die ich mir darauf hin herausgesucht habe, läuft zwar sauber, aber sobald mein Rechner längere Zeit in den Tiefschlaf geht, ist mein Stream Deck tot. Alles in allem kein tragbarer Zustand.
&lt;/p&gt;

&lt;p&gt;
Also habe ich mich mal hingesetzt und mir überlegt, wie ich lernen, KI und mein Stream Deck Problem unter einen Hut bringe. Die Lösung war dann mein Projekt SpaceCadetDeck. Ich programmiere  mir das Ganze einfach selbst.
&lt;/p&gt;

&lt;p&gt;
mit dem Stream Deck wollte ich mich allerdings nicht weiter technisch beschäftigen. Denn ich habe ja bereits ein Deck, das ich quasi immer dabei habe. Mein Handy. Das ist ein ganz normales Fairphone 6 mit e/OS als Betriebssystem. Und ein Tastenfeld mit 4x8 Tasten sollte darauf sehr einfach darzustellen sein. Es hat Touch, ich kann die Tasten mit Bildern versehen, beschriften oder auch farbig gruppieren.
&lt;/p&gt;
&lt;h2 class="collapsible" id="orgae3e9dd"&gt;Das Handy als Stream Deck&lt;/h2&gt;
&lt;div id="outline-container-orgae3e9dd" class="outline-2 collapsme"&gt;
&lt;div class="outline-text-2" id="text-orgae3e9dd"&gt;
&lt;p&gt;
Nun wie bereits erwähnt, beherrsche ich die Programmierung für Android überhaupt nicht. Ich habe mir das Ganze bereits mal angesehen und festgestellt, dass man dafür quasi zwingend Java können muss. Eine Sprache, die ich zwar lernen könnte, aber vom Stil nicht wirklich mag. Irgendwann habe ich dann gelesen, dass es eine Sprache namens Kotlin gibt. Der man das Ganze ebenfalls programmieren kann. Die habe ich mir mal etwas genauer angesehen. Als Sprache liegt sie mir eher und daher habe ich beschlossen, Kotlin zu lernen.
&lt;/p&gt;

&lt;p&gt;
Aber bevor ich es lerne, lasse ich mich auf das größte der kleinen Einzel-Experimente ein. Ich möchte via KI ein Kotlin-Projekt erstellen, dass mir eine Art Stream Deck aufs Handy zaubert. Ohne dass ich auch nur eine einzige Zeile Kotlin selber schreiben könnte. Das heißt, ich kann die KI an dieser Stelle auch nicht kontrollieren und muss ihr einfach glauben, was sie tut. Ich gebe ihr dabei relativ freie Hand. Schau mir jeden Befehl, den sie ausführen möchte vorher an. Damit sie kein Mist auf meinem System baut. Aber inhaltlich weiß ich absolut nichts und kann nicht beurteilen, was sie da tut, außer indem ich mir das Ergebnis anschaue.
&lt;/p&gt;

&lt;p&gt;
Das Programm, das auf dem Handy läuft, soll dabei einigermaßen dumm sein. Es empfängt von einem Server auf dem Rechner ein Tastenlayout für die 32 Tasten, die es darstellen soll, und meldet dem Server dann lediglich zurück, welche dieser Tasten gedrückt wurden. Also nur zwei Aufgaben. Layout empfangen, Tasten senden. Alles andere passiert auf dem Rechner, der damit gesteuert wird.
&lt;/p&gt;

&lt;p&gt;
Die KI, meiner Wahl, war dabei Matrix-Vibe. Einfach weil sie im Gegensatz zu vielen anderen ein europäisches Produkt ist, und ich mir damit gleich einen Einblick in den Stand der Technik auf meinem Kontinent machen kann.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 class="collapsible" id="orgb56a300"&gt;Der Linux Rechner als Server&lt;/h2&gt;
&lt;div id="outline-container-orgb56a300" class="outline-2 collapsme"&gt;
&lt;div class="outline-text-2" id="text-orgb56a300"&gt;
&lt;p&gt;
Auf der Gegenseite wollte ich gerne ein Projekt erstellen in einer Sprache, in der ich mich auskenne, damit ich mir den erzeugten Code anschauen kann und beurteilen, wie er qualitativ zu dem steht, was ich per Hand schreiben würde. Daher habe ich mir für den Server Python ausgesucht und dieser Server namens DeckServer hat ein paar Aufgaben mehr.
&lt;/p&gt;

&lt;ul class="org-ul"&gt;
&lt;li&gt;Er stellt einen Websocket Server zur Verfügung, mit dem sich der Client auf dem Android System verbindet.&lt;/li&gt;
&lt;li&gt;Er nimmt die Tastendrücke vom Android-Client entgegen und führt entsprechend dem zuvor gesendeten Layout, die passenden Aufgaben durch wie Programme starten, Layouts wechseln, zu Fenstern wechseln, die Lautstärke verändern, etc.&lt;/li&gt;
&lt;li&gt;Und am wichtigsten natürlich, er muss die Layouts, die konfiguriert sind, zum Android Client schicken.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 class="collapsible" id="orgc37ed6e"&gt;Die erste Vibe Coding Session&lt;/h2&gt;
&lt;div id="outline-container-orgc37ed6e" class="outline-2 collapsme"&gt;
&lt;div class="outline-text-2" id="text-orgc37ed6e"&gt;
&lt;p&gt;
Ich habe beide Projekte parallel entwickelt, jeweils eines in einem getrennten Fenster.
&lt;/p&gt;

&lt;p&gt;
Der Android-Client ist von den Anforderungen sehr übersichtlich. Daher habe ich Ihnen kurz beschrieben: Ich hätte gerne 4x8 Tasten. Ich möchte das layout entgegennehmen und die Tastendrücke senden. das ganze per Websocket, den ich beim Start gerne einstellbar haben möchte, und diese Einstellungen möge er sich bitte zwischen den Programmstarts merken.  Nach einer Nettozeit von etwa 45 Minuten war das so weit entwickelt, dass ich es auf meinem Handy installieren konnte und es auf Anhieb lief.
&lt;/p&gt;

&lt;p&gt;
Die Anforderungen an dem Server sind natürlich etwas umfangreicher und ich habe mich auch deutlich mehr beraten lassen bei den einzelnen Punkten. Die Web Socket Verbindung wurde zu einer Secure Verbindung geändert. Zu die Debuggingzwecken habe ich dann noch eingebaut, dass ich das USR1-Signal an den Server senden kann, um ihn zu zwingen sein Layout noch einmal zu senden. Und ich habe mir überlegt, wie ich die Tasten-Layouts konfiguriere. Alles im allem hat das ganze etwa 4 Stunden benötigt.
&lt;/p&gt;

&lt;p&gt;
Dann habe ich eine Nacht darüber geschlafen, wie ich das Tastenlayout wohl konfigurieren kann, bis mir die Idee kam, überhaupt kein Programm dafür zu schreiben, sondern alle Layouts einer Konfigurationsdatei zu hinterlegen. Und wenn ich diese Konfigurationsdatei im Org-mode schreibe, wie er in Emacs eingebaut ist, das ich ja sowieso benutze, dann kann ich das Tastaturlayout einfach als Tabelle direkt in die Konfigurationsdatei schreiben.
&lt;/p&gt;

&lt;p&gt;
In der nächsten coding session habe ich also zusammen mit Matrix Weib das genauer Format dieser config.org Datei zusammengebaut. Zusätzlich habe ich mir den Code erzeugen lassen der benötigt wird um dieses Datei Format zu passen.
&lt;/p&gt;

&lt;p&gt;
Die Datei sah dann etwa so aus:
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;* Global
:PROPERTIES:
:Port:: 8766    
:Host:: 0.0.0.0
:UseSSL:: True
:CertFile::
:KeyFile::
:GenerateCert:: True
:PingInterval:: 20
:PingTimeout:: 60
:END:

** Buttons

*** Home
:PROPERTIES:
:Label: Home    
:Image:    
:Actions: Layout, Dance,Execute  
:Parameters: Home,, Programname
:Color: #FF0000
:END:


*** Bäh
:PROPERTIES:
:Label:    
:Image:    
:Actions: Activate  
:Parameters: Terminal
:Color:
:END:


* Layouts
** Home                                         :default:

|------+------+---+------+-----+---+---+------|
| Home | Link |   | Helm |     |   |   |      |
|------+------+---+------+-----+---+---+------|
|      |      |   | Bumm |     |   |   |      |
|------+------+---+------+-----+---+---+------|
|      |      |   |      | Bäh |   |   |      |
|------+------+---+------+-----+---+---+------|
|      |      |   |      |     |   |   | Test |
|------+------+---+------+-----+---+---+------|

*** Link
:PROPERTIES:
:Label:    
:Image:    
:Actions:   
:Parameters:
:Color:
:END:

*** Helm
:PROPERTIES:
:Label:    
:Image:    
:Actions: Layout  
:Parameters: Emacs
:Color:
:END:
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;
Man erkennt bereits, wie einfach hier ein Layout erstellt werden kann. Emacs unterstützt einen dabei die Tabelle immer in einem hübschen rechteckigen Format zu halten.
&lt;/p&gt;

&lt;p&gt;
Nach zwei Coding sessions mit in summe circa 8 bis 10 Stunden waren sowohl Server als auch Client einsatzbereit.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 class="collapsible" id="orgb8855f2"&gt;Was kommt jetzt&lt;/h2&gt;
&lt;div id="outline-container-orgb8855f2" class="outline-2 collapsme"&gt;
&lt;div class="outline-text-2" id="text-orgb8855f2"&gt;
&lt;p&gt;
Mal abgesehen davon, dass in den Server noch einige Funktionen eingebaut werden sollen, wie zum Beispiel die D-BUS Fähigkeit, damit ich Kontextwechsel im System erkennen und entsprechend andere Layouts anzeigen lassen kann, ist die Software weitgehend fertig.
&lt;/p&gt;

&lt;p&gt;
Jetzt werde ich mich also hinsetzen und mir sowohl den erzeugten Python-Code als auch den erzeugten Kotlin-Code mal genauer anschauen. Den Python-Code im Wesentlichen auf Qualität, Stil und ähnliche Dinge, den Kotlin-Code um selbst zu lernen, wie solche Programme aufgebaut sind, wie sie funktionieren. Welche Dateien ich benötige und wie die alle zusammen spielen.
&lt;/p&gt;

&lt;p&gt;
Ein unglaublicher Hilfe war der Agent auf jeden Fall bei der Dokumentation der ganzen Projekte. Für mein Git-Repository wurde mir automatisch die README erzeugt. Ich konnte die Commit-Messages erzeugen lassen und hatte alle Änderungen darin stehen ohne eine einzige zu vergessen.
&lt;/p&gt;

&lt;p&gt;
Ich kann nur auf jeden Fall besser verstehen, was am Vibe-coding so verlockend ist. Schnelle Ergebnisse, wenn man in der Lage ist, sein Projekt exakt zu beschreiben. Aus Erfahrung, die ich bisher mit Projektleitern gemacht habe, muss ich allerdings sagen, genau das ist der Grund, warum man dafür ein Programmierer braucht.
&lt;/p&gt;

&lt;p&gt;
Die technischen und sozialen Implikationen der KI sind mir natürlich bewusst und jede Einzelne davon ist geeignet, mich vom professionellen Einsatz abzuhalten. Langfristig glaube ich, wird sich das Problem allerdings wirtschaftlich erledigen. Und ob dann mein Talent als normaler Programmierer wieder gefragt ist, wird sich zeigen.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;</description><category>agent</category><category>KI</category><category>vibecoding</category><guid>https://plaindrops.de/de/blog/2026/vibecodedspacecadetdeck/</guid><pubDate>Wed, 29 Jul 2026 09:00:00 GMT</pubDate></item><item><title>Wenn Johnny.Decimal und mein Hirn sich ganz doll lieb haben</title><link>https://plaindrops.de/de/blog/2026/andyalpha/</link><dc:creator>Andy Drop</dc:creator><description>&lt;p&gt;
Ich habe lange nach einem System gesucht, das mir hilft, meine digitalen Sammlungen nicht nur zu verwalten, sondern auch sinnvoll zu nutzen. Irgendwann bin ich auf das &lt;a href="https://johnnydecimal.com/"&gt;Johnny Decimal&lt;/a&gt; System gestoßen - ein Ansatz, der mir auf den ersten Blick logisch und durchdacht erschien. Klare Nummern, klare Kategorien, alles an seinem Platz. Klingt perfekt, oder?
&lt;/p&gt;
&lt;!-- TEASER_END --&gt;

&lt;p&gt;
Meine Probephase bin ich angegangen, indem ich einen Teil meiner Dokumentensammlung nach Johnny Decimal umgestellt habe.
&lt;/p&gt;
&lt;h2 class="collapsible" id="org37578a9"&gt;Warum Johnny Decimal ein guter Anfang war&lt;/h2&gt;
&lt;div id="outline-container-org37578a9" class="outline-2 collapsme"&gt;
&lt;div class="outline-text-2" id="text-org37578a9"&gt;
&lt;p&gt;
Das Johnny Decimal System hat mir gezeigt, wie wichtig klare Strukturen sind. Jede Kategorie hat eine Nummer, jeder Bereich hat seinen Platz. Das hat mir geholfen, meine Gedanken zu sortieren und meine Dateien nicht einfach nur abzulegen, sondern gezielt zu verwalten. Die Einfachheit des Systems war dabei ein großer Vorteil: Kein überflüssiger Ballast, keine unnötigen Unterkategorien, alles hat seinen Platz .
&lt;/p&gt;

&lt;p&gt;
Und ja, es war ein guter Start. Dass Johnny Decimal mit Nummern arbeitet, dachte ich, kommt mir entgegen, da ich eigentlich ein ganz gutes Zahlengedächtnis habe. Außerdem hat das System klare Hierarchien, die meinem in Bäumen funktionierenden Gehirn auch gut funktionieren sollten.
&lt;/p&gt;

&lt;p&gt;
Aber hier kommt der Haken: Ich bin kein Fan von zu starren Systemen. Ich mag Flexibilität. Ich mag es, wenn sich Dinge anpassen lassen, ohne dass ich das Gefühl habe, gegen Regeln zu verstoßen.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 class="collapsible" id="org73dc64c"&gt;Wo es für mich nicht mehr gepasst hat&lt;/h2&gt;
&lt;div id="outline-container-org73dc64c" class="outline-2 collapsme"&gt;
&lt;div class="outline-text-2" id="text-org73dc64c"&gt;
&lt;p&gt;
Aber wie so oft im Leben reicht "gut" irgendwann nicht mehr aus. Ich habe gemerkt, dass ich mich in den starren Strukturen nicht ganz wiederfinde. Nicht, weil das System schlecht ist - im Gegenteil, es ist durchdacht und funktional. Aber ich bin nun mal ich. Und ich arbeite am besten, wenn Dinge nicht nur funktional, sondern auch für mich gemacht sind.
&lt;/p&gt;

&lt;p&gt;
Mein Problem mit Johnny Decimal führte allerdings dazu, dass ich mich mal intensiv damit beschäftigt habe, was ich eigentlich von einem Ablagesystem erwarte. Ich erwarte im Wesentlichen schnelles Ablegen und Wiederfinden von Dokumenten. Das heißt, der Dokumentenbaum muss schnell navigierbar sein.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 class="collapsible" id="orgaea661c"&gt;Mein eigenes System: Eine logische Weiterentwicklung&lt;/h2&gt;
&lt;div id="outline-container-orgaea661c" class="outline-2 collapsme"&gt;
&lt;div class="outline-text-2" id="text-orgaea661c"&gt;
&lt;p&gt;
Was macht also einen Johnny Decimal-Baum so leicht navigierbar? Mit ein wenig Nachdenken war die Antwort: dass sich der Pfad durch verschiedene Zeichen bereits am Anfang schnell automatisch erzeugen lässt. Ich muss nur eine minimale Anzahl von Zeichen tippen und kann dann auf die Tab-Taste drücken, um den Rest automatisch schreiben zu lassen.
&lt;/p&gt;

&lt;p&gt;
Als ich das durchschaut hatte, habe ich mir eine eigene Variante gebaut, die zwar ein wenig Disziplin und Kreativität bei der Erstellung der Ordnerstruktur erfordert, aber ebenso schnell navigierbar ist. Ich achte lediglich darauf, dass jede Ebene meines Verzeichnisbaums derart gestaltet ist, dass alle Verzeichnisse mit einem anderen Buchstaben beginnen. Ich lege also, wenn es bereits einen Ordner "Finanzen" gibt und ich einen Ordner zu meiner Firma erstellen möchte, keinen Ordner "Firma" an, weil dann das "F" doppelt vergeben wäre. Alternativ nehme ich z. B. "Beruf".
&lt;/p&gt;

&lt;p&gt;
Dazu kommt noch, dass ich möglichst die Begriffe nehme, die mir als Erstes in den Kopf kommen, und die idealerweise möglichst wenig Buchstaben haben - falls ich sie mal irgendwo eintragen muss, wo es keine automatische Ergänzung gibt.
&lt;/p&gt;

&lt;p&gt;
Mein Home-Verzeichnis sieht z. B. so aus:
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;+├── 3d
+├── aud
+├── Bildschirmfotos -&amp;gt; /home/andy/img/Screenshots
+├── blog
+├── cloud
+├── doc
+├── ebooks
+├── fin
+├── fotos
+├── geo
+├── img
+├── INBOX
+├── music
+├── org
+├── prj
+├── rezepte
+├── Schreibtisch
+├── slides
+├── snap
+├── Sync
+├── todo
+├── vid
+├── Vorlagen
+└── wiki
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;
Wie man sieht, gibt es hin und wieder doch Überschneidungen beim ersten Buchstaben. Dem gehe ich meistens dadurch aus dem Weg, dass einer der Begriffe dann großgeschrieben wird.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 class="collapsible" id="orgbd0322b"&gt;Warum das für mich funktioniert&lt;/h2&gt;
&lt;div id="outline-container-orgbd0322b" class="outline-2 collapsme"&gt;
&lt;div class="outline-text-2" id="text-orgbd0322b"&gt;
&lt;p&gt;
Am Ende geht es nicht darum, das "perfekte" System zu finden. Sondern eines, das für mich funktioniert. Mein System ist vielleicht keine Revolution, aber es ist meins. Und das ist der entscheidende Unterschied.
&lt;/p&gt;

&lt;p&gt;
Es fühlt sich richtig an, weil ich nicht das Gefühl habe, gegen Regeln zu verstoßen, wenn ich etwas anpasse. Es wächst mit mir, weil sich meine Bedürfnisse ändern und das System mit ihnen. Und es ist mein System, weil ich es nicht nur übernommen, sondern es selbst gemacht habe. Und das gibt mir ein Gefühl von Kontrolle und Verantwortung.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 class="collapsible" id="orgbfaf66b"&gt;Fazit: Der beste Ansatz ist der, der zu dir passt&lt;/h2&gt;
&lt;div id="outline-container-orgbfaf66b" class="outline-2 collapsme"&gt;
&lt;div class="outline-text-2" id="text-orgbfaf66b"&gt;
&lt;p&gt;
Johnny Decimal war ein großartiger Start. Aber wie bei so vielen Dingen im Leben geht es nicht darum, etwas blind zu übernehmen, sondern es sich zu eigen zu machen. Mein System ist eine Hommage an die Stärken von Johnny Decimal - aber auch ein Beweis dafür, dass man manchmal die Regeln brechen muss, um das zu bekommen, was man wirklich braucht.
&lt;/p&gt;

&lt;p&gt;
Und wer weiß? Vielleicht ist das hier nur ein Zwischenstopp. Vielleicht ändere ich in einem Jahr wieder alles. Aber das ist ja das Schöne daran: Es ist mein System. Und ich darf es so oft ändern, wie ich will.
&lt;/p&gt;

&lt;p&gt;
Nomen est omen - und da das Kind ja üblicherweise einen Namen braucht, ist das uneheliche Kind von Johnny Decimal halt Andy Alpha.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;</description><category>hierarchien</category><category>plaintext</category><guid>https://plaindrops.de/de/blog/2026/andyalpha/</guid><pubDate>Mon, 20 Jul 2026 12:00:00 GMT</pubDate></item><item><title>Horten und hüten</title><link>https://plaindrops.de/de/blog/2026/hordingandherding/</link><dc:creator>Andy Drop</dc:creator><description>&lt;p&gt;
Ich erinnere mich noch gut daran, wie ich früher alles gespeichert habe: Musik, Fotos, eBooks, Dokumente – einfach alles. Die Angst, etwas zu verpassen oder zu verlieren, war einfach zu groß. Doch irgendwann ist mir aufgefallen: Ich hatte zwar alles, aber ich habe nichts davon wirklich genutzt. Der Wechsel vom Horten zum Hüten war für mich eine echte Befreiung.
&lt;/p&gt;
&lt;!-- TEASER_END --&gt;
&lt;h2 class="collapsible" id="org8f4756e"&gt;Horten vs. Hüten&lt;/h2&gt;
&lt;div id="outline-container-org8f4756e" class="outline-2 collapsme"&gt;
&lt;div class="outline-text-2" id="text-org8f4756e"&gt;
&lt;p&gt;
Früher war das bei mir so: Ich habe einfach alles gesammelt, ohne nachzudenken. Das Ergebnis? Ein riesiges Chaos. Ich wusste nicht mehr, was ich eigentlich hatte, und wenn ich etwas gesucht habe, war es oft hoffnungslos. Am Ende hatte ich einen Datenfriedhof statt eines nutzbaren Archivs.
&lt;/p&gt;

&lt;p&gt;
Heute geht es mir darum, meine Sammlungen aktiv zu pflegen und zu nutzen. Jede Datei hat ihren Platz und ihren Zweck. Durch klare Strukturen und ein bisschen Wertschätzung für das, was ich wirklich brauche, bleibt alles übersichtlich und nützlich.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 class="collapsible" id="orga47a0c3"&gt;Wie ich meine Sammlungen hüte&lt;/h2&gt;
&lt;div id="outline-container-orga47a0c3" class="outline-2 collapsme"&gt;
&lt;div class="outline-text-2" id="text-orga47a0c3"&gt;
&lt;/div&gt;
&lt;h3 class="collapsible" id="org7a24631"&gt;Prinzipien&lt;/h3&gt;
&lt;div id="outline-container-org7a24631" class="outline-3 collapsme"&gt;
&lt;div class="outline-text-3" id="text-org7a24631"&gt;
&lt;p&gt;
Für mich bedeutet Hüten, dass jede Datei ihren festen Platz hat und ich weiß, warum ich sie behalte. Ich verbringe regelmäßig Zeit damit, aufzuräumen: Löschen, was ich nicht mehr brauche, Archivieren, was wichtig ist, und Aktualisieren, was veraltet ist. Besonders wichtig ist mir die Pflege der Metadaten in den Dateien. So habe ich alle Infos immer direkt zur Hand, egal wo ich die Dateien nutze. Dafür schreibe ich mir oft kleine Programme, die mir die Arbeit abnehmen. Tools wie &lt;a href="https://orgmode.org"&gt;Org-Mode&lt;/a&gt;, oder meine eigenen Lösungen wie das &lt;i&gt;Book Sorter&lt;/i&gt;-Projekt helfen mir dabei.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3 class="collapsible" id="org729dbcc"&gt;Praktische Schritte&lt;/h3&gt;
&lt;div id="outline-container-org729dbcc" class="outline-3 collapsme"&gt;
&lt;div class="outline-text-3" id="text-org729dbcc"&gt;
&lt;p&gt;
Ich arbeite am liebsten mit Baumstrukturen - mein Gehirn mag das einfach. Jede Datei hat ihren Platz in einer logischen Hierarchie. Damit ich alles schnell finde, nutze ich Tags. Und damit ich nicht ständig manuell sortieren muss, automatisiere ich so viel wie möglich. Zum Beispiel mit Skripten, die neue Downloads direkt an den richtigen Ort legen.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 class="collapsible" id="orgff4dcea"&gt;Meine Sammlungen im Detail&lt;/h2&gt;
&lt;div id="outline-container-orgff4dcea" class="outline-2 collapsme"&gt;
&lt;div class="outline-text-2" id="text-orgff4dcea"&gt;
&lt;/div&gt;
&lt;h3 class="collapsible" id="orgc8634a7"&gt;Musik&lt;/h3&gt;
&lt;div id="outline-container-orgc8634a7" class="outline-3 collapsme"&gt;
&lt;div class="outline-text-3" id="text-orgc8634a7"&gt;
&lt;p&gt;
Meine Musik-Sammlung ist aktuell etwa 68 GB groß. Ich habe mich für MP3 entschieden, weil das Format fast überall abspielbar ist. Die Dateien liegen in einer Baumstruktur: &lt;code&gt;~/music/Genre/Interpret/Album/XX Songtitel.mp3&lt;/code&gt;. Die XX steht dabei für die Titelnummer auf dem Album - falls vorhanden. Als Baum sieht das dann so aus:
&lt;/p&gt;

&lt;pre class="example" id="orgaccdc4c"&gt;
Pop/
├── Adele
│   ├── 21
│   │   ├── 01 Rolling in the Deep.mp3
│   │   └── cover.jpg
│   └── Skyfall
│       └── 02 Skyfall (instrumental).mp3
├── Alanis Morissette
│   └── Jagged Little Pill
│       ├── 01 All I Really Want.mp3
│       ├── 02 You Oughta Know.mp3
│       ├── 03 Perfect.mp3
│       ├── 04 Hand in My Pocket.mp3
│       ├── 05 Right Through You.mp3
│       ├── 06 Forgiven.mp3
│       ├── 07 You Learn.mp3
│       ├── 08 Head Over Feet.mp3
│       ├── 09 Mary Jane.mp3
│       ├── 10 Ironic.mp3
│       ├── 11 Not the Doctor.mp3
│       ├── 12 Wake Up.mp3
│       ├── 13 You Oughta Know (Jimmy the Saint Blend) _ Your House.mp3
│       └── cover.jpg
&lt;/pre&gt;


&lt;p&gt;
Ich habe mir ein Python-Programm geschrieben, das über meinen kompletten Verzeichnisbaum läuft und aus den Pfadnamen dort Tags generiert, wo noch keine Tags existieren. Das heißt, ich kann Lieder, die neu dazugekommen sind, einfach in die Verzeichnisstruktur einkopieren, lasse einmal das Programm laufen, und die neuen Lieder sind bereits mit sinnvollen Einträgen getaggt.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3 class="collapsible" id="org8580eb1"&gt;Fotos&lt;/h3&gt;
&lt;div id="outline-container-org8580eb1" class="outline-3 collapsme"&gt;
&lt;div class="outline-text-3" id="text-org8580eb1"&gt;
&lt;p&gt;
Meine Fotos nehmen etwa 67 GB Platz ein. Auch hier setze ich auf JPEG, weil es das universellste Format ist. Die Struktur ist ähnlich
&lt;code&gt;~/img/fotos/Jahr/Jahr-Monat-Tag/ISO-Timestamp.jpg&lt;/code&gt;. So finde ich jedes Foto schnell über das Datum. Als Baum sieht das dann so aus:
&lt;/p&gt;

&lt;pre class="example" id="orgf7ed276"&gt;
2025
├── 2025-04-10
│   ├── 2025-04-10T16:53:35.jpg
│   ├── 2025-04-10T16:53:43.jpg
│   ├── 2025-04-10T16:53:54.jpg
│   └── 2025-04-10T16:54:07.jpg
├── 2025-04-14
│   └── 2025-04-14T12:48:22.jpg
├── 2025-04-17
│   └── 2025-04-17T20:40:33.jpg
├── 2025-04-25
│   └── 2025-04-25T09:30:41.jpg
├── 2025-04-26
│   ├── 2025-04-26T14:29:16.jpg
│   ├── 2025-04-26T18:16:10.jpg
│   ├── 2025-04-26T18:16:30.jpg
│   ├── 2025-04-26T18:16:34.jpg
│   ├── 2025-04-26T18:20:30.jpg
│   ├── 2025-04-26T18:20:36.jpg
│   ├── 2025-04-26T18:22:01.jpg
│   ├── 2025-04-26T18:22:37.jpg
│   └── 2025-04-26T20:14:18.jpg
│   ├── 2025-05-14T19:55:05.jpg
&lt;/pre&gt;

&lt;p&gt;
Als Tool für die Fotobearbeitung nehme ich im Wesentlichen ein kleines Shell-Skript, das mir die frisch von der Kamera heruntergeladenen Bilder in eine Ordnerstruktur einsortiert, anhand der Metadaten im Bild. In jedem Bild speichere ich beim Aufnehmen Uhrzeit und bei den Bildern vom Handy auch die Position, wenn ich das nicht explizit abschalte. Für die manuelle Bearbeitung und Verwaltung der Bilder benutze ich das Programm DigiKam,da es seine Metadaten wieder in den Fotos ablegen kann und auch Gesichter erkennen kann.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3 class="collapsible" id="org4f4ca05"&gt;eBooks&lt;/h3&gt;
&lt;div id="outline-container-org4f4ca05" class="outline-3 collapsme"&gt;
&lt;div class="outline-text-3" id="text-org4f4ca05"&gt;
&lt;p&gt;
Meine eBooks sind etwa 60 GB groß. Ich nutze vor allem EPUB und PDF, weil diese Formate auf den meisten Geräten funktionieren. Die Struktur ist etwas komplexer: &lt;code&gt;~/ebooks/Genre/SubGenre/SubSubGenre.../Serie/Titel -- Autor.epub&lt;/code&gt;. So behalte ich den Überblick über meine vielen Bücher. Als Baum sieht das dann so aus:
&lt;/p&gt;

&lt;pre class="example" id="org847960a"&gt;
science fiction/
├── fermi's progress
│   ├── dyson's fear -- chris farnell.epub
│   ├── descartesmageddon -- chris farnell.epub
│   ├── planet of the apiaries -- chris farnell.epub
│   ├── the phone job -- chris farnell.epub
│   ├── fermi's progress -- chris farnell.epub
│   └── fermi user manual annotated -- chris farnell.pdf
├── mind control -- finn, thomas.epub
├── monk and robot
│   ├── psalm für die wild schweifenden, ein -- becky chambers.epub
├── the expanse
│   ├── abaddons tor -- james corey.epub
│   ├── calibans krieg -- james corey.epub
│   ├── leviathan erwacht -- james corey.epub
├── the further adventures of sampson 39 -- chris farnell.epub
├── the murderbot diaries
│   ├── home_ habitat, range, niche, territory -- martha wells.epub
│   ├── rapport_ friendship, solidarity, communion, empathy -- martha wells.epub
│   ├── all systems red -- martha wells.epub
│   ├── artificial condition -- martha wells.epub
│   ├── exit strategy -- martha wells.epub
│   ├── fugitive telemetry -- martha wells.epub
│   ├── network effect -- martha wells.epub
│   ├── rogue protocol -- martha wells.epub
│   ├── system collapse -- martha wells.epub
├── wayfarers
│   ├── a closed and common orbit -- becky chambers.epub
│   ├── galaxie und das licht darin_ ausgezeichnet mit dem kurd laßwitz preis 2023, die -- becky chambers.epub
│   ├── record of a spaceborn few_ wayfarers 3 -- becky chambers.epub
│   ├── the long way to a small, angry planet_ the most hopeful, charming and cosy novel to curl up with -- becky chambers.epub
├── zero gravity -- schuhmacher, nicole.epub
&lt;/pre&gt;

&lt;p&gt;
Zum Verwalten meiner E-Books benutze ich natürlich Calibre. Dieses Programm legt zwar alle seine Bücher in einer internen Ordnerstruktur ab, die man nicht verändern kann, aber netterweise verfügt es über eine Exportfunktion, bei der man den Aufbau der Exportpfade bestimmen kann, also wo Autor und Buchtitel im Pfad erscheinen sollen. Dort kann man dann auch ein Genre oder die Buchreihe angeben. Und als Genre benutze ich die typischen Genres, wie sie aus dem Buchhandel bekannt sind.
&lt;/p&gt;

&lt;p&gt;
Die Kategorien des Buchhandels sind allerdings in mehreren Ebenen gegliedert, also zum Beispiel Fachbuch, Chemie, organische Chemie. Im Genre kann ich leider keine kompletten Pfade eintragen. Also habe ich mir ein Tool geschrieben, das die jeweils tiefste Kategorie, also in diesem Fall zum Beispiel organische Chemie, nimmt und nach dem Export den kompletten Pfad, also Sachbuch und Chemie darüber, wieder anlegt. Es liest dazu eine Org-Datei, in der die Buchhandelstruktur, wie ich sie mir angepasst habe, hinterlegt ist und passt anhand dessen die Pfade an.
&lt;/p&gt;

&lt;p&gt;
Diese Ordnerstruktur kopiere ich dann auf meinen E-Book-Reader. Ziel des Ganzen ist es, dass auch E-Book-Reader, die nicht von sich aus stabil Ordner anlegen können, in der Lage sind, mit einer hierarchischen Struktur klarzukommen. Außerdem kann ich mein Programm zum Visualisieren der E-Books dann so verwenden, dass für jede Hauptkategorie ein neues Regal angefangen wird.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3 class="collapsible" id="org1ad8b68"&gt;Dokumente&lt;/h3&gt;
&lt;div id="outline-container-org1ad8b68" class="outline-3 collapsme"&gt;
&lt;div class="outline-text-3" id="text-org1ad8b68"&gt;
&lt;p&gt;
Meine Dokumente umfassen etwa 1,5 GB. Hier setze ich auf PDF, weil es einfach überall geöffnet werden kann. Die Struktur ist &lt;code&gt;~/myfolderstructure/ISODATE_Typ_Absender_Inhalt.pdf&lt;/code&gt;. Das ISO-Datum am Anfang hilft mir, alles chronologisch zu sortieren.
&lt;/p&gt;

&lt;p&gt;
Der Dokumentenordner hat die wildeste Struktur. Im Wesentlichen lagere ich dort die eingescannten Eingangspost. Das sind dann die PDF-Dokumente, die dort liegen. Aber auch die Ausgangspost lagere ich dort. Deswegen findet man dort auch Text- oder Open Document Formate.
&lt;/p&gt;

&lt;p&gt;
Die Struktur dieses Baums ist über die letzten zehn Jahre organisch gewachsen. Ich benutze sie allerdings an mehreren Stellen, sowohl für die Verzeichnisse als auch für Verzeichnisse in meinem Mailpostfach. Und sie hat sich weitgehend bewährt. Wenn man genau reinguckt, sieht man noch verbliebene Versuche, das Ganze besser zu strukturieren. Aber überall da, wo ich an den Dateien arbeite, mache ich das Ganze mittlerweile rückgängig.
&lt;/p&gt;

&lt;p&gt;
Als Baum sieht das dann so aus:
&lt;/p&gt;

&lt;pre class="example" id="org750d099"&gt;
.
├── Beruf
│   ├── Bewerbung 
│   │   └── lebenslauf.odt
│   ├── 2017-10-17_Abfindung.pdf
│   ├── 2017-10-18_Arbeitsbescheinigung.pdf
│   ├── 2025-08-17_Arbeitsvertrag.pdf
│   ├── 2025-12-31_Zwischenzeugnis.pdf
│   ├── 2026-04-23_Laufzettel.pdf
├── Familie
│   ├── Familienstand
│   │   ├── Hochzeit
│   │   │   ├── 2003-11-15_Heiratsurkunde.pdf
│   │   │   ├── 2025-09-12_Aufgebot.pdf
│   │   │   └── 2026-05-29_Heiratsurkunde.pdf
│   │   ├── Todesfall
│   │   │   ├── Beerdigung
│   │   │   ├── 2016-08-11_Sterbeurkunde.pdf
│   │   │   ├── 2016-08-12_Angebot_Bestatter.pdf
│   │   │   ├── 2016-08-18_Einäscherungsurkunde.pdf
│   │   │   ├── 2016-08-25_Baumvertrag_a.pdf
│   │   │   ├── 2016-08-25_Baumvertrag.pdf
│   │   │   ├── 2016-08-25_RE_Hankemeier_Bestattung.pdf
│   │   │   ├── 2016-08-26_Beisetzungsurkunde.pdf
│   │   │   ├── 2016-09-30_ErbscheinMitVorblatt.pdf
│   │   │   └── 2016-09-30_Erbschein.pdf
&lt;/pre&gt;

&lt;p&gt;
Speziell zu dieser Struktur werde ich auf jeden Fall nochmal einen getrennten Artikel schreiben. Der genau erklärt, warum und wieso ich die einzelnen Ordner so gewählt habe, wie sie heute sind. Damit liege ich dann auch wieder näher am Thema Plaintext, als es in diesem Artikel der Fall war.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 class="collapsible" id="org905829f"&gt;Fazit&lt;/h2&gt;
&lt;div id="outline-container-org905829f" class="outline-2 collapsme"&gt;
&lt;div class="outline-text-2" id="text-org905829f"&gt;
&lt;p&gt;
Für mich bedeutet Hüten, Verantwortung für meine digitalen Sammlungen zu übernehmen. Es geht nicht darum, einfach nur Speicherplatz zu füllen, sondern darum, bewusst mit dem umzugehen, was ich bewahre. Das gibt mir ein gutes Gefühl und spart mir am Ende sogar Zeit.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;</description><category>horten</category><category>hüten</category><category>plaintext</category><guid>https://plaindrops.de/de/blog/2026/hordingandherding/</guid><pubDate>Mon, 13 Jul 2026 12:00:00 GMT</pubDate></item><item><title> Was ich von einem Editor als Programmierer erwarte</title><link>https://plaindrops.de/de/blog/2026/programming/</link><dc:creator>Andy Drop</dc:creator><description>&lt;p&gt;
Ich habe in den letzten Jahren beruflich eigentlich nur mit einem Programm-Editor gearbeitet, nämlich dem VB6-Editor, aber meine Reise begann schon viel früher - in den frühen 90ern. Damals war alles noch ein bisschen einfacher - oder zumindest übersichtlicher.
&lt;/p&gt;
&lt;!-- TEASER_END --&gt;

&lt;p&gt;
Anfangs war es nämlich einfach ein normaler Text-Editor. Die erste Umgebung, die man so bezeichnen konnte, war das PDS 7.1, Microsofts Professional Development System, das - obwohl unter DOS lauffähig - bereits mit der Fensteraufteilung daherkam, die man bis heute aus den Microsoft-Umgebungen von VB bis Visual Studio kennt und die weithin übernommen wurden. In dieser Umgebung habe ich mich pudelwohl gefühlt.
&lt;/p&gt;

&lt;p&gt;
Und genau das versuche ich in diesem Artikel zu analysieren: Was war es eigentlich, das dazu geführt hat? Was erwarte ich von meinem Programmiereditor? Und wie richte ich mir Emacs so ein, dass es all diese Aufgaben nahtlos übernehmen kann?
&lt;/p&gt;
&lt;h2 class="collapsible" id="org0459df3"&gt;Fenster Handling&lt;/h2&gt;
&lt;div id="outline-container-org0459df3" class="outline-2 collapsme"&gt;
&lt;div class="outline-text-2" id="text-org0459df3"&gt;
&lt;p&gt;
In der Regel arbeite ich mit nur einem oder maximal zwei Fenstern für den Code - und das auch nur, wenn ich mehrere Code-Stellen parallel sehen muss. Dazu brauche ich ein Fenster, in dem ich den Projektbaum sehe und auf- und zuklappen kann. Ideal wäre noch ein Fenster, das mir einen Überblick über die einzelnen Funktionen und Klassen in der aktuell angezeigten Datei gibt, um schnell innerhalb der Datei navigieren zu können. Eine flexible Fensterverwaltung ist für mich essenziell, ohne dass ich mich in zu vielen Fenstern verliere. 
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 class="collapsible" id="org9ab81d6"&gt;Navigation&lt;/h2&gt;
&lt;div id="outline-container-org9ab81d6" class="outline-2 collapsme"&gt;
&lt;div class="outline-text-2" id="text-org9ab81d6"&gt;
&lt;p&gt;
Unter Navigation verstehe ich alles, was dafür sorgt, dass ich schnell an den Punkt im Code komme, an den ich gerade möchte, und dass ich keinen Code sehe, der mich gerade nicht interessiert. Daher betrachte ich auch Code-Folding für mich als Teil der Navigation.
&lt;/p&gt;

&lt;p&gt;
Ich möchte im Codebaum auf und ab springen können, sowie ebenenweise navigieren. Wenn ich in einer Funktion bin, möchte ich mit einem Tastendruck am Klassenkopf sein und diese Klasse einklappen können, wenn ich mich um eine andere Klasse kümmern möchte. Sprünge an Dateianfang und Dateiende sollten selbstverständlich sein. Schön wären Sprünge an die Stelle, an der eine Variable deklariert wird. Oder im Falle von Programmiersprachen mit Header-Dateien ein Hin- und Herspringen zwischen der Datei und ihrer Header-Datei oder auch zwischen der Datei und der dazugehörigen Testdatei - weil man ja doch ab und zu an Code arbeitet und parallel an den dazugehörigen Tests.
&lt;/p&gt;

&lt;p&gt;
Zusätzlich möchte ich im Dateibaum navigieren können, entweder indem ich mir die Datei direkt aufrufe oder durch sinnvolle Abkürzungen in passende Ordner springe.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 class="collapsible" id="org668fae1"&gt;Editieren&lt;/h2&gt;
&lt;div id="outline-container-org668fae1" class="outline-2 collapsme"&gt;
&lt;div class="outline-text-2" id="text-org668fae1"&gt;
&lt;p&gt;
Beim Editieren geht es mir um Kleinigkeiten, die den Arbeitsfluss erleichtern: Beim Schreiben einer öffnenden Klammer soll automatisch eine schließende gesetzt werden. Verschiedene Klammer-Ebenen sollten farblich unterschiedlich angezeigt werden, damit ich sie sofort optisch unterscheiden kann. Ich bin der Typ, der Tabs beim Editieren nutzt - aber Tabs im Code sind für andere einfach hässlich. Daher ist es wichtig, dass ich Tabs beim Editieren verwenden kann, diese aber beim Speichern automatisch in Leerzeichen umgewandelt werden. Besonders in Sprachen wie Python, wo die Einrückung eine semantische Bedeutung hat, muss das sauber funktionieren.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 class="collapsible" id="org1199db7"&gt;Autocompletion / Intelligente Unterstützung&lt;/h2&gt;
&lt;div id="outline-container-org1199db7" class="outline-2 collapsme"&gt;
&lt;div class="outline-text-2" id="text-org1199db7"&gt;
&lt;p&gt;
Autocompletion ist ein weiteres spannendes Thema. Was ich bisher immer benutzt habe, ist so etwas wie IntelliSense: Sobald ich den Beginn einer bereits benutzten Variable oder Funktion tippe, wird mir die vollständige Bezeichnung vorgeschlagen. Wichtig ist dabei, weder zu viele Möglichkeiten zur Auswahl zu haben, noch wichtige Dinge nicht auswählen zu können. Eine präzise und kontextbezogene Autocompletion unterstützt mich, ohne mich zu überfordern.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 class="collapsible" id="orgf5c9025"&gt;Snippets&lt;/h2&gt;
&lt;div id="outline-container-orgf5c9025" class="outline-2 collapsme"&gt;
&lt;div class="outline-text-2" id="text-orgf5c9025"&gt;
&lt;p&gt;
Hier lebe ich immer noch den Traum von einer universellen Snippet-Sprache. Ich möchte Textblöcke einfügen können, in denen ich Variablen einsetze, ähnlich wie es Cookie Cutter erlaubt. Außerdem möchte ich beim Schreiben durch eine zwei- oder dreibuchstabenkombination kurze Textschnipsel wie einen If-Block oder einen Select-Case-Block in Visual Basic oder vergleichbare Strukturen in anderen Sprachen erstellen können. Am liebsten hätten all diese Blöcke, die das Gleiche in verschiedenen Sprachen tun, die gleiche Abkürzung. Deswegen nenne ich das &lt;i&gt;Universal Snippets&lt;/i&gt; . Diese Flexibilität würde mir helfen, meine Arbeit zu beschleunigen, ohne mich um Sprachspezifika kümmern zu müssen.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 class="collapsible" id="org2eda847"&gt;Probelauf&lt;/h2&gt;
&lt;div id="outline-container-org2eda847" class="outline-2 collapsme"&gt;
&lt;div class="outline-text-2" id="text-org2eda847"&gt;
&lt;p&gt;
Der Probelauf ist eigentlich ganz simpel: Ich möchte das Programm aus meinem Editor heraus kompilieren und starten können - und damit herumspielen. Je nach Programmiersprache sind dazu noch einige Zwischenschritte nötig. Diese sollen unter der Haube automatisch erfolgen, damit ich mich auf das Wesentliche konzentrieren kann: das Testen und Ausprobieren meines Codes.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 class="collapsible" id="org50561b3"&gt;Debugging&lt;/h2&gt;
&lt;div id="outline-container-org50561b3" class="outline-2 collapsme"&gt;
&lt;div class="outline-text-2" id="text-org50561b3"&gt;
&lt;p&gt;
Beim Debugging habe ich schon so ziemlich alles erlebt. Die allerspartanischste Art zu debuggen ist es wohl, irgendwo im Programmcode ein &lt;code&gt;Beep&lt;/code&gt; einzufügen und zu schauen, ob es beim Programmlauf irgendwo piept. Konsolenausgaben, die ich direkt in den Code schreibe, sind nur ein wenig komfortabler. Aber was ich eigentlich möchte, ist es, sinnvoll im Code steppen zu können: &lt;i&gt;Step In&lt;/i&gt;, &lt;i&gt;Step Over&lt;/i&gt;, &lt;i&gt;Step Out&lt;/i&gt; . Dabei möchte ich mir den Status diverser Variablen anzeigen lassen können.
&lt;/p&gt;

&lt;p&gt;
Breakpoints zu setzen ist für mich essenziell - und zwar nicht nur an festen Stellen im Code, sondern auch abhängig von Ausdrücken. Zum Beispiel: Ein Breakpoint, wenn ein Ausdruck wahr ist, oder ein Breakpoint, wenn sich der Wert einer Variablen ändert. Ich möchte also nicht stoppen, wenn der Wert der Variablen &lt;code&gt;a&lt;/code&gt; gleich 7 ist, sondern immer dann, wenn er sich vom aktuellen Wert in irgendeinen anderen Wert verändert. Das ist etwas, das mein uraltes Visual Basic 6 konnte, aber in vielen modernen Entwicklungsumgebungen fehlt.
&lt;/p&gt;

&lt;p&gt;
Ebenso wichtig ist für mich, dass ich Fehlermeldungen des Compilers oder Parsers direkt sehe und durch einen Klick in die entsprechende Datei und Zeile springen kann.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 class="collapsible" id="orgf12cd43"&gt;Testen&lt;/h2&gt;
&lt;div id="outline-container-orgf12cd43" class="outline-2 collapsme"&gt;
&lt;div class="outline-text-2" id="text-orgf12cd43"&gt;
&lt;p&gt;
Beim Testen kommen ja mittlerweile fast alle modernen Programmiersprachen mit einem integrierten Testframework daher. Und ich finde, das sollte auch genutzt werden. Ich möchte diese Testframeworks direkt aus dem Editor heraus nutzen können, damit ich meine Tests schnell und effizient ausführen kann. Dabei wäre es schön, wenn ich nicht jedes Mal die gesamte Testsuite durchlaufen muss, sondern auch nur die aktuelle Datei und die dazugehörigen Tests ausführen könnte. So kann ich gezielt und ohne unnötigen Zeitverlust arbeiten.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 class="collapsible" id="org7e10834"&gt;Git Integration&lt;/h2&gt;
&lt;div id="outline-container-org7e10834" class="outline-2 collapsme"&gt;
&lt;div class="outline-text-2" id="text-org7e10834"&gt;
&lt;p&gt;
Für die Git-Integration gibt es &lt;i&gt;Magit&lt;/i&gt; - muss ich mehr sagen? Das Ding funktioniert einfach und ist rund. Einzig beim Diffing bin ich noch ein bisschen verwöhnt: Da nutze ich, egal auf welcher Maschine, die Software &lt;i&gt;Beyond Compare&lt;/i&gt;  von Scooter Software. Für mich das ultimative Diffing-Tool. Wenn ich etwas Vergleichbares in Emacs herstellen könnte, wäre das super. Das ist mir bisher aber noch nicht gelungen.
&lt;/p&gt;

&lt;p&gt;
Eine coole Funktion der Git-Integration wäre, wenn ich jedes Mal beim Speichern einen internen Git-Commit im Entwicklungsbranch erzeuge, in dem ich gerade arbeite. Wenn ich dann 27 Mal gesichert habe und der Tag zu Ende ist, und ich beschließe, diesen Stand zu behalten, kann ich diese Commits squashen und habe dann einen einzigen sauberen Commit.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 class="collapsible" id="orgf9f5a8e"&gt;Deployment&lt;/h2&gt;
&lt;div id="outline-container-orgf9f5a8e" class="outline-2 collapsme"&gt;
&lt;div class="outline-text-2" id="text-orgf9f5a8e"&gt;
&lt;p&gt;
Beim Deployment ist es ja so: Manchmal ist es Teil der Git-Integration durch irgendwelche Hooks wie bei GitHub. Oder es muss manuell gemacht werden. Wenn ich es manuell machen sollte, dann würde ich gerne Targets auswählen können. Und das Ganze sollte eng mit Git verzahnt sein.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 class="collapsible" id="org20ea2fd"&gt;Refactoring&lt;/h2&gt;
&lt;div id="outline-container-org20ea2fd" class="outline-2 collapsme"&gt;
&lt;div class="outline-text-2" id="text-org20ea2fd"&gt;
&lt;p&gt;
Refactoring habe ich hier nochmal getrennt aufgeführt. Obwohl ich es manchmal bereits direkt während des Code-Editierens mache, ist es sinnvoller, sich in regelmäßigen Abständen hinzusetzen und nichts anderes als Refactoring zu machen. Wenn ich dabei strukturell etwas umbauen möchte, dann ist das meiste Cut, Paste und Neuschreiben. Was mir dabei aber schon ungeheuer helfen würde, ist, wenn ich mir sicher sein könnte, dass ich Variablen- oder Klassennamen &lt;i&gt;projektübergreifend suchen und ersetzen&lt;/i&gt;  könnte - ohne dass mir das Projekt dabei um die Ohren fliegt.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 class="collapsible" id="orgf4cfc84"&gt;Mein Fazit&lt;/h2&gt;
&lt;div id="outline-container-orgf4cfc84" class="outline-2 collapsme"&gt;
&lt;div class="outline-text-2" id="text-orgf4cfc84"&gt;
&lt;p&gt;
Am Ende geht es nicht darum, den "perfekten" Editor zu finden - den gibt es nicht. Aber es geht darum, einen Editor zu haben, der mich unterstützt, statt mich zu behindern. Ein Tool, das mir hilft, schneller und effizienter zu arbeiten, ohne dass ich mich ständig mit ihm herumschlagen muss. Mit Emacs habe ich die Möglichkeit, mir genau diese Umgebung zu schaffen.
&lt;/p&gt;

&lt;p&gt;
Und ja, ich weiß, dass ich anspruchsvoll bin. Aber wenn ich schon acht Stunden am Tag vor einem Bildschirm verbringe, dann will ich wenigstens ein Werkzeug, das mich nicht in den Wahnsinn treibt.
&lt;/p&gt;

&lt;p&gt;
In weiteren Artikeln möchte ich mich mit jedem dieser Abschnitte einzeln befassen und konkret schauen, welche Lösungen Emacs dabei bietet, welche kleinen Funktionen ich mir vielleicht selbst schreiben kann oder wo sich noch tricksen lässt.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;</description><category>Carnival</category><category>emacs</category><category>progammieren</category><guid>https://plaindrops.de/de/blog/2026/programming/</guid><pubDate>Mon, 06 Jul 2026 16:00:00 GMT</pubDate></item><item><title>EmacsWiki Blog Karneval "Programmieren"</title><link>https://plaindrops.de/de/blog/2026/emacscarnival2607/</link><dc:creator>Andy Drop</dc:creator><description>&lt;p&gt;
Emacs ist nicht nur ein Texteditor - es ist eine vollwertige Programmierumgebung, die sich perfekt an deine Bedürfnisse anpassen lässt. Ob Python, C++, Lisp, Rust oder JavaScript: Mit der richtigen Konfiguration wird Emacs zur mächtigen IDE, die dir alles bietet, was du für effizientes Coden brauchst: Syntax-Highlighting, Debugging, Version Control, REPL-Integration und vieles mehr.
&lt;/p&gt;

&lt;!-- TEASER_END --&gt;

&lt;p&gt;
Doch wie nutzt du Emacs als Programmierwerkzeug? Welche Pakete, Einstellungen oder Workflows machen deinen Code-Alltag produktiver?
&lt;/p&gt;

&lt;p&gt;
Mögliche Themen – oder bringe deine eigenen Ideen ein:
&lt;/p&gt;

&lt;p&gt;
Sprach-spezifische Einrichtungen: Wie konfigurierst du Emacs für deine Lieblingssprache? Welche Pakete (z. B. lsp-mode, flycheck, company) sind für dich unverzichtbar?
&lt;/p&gt;

&lt;p&gt;
Debugging &amp;amp; Testing: Wie integrierst du Debugger (z. B. realgud, dap-mode) oder Test-Frameworks direkt in Emacs?
&lt;/p&gt;

&lt;p&gt;
Projektmanagement: Wie organisierst du große Codebasen in Emacs? Nutze du Tools wie projectile, magit oder forge für Git-Workflows?
&lt;/p&gt;

&lt;p&gt;
REPLs &amp;amp; Interaktive Entwicklung: Wie arbeitest du mit REPLs (z. B. für Python, Clojure oder Haskell) direkt in Emacs?
&lt;/p&gt;

&lt;p&gt;
Performance &amp;amp; Skalierbarkeit: Wie hältst du Emacs auch bei großen Projekten schnell und responsiv? Welche Optimierungen hast du vorgenommen?
&lt;/p&gt;
&lt;h2 class="collapsible" id="orgc3065da"&gt;Was ist eigentlich ein Blog-Karneval?&lt;/h2&gt;
&lt;div id="outline-container-orgc3065da" class="outline-2 collapsme"&gt;
&lt;div class="outline-text-2" id="text-orgc3065da"&gt;
&lt;p&gt;
&lt;small&gt;(Kopiert aus Christian Tietzes Einführungspost)&lt;/small&gt;
&lt;/p&gt;

&lt;p&gt;
Dies ist schon unser zweiter Emacs-Karneval, aber möglicherweise daher kennst du das Format noch nicht. Ein Blog-Karneval ist eine unterhaltsame Möglichkeit, eine Community durch gemeinsame Schreibimpulse zu verbinden – und sich über all die kreativen Interpretationen des Monatsthemas zu freuen. Ich habe oben ein paar Deutungen vorgeschlagen, aber dir fällt vielleicht etwas völlig anderes ein. Großartig, mach das! Genau das macht den Spaß aus.
&lt;/p&gt;

&lt;p&gt;
Für zukünftige Karnevals sieh dir die &lt;a href="https://www.emacswiki.org/emacs/Carnival"&gt;„Carnival“&lt;/a&gt;-Seite an.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 class="collapsible" id="orgd4018c0"&gt;Beiträge einreichen&lt;/h2&gt;
&lt;div id="outline-container-orgd4018c0" class="outline-2 collapsme"&gt;
&lt;div class="outline-text-2" id="text-orgd4018c0"&gt;
&lt;p&gt;
Schick mir deine Beiträge per &lt;a href="https://chaos.social/@spacecadet"&gt;DM&lt;/a&gt; / &lt;a href="mailto:carnival@plaindrops.de"&gt;E-Mail&lt;/a&gt;! Wenn ich irgendwo anders einen Beitrag finde, verlinke ich ihn hier ebenfalls. Ich sammle Einreichungen bis einschließlich 1. August (Mitteleuropäische Zeit), damit jede Zeitzone die Chance hatte, die Frist am 31. Juli einzuhalten :)
&lt;/p&gt;

&lt;p&gt;
Folgende Beiträge sind eingegangen:
&lt;/p&gt;

&lt;ul class="org-ul"&gt;
&lt;li&gt;&lt;a href="https://plaindrops.de/de/blog/2026/programming/"&gt;Was ich von einem Editor als Programmierer erwarte&lt;/a&gt; (Andy Drop)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ray-on-emacs.blogspot.com/2026/07/emacs-carnival-july-2026-programming.html"&gt;Emacs Carnival July 2026 – Programming&lt;/a&gt; (Raymond Zeitler)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://mike.hostetlerhome.com/how-emacs-uses-nix"&gt;How Emacs Uses Nix&lt;/a&gt; (Mike Hostetler)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bonthron.com/"&gt;Emacs Carnival&lt;/a&gt; (Jason Bonthron)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.chiply.dev/post-july-emacs-carnival"&gt;A Tree and a Server Walk Into a Core…&lt;/a&gt; (Charlie Holland)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://sachachua.com/blog/2026/07/mon-flux-de-travail-de-programmation/"&gt;Mon flux de travail de programmation&lt;/a&gt; (Sacha Chua)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.winny.tech/posts/comfy_text_editing_line_spacing/"&gt;Comfy text editing with line spacing™&lt;/a&gt; (Winston Weinert)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://tusharhero.codeberg.page/guix-shell-in-emacs.html"&gt;Guix shell now inside Emacs!&lt;/a&gt; (tusharhero)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://cosmicflow.space/yes_i_am_hooked_to_metaprogramming_in_emacs/"&gt;Yes, I am hooked to Metaprogramming in Emacs&lt;/a&gt; (Dibyashanu Pati)&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;
Vielen Dank für eure Teilnahme  
&lt;/p&gt;

&lt;p&gt;
Im August wird Charlie Holland unser Gastgebersein,  mit dem Thema "&lt;a href="https://www.chiply.dev/post-august-emacs-carnival"&gt;The Search for Knowledge&lt;/a&gt;".
Auch du kannst Gastgeber eines zukünftigen Karnevals werden – keine Scheu :) 
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;</description><category>Carnival</category><category>emacs</category><category>progammieren</category><guid>https://plaindrops.de/de/blog/2026/emacscarnival2607/</guid><pubDate>Sun, 28 Jun 2026 12:00:00 GMT</pubDate></item><item><title>Meine 10 Jahre mit Emacs</title><link>https://plaindrops.de/de/blog/2025/tenyearsofemacs/</link><dc:creator>Andy Drop</dc:creator><description>&lt;p&gt;
Heute vor 10 Jahren hatte ich meinen ersten Kontakt mit Emacs, und dieser Tag hat auf jeden Fall die Art und Weise verändert, wie ich mit dem Computer arbeite, wenn nicht sogar mein Leben.
&lt;/p&gt;
&lt;!-- TEASER_END --&gt;

&lt;p&gt;
Der Tag ist mir deshalb so genau in Erinnerung, weil es der Tag nach dem allerersten Treffen des "Warpzonista Coding Clubs" war. Die Warpzone war zu der Zeit mein lokaler Hackerspace, und der Schwerpunkt lag dort damals auf Hardwarebasteleien. Ich hatte Lust mehr Leute kennenzulernen, die - wie ich - programmieren, und bei tollstem Sonnenschein, und leichter &lt;a href="https://www.youtube.com/watch?v=d_siG4dY6qs"&gt;Son Cubano&lt;/a&gt; Musik kam mir die Idee den Coding Club zu gründen. Das erste Treffen fand also am 27. Februar 2015 statt. Nach kurzem kennenlernen, kam das Gespräch dann zu dem Thema, das jeder Programmierer eines Tages für sich entscheidet. Die Wahl des persönlichen Editors.
&lt;/p&gt;

&lt;p&gt;
Da ich damals im wesentlichen beruflich programmiert habe, nutzte ich die integrierte Entwicklungsumgebung die Microsoft mit Visual Basic 6 ausliefert. Aber ich wollte gerne unter Linux mit Python programmieren, und war auf der Suche nach einem Editor. Außerdem hatte ich schon mal Vim ausprobiert, und irgendetwas daran lag mir nicht. Im Laufe des Abends habe ich dann &lt;a href="https://wwwtech.de/about"&gt;Christian Kruse&lt;/a&gt; kennengelernt, und wir haben uns darüber unterhalten, wie mein Kopf funktioniert, und dass ich im Prinzip in Hierarchien denke. Bäume sind mein Ding, Wenn ich Probleme behandele, backtracke mich durch verschiedene Lösungsansätze für Probleme, und Projekte teile ich in Aufgaben und Unteraufgaben auf.
&lt;/p&gt;

&lt;p&gt;
Daraufhin meinte er: "Dann wird Orgmode dein Ding sein", und gab mir eine kurze Übersicht auf seinem Laptop. Am nächsten Tag hab ich mir Emacs installiert, und ausprobiert, wie ich selber mit der Bedienung klarkomme. Um es abzukürzen: Orgmode war toll, aber ich kam überhaupt nicht mit der Bedienung klar. Christian hatte mich schon vorgewarnt, und ich wusste, dass ich etwas namens CUA haben möchte, und ein wenig googlen brachte mich in die ersten Config Dateien, die andere Menschen im Internet veröffentlicht hatten.
&lt;/p&gt;
&lt;h2 class="collapsible" id="org6c0f708"&gt;Die ersten Configs&lt;/h2&gt;
&lt;div id="outline-container-org6c0f708" class="outline-2 collapsme"&gt;
&lt;div class="outline-text-2" id="text-org6c0f708"&gt;
&lt;p&gt;
Ich hab dann ein paar Wochen lang einiges an Zeit investiert, um mir eine brauchbare Config zu erstellen. Ein paar Schnipsel hatte ich mir an verschiedenen Stellen im Netz zusammengeklaubt. CUA war dabei, YASnippet, und ich hatte herausgefunden, das ich mir eigene Keybindings machen kann. Dass ich die je nach Mode getrennt machen kann, wusste ich damals noch nicht, also alles schön global, und so dauerte es auch nicht lang bis zu meiner ersten Config Bankruptcy, einem Ausdruck, den ich damals noch nicht kannte. Die Ursache dafür war im Wesentlichen, dass meine von überall kopierten Config-Schnipsel oft eigene Namespaces mitbrachten, die ich überhaupt nicht als solche erkannte..
&lt;/p&gt;

&lt;p&gt;
Mein zweiter Config Ansatz war schon relativ nah an dem, was ich bis heute verwende. Ich hatte viel im Emacs Manual gelesen, und mitlerweile Keybindings mit den einzelnen Layern verstanden, und auch gemerkt, das es beim kopieren fremder Configs darauf ankommt die an das verwendete Package Tool anzupassen. Meine zweite Config war also viel geplanter.
&lt;/p&gt;

&lt;p&gt;
Ich verwendete eine minimale ini.cfg, die nichts weiter macht als drei andere configs zu laden
&lt;/p&gt;

&lt;ul class="org-ul"&gt;
&lt;li&gt;Eine Basis Config, bei denen ich für jedes installierte Paket die von mir bevorzugten Einstellungen mache (außer den Keybindigs)&lt;/li&gt;
&lt;li&gt;Eine Config die alle Keybindings enthält. Wenn ich die alle an einem Ort habe, dachte ich mir, passieren mir nicht so viele versehentliche Doppelbelegungen&lt;/li&gt;
&lt;li&gt;Eine Datei in der alle Anpassungen landen, die durch die benutzung des Config Tools in Emacs entstehen.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Damit konnte ich für die nächsten 1-2 Jahre ganz gut arbeiten. Ich habe Emacs immer besser kennengelernt. Habe verstanden, wie CTRL-X und CTRL-C quasi als einstiegspunkte in die komplette Tastaturbelegung dienen, und das es dort Muster gibt, die wohlüberlegt sind, und sinnvoll, und nicht mit meinem Kopf funktionieren. Ein großer Schritt vorwärts war es als ich das Hydra Paket entdeckte.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 class="collapsible" id="org4c2d698"&gt;Ledger&lt;/h2&gt;
&lt;div id="outline-container-org4c2d698" class="outline-2 collapsme"&gt;
&lt;div class="outline-text-2" id="text-org4c2d698"&gt;
&lt;p&gt;
Eine der ersten Pakete, das einen Einfluss auf mein reales Leben hatte war der Ledger Mode. Ledger ist eine doppelte Buchführung in einer einzigen Textdatei. Und so begann ich recht schnell damit, meine Bankbuchungen in eine Datei zu schreiben. Mit ein wenig Nachdenken, liess sich auch das Briefumschlag-Budget-System meiner Oma implementieren, und das hat mir finanziell echt den Arsh gerettet, indem es mir den kompletten Durchblick über meine Finanzen geliefert hat
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 class="collapsible" id="org7c8d29e"&gt;Hydra&lt;/h2&gt;
&lt;div id="outline-container-org7c8d29e" class="outline-2 collapsme"&gt;
&lt;div class="outline-text-2" id="text-org7c8d29e"&gt;
&lt;p&gt;
Bis dahin ga es zwei Arten, wie ich eine Funktion aufgerufen habe: Entweder mit einem Keybinding, oder ich habe gegoogelt, wie eine Funktion heißt, und  habe sie dann via M-X mit ihrem Namen aufgerufen. Mit Hydra konnte ich mir plötzlich all die Funktionen, die ich für wichtig für mich hielt in Hydras ablegen, und sinnvoll gruppieren, und dann auch nur in den jeweiligen Modi zur Verfügung stellen. Ich bin bis heute ein großer Hydra-Fan. Nach und nach habe ich alle meine Hydras in einer Datei zusammengefasst. Diese bilden heute das Projekt Medusa und wurden als vierte Datei meiner Config hinzugefügt.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 class="collapsible" id="orgcdc3f3e"&gt;Helm&lt;/h2&gt;
&lt;div id="outline-container-orgcdc3f3e" class="outline-2 collapsme"&gt;
&lt;div class="outline-text-2" id="text-orgcdc3f3e"&gt;
&lt;p&gt;
Der nächste größere Schritt war Helm. Das aussuchen der verschiedenen möglichkeiten war vor allem bei M-x im Minibuffer eine Qual. Mit Helm gab es nun eine komfortable Ansicht. Diese konnte ich in einen eigenen Buffer packen, der entweder im aktuellen Fenster, oder in einem benachbarten Fenster dargestellt wurde.
Obwohl sich das nun alles schon deutlich besser anfühlte, hat mich ein &lt;a href="https://protesilaos.com/codelog/2020-01-07-emacs-display-buffer/"&gt;Video&lt;/a&gt; von Prot dazu gebracht mein bevorzugtes Window Handling noch einmal komplett zu durchdenken. Seither benutze ich statt Helm den VOCEM-Stack. 
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 class="collapsible" id="org9249820"&gt;VOCEM&lt;/h2&gt;
&lt;div id="outline-container-org9249820" class="outline-2 collapsme"&gt;
&lt;div class="outline-text-2" id="text-org9249820"&gt;
&lt;p&gt;
Vocem ist meine Abkürzung für *V*ertico, *O*rderless, *C*onsult, *E*mbark &amp;amp; *M*arginalia. Diese 5 Pakete gemeinsam zu benutzen hat sich bei vielen Emacs-Nutzern durchgesetzt, auch wenn man jedes davon für sich alleine benutzen kann
&lt;/p&gt;

&lt;dl class="org-dl"&gt;
&lt;dt&gt;Vertico&lt;/dt&gt;&lt;dd&gt;Vertico bietet eine performante und minimalistische vertikale Completion-UI, die auf dem standardmäßigen Completion-System basiert. Der Fokus von Vertico liegt darauf, eine UI bereitzustellen, die unter allen Umständen korrekt funktioniert. Es ist also der eigentliche Ersatz für Helm&lt;/dd&gt;
&lt;dt&gt;Orderless&lt;/dt&gt;&lt;dd&gt;Dieses Paket stellt einen orderlosen Completion-Stil bereit, der das Muster in durch Leerzeichen getrennte Komponenten unterteilt und Kandidaten findet, die alle Komponenten in beliebiger Reihenfolge enthalten. Orderless ist für mein Hirn unabdingbar, da ich oft denke "Der Befehl begann irgendwie mit list" dabei kam "list" nur irgendwo in der Mitte vor.&lt;/dd&gt;

&lt;dt&gt;Consult&lt;/dt&gt;&lt;dd&gt;Consult bietet Such- und Navigationsbefehle auf Basis der Emacs-Completion-Funktion completing-read. Die Completion ermöglicht es, schnell ein Element aus einer Liste von Kandidaten auszuwählen. Es verbindet also Quasi Vertico mit den gängigen Stellen, an denen man eine Completion haben möchte&lt;/dd&gt;

&lt;dt&gt;Embark&lt;/dt&gt;&lt;dd&gt;Embark erleichtert die Auswahl eines Befehls basierend auf dem, was sich in der Nähe des Cursors befindet – sowohl während einer Minibuffer-Completion-Sitzung (in einer Art, die Helm- oder Counsel-Nutzern vertraut ist) als auch in normalen Buffern. Embark ist so etwas wie ein frei konfigurierbares Kontext-Menü, und macht sich daher auch hervorragend auf der rechten Maustaste.&lt;/dd&gt;

&lt;dt&gt;Marginalia&lt;/dt&gt;&lt;dd&gt;Dieses Paket stellt marginalia-mode bereit, das Marginalien zu den Minibuffer-Completionen hinzufügt. Marginalien sind Markierungen oder Anmerkungen, die am Rand einer Buchseite platziert werden – oder in diesem Fall hilfreiche, farbige Anmerkungen am Rand des Minibuffers für deine Completion-Kandidaten. Marginalia liefert zu vielen Dingen, die nur mit einem Wort in einer Liste auftauchen etwas Kontext.&lt;/dd&gt;
&lt;/dl&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 class="collapsible" id="orgd19d31e"&gt;Denote&lt;/h2&gt;
&lt;div id="outline-container-orgd19d31e" class="outline-2 collapsme"&gt;
&lt;div class="outline-text-2" id="text-orgd19d31e"&gt;
&lt;p&gt;
Denote hatte auf mich einen ebenso großen Einfluss wie Orgmode. Ich hatte schon vor Emacs ewig versucht all die losen Gedanken, Ideen, Quellen, die ich sonst im Kopf mit mir herumtrage, im Rechner zu organisieren. Ähnlich wie es Luhmann hier in der Nähe mit seinem legendären Zettelkasten gemacht hat. Entweder hatten die Ansätze für mich überhaupt nicht funktioniert, oder das Ablagesystem (das immer irgendeine Art externen Index auf das Wissen pflegte) hat nach einiger Zeit den Sync zwischen Wissen und Index verloren. Denote macht alle Metadaten dierekt an der Datei fest, und daher habe ich es selbst beim Teilen über alle meine Geräte noch nicht geschafft mein mentales Exoskelett aus dem Sync zu bringen. Ein größartiges gut durchdachtes Stück Software.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 class="collapsible" id="orgedf8047"&gt;Dinge die ich gewollt nicht mache&lt;/h2&gt;
&lt;div id="outline-container-orgedf8047" class="outline-2 collapsme"&gt;
&lt;div class="outline-text-2" id="text-orgedf8047"&gt;
&lt;ul class="org-ul"&gt;
&lt;li&gt;Ich habe zum Beispiel kein Paket-Tool im Einsatz, bei dem mir dir gesamte Konfiguration für das Paket an einer Stelle habe. Ich möchte bewusst alle Tastenkombinatinen für alle Pakete an einem Ort haben, und genau so ergeht es mir mit den Hydras. Diese bauen aufeinander auf, und es ist praktisch sie alle ohne sonstige Dinge in einer Datei zu haben.&lt;/li&gt;
&lt;li&gt;Zettelkasten. Ich kenne die Software nicht, habe aber eine stark negative Meinung zur digitalisierung des Luhmannschen Konzepts. Wir schreiben das Jahr 2025, der Hyperlink ist erfunden.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 class="collapsible" id="orgcb60525"&gt;Fazit&lt;/h2&gt;
&lt;div id="outline-container-orgcb60525" class="outline-2 collapsme"&gt;
&lt;div class="outline-text-2" id="text-orgcb60525"&gt;
&lt;p&gt;
Dieser Weg den ich in den 10 Jahren gegangen bin ist auf jeden Fall nur einer von tausenden möglichen Wegen. Jeder nutzt Emacs für andere Dinge, und jedes Hirn funktioniert anders. Ich kann auf jeden Fall empfehlen, die eigenen Ansprüche an die Emacs Umgebung in Ruhe zu durchdenken:
&lt;/p&gt;

&lt;ol class="org-ol"&gt;
&lt;li&gt;macht euch eine kurze Notiz, wenn sich etwas "falsch" für euch anfühlt. Beseitigt diese Dinge von Zeit zu Zeit.&lt;/li&gt;
&lt;li&gt;Versucht herauszufinden, mit welchen Dingen ihr in Emacs arbeiten wollt: Configs? Romantexte? Buchhaltungsdateien? Addressen? Mails? Webseiten? Zitate? Orte? diese Liste ließe sich beliebig fortsetzen&lt;/li&gt;
&lt;li&gt;Macht für jedes dieser Dinge eine Liste, welche Aktionen ihr gängigerweise auf diesen Dingen machen müsst. Z.B Weblinks: Im Browser aufrufen, im externen Browser aufrufen, speichern, im Blog publizieren, über alle Geräte synchronisieren, etc&lt;/li&gt;
&lt;li&gt;Baut daraus nach und nach euren persönlichen Workflow zusammen&lt;/li&gt;
&lt;li&gt;macht das nicht direkt am Rechner sondern schreibt diese Gedanken auf Papier, und bewahrt diesen Workflow als Schlachtplan für euch auf&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 class="collapsible" id="org9e19d3f"&gt;Danke&lt;/h2&gt;
&lt;div id="outline-container-org9e19d3f" class="outline-2 collapsme"&gt;
&lt;div class="outline-text-2" id="text-org9e19d3f"&gt;
&lt;p&gt;
Natürlich möchte ich vor allem &lt;a href="https://wwwtech.de/about"&gt;Christian Kruse&lt;/a&gt; danken, der mich vor 10 Jahren in die richtige Richtung geschubst hat. Aber auch ein paar anderen Menschen (und ich werde bestimmt am Ende ein paar vergessen haben). Als Bonus erfahrt ihr, wie ich diese Menschen in meinem Kopf nenne.
&lt;/p&gt;

&lt;ol class="org-ol"&gt;
&lt;li&gt;&lt;a href="https://sachachua.com/blog/"&gt;Sacha Chua&lt;/a&gt;, die "Mutter der Kompanie" für ihre unermüdliche Arbeit, die Emacs Community mit ihren Emacs News und der jährlichen Emacs Conference zusammen zu halten. Ausserdem dokumentiert sie immer wieder welche Probleme in der realen Welt, sie mit welchen Methoden löst, und warum.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://protesilaos.com/"&gt;Protesilaos "Prot" Stavrou&lt;/a&gt;, "Der Philosoph", für Denote und vor allem dafür, das er seine Gedanken rund um den Entwurf seiner Emacs Pakete öffentlich in seinem Blog darlegt. So lässt sich wunderbar nachvollziehen, ob seine Pakete zum persönlichen Arbeitsstil passen&lt;/li&gt;
&lt;li&gt;&lt;a href="https://karl-voit.at/"&gt;Karl Voit&lt;/a&gt;, "Mr. PIM" für seinen großartigen Orgmode Vortrag, und die Idee, das eigene Arbeiten mit den persönlichen Informationen einmal von Grund auf zu durchdenken. Ich bin dabei zu anderen Ergebnissen gekommen als er, aber ich habe dadurch gelernt, wie mein Hirn denkt, und dass es sinnvoll ist dieses "anders" zu nutzen.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://fosstodon.org/@daviwil"&gt;David Wilson&lt;/a&gt;,"Der Erklärbär" für seine unzähligen System Crafters Videos, die immer gut sind, wenn man mal etwas sehr genau erklärt haben will&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;
Viele andere, von denen man hier und da mal Ideen lesen kann, sind mir ebenso ans Herz gewachsen
Auf die nächsten 10 Jahre mit euch allen.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;</description><category>emacs</category><category>orgmode</category><guid>https://plaindrops.de/de/blog/2025/tenyearsofemacs/</guid><pubDate>Tue, 16 Dec 2025 08:13:00 GMT</pubDate></item><item><title>EmacsWiki Blog Karneval "Wartung"</title><link>https://plaindrops.de/de/blog/2025/emacscarnival/</link><dc:creator>Andy Drop</dc:creator><description>&lt;p&gt;
Im Oktober, wenn die Tage kürzer und die Luft frischer wird, verlagern viele Menschen ganz natürlich ihren Fokus von der kreativen Energie des Sommers hin zur ruhigeren Arbeit zu Hause. Es ist die Jahreszeit, in der man Regenrinnen reinigt, Ecken des Hauses gründlich putzt, die man lange ignoriert hat, und kleine Reparaturen erledigt, die den Alltag reibungslos am Laufen halten. So wie sich manche dem Haushalten und dem Herbstputz widmen, kümmern sich andere um digitale Pflege – Notizen durchsehen, alte Dateien ausmisten oder die Emacs-Konfiguration so feinjustieren, dass sie angenehm und verlässlich arbeitet. „Wartung“ – in welcher Bedeutung auch immer – ist das Thema des EmacsWiki Blog-Karnevals im Oktober.
&lt;/p&gt;
&lt;!-- TEASER_END --&gt;
&lt;h2 class="collapsible" id="org7a096ac"&gt;Was ist eigentlich ein Blog-Karneval?&lt;/h2&gt;
&lt;div id="outline-container-org7a096ac" class="outline-2 collapsme"&gt;
&lt;div class="outline-text-2" id="text-org7a096ac"&gt;
&lt;p&gt;
&lt;small&gt;(Kopiert aus Christian Tietzes Einführungspost)&lt;/small&gt;
&lt;/p&gt;

&lt;p&gt;
Dies ist unser erster Emacs-Karneval, daher kennst du das Format vielleicht noch nicht. Ein Blog-Karneval ist eine unterhaltsame Möglichkeit, eine Community durch gemeinsame Schreibimpulse zu verbinden – und sich über all die kreativen Interpretationen des Monatsthemas zu freuen. Ich habe oben ein paar Deutungen vorgeschlagen, aber dir fällt vielleicht etwas völlig anderes ein. Großartig, mach das! Genau das macht den Spaß aus.
&lt;/p&gt;

&lt;p&gt;
Für zukünftige Karnevals sieh dir die [[&lt;a href="https://www.emacswiki.org/emacs/Carnival"&gt;https://www.emacswiki.org/emacs/Carnival&lt;/a&gt;][„Carnival“-Seite
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 class="collapsible" id="org7f018c3"&gt;Beiträge einreichen&lt;/h2&gt;
&lt;div id="outline-container-org7f018c3" class="outline-2 collapsme"&gt;
&lt;div class="outline-text-2" id="text-org7f018c3"&gt;
&lt;p&gt;
Schick mir deine Beiträge per &lt;a href="https://masto.plaindrops.de/@spacecadet"&gt;DM&lt;/a&gt;/ &lt;a href="mailto:carnival@plaindrops.de"&gt;E-Mail&lt;/a&gt;! Wenn ich irgendwo anders einen Beitrag finde, verlinke ich ihn hier ebenfalls. Ich sammle Einreichungen bis einschließlich 1. November (Mitteleuropäische Zeit), damit jede Zeitzone die Chance hatte, die Frist am 30. Oktober einzuhalten :)
&lt;/p&gt;


&lt;p&gt;
Folgende Beiträge sind bis zum 30.10.2025 eingegangen:
&lt;/p&gt;


&lt;ul class="org-ul"&gt;
&lt;li&gt;&lt;a href="https://www.finaprosadigital.com/2025-10-12-maintenance-(mantenimiento).html"&gt;Maintenance (Mantenimiento)&lt;/a&gt; von Carlos Pajuelo&lt;/li&gt;
&lt;li&gt;&lt;a href="https://macadie.info/2025/10/08/emacs-carnival-maintenance/"&gt;Emacs Carnival: Maintenance&lt;/a&gt; von Eric MacAdie&lt;/li&gt;
&lt;li&gt;&lt;a href="https://mike.hostetlerhome.com/emacs-maintenance"&gt;Emacs Maintenance&lt;/a&gt; von Mike Hostetler&lt;/li&gt;
&lt;li&gt;&lt;a href="https://kyo.iroiro.party/en/posts/emacs-maintains-my-arch/"&gt;Using Emacs Org-mode As My Package Manager&lt;/a&gt; von Kana&lt;/li&gt;
&lt;li&gt;&lt;a href="https://christiantietze.de/posts/2025/10/sharpening-the-saw-with-emacs/"&gt;Sharpening the Saw with Emacs&lt;/a&gt; von Christian Tietze&lt;/li&gt;
&lt;li&gt;&lt;a href="https://curious.port111.com/2025/10/30/its-fall-time-to-clean.html"&gt;It's Fall. Time to clean up my emacs clutter.&lt;/a&gt; von George Jones&lt;/li&gt;
&lt;li&gt;&lt;a href="https://quijotelibre.net/blog/sharpening-axe-preparing-soil-harvest/"&gt;Sharpening the axe (or preparing the soil for the harvest)&lt;/a&gt; von Quijote Libre (auch auf &lt;a href="https://quijotelibre.net/blog/afilar-hacha-preparar-tierra-cosecha/"&gt;spanisch&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://commonplace.doubleloop.net/emacs-carnival-praise-the-patchers"&gt;Emacs Carnival: Praise the patchers&lt;/a&gt; von Neil&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Vielen Dank an alle fürs Mitmachen!
&lt;/p&gt;

&lt;p&gt;
Im November ist  &lt;a href="https://donaldh.wtf/about/"&gt;Donald Hunter&lt;/a&gt; Gastgeber: „&lt;a href="https://donaldh.wtf/2025/10/emacs-carnival-2025-11-an-ode-to-org-babel/"&gt;An ode to org-babel&lt;/a&gt;“.
&lt;/p&gt;

&lt;p&gt;
Auch du kannst Gastgeber eines zukünftigen Karnevals werden – keine Scheu :)
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;</description><category>Carnival</category><category>emacs</category><category>Maintenance</category><guid>https://plaindrops.de/de/blog/2025/emacscarnival/</guid><pubDate>Mon, 29 Sep 2025 00:00:00 GMT</pubDate></item><item><title>Sammeln und kategorisieren von Weblinks in Orgmode</title><link>https://plaindrops.de/de/blog/2025/tagwood/</link><dc:creator>Andy Drop</dc:creator><description>&lt;p&gt;
Ob sie nun Lesezeichen, Favoriten oder Weblinks heissen. jeder von uns sammelt im Laufe der Zeit eine ganze Menge von ihnen an. Irgendwann kommt der Tag wo das ganze unübersichtlich wird. und aufgeräumt werden muss. Ich hab mir ein Python Tool dafyr geschrieben. 
&lt;/p&gt;
&lt;!-- TEASER_END --&gt;
&lt;h2 class="collapsible" id="org692eb17"&gt;Was bisher geschah&lt;/h2&gt;
&lt;div id="outline-container-org692eb17" class="outline-2 collapsme"&gt;
&lt;div class="outline-text-2" id="text-org692eb17"&gt;
&lt;p&gt;
Neu Weblinks entstehen bei mir immer aus meinem Browser heraus. Sei es der Firefox auf Desktop und Laptop oder auf meinem Handy. Ich könnte sie also einfach nur innerhalb von Firefox lassen. Damit kann ich sie zwischen den Browsern synchronisieren, und sie aufrufen. Was will man mehr?
Nun ich habe in diesem Blog z.B eine &lt;a href="https://plaindrops.de/page/links/"&gt;Seite mit Links&lt;/a&gt;, die ich gerne öffentlich teilen möchte. Wäre doch schön, wenn ich das nicht getrennt machen müsste. Und so hab ich mich schon vor Jahren entschlossen keine der eingebauten. oder online verfügbaren Tools zu nutzen, um Weblinks zu verwalten. Stattdessen speichere ich alle meine Weblinks als &lt;a href="https://plaindrops.de/blog/2020/why-I-like-plaintext/"&gt;Plaintext&lt;/a&gt; im Orgmode Format. Jeder Link ist dort eine Überschrift mit dem Titel der Seite die mit der entsprechenden Seite verlinkt ist.
Falls ich Lust habe, schreibe ich mir noch eine kleine Anmerkung dazu, oder füge ein Zitat aus der Seite ein.
Wenn ich auf Laptop oder Desktop arbeite erledigt das ein kleines AddOn (&lt;a href="https://github.com/Stebalien/org-capture-extension"&gt;Org Capture&lt;/a&gt;) welches neue Links an meine &lt;b&gt;Links.org&lt;/b&gt; Datei dranhängt. Dazu benutzt es das org-capture Protokoll das Emacs für Links zur Verfügung stellt.
Auf dem Handy funktioniert dieses AddOn leider nicht, daher teile ich die Webseite dort einfach mit der Orgzly-revived App. mit der sich Orgmode Dateien auf Android bearbeiten lassen. Der Link landet dann ebenfalls in der &lt;b&gt;Links.org&lt;/b&gt; Datei. Ich synchronisiere mein gesamtes &lt;i&gt;org&lt;/i&gt; Verzeichnii zwischen allen meinen Geräten.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 class="collapsible" id="orgfd9e3f1"&gt;Die Links.org Datei im Detail&lt;/h2&gt;
&lt;div id="outline-container-orgfd9e3f1" class="outline-2 collapsme"&gt;
&lt;div class="outline-text-2" id="text-orgfd9e3f1"&gt;
&lt;p&gt;
Zunächst einmal beginnt diese Datei mit einem Satz von Metadaten-Zeilen, die mein Webseiten Generator braucht, um aus der Datei direkt die Linkseite zu erstellen, die man hier im Blog sieht. Das sieht dann so aus
&lt;/p&gt;
&lt;pre class="example" id="orgf81467b"&gt;
#+BEGIN_COMMENT
.. title: Links
.. description: All the links I can recommend
.. slug: links
.. date: 2019-01-01 00:00:00 UTC+01:00
.. tags: links, emacs, orgmode, qutebrowser, plaintext, pim
.. previewimage: qrcodebus.png
#+END_COMMENT
#+OPTIONS: tags:nil
&lt;/pre&gt;
&lt;p&gt;
Die letzte Zeile sorgt dafür, dass die Tags, die ich den einzelnen Links gebe nicht nach HTML exportiert werden
&lt;/p&gt;

&lt;p&gt;
In dieser Datei sind alle neuen Links zunächst mal eine Überschrifft der Stufe 2. In der obesten Stufe 1 gibt es genau vier Überschriften:
&lt;/p&gt;
&lt;/div&gt;
&lt;h3 class="collapsible" id="org7a38a0a"&gt;1. Quicklinks&lt;/h3&gt;
&lt;div id="outline-container-org7a38a0a" class="outline-3 collapsme"&gt;
&lt;div class="outline-text-3" id="text-org7a38a0a"&gt;
&lt;p&gt;
Wie man sieht sind diese Links mit &lt;code&gt;:noexport:&lt;/code&gt; getaggt, und tauchen daher nicht in der öffentlichen Linkliste auf. Es sind Links. die ich selbst häüfig aufrufe. Deher stehen sie in der Datei ganz oben. und sind bereits sichtbar, wenn ich die Datei öffne
&lt;/p&gt;
&lt;pre class="example" id="orgffc8cb7"&gt;
* ------ Quick Links ----- :noexport:
 :PROPERTIES:
 :VISIBILITY: children
 :END:
&lt;/pre&gt;
&lt;table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides"&gt;


&lt;colgroup&gt;
&lt;col class="org-left"&gt;

&lt;col class="org-left"&gt;

&lt;col class="org-left"&gt;

&lt;col class="org-left"&gt;

&lt;col class="org-left"&gt;

&lt;col class="org-left"&gt;

&lt;col class="org-left"&gt;
&lt;/colgroup&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th scope="col" class="org-left"&gt;Social Media&lt;/th&gt;
&lt;th scope="col" class="org-left"&gt;Shopping&lt;/th&gt;
&lt;th scope="col" class="org-left"&gt;News&lt;/th&gt;
&lt;th scope="col" class="org-left"&gt;Finanzen&lt;/th&gt;
&lt;th scope="col" class="org-left"&gt;Haustechnik&lt;/th&gt;
&lt;th scope="col" class="org-left"&gt;Konten&lt;/th&gt;
&lt;th scope="col" class="org-left"&gt;Other&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="org-left"&gt;&lt;a href="https://chaos.social"&gt;Mastodon&lt;/a&gt;&lt;/td&gt;
&lt;td class="org-left"&gt;&lt;a href="https://idealo.de"&gt;Idealo&lt;/a&gt;&lt;/td&gt;
&lt;td class="org-left"&gt;&lt;a href="https://tagesschau.de"&gt;Tagesschau&lt;/a&gt;&lt;/td&gt;
&lt;td class="org-left"&gt;&lt;a href="https://www.volksbank-eg.de/services_cloud/portal/"&gt;Volksbank&lt;/a&gt;&lt;/td&gt;
&lt;td class="org-left"&gt;&lt;a href="http://fritz.box/"&gt;FritzBox&lt;/a&gt;&lt;/td&gt;
&lt;td class="org-left"&gt;&lt;a href="https://bibload.onleihe.de/"&gt;BibLoad&lt;/a&gt;&lt;/td&gt;
&lt;td class="org-left"&gt;&lt;a href="https://www.thingiverse.com/"&gt;Thingiverse&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class="org-left"&gt;&lt;a href="https://feddit.de"&gt;Feddit&lt;/a&gt;&lt;/td&gt;
&lt;td class="org-left"&gt;&lt;a href="https://www.amazon.de/"&gt;Amazon&lt;/a&gt;&lt;/td&gt;
&lt;td class="org-left"&gt;&lt;a href="https://www.theguardian.com/europe"&gt;The Guardian&lt;/a&gt;&lt;/td&gt;
&lt;td class="org-left"&gt;&lt;a href="https://banking.barclays.de/Login"&gt;Barclays&lt;/a&gt;&lt;/td&gt;
&lt;td class="org-left"&gt;&lt;a href="http://192.168.9.32"&gt;Wechselrichter&lt;/a&gt;&lt;/td&gt;
&lt;td class="org-left"&gt;&lt;a href="https://sb-warendorf.lmscloud.net/"&gt;Stadtbücherei&lt;/a&gt;&lt;/td&gt;
&lt;td class="org-left"&gt;&lt;a href="https://cults3d.com/de"&gt;Cults&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt;&lt;a href="https://www.ebay.de/"&gt;eBay&lt;/a&gt;&lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt;&lt;a href="https://www.schwaebisch-hall.de/meinkonto/login-mein-konto.html"&gt;Schw. Hall&lt;/a&gt;&lt;/td&gt;
&lt;td class="org-left"&gt;&lt;a href="http://192.168.9.38/"&gt;Stromzähler&lt;/a&gt;&lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class="org-left"&gt;&lt;a href="https://codeberg.org/user/login"&gt;Codeberg&lt;/a&gt;&lt;/td&gt;
&lt;td class="org-left"&gt;&lt;a href="https://www.otto.de/"&gt;Otto&lt;/a&gt;&lt;/td&gt;
&lt;td class="org-left"&gt;&lt;a href="https://kachelmannwetter.com/de/wetter/2814127-warendorf"&gt;Wetter WAF&lt;/a&gt;&lt;/td&gt;
&lt;td class="org-left"&gt;&lt;a href="https://www.paypal.com/signin"&gt;Paypal&lt;/a&gt;&lt;/td&gt;
&lt;td class="org-left"&gt;&lt;a href="http://192.168.9.25:8123"&gt;Home Assistant&lt;/a&gt;&lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt;&lt;a href="https://configure.zsa.io/my_layouts"&gt;Oryx&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class="org-left"&gt;&lt;a href="https://app.wallabag.it/"&gt;Wallabag&lt;/a&gt;&lt;/td&gt;
&lt;td class="org-left"&gt;&lt;a href="https://www.kaufland.de/"&gt;Kaufland&lt;/a&gt;&lt;/td&gt;
&lt;td class="org-left"&gt;&lt;a href="https://www.destatis.de/DE/Home/_inhalt.html"&gt;Stat. Bundesamt&lt;/a&gt;&lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt;&lt;a href="http://127.0.0.1:631/"&gt;CUPS&lt;/a&gt;&lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt;&lt;a href="https://www.dashboard-deutschland.de/"&gt;Dashboard DE&lt;/a&gt;&lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt;&lt;a href="http://127.0.0.1:8081/"&gt;Syncthing&lt;/a&gt;&lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class="org-left"&gt;&lt;a href="https://chat.openai.com"&gt;ChatGPT&lt;/a&gt;&lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt;&lt;a href="https://de.statista.com/"&gt;Statista&lt;/a&gt;&lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt;&lt;a href="http://localhost:8080/"&gt;Jenkins&lt;/a&gt;&lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class="org-left"&gt;Wiki&lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3 class="collapsible" id="org98fbc80"&gt;2. Öffentliche Links&lt;/h3&gt;
&lt;div id="outline-container-org98fbc80" class="outline-3 collapsme"&gt;
&lt;div class="outline-text-3" id="text-org98fbc80"&gt;
&lt;p&gt;
Dies sind alle Links, die im Blog sichtbar sind. Aus den Hierarchie-Ebenen generiert mein Layout mit ein wenig CSS-Magie dann eine dynamische Liste. Mein Python Tool lässt alles bis zum Ende dieses Abschnitts in Ruhe.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3 class="collapsible" id="orgd009797"&gt;3. Private Links&lt;/h3&gt;
&lt;div id="outline-container-orgd009797" class="outline-3 collapsme"&gt;
&lt;div class="outline-text-3" id="text-orgd009797"&gt;
&lt;p&gt;
Hier wird es nun interessant. Heute (2025-03-04) befinden sich hier etwa 450 Links. Diese Links sind mit bis zu vier Tags versehen, und wurden bisher einigermassen sortiert und kategoriesiert gehalten. Wobei man schon an das "einigermassen" nur niedrige Massstäbe anlegen darf. Ach wen lüg ich da an - es war ein Dumpster-Fire.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3 class="collapsible" id="org461d405"&gt;4. Die INBOX&lt;/h3&gt;
&lt;div id="outline-container-org461d405" class="outline-3 collapsme"&gt;
&lt;div class="outline-text-3" id="text-org461d405"&gt;
&lt;p&gt;
Im Prinzip das gleiche Durcheinander, wie bei den privaten Links, nur, dass ich hier noch nicht einmal Tags vergeben habe.
&lt;/p&gt;

&lt;p&gt;
Es sind also die Abschnitte 3 und 4 um die sich mein Tool kümmern soll,
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 class="collapsible" id="org6a25f28"&gt;Was ist das Ziel des Tools?&lt;/h2&gt;
&lt;div id="outline-container-org6a25f28" class="outline-2 collapsme"&gt;
&lt;div class="outline-text-2" id="text-org6a25f28"&gt;
&lt;p&gt;
Es soll sich alle Weblinks aus den Abschnitten 3 und 4 schnappen, und sie anhand ihrer Tags in eine logische Baumstruktur bringen.
Die Fallstricke im letzten Satz befinden sich in den Wörtern &lt;b&gt;eine&lt;/b&gt; und &lt;b&gt;logische&lt;/b&gt;.
&lt;/p&gt;
&lt;/div&gt;
&lt;h3 class="collapsible" id="org7792176"&gt;Gibt es denn mehrere Bäume?&lt;/h3&gt;
&lt;div id="outline-container-org7792176" class="outline-3 collapsme"&gt;
&lt;div class="outline-text-3" id="text-org7792176"&gt;
&lt;p&gt;
Natürlich alles andere wära ja auch zu einfach. Tags sind ihrer Natur entsprechend alle gleichwertig. Sie enthalten keine Information über eine Hierarchie. Mal angenommen ich habe den folgenden Link mit den Tags a and b:
&lt;/p&gt;
&lt;pre class="example" id="orgba1a775"&gt;
* Link :a:b:
&lt;/pre&gt;

&lt;p&gt;
Dann kann ich daraus schon 2 mögliche Bäume bauen
&lt;/p&gt;
&lt;pre class="example" id="org25e5f6c"&gt;
├── a
│   └── b
│       └── Link
└── b
    └── a
        └── Link
&lt;/pre&gt;

&lt;p&gt;
Sobald ich 3 Tags habe. kann ich das zusätzlich Tag in 3 möglichen Ebenen einfügen - in jeden der beiden Bäume - und erhalte damit schon 6 mögliche Bäume.
die mathemathische Darstellung wäre &lt;code&gt;3!&lt;/code&gt; (sprich: 3 zur Fakultät) Falls jemand noch exponentielles Wachstum aus der Covid Zeit kennt. Das ist gegen fakutatives Wachstum auf Kindergarten Nivau. Nehmen wir 6 Tags sind wir bereits bei 720 möglichen Bäumen und nur 8 Tags reichen für 40320 Bäume.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3 class="collapsible" id="orgaa006e1"&gt;Und was mach ich nun mit den ganzen Bäumen&lt;/h3&gt;
&lt;div id="outline-container-orgaa006e1" class="outline-3 collapsme"&gt;
&lt;div class="outline-text-3" id="text-orgaa006e1"&gt;
&lt;p&gt;
Der gängige Ansatz wäre, sie alle zu nutzen, Dann taucht ein Link mit 4 Tags eben 24 Mal in der Linkliste auf, aber es gibt eben auch 24 Wege ihn zu finden. Grob Überschlagen würde das bei meinen 450 Links etwa 3000 Links in der Ausgabedatei ergeben. Und das ist mir zu viel. Eine Menge der Pfade ergeben dabei nicht wirklich einen Sinn. Mal angenommen ich verlinke den Ort, an dem ich mein Auto zuletzt geparkt habe:
&lt;/p&gt;
&lt;pre class="example" id="org9b536e3"&gt;
* Auto :germany:munic:mainstreet:
&lt;/pre&gt;
&lt;p&gt;
Dann denke ich ja nicht "Hmm ich weiss noch, das ich in der Mainstreet geparkt habe, also zeig mir mal alle Länder in denen es Städte mit einer Mainstreet gibt. damit ich mir daraus die passende aussuchen kann"
&lt;/p&gt;

&lt;p&gt;
Also muss ich diejengen Bäume abholzen die keinen Sinn ergeben. Hier kommt das zweite entscheidende Wort hinzu. Es soll eine &lt;b&gt;logische&lt;/b&gt; Baumstruktur werden. Aber nicht erst seit Trump sollte klar sein. das es die seltsamsten Varianten von Logik gibt. und da ist alternative Logik noch nicht mal berücksichtigt.
Und bei der Suche noch etwas sinnvollen sind Computer nicht wirklich gut. Also behelfe ich mir mit einem anderen Kriterium, der Häufigkeit. Zählen können Computer nämlich recht gut.
&lt;/p&gt;

&lt;p&gt;
Wenn ich in meiner Datei 200 mal das Tag &lt;b&gt;emacs&lt;/b&gt; habe aber nur 100 mal das Tag &lt;b&gt;orgmode&lt;/b&gt;, Dann sieht der Baum so aus
&lt;/p&gt;
&lt;pre class="example" id="org5d076ac"&gt;
└── emacs
    └── orgmode
        └── Link
&lt;/pre&gt;

&lt;p&gt;
Das klappt dann schon ganz gut, Aber hin und wieder gibt es noch ein paar seltsame Hierarchien, besonders wenn es sich um Tags handelt die insgesamt selten genutzt werden. da kommt es dan auf eine Nutzung mehr oder weniger schon an, wenn es um die Sortierung geht
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3 class="collapsible" id="org47f18b5"&gt;Und nun mogle ich auch noch&lt;/h3&gt;
&lt;div id="outline-container-org47f18b5" class="outline-3 collapsme"&gt;
&lt;div class="outline-text-3" id="text-org47f18b5"&gt;
&lt;p&gt;
In den meisten Fällen kommt es bei den seltenen Tags sowieso nicht darauf an. Aber wenn mir das mit großen (häufigen) Tags passiert ist dass schon ärgerlich. Und deshalb mogle ich ein wenig. Um mal be dem Auto Beispiel zu bleiben - das würde ich in Wirklichkeit so schreiben:
&lt;/p&gt;
&lt;pre class="example" id="org0ec4228"&gt;
* Auto :Germany:Munic:mainstreet:
&lt;/pre&gt;
&lt;p&gt;
Siehst du den Unterschied? Die ersten beiden Tags sind nun gross geschrieben. Für mein Tool ist das der Hinweis, dass Land und Ort hierarchisch wichtiger sind als die Straße. Es gibt damit immer noch 2 mögliche Bäume, aber 4 Bäume sind damit sicher verhindert. Ich kann damit nur ein zwingende Hierarchiestufe bestimmen, aber damit die Zweifelsfälle, die Auftreten könnten, ganz brauchbar abfangen. 
&lt;/p&gt;

&lt;p&gt;
Warum ist das gemogelt? Nun Tags tragen laut Lehrbuch nun mal keine hierarchische Information, und mein Pogrammiererherz fühlt sich auch ein wenig schmutzig an.
Nun aber zum technischen Teil, falls das jemand in einer anderen Sprache nachbauen möchte:
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 class="collapsible" id="org57e0576"&gt;Der Algorithmus&lt;/h2&gt;
&lt;div id="outline-container-org57e0576" class="outline-2 collapsme"&gt;
&lt;div class="outline-text-2" id="text-org57e0576"&gt;
&lt;ul class="org-ul"&gt;
&lt;li&gt;Als allerstes sammle ich alle Links ein. die ich verarbeiten möchte und werfe sie in ein Dictionary. Der Key ist dabei ein Hashwert des eigentlichen Links. Damit elimimiere ich bereits versehentliche doppelte Links.&lt;/li&gt;
&lt;li&gt;Dann werden alle Permutationen der Tags gebildet. Dabei werden alle Permutationen. die laut meiner gemogelter Tag-Hierarchie verboten sind ausgelassen.&lt;/li&gt;
&lt;li&gt;Die Liste aller Links werfe ich nun in die eigentlich Funktion. die den Baum aufbaut. Weil es bei Bäumen einfach unglaublich praktisch ist, ist diese Funktion rekursiv. Das bedeutet sie erledigt die Aufgaben für ihre Ebene der Baumstruktur, und ruft sich dann für die tieferliegende Hierarchieebene einfach sebst auf. Jede Rekursion braucht eine Abbruchbedingung. Hier ist das "Es gibt keine weiteren Links die noch nicht an einem Tag hängen".&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Was passiert in dieser Funktion nun?
&lt;/p&gt;
&lt;ul class="org-ul"&gt;
&lt;li&gt;Der eigentlich Tag wird als Knoten in den Baum eingefügt.&lt;/li&gt;
&lt;li&gt;Zunächst einmal werden alle Links in den Baum gehängt, deren Tags exakt an diese Stelle im Baum passen, An Ebene 2 z.B also nur Links mit exakt 2 Tags die genau den Tags aus Ebene 1 und 2 entsprechen müssen&lt;/li&gt;
&lt;li&gt;Wenn das erledigt ist, und noch Links übrig sind geht es ins Voting.
&lt;ul class="org-ul"&gt;
&lt;li&gt;Hier geben alle Links Stimmen dafür ab welchen Tag sie in dieser Ebene des (Teil-)baums noch gebrauchen können.&lt;/li&gt;
&lt;li&gt;Dar Tag mit den meisten Stimmen gewinnt&lt;/li&gt;
&lt;li&gt;Es wird eine Liste aller Links erstellt. die für diesen Tag gevoted haben&lt;/li&gt;
&lt;li&gt;Mit dieser Liste und den Namen des Gewinner-Tags ruft sich die Funktion selbst auf, und baut somit den kompletten Baum unterhalb auf.&lt;/li&gt;
&lt;li&gt;Die Liste wird von den ursprüglichen Links abgezogen, und sollten dann noch Links übrig sein,  geht es in eine weitere Abstimmungsrunde. Andernfalls ist die Ebene fertig und die Funktion wird beendet&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Am Ende wird der ganze Baum als Orgmode Struktur wieder in die Datei geschrieben und fertig ist die Laube.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 class="collapsible" id="org13835a4"&gt;Das Ergebnis&lt;/h2&gt;
&lt;div id="outline-container-org13835a4" class="outline-2 collapsme"&gt;
&lt;div class="outline-text-2" id="text-org13835a4"&gt;
&lt;p&gt;
In der Ausgabedatei sind die Tags nun hierarchisch und sortiert
&lt;/p&gt;
&lt;ul class="org-ul"&gt;
&lt;li&gt;Die häufigsten Tags kommen zuerst&lt;/li&gt;
&lt;li&gt;Bei gleicher Häufigkeit alphabetisch&lt;/li&gt;
&lt;li&gt;Alle Links sind im Baum&lt;/li&gt;
&lt;li&gt;kein Link ist doppelt&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Und ich habe damit bereits einen Link-Baum mit dem ich gut arbeiten kann. Natürlich entsteht damit niemals der ideala Baum der mit dem übereinstimmt. wie ich das per Han sortieren würde aber ich bin schon recht nah dran. Vor allem gibt es in dem Algoritmus noch reichlich Potential für Optimierungen.
&lt;/p&gt;
&lt;/div&gt;
&lt;h3 class="collapsible" id="org003bda5"&gt;Das Voting tweaken&lt;/h3&gt;
&lt;div id="outline-container-org003bda5" class="outline-3 collapsme"&gt;
&lt;div class="outline-text-3" id="text-org003bda5"&gt;
&lt;p&gt;
Wer sich für Wahlrecht interresiert wird festgesteiit haben, dass es dutzende, wenn nicht hunderte verschiedene Wahlverfahren gibt. die  alle zu leicht unterschiedlichen Ergebnissen führen,und auf verschiedene Ziele (feste Sitzanzahl, Gewichtung nach Aktienanteil, Minimierung der zu reitenden Tage bis zur Hauptstadt) optimiert sind.
&lt;/p&gt;

&lt;p&gt;
Das gilt auch für das Voting in diesem Algorithmus. Aktuell voted bei mir jeder Link für jeden Tag der ihm irgendwie nutzt mit einer Stimme. Ebenso wären aber auch andere Varianten denkbar:
&lt;/p&gt;

&lt;ul class="org-ul"&gt;
&lt;li&gt;Wenn ein Link 3 mögliche Bäume für Tag A sieht und 2 mögliche für Tag B, könnte er mit 3 bzw. 2 Stimmen für die jeweiligen Tags stimmen.&lt;/li&gt;
&lt;li&gt;Die Votes könnten danach gewichtet werden ob ein Tag unmittelbar in dieser Ebene nötig ist, oder möglicherweise erst tiefer im Baum.&lt;/li&gt;
&lt;li&gt;etc.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Alles in allem bin ich mit dem Ergebniss aber schon sehr zufrieden. Mein Repo mit dem aktuellen Stand des Tools befindet sich &lt;a href="https://codeberg.org/dr.ops/tagwood"&gt;hier&lt;/a&gt;   
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description><category>emacs</category><category>orgmode</category><category>python</category><guid>https://plaindrops.de/de/blog/2025/tagwood/</guid><pubDate>Tue, 04 Mar 2025 09:00:00 GMT</pubDate></item><item><title>Lisp Code schreiben mit ChatGPT</title><link>https://plaindrops.de/de/blog/2024/CodingLispWithChatGPT/</link><dc:creator>Andy Drop</dc:creator><description>&lt;p&gt;
Ich bin gerade dabei, den Besuch eines großen Festivals zu organisieren, mehr als 175 Bands spielen an 4 Tagen und etwa einem Dutzend verschiedener Orte, die quer über die Stadt verteilt sind. Das ganze ist eine logistische Herausforderung. Welche Bands möchte ich sehen und spielen die mit ausreichend zeitlichem Abstand um von Location A in Halle B zu kommen?
&lt;/p&gt;
&lt;!-- TEASER_END --&gt;

&lt;p&gt;
Also habe ich mir von der Seite des Veranstalters alle Daten in ein Org Dokument kopiert und mir eine Übersicht generieren lassen. in Org sieht das so aus:
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;* Bands  
   :PROPERTIES:
   :COLUMNS: %ITEM %Ort %Datum %Uhrzeit %Link1 %Link2 %Genre
   :END:

#+BEGIN: columnview :id local :skip-empty-rows t
| ITEM             | Ort                     |      Datum | Uhrzeit | Link1 | Link2 | Genre |
|------------------+-------------------------+------------+---------+-------+-------+-------|
| 12 Illusions (D) | Moritzbastei            | 17.05.2024 |   21.00 | [[https://www.youtube.com/watch?v=MOPkUBQbCzA][Song1]] | [[https://www.youtube.com/watch?v=_CUVz7neaRM][Song2]] | o     |
| A Projection (S) | Volkspalast Kuppelhalle | 19.05.2024 |   17.40 | [[https://www.youtube.com/watch?v=W7CndC-CQrw][Song1]] | [[https://www.youtube.com/watch?v=D1C5KpP3Hic][Song2]] | o     |
#+END:   

** 12 Illusions (D)
   :PROPERTIES:
   :Datum: 17.05.2024
   :Uhrzeit: 21.00
   :Ort: Moritzbastei
   :Adresse: Universitätsstraße 9
   :Strassenbahn: 9 (Roßplatz)
   :Strassenbahn+: 8, 9, 11, 14, 16, 32 (Wilhelm-Leuschner-Platz)
   :Bus: 412 (Roßplatz)
   :Bus+: N8 (Roßplatz)
   :S-Bahn: S1, S2, S3, S4, S5, S5X, S6 (Wilhelm-Leuscher-Platz)
   :Link1: [[https://www.youtube.com/watch?v=MOPkUBQbCzA][Song1]]
   :Link2: [[https://www.youtube.com/watch?v=_CUVz7neaRM][Song2]]
   :Genre: o 
   :END:

12 ILLUSIONS is a newly-launched German dark electro pop band.

** A Projection (S)
   :PROPERTIES:
   :Datum: 19.05.2024
   :Uhrzeit: 17.40
   :Ort: Volkspalast Kuppelhalle
   :Adresse: Messehalle 16 / Puschstraße 10
   :Strassenbahn: 16 (An den Tierkliniken)
   :Link1: [[https://www.youtube.com/watch?v=W7CndC-CQrw][Song1]]
   :Link2: [[https://www.youtube.com/watch?v=D1C5KpP3Hic][Song2]]
   :Genre: o 
   :END: 
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;
Die Tabelle oben ist meine Übersicht, und da dort mittlerweile knapp 200 Zeilen drin sind ist es mühsam, wenn man zu einer dieser Bands in den Teil mit den Details scrollen möchte. Wenn der Veranstalter die nicht schon alphabetisch aufgelistet hätte wäre es kaum machbar.
&lt;/p&gt;

&lt;p&gt;
Die Übersichtstabelle generiert sich, dank Org Magie, immer neu wenn ich C-c C-c auf der Kopfzeile drücke. Die erste Spalte ist also buchstäblich identisch mit der Überschrift der einzelnen Bands, Wenn diese Überschrift einen Link auf sich selbst enthalten würde, dann wären in der ersten Spalte lauter Links auf die Details zu den Bands.
&lt;/p&gt;

&lt;p&gt;
Um diese Links zu erzeugen muss ich mehrere Funktionen aufrufen:
&lt;/p&gt;
&lt;ul class="org-ul"&gt;
&lt;li&gt;Erzeugen einer Custom ID für die Überschrift&lt;/li&gt;
&lt;li&gt;Kopieren dieser ID ins Clipboard&lt;/li&gt;
&lt;li&gt;Markieren der Überschrift&lt;/li&gt;
&lt;li&gt;Einfügen des Links&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
und das knapp 200 mal
&lt;/p&gt;

&lt;p&gt;
Da wäre es zumindest schön, eine Funktion zu haben, die diese Schritte durchführt, und die ich dann an eine Taste binden kann.
&lt;/p&gt;

&lt;p&gt;
Eine Nachfrage via Social Medie ergab, das zwar ähnliche Dinge schon erstellt wurden, aber alle hatten dann doch etwas leicht anderes zum Ziel. Und dann dachte ich mir,ich schaue mal ob ChatGPT mir das Problem lösen kann.
&lt;/p&gt;
&lt;h2 class="collapsible" id="orgff86223"&gt;Der erste Versuch&lt;/h2&gt;
&lt;div id="outline-container-orgff86223" class="outline-2 collapsme"&gt;
&lt;div class="outline-text-2" id="text-orgff86223"&gt;
&lt;p&gt;
Ich: Can you write a emacs lisp function, to link an orgmode Heading at point with its own id, creating one if it does not already exist?
&lt;/p&gt;

&lt;p&gt;
ChatGPT: Certainly! Below is a simple Emacs Lisp function that links an Org mode heading at point with its own ID, creating one if it does not already exist:
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;defun&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;link-heading-with-id&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="s"&gt;"Link an Org mode heading at point with its own ID, creating one if it does not already exist."&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;interactive&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;org-back-to-heading&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;let*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nf"&gt;heading&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;nth&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;org-heading-components&lt;/span&gt;&lt;span class="p"&gt;)))&lt;/span&gt;
&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;id&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;org-entry-get&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;nil&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;"CUSTOM_ID"&lt;/span&gt;&lt;span class="p"&gt;)))&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;not&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;progn&lt;/span&gt;
&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;setq&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;id&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;concat&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;"id-"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;md5&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;heading&lt;/span&gt;&lt;span class="p"&gt;)))&lt;/span&gt;
&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;org-set-property&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;"CUSTOM_ID"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;id&lt;/span&gt;&lt;span class="p"&gt;)))&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;insert&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;format&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;"[[#%s][%s]]"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;id&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;heading&lt;/span&gt;&lt;span class="p"&gt;))))&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;
Nicht schlecht für den ersten Versuch. Die Funktion bewegt zuerst den Cursor an den Anfang der aktuellen Überschrift, ruft dann den Text der Überschrift und deren vorhandene ID ab, falls eine vorhanden ist. Falls die Überschrift keine ID hat, generiert sie eine mittels des &lt;code&gt;md5&lt;/code&gt;-Hashes des Überschriftentextes. Schließlich fügt sie einen Link zur Überschrift mit ihrer ID ein.
&lt;/p&gt;

&lt;p&gt;
Leider wird der Cursor an den Anfang der Überschrift bewegt, wodurch der neue Link vor der '** Überschrift' eingefügt wird, und sie somit keine Überschrift mehr ist. Aber vielleicht kann ChatGPF das korrigieren.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 class="collapsible" id="orgbf3ce26"&gt;Can you alter it, so it replaces the original Heading?&lt;/h2&gt;
&lt;div id="outline-container-orgbf3ce26" class="outline-2 collapsme"&gt;
&lt;div class="outline-text-2" id="text-orgbf3ce26"&gt;
&lt;p&gt;
ChatGPT: Certainly! Here's the modified function that replaces the original heading with the linked version:
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;defun&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;link-heading-with-id&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="s"&gt;"Replace an Org mode heading at point with a linked version using its own ID, creating one if it does not already exist."&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;interactive&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;org-back-to-heading&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;let*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nf"&gt;heading-start&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;point&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;heading-end&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;line-end-position&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;heading&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;nth&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;org-heading-components&lt;/span&gt;&lt;span class="p"&gt;)))&lt;/span&gt;
&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;id&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;org-entry-get&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;nil&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;"CUSTOM_ID"&lt;/span&gt;&lt;span class="p"&gt;)))&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;not&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;progn&lt;/span&gt;
&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;setq&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;id&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;concat&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;"id-"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;md5&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;heading&lt;/span&gt;&lt;span class="p"&gt;)))&lt;/span&gt;
&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;org-set-property&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;"CUSTOM_ID"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;id&lt;/span&gt;&lt;span class="p"&gt;)))&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;delete-region&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;heading-start&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;heading-end&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;insert&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;format&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;"* [[#%s][%s]]"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;id&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;heading&lt;/span&gt;&lt;span class="p"&gt;))))&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;
Diese Version der Funktion löscht die originale Überschrift und fügt die verlinkte Version an ihrer Stelle ein. Aber sie hat immer noch ein Problem, das man in der letzten Zeile sehen kann. Es fügt immer eine Überschrift der Ebene 1 ein (es fügt ein Sternchen voran, immer nur eines). Mach das weg, ChatGPT!
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 class="collapsible" id="orgfc9f312"&gt;Alter it, so that it preserves the Heading-Level&lt;/h2&gt;
&lt;div id="outline-container-orgfc9f312" class="outline-2 collapsme"&gt;
&lt;div class="outline-text-2" id="text-orgfc9f312"&gt;
&lt;p&gt;
ChatGPT: Sure! Here's the modified function that preserves the heading level while replacing the original heading with the linked version:
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;defun&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;link-heading-with-id&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="s"&gt;"Replace an Org mode heading at point&lt;/span&gt;
&lt;span class="s"&gt;   with a linked version using its own ID,&lt;/span&gt;
&lt;span class="s"&gt;   preserving the heading level&lt;/span&gt;
&lt;span class="s"&gt;   and creating one if it does not already exist."&lt;/span&gt;
&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;interactive&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;org-back-to-heading&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;let*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nf"&gt;heading-level&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;org-outline-level&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;heading-start&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;point&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;heading-end&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;line-end-position&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;heading&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;nth&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;org-heading-components&lt;/span&gt;&lt;span class="p"&gt;)))&lt;/span&gt;
&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;id&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;org-entry-get&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;nil&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;"CUSTOM_ID"&lt;/span&gt;&lt;span class="p"&gt;)))&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;not&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;progn&lt;/span&gt;
&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;setq&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;id&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;concat&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;"id-"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;md5&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;heading&lt;/span&gt;&lt;span class="p"&gt;)))&lt;/span&gt;
&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;org-set-property&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;"CUSTOM_ID"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;id&lt;/span&gt;&lt;span class="p"&gt;)))&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;delete-region&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;heading-start&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;heading-end&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;insert&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;format&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;"%s [[#%s][%s]]"&lt;/span&gt;
&lt;span class="w"&gt;                            &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;make-string&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;heading-level&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;?*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;                            &lt;/span&gt;&lt;span class="nv"&gt;id&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;heading&lt;/span&gt;&lt;span class="p"&gt;))))&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;
Diese Version der Funktion ruft zunächst die Überschriftsebene mit &lt;code&gt;org-outline-level&lt;/code&gt; ab. Dann löscht sie die ursprüngliche Überschrift und fügt die verlinkte Version mit derselben Überschriftsebene ein. Ich habe es ausprobiert, und es hat wie beabsichtigt funktioniert.
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;* Bands  
   :PROPERTIES:
   :COLUMNS: %ITEM %Ort %Datum %Uhrzeit %Link1 %Link2 %Genre
   :END:

#+BEGIN: columnview :id local :skip-empty-rows t
| ITEM                                                       | Ort          |      Datum | Uhrzeit | Link1 | Link2 | Genre |
|------------------------------------------------------------+--------------+------------+---------+-------+-------+-------|
| [[#id-e9884ccd6b1210ce39f04bc2eb7f108a][12 Illusions (D)]] | Moritzbastei | 17.05.2024 |   21.00 | Song1 | Song2 | o     |
#+END:   

** [[#id-e9884ccd6b1210ce39f04bc2eb7f108a][12 Illusions (D)]]
   :PROPERTIES:
   :Datum: 17.05.2024
   :Uhrzeit: 21.00
   :Ort: Moritzbastei
   :Adresse: Universitätsstraße 9
   :Strassenbahn: 9 (Roßplatz)
   :Strassenbahn+: 8, 9, 11, 14, 16, 32 (Wilhelm-Leuschner-Platz)
   :Bus: 412 (Roßplatz)
   :Bus+: N8 (Roßplatz)
   :S-Bahn: S1, S2, S3, S4, S5, S5X, S6 (Wilhelm-Leuscher-Platz)
   :Link1: [[https://www.youtube.com/watch?v=MOPkUBQbCzA][Song1]]
   :Link2: [[https://www.youtube.com/watch?v=_CUVz7neaRM][Song2]]
   :Genre: o
   :CUSTOM_ID: id-e9884ccd6b1210ce39f04bc2eb7f108a
   :END:

12 ILLUSIONS is a newly-launched German dark electro pop band.
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 class="collapsible" id="org5461660"&gt;Es funktioniert&lt;/h2&gt;
&lt;div id="outline-container-org5461660" class="outline-2 collapsme"&gt;
&lt;div class="outline-text-2" id="text-org5461660"&gt;
&lt;p&gt;
Das Einzige, was noch zu tun ist, ist das Kopieren in die Konfiguration und das Binden an eine Taste.
Ach ja, und ChatGPT kann das auch erledigen.
&lt;/p&gt;

&lt;p&gt;
Ich: Please make a keybinding that binds M-. to this function
&lt;/p&gt;

&lt;p&gt;
ChatGPT: Sure! You can bind the &lt;code&gt;link-heading-with-id&lt;/code&gt; function to a keybinding of your choice, such as &lt;code&gt;M-.&lt;/code&gt; . Here's how you can do it:
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;global-set-key&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;kbd&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;"M-."&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ss"&gt;'link-heading-with-id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description><category>chatgpt</category><category>emacs</category><category>llm</category><category>orgmode</category><guid>https://plaindrops.de/de/blog/2024/CodingLispWithChatGPT/</guid><pubDate>Thu, 09 May 2024 08:00:00 GMT</pubDate></item><item><title>Projekt Medusa: Denote</title><link>https://plaindrops.de/de/blog/2024/MedusaDenote/</link><dc:creator>Andy Drop</dc:creator><description>&lt;p&gt;
Wer schon mal &lt;a href="https://plaindrops.de/page/project/dremacs/"&gt;durch meine Projekte&lt;/a&gt; geschaut hat wird feststellen, dass es dort ein Projekt &lt;i&gt;Medusa&lt;/i&gt; gibt, dass ich für mich angelegt habe. In Emacs gibt es immer wieder Funktionen die ich nur sehr selten brauche, und dann komme ich oft nicht direkt auf den notwendigen Befehl. Da ist es dann ganz hilfreich eine Hydra für diese Situation zu haben, und das Projekt unter dem ich all diese Hydras zusammenfasse, heißt bei mir Medusa. Neulich wollte ich für Denote eine Hydra anlegen, und habe festgestellt, dass es da ein paar Probleme gibt.
&lt;/p&gt;
&lt;!-- TEASER_END --&gt;
&lt;p&gt;
Generell halte ich es mit den Hydras so: Ich habe zwei Daumentasten über die ich auf meiner Tastatur die Hydras ansteuere. Auf dem linken Daumen liegt eine eher generelle Hydra die für alle Funktionen gedacht ist die nicht nur in einem speziellen Mode gebraucht werden. Hier kann man es sich etwa so vorstellen, dass dort die Funktion liegen die man normalerweise mit dem Präfix CTRL-x erreicht
&lt;/p&gt;

&lt;p&gt;
Auf dem rechten Daumen liegt eine Art Kontextmenü, also die Hydra, die zu dem jeweiligen Mode gehört, in dem ich mich gerade befinde. Das kann man sich etwa so vorstellen, als wären dort alle Funktionen die über CRTL-c als Prefix zu erreichen sind. Dass ich das ganze wie ein Kontextmenü behandle, sieht man auch daran, dass ich diese Hydras gleichzeitig auf der rechten Maustaste liegen habe.
&lt;/p&gt;
&lt;h2 class="collapsible" id="org9b41ea3"&gt;Modelose Kunst&lt;/h2&gt;
&lt;div id="outline-container-org9b41ea3" class="outline-2 collapsme"&gt;
&lt;div class="outline-text-2" id="text-org9b41ea3"&gt;
&lt;p&gt;
Und hier beginnt auch schon das Problem. &lt;a href="https://protesilaos.com/emacs/denote"&gt;Denote&lt;/a&gt; ist eine Anwendung, die viele Befehle zur Verfügung stellt, um lose geschriebene Notizen miteinander zu verknüpfen. Da diese Notizen jedoch in allen möglichen Formaten geschrieben sein können, gilt natürlich immer der jeweilige Major Mode des Formats. Ich schreibe dieses Blog z.B im Org-Mode das heißt der Major Mode ist in dem Moment nicht Denote sondern Org-Mode. Das Package Major Mode Hydra, funktioniert deswegen schon mal nicht
&lt;/p&gt;

&lt;p&gt;
Denote ist aber auch kein Minor Mode, den man beliebig bei allen möglichen Dokumenten ein- oder ausschalten kann. Ein Dokument ist genau dann ein Denote Dokument wenn es sich in einem bestimmten Verzeichnis (&lt;a href="https://protesilaos.com/emacs/denote#h:15719799-a5ff-4e9a-9f10-4ca03ef8f6c5"&gt;Silo&lt;/a&gt;) befindet und einer Namenskonvention folgt. Und da Denote kein Minor Mode ist, hat es auch keine eigene Keymap. Aber Emacs wäre nicht Emacs, wenn man da nicht etwas machen könnte.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 class="collapsible" id="orge566754"&gt;Wir bauen uns einen Minor-Mode&lt;/h2&gt;
&lt;div id="outline-container-orge566754" class="outline-2 collapsme"&gt;
&lt;div class="outline-text-2" id="text-orge566754"&gt;
&lt;p&gt;
Es wäre gut, wenn Denote ein Minor Mode hätte, der immer dann aktiv wäre, wenn sich das aktive Dokument in einem Denote-Silo befindet. Da ein Silo immer auch ein Verzeichnis ist, hat Emacs ein Werkzeug an Bord: &lt;code&gt;Verzeichnisspezifische Variablen&lt;/code&gt;
&lt;/p&gt;

&lt;p&gt;
Das Handbuch sagt
&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;
Der übliche Weg, verzeichnisspezifische Variablen zu definieren, besteht darin, eine Datei mit dem Namen .dir-locals.el in einem Verzeichnis zu platzieren. Wenn Emacs eine Datei in diesem Verzeichnis oder einem seiner Unterverzeichnisse öffnet, werden die verzeichnisspezifischen Variablen, die in .dir-locals.el angegeben sind, angewendet, als ob sie als dateispezifische Variablen für diese Datei definiert worden wären. Emacs sucht nach .dir-locals.el, beginnend im Verzeichnis der geöffneten Datei, und bewegt sich dabei aufwärts im Verzeichnisbaum.
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
Meine Datei &lt;code&gt;.dir-locals.el&lt;/code&gt; liegt im obersten Verzeichnis meines Silos, und sieht so aus
&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nf"&gt;nil&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nf"&gt;denote-mode&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;t&lt;/span&gt;&lt;span class="p"&gt;))))&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;
Diese Zeile sorgt dafür, das bei allen Dateien in diesem Verzeichnis der denote-mode eingeschaltet wird. Das ist ein Minor Mode, den Denote nicht von Hause aus mitbringt, sondern den wir zuvor selbst erzeugen müssen. Das passiert im entsprechenden Teil meiner Emacs Konfiguration.
&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;define-minor-mode&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;denote-mode&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="s"&gt;"Denote is a simple note-taking tool for Emacs."&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nv"&gt;:lighter&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;" Note"&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nv"&gt;:keymap&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nb"&gt;map&lt;/span&gt;
&lt;span class="w"&gt;                   &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;make-sparse-keymap&lt;/span&gt;&lt;span class="p"&gt;)))&lt;/span&gt;
&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;define-key&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;map&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;kbd&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;"C-l"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ss"&gt;'denote-link-or-create&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;define-key&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;map&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;kbd&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;"C-n"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ss"&gt;'denote-link-after-creating&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;define-key&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;map&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;kbd&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;"&amp;lt;f6&amp;gt;"&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="k"&gt;lambda&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;interactive&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;find-file&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;"~/wiki"&lt;/span&gt;&lt;span class="p"&gt;)))&lt;/span&gt;
&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="nb"&gt;map&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;
&lt;code&gt;:lighter&lt;/code&gt; gibt an, was in die Mode-Line geschrieben wrd, wenn der Minor-Mode aktiv ist, und &lt;code&gt;:keymap&lt;/code&gt; gibt an welche Keymap genutzt werden soll. In diesem Fall wird über &lt;code&gt;make-sparse-keymap&lt;/code&gt; eine leere Keymap erzeugt, und mit den gängigsten Befehlen die ich so brauche gefüllt. Vermutlich könnte ich diese Erstbefüllung auch weglassen, da ich die endgültigen Keybindings sowieso später mache, aber ich habe kein Beispiel gefunden in dem eine leere Keymap angelegt wurde.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 class="collapsible" id="org61f7307"&gt;Die eigentliche Hydra&lt;/h2&gt;
&lt;div id="outline-container-org61f7307" class="outline-2 collapsme"&gt;
&lt;div class="outline-text-2" id="text-org61f7307"&gt;
&lt;p&gt;
Ich bestücke meine frisch erzeugte Keymap dann noch mit den einzig entscheidenden Tasten. &lt;code&gt;&amp;lt;menu&amp;gt;&lt;/code&gt; ist der KeyCode den meine rechte Daumentaste sendet.
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;define-key&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;denote-mode-map&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;kbd&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;"&amp;lt;menu&amp;gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;#&lt;/span&gt;&lt;span class="ss"&gt;'medusa/denote/body&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;define-key&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;denote-mode-map&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;kbd&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;"&amp;lt;mouse-3&amp;gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;#&lt;/span&gt;&lt;span class="ss"&gt;'medusa/denote/body&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;
Wenn ich dann in einem Denote Silo die rechte Maustaste click erscheint folgende Hydra
&lt;/p&gt;

&lt;p&gt;
&lt;img src="https://plaindrops.de/images/MedusaDenote.png" alt="nil"&gt;
&lt;/p&gt;

&lt;p&gt;
Erzeugt wird das Ganze durch folgenden Code.
ich nutze dabei die etwas kürzere und hübschere Syntax die mir das Package &lt;code&gt;Pretty Hydra&lt;/code&gt; zur Verfügung stellt.
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;pretty-hydra-define&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;medusa/denote&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;:color&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;blue&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;:quit-key&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;"&amp;lt;escape&amp;gt;"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;:title&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;"Denote"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Create"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"n"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;denote&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;"_n_ew note"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"t"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;denote-type&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;"other _t_ype"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"d"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;denote-date&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="s"&gt;"other _d_ate"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"s"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;denote-subdirectory&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="s"&gt;"other _s_ubdir"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"T"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;denote-template&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="s"&gt;"with _T_emplate"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"S"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;denote-signature&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="s"&gt;"with _S_ignature"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="s"&gt;"Link"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"l"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;denote-link-or-create&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;"_l_ink"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"L"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;denote-link-or-create-with-command&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;"_L_ink with command"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"h"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;denote-org-extras-link-to-heading&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="s"&gt;"specific _h_eader"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"r"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;denote-add-links&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;"by _r_egexp"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"d"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;denote-add-links&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;"by _d_ired"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"b"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;denote-backlinks&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;"_b_acklinks"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="s"&gt;"Rename"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"RF"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;denote-rename-file&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;"Rename File"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"FT"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;denote-change-file-type-and-front-matter&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="s"&gt;"only FileType"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"UF"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;denote-rename-file-using-front-matter&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;"use Frontmatter"&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="s"&gt;"Dyn. Block"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"DL"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;denote-org-extras-dblock-insert-links&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;"dyn. Links"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"DB"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;denote-org-extras-dblock-insert-backlinks&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;"dyn. Backlinks"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="s"&gt;"Convert links"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"CF"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;denote-org-extras-convert-links-to-file-type&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;"to File Type"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"CD"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;denote-org-extras-convert-links-to-denote-type&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;"to Denote Type"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="s"&gt;"Other"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"?"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;info&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;"denote"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;"Help"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"&amp;lt;menu&amp;gt;"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;major-mode-hydra&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;"Major Mode Hydra"&lt;/span&gt;&lt;span class="p"&gt;))))&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description><category>denote</category><category>emacs</category><category>hydra</category><category>medusa</category><guid>https://plaindrops.de/de/blog/2024/MedusaDenote/</guid><pubDate>Fri, 03 May 2024 08:00:00 GMT</pubDate></item><item><title>Keymacs, ein Programm um Emacs Keybindings zu erzeugen </title><link>https://plaindrops.de/de/blog/2024/keymacs/</link><dc:creator>Andy Drop</dc:creator><description>&lt;p&gt;
Offensichtlich gibt es ein Menge Emacs-Puristen in der Welt, die im Laufe der Jahre gelernt haben so komplizerte Tastenfolgen wie C-x r t M-. C-c C-p fliessend zu tippen
Ich gehöre nicht dazu. Und als ich versucht habe heraus zu finden wie ich das für mich anpassen kann, waren die Webforen voll von Kommentaren, dass das keine gute Idee sei.
&lt;/p&gt;
&lt;!-- TEASER_END --&gt;
&lt;p&gt;
Im wesentlichen aus folgenden Gründen:
&lt;/p&gt;

&lt;ol class="org-ol"&gt;
&lt;li&gt;&lt;b&gt;Portabilität:&lt;/b&gt; Wenn man seine Emacs-Tastenbelegung stark anpasst, könntest man Schwierigkeiten haben, Emacs auf einem anderen System zu verwenden, auf dem seine Anpassungen nicht verfügbar sind. Das könnte problematisch sein, wenn man häufig zwischen verschiedenen Rechnern wechselt oder wenn man Emacs auf einem entfernten Server verwenden muss.&lt;/li&gt;

&lt;li&gt;&lt;b&gt;Lernkurve:&lt;/b&gt; Emacs hat bereits eine steile Lernkurve für Anfänger, und wenn man die Tastenbelegung stark anpasst, kann das die Sache für andere noch schwieriger machen, seine Konfiguration zu verstehen. Das könnte ein Problem sein, wenn man mit anderen zusammenarbeitet oder wenn man seine Konfiguration mit jemand anderem teilen muss.&lt;/li&gt;

&lt;li&gt;&lt;b&gt;Konflikte:&lt;/b&gt; Wenn man nicht vorsichtig ist, können stark angepasste Tastenbelegungen zu Konflikten zwischen verschiedenen Paketen oder Modi in Emacs führen. Dies kann zu unerwartetem Verhalten führen und es schwieriger machen, Probleme zu diagnostizieren und zu beheben.&lt;/li&gt;

&lt;li&gt;&lt;b&gt;Abhängigkeit von Anpassungen:&lt;/b&gt; Wenn man zu sehr auf seine individuellen Tastenbelegungen angewiesen ist, könnte man feststellen, dass es schwierig ist, Emacs ohne sie zu verwenden. Das könnte ein Problem sein, wenn man einmal auf einem System arbeiten muss, auf dem man seine individuelle Konfiguration nicht nutzen kann.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;
Ich muss allerdings nie meine &lt;a href="https://plaindrops.de/page/project/Emacs-Config/"&gt;Emacs Konfiguration&lt;/a&gt; mit anden Menschen teilen, oder Emacs woanders benutzen, als auf meinen beiden Rechnern. Daher fallen die Punkte 1 und 4 schon mal weg. Was die Lernkurve angeht, habe ich ja nicht vor mir noch kompliziertere Tastenkombinationen auszudenken. Ich möchte einfach mit dem weiterarbeiten können, das sich seit Jahrzehnten in mein Gedächtnis gebrannt hat. Punkt 2 hat sich damit auch erledigt.
&lt;/p&gt;

&lt;p&gt;
Bleibt noch Punkt 3, und es stimmt: Wenn man nicht vorsichtig ist, können stark angepasste Tastenbelegungen zu Konflikten zwischen verschiedenen Paketen oder Modi in Emacs führen.
&lt;/p&gt;

&lt;p&gt;
Ich bin dem bisher aus dem Weg gegangen, indem ich in hübschen Tabellen (Org-Mode sei Dank) Buch darüber geführt habe, welche Anpassung ich vorgenommen habe, um zu erkennen wo es evtl. zu Konflikten kommen kann. Dieses Vorgehen ist natürlich recht anfällig für Fehler. Die Tabellen müssen immer konsistent sein zu den Keybindings an dutzenden von Stellen in der Config. Da braucht man schon sehr viel Disziplin, und es wird schwierig, mal eben etwas auszuprobieren.
&lt;/p&gt;

&lt;p&gt;
Etwas besser wurde es, als ich begonnen habe, alle Keybindings in einer Datei zusammenzufassen. Diese Datei wird am Ende der init.el geladen, und nigrgendwo anders werden Keybindings gemacht. Damit hat es lange funktioniert. Keine Tabellen mehr. Im Code steckt die Wahrheit. Leider war es nicht so einfach im Code nach potentiellen Konflikten zu suchen. Man kann nicht mal eben die Sortierung im Code von "Keymap Name" auf "verwendete Taste" ändern. Da waren Tabellen schon besser.
&lt;/p&gt;

&lt;p&gt;
Also habe ich mich hingesetzt, und mir ein Tool in Python geschrieben, bei dem ich meine gewünschten Keybindings wieder in Org-Tabellen verwalten kann, und das Tool erzeugt mir daraus automatisch die gewünschten Keybindings. Es heisst
&lt;/p&gt;
&lt;h2 class="collapsible" id="orgafc85e5"&gt;Keymacs&lt;/h2&gt;
&lt;div id="outline-container-orgafc85e5" class="outline-2 collapsme"&gt;
&lt;div class="outline-text-2" id="text-orgafc85e5"&gt;
&lt;p&gt;
Das Programm ist ganz simpel. Es geht über eine Datei (default: keymap.org im aktuellen Verzeichnis), sucht sich alle Tabellenzeilen zusammen, und geht davon aus, dass es sich dann dabei 
um Beschreibungen von Keybindings handelt. Dabei werden Headerzeilen und Trennzeilen ignoriert, sowie fast aller anderer umgebender Text auch. Man kann in der Datei also auch beschreiben, was man sich bei den einzelnen Bindings gedacht hat.
&lt;/p&gt;

&lt;p&gt;
Es gibt zwei leicht unterschiedliche Tabellen
&lt;/p&gt;
&lt;/div&gt;
&lt;h3 class="collapsible" id="orgbc21b98"&gt;Die explizite Tabelle&lt;/h3&gt;
&lt;div id="outline-container-orgbc21b98" class="outline-3 collapsme"&gt;
&lt;div class="outline-text-3" id="text-orgbc21b98"&gt;
&lt;table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides"&gt;


&lt;colgroup&gt;
&lt;col class="org-left"&gt;

&lt;col class="org-left"&gt;

&lt;col class="org-left"&gt;

&lt;col class="org-left"&gt;

&lt;col class="org-left"&gt;

&lt;col class="org-left"&gt;

&lt;col class="org-left"&gt;

&lt;col class="org-left"&gt;
&lt;/colgroup&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th scope="col" class="org-left"&gt;Key&lt;/th&gt;
&lt;th scope="col" class="org-left"&gt;Mode&lt;/th&gt;
&lt;th scope="col" class="org-left"&gt;Ctrl&lt;/th&gt;
&lt;th scope="col" class="org-left"&gt;Super&lt;/th&gt;
&lt;th scope="col" class="org-left"&gt;Meta&lt;/th&gt;
&lt;th scope="col" class="org-left"&gt;Shift&lt;/th&gt;
&lt;th scope="col" class="org-left"&gt;Function&lt;/th&gt;
&lt;th scope="col" class="org-left"&gt;Remark&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="org-left"&gt;c&lt;/td&gt;
&lt;td class="org-left"&gt;treemacs-mode&lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt;'treemacs-copy-file&lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class="org-left"&gt;c&lt;/td&gt;
&lt;td class="org-left"&gt;treemacs-node-visit&lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt;'treemacs-visit-node-close-treemacs&lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class="org-left"&gt;c&lt;/td&gt;
&lt;td class="org-left"&gt;treemacs-toggle&lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt;'treemacs-indicate-top-scroll-mode&lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class="org-left"&gt;d&lt;/td&gt;
&lt;td class="org-left"&gt;treemacs-copy&lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt;'treemacs-paste-dir-at-point-to-minibuffer&lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class="org-left"&gt;l&lt;/td&gt;
&lt;td class="org-left"&gt;treemacs-mode&lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt;treemacs-copy-map&lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class="org-left"&gt;p&lt;/td&gt;
&lt;td class="org-left"&gt;treemacs-copy&lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt;'treemacs-copy-project-path-at-point&lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class="org-left"&gt;r&lt;/td&gt;
&lt;td class="org-left"&gt;treemacs-copy&lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt;'treemacs-copy-relative-path-at-point&lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class="org-left"&gt;n&lt;/td&gt;
&lt;td class="org-left"&gt;treemacs-mode&lt;/td&gt;
&lt;td class="org-left"&gt;X&lt;/td&gt;
&lt;td class="org-left"&gt;X&lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt;'treemacs-create-dir&lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class="org-left"&gt;n&lt;/td&gt;
&lt;td class="org-left"&gt;treemacs-mode&lt;/td&gt;
&lt;td class="org-left"&gt;X&lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt;'treemacs-create-file&lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;
Ich habe hier mal mit &lt;code&gt;Treemacs&lt;/code&gt; ein Beispiel herausgesucht, and dem sich einige Dinge gut zeigen lassen. &lt;code&gt;Treemacs&lt;/code&gt; hat die Besonderheit, dass ich im Fenster keine Eingaben machen musss. Es gibt also keinen Grund nicht einfach Buchstaben zu benutzen, ohne den kleinen Finger ständig auf der Ctrl Taste zu haben. Zunächst mal die ersten 3 Zeilen
&lt;/p&gt;

&lt;table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides"&gt;


&lt;colgroup&gt;
&lt;col class="org-left"&gt;

&lt;col class="org-left"&gt;

&lt;col class="org-left"&gt;

&lt;col class="org-left"&gt;

&lt;col class="org-left"&gt;

&lt;col class="org-left"&gt;

&lt;col class="org-left"&gt;

&lt;col class="org-left"&gt;
&lt;/colgroup&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th scope="col" class="org-left"&gt;Key&lt;/th&gt;
&lt;th scope="col" class="org-left"&gt;Mode&lt;/th&gt;
&lt;th scope="col" class="org-left"&gt;Ctrl&lt;/th&gt;
&lt;th scope="col" class="org-left"&gt;Super&lt;/th&gt;
&lt;th scope="col" class="org-left"&gt;Meta&lt;/th&gt;
&lt;th scope="col" class="org-left"&gt;Shift&lt;/th&gt;
&lt;th scope="col" class="org-left"&gt;Function&lt;/th&gt;
&lt;th scope="col" class="org-left"&gt;Remark&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="org-left"&gt;c&lt;/td&gt;
&lt;td class="org-left"&gt;treemacs-mode&lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt;'treemacs-copy-file&lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class="org-left"&gt;c&lt;/td&gt;
&lt;td class="org-left"&gt;treemacs-node-visit&lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt;'treemacs-visit-node-close-treemacs&lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class="org-left"&gt;c&lt;/td&gt;
&lt;td class="org-left"&gt;treemacs-toggle&lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt;'treemacs-indicate-top-scroll-mode&lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;
Es gibt 3 verschiedene Stellen. an denen ich einfach &lt;code&gt;c&lt;/code&gt; drücken kann, die jedoch nicht im Konflikt miteinander sind, weil sie sich in verschiedenen Keymaps befinden. Um den namen der keymap zu erhalten, hängt das Programm einfach &lt;code&gt;-map&lt;/code&gt; an den Mode.
&lt;/p&gt;

&lt;p&gt;
Aber moment mal, es gibt doch keinen &lt;code&gt;treemacs-toggle&lt;/code&gt; Mode? Stimmt, aber es gibt eine Keymap dazu und ein Prefix, an das diese gebunden ist. Ich zeige das mal and der &lt;code&gt;treemacs-copy-map&lt;/code&gt;:
&lt;/p&gt;

&lt;table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides"&gt;


&lt;colgroup&gt;
&lt;col class="org-left"&gt;

&lt;col class="org-left"&gt;

&lt;col class="org-left"&gt;

&lt;col class="org-left"&gt;

&lt;col class="org-left"&gt;

&lt;col class="org-left"&gt;

&lt;col class="org-left"&gt;

&lt;col class="org-left"&gt;
&lt;/colgroup&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th scope="col" class="org-left"&gt;Key&lt;/th&gt;
&lt;th scope="col" class="org-left"&gt;Mode&lt;/th&gt;
&lt;th scope="col" class="org-left"&gt;Ctrl&lt;/th&gt;
&lt;th scope="col" class="org-left"&gt;Super&lt;/th&gt;
&lt;th scope="col" class="org-left"&gt;Meta&lt;/th&gt;
&lt;th scope="col" class="org-left"&gt;Shift&lt;/th&gt;
&lt;th scope="col" class="org-left"&gt;Function&lt;/th&gt;
&lt;th scope="col" class="org-left"&gt;Remark&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="org-left"&gt;l&lt;/td&gt;
&lt;td class="org-left"&gt;treemacs-mode&lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt;treemacs-copy-map&lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class="org-left"&gt;d&lt;/td&gt;
&lt;td class="org-left"&gt;treemacs-copy&lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt;'treemacs-paste-dir-at-point-to-minibuffer&lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class="org-left"&gt;p&lt;/td&gt;
&lt;td class="org-left"&gt;treemacs-copy&lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt;'treemacs-copy-project-path-at-point&lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class="org-left"&gt;r&lt;/td&gt;
&lt;td class="org-left"&gt;treemacs-copy&lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt;'treemacs-copy-relative-path-at-point&lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class="org-left"&gt;a&lt;/td&gt;
&lt;td class="org-left"&gt;treemacs-copy&lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt;'treemacs-copy-absolute-path-at-point&lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;
Diese Map heist originellerweise &lt;code&gt;treemacs-copy-map&lt;/code&gt; obwohl ursprünglich nur eine Funktion darin die aktuelle Datei kopiert (und die habe ich mir kürzer auf &lt;code&gt;c&lt;/code&gt; gelegt. Alle anderen legen mir nur diverse Links ins Clipboard, daher habe ich als Taste auch &lt;code&gt;l&lt;/code&gt; gewählt um in die &lt;code&gt;treemacs-copy-map&lt;/code&gt; zu gelangen, dia nachfolgende Taste wählt dann welch Art Link ich haben möchte (absolut, relativ oder doch zum Project-Root?) &lt;code&gt;l a&lt;/code&gt; gibt mir also den Link als absoluten Pfad.
&lt;/p&gt;

&lt;p&gt;
Und natürlich kann ich auch, wenn ich will, trotzdem &lt;code&gt;Ctrl&lt;/code&gt; Kombinationen verwenden. Zum Beispiel verwenden viele Programme &lt;code&gt;Ctrl-n&lt;/code&gt; um eine Neue Datei, ein neues Object, oder sonst etwas neues zu erzeugen. Warum sollte ich das ignorieren? Also:
&lt;/p&gt;

&lt;table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides"&gt;


&lt;colgroup&gt;
&lt;col class="org-left"&gt;

&lt;col class="org-left"&gt;

&lt;col class="org-left"&gt;

&lt;col class="org-left"&gt;

&lt;col class="org-left"&gt;

&lt;col class="org-left"&gt;

&lt;col class="org-left"&gt;

&lt;col class="org-left"&gt;
&lt;/colgroup&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th scope="col" class="org-left"&gt;Key&lt;/th&gt;
&lt;th scope="col" class="org-left"&gt;Mode&lt;/th&gt;
&lt;th scope="col" class="org-left"&gt;Ctrl&lt;/th&gt;
&lt;th scope="col" class="org-left"&gt;Super&lt;/th&gt;
&lt;th scope="col" class="org-left"&gt;Meta&lt;/th&gt;
&lt;th scope="col" class="org-left"&gt;Shift&lt;/th&gt;
&lt;th scope="col" class="org-left"&gt;Function&lt;/th&gt;
&lt;th scope="col" class="org-left"&gt;Remark&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="org-left"&gt;n&lt;/td&gt;
&lt;td class="org-left"&gt;treemacs-mode&lt;/td&gt;
&lt;td class="org-left"&gt;X&lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt;'treemacs-create-file&lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class="org-left"&gt;n&lt;/td&gt;
&lt;td class="org-left"&gt;treemacs-mode&lt;/td&gt;
&lt;td class="org-left"&gt;X&lt;/td&gt;
&lt;td class="org-left"&gt;X&lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt;'treemacs-create-dir&lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;
So kann ich mit &lt;code&gt;Ctrl-n&lt;/code&gt; eine neue Datei anlegen und mit &lt;code&gt;Ctrl-Super-n&lt;/code&gt; auch ein neues Verzeichnis.
&lt;/p&gt;

&lt;p&gt;
Gerade die gängigen &lt;code&gt;Ctrl&lt;/code&gt; Kombinationen sind aber natürlich in vielen verschiedenen Modi sinnvoll, und man muss ein wenig aufpassen, das sich die Keybindings nicht gegenseitig stören, Vor allem wenn minor-modes ins Spiel kommen. Dazu benutzt man dann besser: 
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3 class="collapsible" id="orge743be6"&gt;Die implizite Tabelle&lt;/h3&gt;
&lt;div id="outline-container-orge743be6" class="outline-3 collapsme"&gt;
&lt;div class="outline-text-3" id="text-orge743be6"&gt;
&lt;p&gt;
Auf Anhieb sieht die Tabelle gleich aus, es fehlt jedoch die Key Spalte links
&lt;/p&gt;

&lt;table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides"&gt;


&lt;colgroup&gt;
&lt;col class="org-left"&gt;

&lt;col class="org-left"&gt;

&lt;col class="org-left"&gt;

&lt;col class="org-left"&gt;

&lt;col class="org-left"&gt;

&lt;col class="org-left"&gt;

&lt;col class="org-left"&gt;
&lt;/colgroup&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th scope="col" class="org-left"&gt;Mode&lt;/th&gt;
&lt;th scope="col" class="org-left"&gt;Ctrl&lt;/th&gt;
&lt;th scope="col" class="org-left"&gt;Super&lt;/th&gt;
&lt;th scope="col" class="org-left"&gt;Meta&lt;/th&gt;
&lt;th scope="col" class="org-left"&gt;Shift&lt;/th&gt;
&lt;th scope="col" class="org-left"&gt;Function&lt;/th&gt;
&lt;th scope="col" class="org-left"&gt;Remark&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="org-left"&gt;Global&lt;/td&gt;
&lt;td class="org-left"&gt;X&lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt;'org-insert-link-global&lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class="org-left"&gt;org-mode&lt;/td&gt;
&lt;td class="org-left"&gt;X&lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt;'org-insert-link&lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class="org-left"&gt;org-mode&lt;/td&gt;
&lt;td class="org-left"&gt;X&lt;/td&gt;
&lt;td class="org-left"&gt;X&lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt;'org-super-links-insert-link&lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class="org-left"&gt;org-mode&lt;/td&gt;
&lt;td class="org-left"&gt;X&lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt;X&lt;/td&gt;
&lt;td class="org-left"&gt;'org-super-links-link&lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;
Doch woher weiss &lt;code&gt;keymacs&lt;/code&gt; nun an welche Taste es binden soll? Ich hatte zu Beginn geschrieben, dass &lt;code&gt;keymacs&lt;/code&gt; Headerzeilen und Trennzeilen ignoriert, sowie &lt;b&gt;fast&lt;/b&gt; allen anderen umgebenden Text auch. Nun hier ist der Grund für das "fast", und duzu müssen wir in den Org-mode schauen
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;** N New
 | Mode       | Ctrl | Super | Meta | Shift | Function                 | Remark |
 |------------+------+-------+------+-------+--------------------------+--------|
 | Global     | X    |       |      |       | 'find-file               |        |
 | org-mode   | X    |       |      |       | 'find-file               |        |
 | dired-mode | X    |       |      |       | 'dired-create-empty-file |        |
 | dired-mode | X    | X     |      |       | 'dired-create-directory  |        |
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;
&lt;code&gt;Keymacs&lt;/code&gt; liest nämlich von allen Org Header Zeilen das erste Wort (hier 'N') und verwendet es für die darauf folgenden impliziten Tabellen. Ein neuer Header setzt wieder eine andere Taste z.B.
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;** F9 Treemacs - a tree layout file explorer for Emacs
 | Mode   | Ctrl | Super | Meta | Shift | Function                | Remark |
 |--------+------+-------+------+-------+-------------------------+--------|
 | Global |      |       |      |       | 'treemacs-select-window |        |
 | Global |      |       |      | X     | 'treemacs-find-file     |        |
 | Global | X    |       |      |       | 'treemacs-find-tag      |        |
 |        |      |       |      |       |                         |        |
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;
Ausser für das erste Wort interessiert sich &lt;code&gt;keymacs&lt;/code&gt; für nichts. Nebenbei sieht man hier auch, das die global-map mit Global gefüllt wird (mit großem G). Bei den Spalten muss die Reihenfolge passen, die Überschriften sind nur für den Leser und werden ignoriert.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 class="collapsible" id="orge77bc0e"&gt;Das Programm&lt;/h2&gt;
&lt;div id="outline-container-orge77bc0e" class="outline-2 collapsme"&gt;
&lt;div class="outline-text-2" id="text-orge77bc0e"&gt;
&lt;p&gt;
Geschrieben habe ich das ganze ursprünglich um mein Problem zu lösen, und später dann auch um den kompletten Enwicklungsprozess mittels Hatch zu testen. Daher gibt es das ganze auch auf (Test-)PyPi zum Download. Da ich diesen ganzen Python Workflow gerne verinnerlichen möchte, werde ich auch weiter an diesem Tool arbeiten, auch wenn es bisher schon alle meine Probleme löst. Aber der Code ist hässlich und hat bisher nur einen "happy Path" ohne Error Handling.
&lt;/p&gt;

&lt;p&gt;
Der Sourcecode liegt &lt;a href="https://codeberg.org/dr.ops/keymacs"&gt;hier&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
Wenn man es nur installieren möchte empfehle ich &lt;code&gt;pipx&lt;/code&gt; zu nutzen. Dann geht das einfach so:
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;pipx install -i https://test.pypi.org/simple/ keymacs
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;
Das Programm liest die keymap.org Datei nur, und schreibt dann eine keymap.el die man dann am Ende seiner init.el einbindet
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;(load (concat user-emacs-directory "config.el"))
;;(load (concat user-emacs-directory "sanekeys.el"))
(load (concat user-emacs-directory "medusa.el"))
(org-babel-load-file (concat user-emacs-directory "elgato.org"))
(org-babel-load-file (concat user-emacs-directory "skeletons.org"))
(load (concat user-emacs-directory "keymap.el"))

(setq custom-file (concat user-emacs-directory "custom.el"))
;; (load (concat user-emacs-directory "custom.el"))
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description><category>emacs</category><category>keybindings</category><guid>https://plaindrops.de/de/blog/2024/keymacs/</guid><pubDate>Tue, 23 Apr 2024 08:00:00 GMT</pubDate></item><item><title>Mal eben schnell drucken in Emacs</title><link>https://plaindrops.de/de/blog/2024/PrintingInEmacs/</link><dc:creator>Andy Drop</dc:creator><description>&lt;p&gt;
In Emacs gibt es eine ganze Reihe von Wegen, hübsche Ausdrucke zu erzeugen. Die meisten erzeugen am Ende PDFs. Aber wenn man einfach mal schnell einen Ausdruck des Buffers haben will, um darin mit Bleistift und Textmarker zu arbeiten, dann kann das schon mal ein Problem werden. Ich hab einen Abend lang versucht, das zu lösen, und es schliesslich auch geschafft. Damit ich mich daran erinnere gibt es diesen Blogeintrag.
&lt;/p&gt;
&lt;!-- TEASER_END --&gt;
&lt;p&gt;
Im Prinzip gibt es den befehl &lt;code&gt;print-buffer&lt;/code&gt;, der bei mir aus Gewohnheit mit &lt;i&gt;CTRL-p&lt;/i&gt; aufgerufen wird. Ich erwarte dann, dass aus dem Drucker Papier kommt, das unformatiert einfach das enthält, was ich im Buffer auf dem Bildschirm sehe. 
&lt;/p&gt;

&lt;p&gt;
Leider funktionierte das bei mir überhaupt nicht.
Emacs benutzt für diese Art Ausdrucke den Linux Kommandozeilenbefehl &lt;code&gt;lpr&lt;/code&gt;, und schnell war klar, das mit dem auch auf der Kommanduzeile kein Blumentopf zu gewinnen ist. Jeder Versuch irgendetwas damit zu drucken endete mit der Meldung, dass der lpr Daemon nicht laufen würde. Jeder Versuch diesen zu starten schlug fehl. Irgenwann dämmerte es mir, das lpr als Tool zum drucken vielleicht einfach zu alt ist.
&lt;/p&gt;
&lt;h2 class="collapsible" id="org33ca1eb"&gt;Zurück in die Zukunft&lt;/h2&gt;
&lt;div id="outline-container-org33ca1eb" class="outline-2 collapsme"&gt;
&lt;div class="outline-text-2" id="text-org33ca1eb"&gt;
&lt;p&gt;
&lt;code&gt;lpr&lt;/code&gt; ist nämlich ein älterer Befehl, der aus den Zeiten stammt, als Drucker häufig direkt an Unix-Systeme angeschlossen waren. Inzwischen begab es sich aber, das das "Common Unix Printing System" (CUPS) entwickelt wurde, das eine moderne Druckverwaltung auf Unix-Systemen bietet. Und ein wenig Websuche ergab, dass es seinen eigenen Kommandozeilenbefehl mitbringt &lt;code&gt;lp&lt;/code&gt;.
&lt;/p&gt;

&lt;p&gt;
Die Syntax der beiden Befehle kann leicht variieren. &lt;code&gt;lpr&lt;/code&gt; akzeptiert normalerweise einfach den Dateinamen, den ich drucken möchte, während &lt;code&gt;lp&lt;/code&gt; eine Reihe von Optionen akzeptiert, die es mir ermöglichen, verschiedene Aspekte des Druckauftrags zu steuern, wie z.B. die Anzahl der Kopien, den Drucker, das Papierformat usw.
&lt;/p&gt;

&lt;p&gt;
In Emacs gibt es dafür netterweise die Möglichkeit den Befehl, den es unter der Decke nutzt zu konfigurieren.
Wir sagen also, das wir statt &lt;code&gt;lpr&lt;/code&gt; lieber &lt;code&gt;lp&lt;/code&gt; vervenden wollen
&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;setq&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;lpr-command&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;"lp"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;
Da &lt;code&gt;lp&lt;/code&gt; und &lt;code&gt;lpr&lt;/code&gt; unterschiedliche Parameter auf der Kommandozeile mitgeben, macht es auch keinen Sinn, für &lt;code&gt;lp&lt;/code&gt; weiterhin die &lt;code&gt;lpr&lt;/code&gt; Standard Switches zu nutzen. Die schalten wir also ab 
&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;setq&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;lpr-add-switches&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;nil&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;
Und Zack funktionierte alles wie erwartet, also habe ich es in meiner &lt;a href="https://plaindrops.de/page/project/Emacs-Config/#org286df2f"&gt;Config&lt;/a&gt; verewigt
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 class="collapsible" id="org16dcd28"&gt;Fazit&lt;/h2&gt;
&lt;div id="outline-container-org16dcd28" class="outline-2 collapsme"&gt;
&lt;div class="outline-text-2" id="text-org16dcd28"&gt;
&lt;p&gt;
Wenn man nicht gerade ein antikes Linux System nutzt macht &lt;code&gt;lpr&lt;/code&gt; keinen Sinn mehr, und sollte durch &lt;code&gt;lp&lt;/code&gt; ersetzt werden. IMHO wäre das mittlerweile auch ein guter Default.
&lt;/p&gt;

&lt;p&gt;
In der Konfiguration kann man übrigens auch eigene Parameter einstellen, die an &lt;code&gt;lp&lt;/code&gt; übergeben werden, ich denke damit bekomme ich dann auch den doppelseitigen Druck hin.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;</description><category>emacs</category><category>printing</category><guid>https://plaindrops.de/de/blog/2024/PrintingInEmacs/</guid><pubDate>Fri, 19 Apr 2024 08:00:00 GMT</pubDate></item><item><title>Mein Tastaturlayout Edwin</title><link>https://plaindrops.de/de/blog/2023/Edwin/</link><dc:creator>Andy Drop</dc:creator><description>&lt;p&gt;
Irgendwann Anfang des Jahres habe ich mir nach langem Zögern eine &lt;a href="https://www.zsa.io/moonlander"&gt;Moonlander MK1 Tastatur&lt;/a&gt; angeschafft. Ich hatte mir einige Vorteile davon versprochen, aber auch leider einen entscheidenden Nachteil gesehen… 
&lt;/p&gt;
&lt;!-- TEASER_END --&gt;
&lt;p&gt;
Die Vorteile sind:
&lt;/p&gt;

&lt;ul class="org-ul"&gt;
&lt;li&gt;Dadurch, dass die Tastatur in 2 Hälften geteilt ist, kann ich mir die beiden Seiten passend zu meinem Schulterabstand hinstellen, und habe eine entspanntere Sitzhaltung&lt;/li&gt;
&lt;li&gt;Jede Hälfte ist nach außen geneigt, dadurch ist auch jeder Arm nicht mehr so in sich gedreht, wie an einer "normalen" Tastatur&lt;/li&gt;
&lt;li&gt;Die einzelnen Tasten sind in Spalten angeordnet, bei denen der Finger nur auf und ab greifen muss, und sich dabei nicht noch zur Seite bewegt, wenn es nicht nötig ist. Das kommt mir beim Schreiben besonders entgegen, weil mein Hirn anscheinend in Tabellen und Bäumen denkt. Meine Hirnzellen scheinen rechtwinklig zueinander angeordnet zu sein. Mit den versetzten Tasten bin ich beim Versuch, Tastschreiben zu lernen, nicht wirklich klargekommen. Der Versatz zwischen den Tasten kommt ja daher, die Typenhebel bei mechanischen Schreibmaschinen  zu bedienen, und ist eigentlich schon seit der Zeit der Kugelkopf- oder Typenrad-Schreibmaschinen überflüssig.&lt;/li&gt;
&lt;li&gt;Dafür sind die einzelnen Spalten in der Höhe gegeneinander versetzt, um dem Umstand Rechnung zu tragen, dass die einzelnen Finger auch verschieden lang sind.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Der leider wichtige Nachteil:
&lt;/p&gt;
&lt;ul class="org-ul"&gt;
&lt;li&gt;Die Tastatur zwingt einen dazu, mit zehn Fingern zu schreiben, was ich zu diesem Zeitpunkt leider nicht beherrscht hatte.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Dieser Umstand wiegt besonders schwer, weil ich die selbe Tastatur für meinen privaten und für meinen Dienstrechner benutze. Aber, da ich dort im Wesentlichen Bugs aus Legacy Software entferne, und an vielen Tagen keine 10 Zeilen neuen Code schreibe, schien mir das Risiko vertretbar.
&lt;/p&gt;

&lt;p&gt;
Ein riesiger Vorteil ist, dass die Tastatur vollständig frei programmierbar ist, in mehreren Ebenen und unterscheidbar in kurzen, langen, doppelten und gehaltenen Tasten.
&lt;/p&gt;
&lt;h2 class="collapsible" id="org42b9eac"&gt;Das Layout&lt;/h2&gt;
&lt;div id="outline-container-org42b9eac" class="outline-2 collapsme"&gt;
&lt;div class="outline-text-2" id="text-org42b9eac"&gt;
&lt;p&gt;
Ich hab mir gedacht, wenn ich sowieso ganz neu mit dem Tastschreiben anfange, dann erspare ich mir auch das leidige QWERTZ-Layout, das so auch wieder nur existiert, damit sich die Typenhebel bei mechanischen Schreibmaschinen möglichst wenig verklemmen.
&lt;/p&gt;

&lt;p&gt;
Für heutiges Schreiben am PC gibt es deutlich besser geeignete Layouts, die die Hände besser entspannen. &lt;a href="https://de.wikipedia.org/wiki/Dvorak-Tastaturbelegung"&gt;Dvorak&lt;/a&gt;, &lt;a href="https://colemak.com/"&gt;Colemak&lt;/a&gt;, oder &lt;a href="https://www.neo-layout.org/"&gt;Neo&lt;/a&gt; zum Beispiel. Ich habe mich für Letzteres entschieden, weil es für die deutsche Sprache optimiert ist, und ich es leicht zu merken finde, alle Vokale in Ruhestellung unter den Fingern der linken Hand zu haben.
&lt;/p&gt;

&lt;p&gt;
Und so habe ich mich bei der Belegung auch im Wesentlichen an Neo 2 orientiert. 
&lt;/p&gt;
&lt;/div&gt;
&lt;h3 class="collapsible" id="orga2818bf"&gt;Layer 0&lt;/h3&gt;
&lt;div id="outline-container-orga2818bf" class="outline-3 collapsme"&gt;
&lt;div class="outline-text-3" id="text-orga2818bf"&gt;
&lt;p&gt;
&lt;img src="https://plaindrops.de/images/Edwin1.png" alt="nil"&gt;
&lt;/p&gt;

&lt;p&gt;
Die Beschriftung der Tasten liest sich so, dass die obere Hälfte angibt, was die Tastatur ausgibt, wenn ich die Taste drücke, die untere Hälfte zeigt, was beim kurzen Halten der Taste (200 ms, konfigurierbar) der Taste passiert. Wenn ich z.B, die Taste für das "c" kurz halte, wird daraus ein Strg-C.
&lt;/p&gt;

&lt;p&gt;
Wie man sieht habe ich nicht besonders viele Änderungen gegenüber dem normalen Neo-Layout vorgenommen. Die Änderungen sind:
&lt;/p&gt;

&lt;ul class="org-ul"&gt;
&lt;li&gt;Punkt und Komma haben im Original zwei verschiedene Tasten, aber da ich noch unbedingt Platz für Cursortasten unter der rechten Hand haben wollte, musste der Punkt weichen und ist nun ein kurz gehaltenes Komma.&lt;/li&gt;

&lt;li&gt;Die Zahlenreihe oben ist für mich ohnehin schwer erreichbar, und daher für die vielen Zahlen, die ich ständig tippe, unpraktisch. Ich habe sie also dort komplett entfallen lassen, und in einen Zehnerblock in Ebene 3 verschoben. Stattdessen gibt es in der oberen Reihe nun 20 Funktionstasten F1-F20. Die ersten 10 durch normales Tippen. Durch kurzes Halten wird aus F2 dann F12 etc..&lt;/li&gt;

&lt;li&gt;Die Tasten, um in die anderen Ebenen umzuschalten, sind allesamt auf die unteren Daumentasten gewandert. Dort sind sie besonders einfach zu erreichen.&lt;/li&gt;

&lt;li&gt;Für die Shift-Taste, die normalerweise vom schwachen kleinen Finger gehalten wird, habe ich diverse Stellen ausprobiert. Bewährt hat sich am Ende, die Leertaste - wenn sie gehalten wird - als Shift-Taste zu verwenden.&lt;/li&gt;

&lt;li&gt;sämtliche Sonderzeichen sind beim Neo Layout normalerweise im 2. Layer vergraben, aber da ich den Bindestrich im normalen Schreibfluss immer mal wieder brauche, habe ich mir den auf das gehaltene "j" gelegt.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3 class="collapsible" id="orgdb96e9d"&gt;Layer 1&lt;/h3&gt;
&lt;div id="outline-container-orgdb96e9d" class="outline-3 collapsme"&gt;
&lt;div class="outline-text-3" id="text-orgdb96e9d"&gt;
&lt;p&gt;
Hier finden sich normalerweise alle Sonderzeichen gut verteilt auf beide Hände. Aber mein Kopf hat es einfach nicht hinbekommen, sich deren Anordnung zu merken, also habe ich mir für diese Ebene eine komplett neue Anordnung ausgedacht, die sich an meinen persönlichen Schreibgewohnheiten ausrichtet und passenderweise auch noch sehr einfache Eselsbrücken bereitstellt.
&lt;/p&gt;

&lt;p&gt;
&lt;img src="https://plaindrops.de/images/Layer2.png" alt="nil"&gt;]]
&lt;/p&gt;

&lt;p&gt;
Die linke Hälfte der Tastatur ist auf Layer 1  quasi unbelegt. Lediglich die Tasten F21-F24 finden sich hier, wo sich in Ebene 0 F1-F4 finden. Ansonsten benutze ich die Tasten für Textblöcke, die ich beruflich häufig verwende, daher habe ich sie hier auch nicht dargestellt. Stattdessen spielt sich alles unter der rechten Hand ab.
&lt;/p&gt;

&lt;p&gt;
Hier finden sich die PgUp und PgDn Tasten, die beim kurzen Halten den Cursor nicht nur eine Seite nach oben oder unten befördern, sondern gleich bis ganz an den Anfang oder das Ende des Textes. Dazu geht meine Hand wegen der Entfernung ein kleines bisschen aus der Ruheposition heraus.
&lt;/p&gt;

&lt;p&gt;
Die blöde obere Reihe ist nur mit sehr selten benutzten Währungs- und Akzentzeichen belegt.
&lt;/p&gt;

&lt;p&gt;
Zeige- und Mittelfinger sind mit Klammern beschäftigt. In der Ruhestellung mit den normalen und eckigen Klammern, die ich als Programmierer häufig brauche. Wenn ich die Finger nach oben strecke, dann mit den spitzen und geschweiften Klammern. Bei allen Klammern ist es so, dass ich durch Drücken die Klammer öffne, und durch kurzes Halten wieder schliesse. Halten muss ich allerdings sehr selten, da ich mir meinen Editor so eingestellt habe, dass ich beim Öffnen einer Klammer immer auch schon die schließende Klammer automagisch eingefügt bekomme.
&lt;/p&gt;

&lt;p&gt;
Zufällig ergaben sich die Eselsbrücken:
&lt;/p&gt;

&lt;ul class="org-ul"&gt;
&lt;li&gt;N - normale Klammern&lt;/li&gt;

&lt;li&gt;R - rechteckige Klammern&lt;/li&gt;

&lt;li&gt;H - HTML Klammern&lt;/li&gt;

&lt;li&gt;G - geschweifte Klammern&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Außerdem bilden sie ein hübsches Quadrat
&lt;/p&gt;

&lt;p&gt;
Rechts daneben liegt ein weiteres Quadrat, das ich beruflich benötige, weil ich viele Oracle-SQL-Abfragen schreibe.
&lt;/p&gt;

&lt;p&gt;
Es enthält die einfachen Anführungsstriche, um Strings zu begrenzen, das Semikolon, um Statements zu beenden, das Prozentzeichen, für Wildcards und das Gleichheitszeichen für viele Vergleiche.
&lt;/p&gt;

&lt;p&gt;
Wenn ich die beiden stärksten Finger nach unten bewege finden sich dort alle Zeichen, die ich auf der Kommandozeile benötige, um Pfade einzugeben ( ~ / . ) schön einfach zu erreichen.
&lt;/p&gt;

&lt;p&gt;
Die seltener benötigten Zeichen sind hübsch in die verbleibenden Lücken gestreut.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3 class="collapsible" id="orgba88bbe"&gt;Layer 2&lt;/h3&gt;
&lt;div id="outline-container-orgba88bbe" class="outline-3 collapsme"&gt;
&lt;div class="outline-text-3" id="text-orgba88bbe"&gt;
&lt;p&gt;
&lt;img src="https://plaindrops.de/images/Layer3.png" alt="nil"&gt;
&lt;/p&gt;

&lt;p&gt;
Die Ebene 2 ist dann für den Zehnerblock reserviert. Das ist für mich einfach die intuitivere Art Ziffern zu erfassen, und als eigene Ebene ist es damit noch nicht einmal nötig, die rechte Hand zur Seite zu bewegen. Der linke Daumen wechselt in die Ebene und sofort liegt die 5 unter meinem rechten Mittelfinger und alle wichtigen Rechenzeichen sind rundherum angeordnet. Punktrechnung rechts, Strichrechnung links.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 class="collapsible" id="org8290366"&gt;Fazit&lt;/h2&gt;
&lt;div id="outline-container-org8290366" class="outline-2 collapsme"&gt;
&lt;div class="outline-text-2" id="text-org8290366"&gt;
&lt;p&gt;
Das Layout, wie es heute ist, hat sich mittlerweile sehr bewährt, und was das korrekte Tastschreiben angeht, schreibe ich mittlerweile weitgehend blind in nahezu der alten in 40 Jahren angewöhnten 6-Finger-Geschwindigkeit. In den letzten 2 Wochen habe ich allerdings schon mehrfach bemerkt, wie das Muskelgedächtnis mehr und mehr die Steuerung übernimmt. Häufig bennutzte Buchstabenfolgen tippen meine Finger mittlerweile selbstständig, noch bevor mein Kopf dazu kommt, sie in einzelne Buchstaben zu zerlegen. Da wird sich im nächsten Jahr bestimmt noch viel tun.
&lt;/p&gt;

&lt;p&gt;
Der befürchtete Effekt, dass ich das Standard QWERTZ-Layout verlerne, ist ausgeblieben. Ich muss mich zwar immer erst 1-2 Minuten eingewöhnen, aber dann ist alles wieder da. In QWERTZ kann ich sowieso nicht blind schreiben und möchte es mir dort auch nicht angewöhnen. Ich bin aber immer noch schnell genug, um z.B. diesen Blogeintrag auf QWERTZ zu schreiben, weil er auf meinem alten Laptop unterwegs entstanden ist.
&lt;/p&gt;

&lt;p&gt;
Die Tastaturen fühlen sich so deutlich unterschiedlich an (auch weil ich die Standard-Neigung von knapp 20° mit Hilfe eines &lt;a href="https://www.thingiverse.com/thing:4881967"&gt;Keils von Thingiverse&lt;/a&gt; auf knapp 30° Neigung gebracht habe), dass mein Kopf automatisch umschaltet.
&lt;/p&gt;

&lt;p&gt;
Alles in allem wundere ich mich mittlerweile darüber, wie einfach Tastschreiben ist, wenn nur die Umgebung dafür stimmt, und warum immer noch ein System gelehrt wird, und verbreitet ist, das auf Geräte optimiert ist, die es mittlerweile nur noch auf Flohmärkten zu Ramschpreisen zu finden gibt.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;</description><category>hardware</category><category>keyboard</category><guid>https://plaindrops.de/de/blog/2023/Edwin/</guid><pubDate>Thu, 07 Dec 2023 23:00:00 GMT</pubDate></item><item><title>Austauschen einer defekten PGP Karte durch das Backup</title><link>https://plaindrops.de/de/blog/2022/ChangePGPCard/</link><dc:creator>Andy Drop</dc:creator><description>&lt;p&gt;
Ich hatte es geschafft, die PGP-Karte zu ruinieren, auf der sich der PGP-Key befindet den ich zum Lesen meiner eMails und zum Entschlüsseln meines Passwort-Stores benötige. Ein Backup besaß ich, in Form eines zweiten Hardware Schlüssels. Nun, leider stellte es sich als nicht so einfach heraus, diesen auszutauschen.
&lt;/p&gt;

&lt;!-- TEASER_END --&gt;

&lt;p&gt;
ich hätte natürlich die Sicherungskopien des Schlüssels, die ich mir beim Erstellen auf der Festplatte abgelegt hatte, einfach wieder auf den alten Key zurückspielen können, aber ich dachte mir: "Was wäre, wenn ich diesen Schlüssel komplett verloren hätte? Probier doch einmal aus, komplett auf den Reserve-Schlüssel zu wechseln".
&lt;/p&gt;

&lt;p&gt;
Während es dutzende Anleitungen gibt, wie man einen Schlüssel von der Festplatte auf seinen Hardwaretoken spielt, wird es hier sehr dünn. Ich musste mehrere Stunden googeln, um da zu einer Lösung zu finden. Daher habe ich die hier einmal zusammengeschrieben, auch weil ich sie in Zukunft vieleicht selber wieder benötigen könnte.
&lt;/p&gt;
&lt;h2 class="collapsible" id="org582e0fe"&gt;Das Problem&lt;/h2&gt;
&lt;div id="outline-container-org582e0fe" class="outline-2 collapsme"&gt;
&lt;div class="outline-text-2" id="text-org582e0fe"&gt;
&lt;p&gt;
Ich schaue mir den privaten Schlüssel an meinem Schlüsselbund an:
&lt;/p&gt;

&lt;pre class="example" id="org3a23ff2"&gt;
$ gpg  --list-secret-keys

gpg: verwende Vertrauensmodell pgp
/home/andy//.gnupg/pubring.kbx
-----------------------------
.
.
.

sec&amp;gt;  rsa4096 2021-04-19 [SC]
      3E572D5964195D5FEABC3284405D44C9EE5427D5
      Kartenseriennr. = 0006 15889829
uid        [ ultimativ ] Andy Drop (internal use only) 
ssb&amp;gt;  rsa4096 2021-04-19 [A]
ssb&amp;gt;  rsa4096 2021-04-19 [E]
&lt;/pre&gt;

&lt;p&gt;
Die '&amp;gt;' Zeichen hinter &lt;code&gt;sec&lt;/code&gt; und &lt;code&gt;ssb&lt;/code&gt; sagen mir, das sich in meinem Schlüsselbund nur sogenannte Stubs befinden, also nur Platzhalter, und sich die eigentlichen Schlüssel auf einer Hardware-Karte befinden. Welche Karte das ist steht in der dritten Zeile:
&lt;/p&gt;

&lt;pre class="example" id="org874f55a"&gt;
Kartenseriennr. = 0006 15889829
&lt;/pre&gt;

&lt;p&gt;
Wann immer ich also etwas mit diesem Schlüssel entschlüsseln möchte, fordert gnupg mich auf, genau diese Karte einzustecken. Keine andere Karte wird akzeptiert, auch nicht, wenn sie ebenfalls die passenden Schlüssel enthält.
&lt;/p&gt;

&lt;p&gt;
Nun habe ich aber diese Karte verloren, und möchte gnupg beibringen meine Backupkarte zu akzeptieren.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 class="collapsible" id="orgdc6559a"&gt;Die Lösung&lt;/h2&gt;
&lt;div id="outline-container-orgdc6559a" class="outline-2 collapsme"&gt;
&lt;div class="outline-text-2" id="text-orgdc6559a"&gt;
&lt;/div&gt;
&lt;h3 class="collapsible" id="org902fc70"&gt;Alte Karte entfernen&lt;/h3&gt;
&lt;div id="outline-container-org902fc70" class="outline-3 collapsme"&gt;
&lt;div class="outline-text-3" id="text-org902fc70"&gt;
&lt;p&gt;
Zunächst brauche ich dazu die sogenannten Keygrips der betroffenen Schlüssel
&lt;/p&gt;

&lt;pre class="example" id="org68ec9b3"&gt;
andy@drops:~$ gpg --edit-key 3E572D5964195D5FEABC3284405D44C9EE5427D5
gpg (GnuPG) 2.2.27; Copyright (C) 2021 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Geheimer Schlüssel ist vorhanden.

sec  rsa4096/405D44C9EE5427D5
     erzeugt: 2021-04-19  verfällt: niemals     Nutzung: SC  
     Kartennummer:0006 15889829
     Vertrauen: ultimativ     Gültigkeit: ultimativ
ssb  rsa4096/9CE3093DEDB0EFA7
     erzeugt: 2021-04-19  verfällt: niemals     Nutzung: A   
     Kartennummer:0006 15889829
ssb  rsa4096/BFB3A95BEE2789E0
     erzeugt: 2021-04-19  verfällt: niemals     Nutzung: E   
     Kartennummer:0006 15889829
[ ultimativ ] (1). Andy Drop (internal use only) 

gpg&amp;gt; grip
pub   rsa4096/405D44C9EE5427D5 2021-04-19 [SC]
      Keygrip: 952111DC39E0687E154045F1B54BA5BFC6242DBC
sub   rsa4096/9CE3093DEDB0EFA7 2021-04-19 [A]
      Keygrip: 95B287025E371F29E4FD871A87558B1680B99130
sub   rsa4096/BFB3A95BEE2789E0 2021-04-19 [E]
      Keygrip: F0F87AFE74FEF37BA47A414979685B063D319EC2

gpg&amp;gt; 
&lt;/pre&gt;

&lt;p&gt;
Diese Keygrips finde ich als Dateien im Verzeichnis &lt;code&gt;~/.gnupg/private-keys-v1.d&lt;/code&gt; wieder
&lt;/p&gt;

&lt;pre class="example" id="org55580ab"&gt;
/home/andy/.gnupg/private-keys-v1.d:
insgesamt 64K
-rw------- 1 andy andy 1,2K 30. Nov 15:43 952111DC39E0687E154045F1B54BA5BFC6242DBC.key
-rw------- 1 andy andy 1,2K 30. Nov 15:43 95B287025E371F29E4FD871A87558B1680B99130.key
-rw------- 1 andy andy 1,2K 30. Nov 16:04 F0F87AFE74FEF37BA47A414979685B063D319EC2.key
&lt;/pre&gt;

&lt;p&gt;
In diesen Dateien ist der Verweis auf meine Schlüsselkarte hinterlegt. Da die Karte weg ist, müssen die Dateien nun auch gelöscht werden, Danach verlangt gnupg nicht mehr nach der alten Karte, weiss aber auch mit der Backup-Karte noch nichts anzufangen
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3 class="collapsible" id="org44999f9"&gt;Neue Karte verknüpfen&lt;/h3&gt;
&lt;div id="outline-container-org44999f9" class="outline-3 collapsme"&gt;
&lt;div class="outline-text-3" id="text-org44999f9"&gt;
&lt;p&gt;
Dies ist dann wiederum sehr einfach. Ich stoppe zunächst den gpg-agent, da der mir sonst mit seinen gecachten Informationen das Leben zur Hölle macht.
&lt;/p&gt;

&lt;pre class="example" id="org04599e7"&gt;
gpgconf --kill gpg-agent
&lt;/pre&gt;

&lt;p&gt;
Danach stecke ich die neue Karte ein, und mache gnupg mit der neuen Karte bekannt
&lt;/p&gt;

&lt;pre class="example" id="org74987e7"&gt;
gpg --card-status
&lt;/pre&gt;

&lt;p&gt;
Danach hat gnupg neue Dateien für die Keygrips der neuen Karte angelegt, und nach einem herzhaften Neustart der User-Session verlangt er ab nun nach der Backup-Karte
&lt;/p&gt;

&lt;p&gt;
Ziel erreicht!
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description><category>backup</category><category>crypto</category><category>gpg</category><guid>https://plaindrops.de/de/blog/2022/ChangePGPCard/</guid><pubDate>Fri, 02 Dec 2022 15:00:00 GMT</pubDate></item><item><title>Mein Tastaturlayout</title><link>https://plaindrops.de/de/blog/2022/moonlanderlayout/</link><dc:creator>Andy Drop</dc:creator><description>&lt;p&gt;
Irgendwann Anfang des Jahres habe ich mir nach langem Zögern eine &lt;a href="https://www.zsa.io/moonlander"&gt;Moonlander MK1 Tastatur&lt;/a&gt; angeschafft. Ich hatte mir einige Vorteile davon versprochen, aber auch leider einen entscheidenden Nachteil gesehen… 
&lt;/p&gt;
&lt;!-- TEASER_END --&gt;
&lt;p&gt;
Die Vorteile sind:
&lt;/p&gt;

&lt;ul class="org-ul"&gt;
&lt;li&gt;Dadurch, dass die Tastatur in 2 Hälften geteilt ist, kann ich mir die beiden Seiten passend zu meinem Schulterabstand hinstellen, und habe eine entspanntere Sitzhaltung&lt;/li&gt;
&lt;li&gt;Jede Hälfte ist nach außen geneigt, dadurch ist auch jeder Arm nicht mehr so in sich gedreht, wie an einer "normalen" Tastatur&lt;/li&gt;
&lt;li&gt;Die einzelnen Tasten sind in Spalten angeordnet, bei denen der Finger nur auf und ab greifen muss, und sich dabei nicht noch zur Seite bewegt, wenn es nicht nötig ist. Das kommt mir beim Schreiben besonders entgegen, weil mein Hirn anscheinend in Tabellen und Bäumen denkt. Meine Hirnzellen scheinen rechtwinklig zueinander angeordnet zu sein. Mit den versetzten Tasten bin ich beim Versuch, Tastschreiben zu lernen, nicht wirklich klargekommen. Der Versatz zwischen den Tasten kommt ja daher, die Typenhebel bei mechanischen Schreibmaschinen  zu bedienen, und ist eigentlich schon seit der Zeit der Kugelkopf- oder Typenrad-Schreibmaschinen überflüssig.&lt;/li&gt;
&lt;li&gt;Dafür sind die einzelnen Spalten in der Höhe gegeneinander versetzt, um dem Umstand Rechnung zu tragen, dass die einzelnen Finger auch verschieden lang sind.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Der leider wichtige Nachteil:
&lt;/p&gt;
&lt;ul class="org-ul"&gt;
&lt;li&gt;Die Tastatur zwingt einen dazu, mit zehn Fingern zu schreiben, was ich zu diesem Zeitpunkt leider nicht beherrscht hatte.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Dieser Umstand wiegt besonders schwer, weil ich die selbe Tastatur für meinen privaten und für meinen Dienstrechner benutze. Aber, da ich dort im Wesentlichen Bugs aus Legacy Software entferne, und an vielen Tagen keine 10 Zeilen neuen Code schreibe, schien mir das Risiko vertretbar.
&lt;/p&gt;

&lt;p&gt;
Ein riesiger Vorteil ist, dass die Tastatur vollständig frei programmierbar ist, in mehreren Ebenen und unterscheidbar in kurzen, langen, doppelten und gehaltenen Tasten.
&lt;/p&gt;
&lt;h2 class="collapsible" id="org9e9c39c"&gt;Das Layout&lt;/h2&gt;
&lt;div id="outline-container-org9e9c39c" class="outline-2 collapsme"&gt;
&lt;div class="outline-text-2" id="text-org9e9c39c"&gt;
&lt;p&gt;
Ich hab mir gedacht, wenn ich sowieso ganz neu mit dem Tastschreiben anfange, dann erspare ich mir auch das leidige QWERTZ-Layout, das so auch wieder nur existiert, damit sich die Typenhebel bei mechanischen Schreibmaschinen möglichst wenig verklemmen.
&lt;/p&gt;

&lt;p&gt;
Für heutiges Schreiben am PC gibt es deutlich besser geeignete Layouts, die die Hände besser entspannen. &lt;a href="https://de.wikipedia.org/wiki/Dvorak-Tastaturbelegung"&gt;Dvorak&lt;/a&gt;, &lt;a href="https://colemak.com/"&gt;Colemak&lt;/a&gt;, oder &lt;a href="https://www.neo-layout.org/"&gt;Neo&lt;/a&gt; zum Beispiel. Ich habe mich für Letzteres entschieden, weil es für die deutsche Sprache optimiert ist, und ich es leicht zu merken finde, alle Vokale in Ruhestellung unter den Fingern der linken Hand zu haben.
&lt;/p&gt;

&lt;p&gt;
Und so habe ich mich bei der Belegung auch im Wesentlichen an Neo 2 orientiert. 
&lt;/p&gt;
&lt;/div&gt;
&lt;h3 class="collapsible" id="orgd8ea9b6"&gt;Layer 0&lt;/h3&gt;
&lt;div id="outline-container-orgd8ea9b6" class="outline-3 collapsme"&gt;
&lt;div class="outline-text-3" id="text-orgd8ea9b6"&gt;
&lt;p&gt;
&lt;img src="https://plaindrops.de/images/Layer1.png" alt="nil"&gt;
&lt;/p&gt;

&lt;p&gt;
Die Beschriftung der Tasten liest sich so, dass die obere Hälfte angibt, was die Tastatur ausgibt, wenn ich die Taste drücke, die untere Hälfte zeigt, was beim kurzen Halten der Taste (200 ms, konfigurierbar) der Taste passiert. Wenn ich z.B, die Taste für das "c" kurz halte, wird daraus ein Strg-C.
&lt;/p&gt;

&lt;p&gt;
Wie man sieht habe ich nicht besonders viele Änderungen gegenüber dem normalen Neo-Layout vorgenommen. Die Änderungen sind:
&lt;/p&gt;

&lt;ul class="org-ul"&gt;
&lt;li&gt;Punkt und Komma haben im Original zwei verschiedene Tasten, aber da ich noch unbedingt Platz für Cursortasten unter der rechten Hand haben wollte, musste der Punkt weichen und ist nun ein kurz gehaltenes Komma.&lt;/li&gt;

&lt;li&gt;Die Zahlenreihe oben ist für mich ohnehin schwer erreichbar, und daher für die vielen Zahlen, die ich ständig tippe, unpraktisch. Ich habe sie also dort komplett entfallen lassen, und in einen Zehnerblock in Ebene 3 verschoben. Stattdessen gibt es in der oberen Reihe nun 20 Funktionstasten F1-F20. Die ersten 10 durch normales Tippen. Durch kurzes Halten wird aus F2 dann F12 etc..&lt;/li&gt;

&lt;li&gt;Die Tasten, um in die anderen Ebenen umzuschalten, sind allesamt auf die unteren Daumentasten gewandert. Dort sind sie besonders einfach zu erreichen.&lt;/li&gt;

&lt;li&gt;Für die Shift-Taste, die normalerweise vom schwachen kleinen Finger gehalten wird, habe ich diverse Stellen ausprobiert. Bewährt hat sich am Ende, die Leertaste - wenn sie gehalten wird - als Shift-Taste zu verwenden.&lt;/li&gt;

&lt;li&gt;sämtliche Sonderzeichen sind beim Neo Layout normalerweise im 2. Layer vergraben, aber da ich den Bindestrich im normalen Schreibfluss immer mal wieder brauche, habe ich mir den auf das gehaltene "j" gelegt.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3 class="collapsible" id="orgaf3f577"&gt;Layer 1&lt;/h3&gt;
&lt;div id="outline-container-orgaf3f577" class="outline-3 collapsme"&gt;
&lt;div class="outline-text-3" id="text-orgaf3f577"&gt;
&lt;p&gt;
Hier finden sich normalerweise alle Sonderzeichen gut verteilt auf beide Hände. Aber mein Kopf hat es einfach nicht hinbekommen, sich deren Anordnung zu merken, also habe ich mir für diese Ebene eine komplett neue Anordnung ausgedacht, die sich an meinen persönlichen Schreibgewohnheiten ausrichtet und passenderweise auch noch sehr einfache Eselsbrücken bereitstellt.
&lt;/p&gt;

&lt;p&gt;
&lt;img src="https://plaindrops.de/images/Layer2.png" alt="nil"&gt;]]
&lt;/p&gt;

&lt;p&gt;
Die linke Hälfte der Tastatur ist auf Layer 1  quasi unbelegt. Lediglich die Tasten F21-F24 finden sich hier, wo sich in Ebene 0 F1-F4 finden. Ansonsten benutze ich die Tasten für Textblöcke, die ich beruflich häufig verwende, daher habe ich sie hier auch nicht dargestellt. Stattdessen spielt sich alles unter der rechten Hand ab.
&lt;/p&gt;

&lt;p&gt;
Hier finden sich die PgUp und PgDn Tasten, die beim kurzen Halten den Cursor nicht nur eine Seite nach oben oder unten befördern, sondern gleich bis ganz an den Anfang oder das Ende des Textes. Dazu geht meine Hand wegen der Entfernung ein kleines bisschen aus der Ruheposition heraus.
&lt;/p&gt;

&lt;p&gt;
Die blöde obere Reihe ist nur mit sehr selten benutzten Währungs- und Akzentzeichen belegt.
&lt;/p&gt;

&lt;p&gt;
Zeige- und Mittelfinger sind mit Klammern beschäftigt. In der Ruhestellung mit den normalen und eckigen Klammern, die ich als Programmierer häufig brauche. Wenn ich die Finger nach oben strecke, dann mit den spitzen und geschweiften Klammern. Bei allen Klammern ist es so, dass ich durch Drücken die Klammer öffne, und durch kurzes Halten wieder schliesse. Halten muss ich allerdings sehr selten, da ich mir meinen Editor so eingestellt habe, dass ich beim Öffnen einer Klammer immer auch schon die schließende Klammer automagisch eingefügt bekomme.
&lt;/p&gt;

&lt;p&gt;
Zufällig ergaben sich die Eselsbrücken:
&lt;/p&gt;

&lt;ul class="org-ul"&gt;
&lt;li&gt;N - normale Klammern&lt;/li&gt;

&lt;li&gt;R - rechteckige Klammern&lt;/li&gt;

&lt;li&gt;H - HTML Klammern&lt;/li&gt;

&lt;li&gt;G - geschweifte Klammern&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Außerdem bilden sie ein hübsches Quadrat
&lt;/p&gt;

&lt;p&gt;
Rechts daneben liegt ein weiteres Quadrat, das ich beruflich benötige, weil ich viele Oracle-SQL-Abfragen schreibe.
&lt;/p&gt;

&lt;p&gt;
Es enthält die einfachen Anführungsstriche, um Strings zu begrenzen, das Semikolon, um Statements zu beenden, das Prozentzeichen, für Wildcards und das Gleichheitszeichen für viele Vergleiche.
&lt;/p&gt;

&lt;p&gt;
Wenn ich die beiden stärksten Finger nach unten bewege finden sich dort alle Zeichen, die ich auf der Kommandozeile benötige, um Pfade einzugeben ( ~ / . ) schön einfach zu erreichen.
&lt;/p&gt;

&lt;p&gt;
Die seltener benötigten Zeichen sind hübsch in die verbleibenden Lücken gestreut.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3 class="collapsible" id="orged636b2"&gt;Layer 2&lt;/h3&gt;
&lt;div id="outline-container-orged636b2" class="outline-3 collapsme"&gt;
&lt;div class="outline-text-3" id="text-orged636b2"&gt;
&lt;p&gt;
&lt;img src="https://plaindrops.de/images/Layer3.png" alt="nil"&gt;
&lt;/p&gt;

&lt;p&gt;
Die Ebene 2 ist dann für den Zehnerblock reserviert. Das ist für mich einfach die intuitivere Art Ziffern zu erfassen, und als eigene Ebene ist es damit noch nicht einmal nötig, die rechte Hand zur Seite zu bewegen. Der linke Daumen wechselt in die Ebene und sofort liegt die 5 unter meinem rechten Mittelfinger und alle wichtigen Rechenzeichen sind rundherum angeordnet. Punktrechnung rechts, Strichrechnung links.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 class="collapsible" id="org11252a3"&gt;Fazit&lt;/h2&gt;
&lt;div id="outline-container-org11252a3" class="outline-2 collapsme"&gt;
&lt;div class="outline-text-2" id="text-org11252a3"&gt;
&lt;p&gt;
Das Layout, wie es heute ist, hat sich mittlerweile sehr bewährt, und was das korrekte Tastschreiben angeht, schreibe ich mittlerweile weitgehend blind in nahezu der alten in 40 Jahren angewöhnten 6-Finger-Geschwindigkeit. In den letzten 2 Wochen habe ich allerdings schon mehrfach bemerkt, wie das Muskelgedächtnis mehr und mehr die Steuerung übernimmt. Häufig bennutzte Buchstabenfolgen tippen meine Finger mittlerweile selbstständig, noch bevor mein Kopf dazu kommt, sie in einzelne Buchstaben zu zerlegen. Da wird sich im nächsten Jahr bestimmt noch viel tun.
&lt;/p&gt;

&lt;p&gt;
Der befürchtete Effekt, dass ich das Standard QWERTZ-Layout verlerne, ist ausgeblieben. Ich muss mich zwar immer erst 1-2 Minuten eingewöhnen, aber dann ist alles wieder da. In QWERTZ kann ich sowieso nicht blind schreiben und möchte es mir dort auch nicht angewöhnen. Ich bin aber immer noch schnell genug, um z.B. diesen Blogeintrag auf QWERTZ zu schreiben, weil er auf meinem alten Laptop unterwegs entstanden ist.
&lt;/p&gt;

&lt;p&gt;
Die Tastaturen fühlen sich so deutlich unterschiedlich an (auch weil ich die Standard-Neigung von knapp 20° mit Hilfe eines &lt;a href="https://www.thingiverse.com/thing:4881967"&gt;Keils von Thingiverse&lt;/a&gt; auf knapp 30° Neigung gebracht habe), dass mein Kopf automatisch umschaltet.
&lt;/p&gt;

&lt;p&gt;
Alles in allem wundere ich mich mittlerweile darüber, wie einfach Tastschreiben ist, wenn nur die Umgebung dafür stimmt, und warum immer noch ein System gelehrt wird, und verbreitet ist, das auf Geräte optimiert ist, die es mittlerweile nur noch auf Flohmärkten zu Ramschpreisen zu finden gibt.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;</description><category>hardware</category><category>keyboard</category><guid>https://plaindrops.de/de/blog/2022/moonlanderlayout/</guid><pubDate>Sun, 27 Nov 2022 07:00:00 GMT</pubDate></item><item><title>Einsparpotentiale ermitteln (Gas)</title><link>https://plaindrops.de/de/blog/2022/wintermute3/</link><dc:creator>Andy Drop</dc:creator><description>&lt;p&gt;
Nachdem ich in der &lt;a href="https://plaindrops.de/blog/2022/wintermute2/"&gt;letzten Folge&lt;/a&gt; von Operation Wintermute mit dem Energiemessgerät von Steckdose zu Steckdose gelaufen bin, um herauszufinden wo ich Energie sparen kann, war das beim Gas doch deutlich entspannter. Ich habe nur eine handvoll Warmwasser-Zapfstellen und eine Heizung. Vor dieser Heizung habe ich dann auch etwa eine Stunde auf einem Stuhl sitzend verbracht,  bis ich verstanden habe,  wie sie für meinen Modell genau funktioniert. Und da die ganze Wärme nicht für zwei dutzend Geräte sondern nur für mich da ist, menschelt es in diesem Blogeintrag besonders
&lt;/p&gt;
&lt;!-- TEASER_END --&gt;


&lt;p&gt;
Auch wenn ich mich beim Strom um deutlich mehr Verbraucher kümmern musste,  ist es dort doch viel einfacher jederzeit festzustellen,  ob man mit seinem aktuellen Verbrauch gut liegt oder nicht. Das liegt daran dass der Verbrauch über das Jahr weitgehend gleichmäßig ist.
&lt;/p&gt;

&lt;p&gt;
Beim Gas ist das komplett anders. In den Sommermonaten ist die Heizung abgestellt,  das heißt das einzige was zu der Zeit verbraucht wird,  ist warmes Wasser zum waschen und duschen, Im Winter wird die Dusche weiterhin benutzt, jetzt wird jedoch zusätzlich die Heizung eingeschaltet, und die Heizung verbraucht ein vielfaches der Energie die wir beim duschen benötigen.
&lt;/p&gt;

&lt;p&gt;
Wir können also nicht davon ausgehen dass wir nach einem Drittel des Jahres auch ein Drittel der Energie benötigt haben, und nach zwei Dritteln des Jahres zwei Drittel. Zu Beginn des Frühjahrs haben wir fast die Hälfte der Energie verbraucht, und zu Beginn des Herbstes  noch nicht viel mehr da wir im Sommer lediglich geduscht haben.
&lt;/p&gt;

&lt;p&gt;
Um diesem Problem zu begegnen, gibt es etwas das sich Lastprofil nennt. Im Prinzip gibt ein Lastprofil an wieviel Energie ich an welchem Tag im Jahr üblicherweise verbrauche.
&lt;/p&gt;

&lt;p&gt;
Ich bin zunächst ganz naiv davon ausgegangen, dass man so ein Profil einfach so im Internet findet, aber dem war nicht so. Eine entsprechende Frage im Fediverse brachte auch kein Ergebnis. Also habe ich eine halbe Nacht rumgegoogelt und bin schließlich auf die Seite Musterhaushalt.de gestoßen, auf der es die nette Funktion gibt, dass man seinen üblichen Jahresverbrauch eingeben kann und dann eine Tabelle zurückbekommt, wieviel davon man in welchem Monat üblicherweise verbraucht. 
&lt;/p&gt;

&lt;p&gt;
Das ganze ist leider nur monatlich aufgelöst. Da ich aber gerne wöchentliche Ergebnisse hätte, hab ich angefangen mir das ganze in eine Excel-Tabelle zu übertragen und aus den Monatswerden Wochenwerte zu machen.
&lt;/p&gt;

&lt;p&gt;
Das ganze sah dann so aus:
&lt;/p&gt;

&lt;p&gt;
&lt;img src="https://plaindrops.de/images/Lastprofil.png" alt="Mein Lastprofil"&gt;
&lt;/p&gt;

&lt;p&gt;
Die blauen Balken sind das Modell, und die grünen Balken sind mein tatsächlicher Verbrauch. Wie man sieht liege ich also schon sehr gut und fast permanent unter dem Musterverbrauch. L laut dem Diagramm müsste ich pro Jahr ungefähr 500 kWh sparen. Daraufhin hab ich mal in meine Vorjahresabrechnungen geschaut, und gesehen, dass hier entgegen meiner ursprünglichen Zielsetzung von 10.000 kWh in den letzten Jahren circa 9500 kWh verbraucht habe. Für ein dermaßen grobes Modell passte das Ergebnis also überraschend genau. Für die kommenden Jahre werde ich also doch eher 9000 kWh statt der angenommenen 10.000 kWh ins Auge fassen.
&lt;/p&gt;
&lt;h2 class="collapsible" id="orgd6bb34a"&gt;Wie kann ich dieses Ziel nun erreichen?&lt;/h2&gt;
&lt;div id="outline-container-orgd6bb34a" class="outline-2 collapsme"&gt;
&lt;div class="outline-text-2" id="text-orgd6bb34a"&gt;
&lt;/div&gt;
&lt;h3 class="collapsible" id="org5fd076b"&gt;Der Kessel&lt;/h3&gt;
&lt;div id="outline-container-org5fd076b" class="outline-3 collapsme"&gt;
&lt;div class="outline-text-3" id="text-org5fd076b"&gt;
&lt;p&gt;
Nun, dazu müssen wir uns erstmal ansehen, wie die Wärmeversorgung in meinem Haus so funktioniert.
&lt;/p&gt;

&lt;p&gt;
Ich habe ein Heizkessel, der im Prinzip ein großer isolierter Wasserbehälter ist. Dieser Wasserbehälter ist über Rohre mit den Heizkörpern verbunden und eine Pumpe bewegt das Wasser im Kreis immer vom Heizkessel zur Heizung und zurück. Dabei kühlt sich das Wasser nach und nach ab.
&lt;/p&gt;

&lt;p&gt;
&lt;img src="https://plaindrops.de/images/Kessel.jpg" alt="Mein Kessel"&gt;
&lt;/p&gt;

&lt;p&gt;
Das Wasser in diesem Kessel hat eine Soll-Temperatur, und die Heizung versucht den Kessel auf dieser Temperatur zu halten. Das tut sie allerdings nicht, indem sie sofort Energie aufwendet wenn sich die Temperatur auch nur ein bisschen abkühlt, sondern der Kessel oszilliert um den eingestellten Sollwert herum. In meinem fall geht es dabei um plus minus fünfzehn Grad. Das heißt wenn mein Heizkessel, so wie ich ihn vorgefunden habe, auf 55 Grad eingestellt ist, dann nun kühlt sich das Wasser nach und nach ab bis 40 Grad erreicht sind. Daraufhin springt die Heizung an und erhitzt das Wasser wieder auf 70 Grad. Dann kühlt sich das Wasser wieder langsam auf 40 Grad ab, und das Spiel beginnt von vorne.
&lt;/p&gt;

&lt;p&gt;
ich habe also ständig Wasser mit einer Temperatur zwischen 40 und 70 Grad im Kessel, Die Mitte stellt genau die Solltemperatur dar.
&lt;/p&gt;

&lt;p&gt;
Es gibt genau 3 Gründe warum die Kessel Temperatur sinkt
&lt;/p&gt;

&lt;ol class="org-ol"&gt;
&lt;li&gt;ist die Isolierung des Kessels nicht perfekt.
Das heißt, die Temperatur im Kessel sinkt nach und nach auf die Raumtemperatur ab. Je wärmer es im Kessel ist. desto schneller sinkt der Wert ab. Wenn die Kesseltemperatur selbst nur knapp über der Raumtemperatur liegt, dann schreitet das Abkühlen langsamer voran.&lt;/li&gt;

&lt;li&gt;Ich dreh die Heizkörper auf.
Wenn das Wasser zu den Heizkörpern gepumpt wird, wird die Wärme dort, wie ist die Aufgabe eines Heizkörpers ist, an den Raum abgegeben, und abgekühltes Wasser strömt zurück in den Kessel. Dadurch kühlt sich der Kessel natürlich deutlich schneller ab, als durch einfaches rumstehen.&lt;/li&gt;

&lt;li&gt;ich benutze Brauchwasser, also ich dusche oder wasche mir die Hände mit warmem Wasser. Die Wasserleitung, die mir das Brauchwasser im Haus liefert, läuft nämlich auch durch den Kessel. In meinem Kopf ist sie dort eine lange schmale Leitung die in vielen Windungen durch den Kessel geht und vom umgebenden Warmwasser erwärmt wird. Das reicht mir als Modellannahme. Wenn ich nun den Wasserhahn aufdrehe, strömt kaltes Wasser vom Hauptanschluss nach, und kühlt damit auch den Kessel ab.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;
Es gibt also keinen unmittelbaren Zusammenhang zwischen der Energie die ich beim Duschen verbrauche, und der Energie die meine Heizung verbraucht. Es kann sein, dass ich nur kurz dusche, und sich die Kessel Temperatur dabei lediglich von siebzig auf fünfundsechzig Grad absenkt. Da die Marke von 40 Grad noch nicht erreicht ist, springt die Heizung nicht an, und es wird auch kein Gas verbraucht. Im Gegensatz dazu kann es auch sein, dass ich überhaupt nichts vom Wasser verbrauche, nun aber der Kessel durch einfaches rumstehen von 43 auf 40 Grad abgekühlt. Nun springt natürlich die Heizung an, und heizt den Kessel wieder auf 70 Grad auf, ohne dass ich in diesem Moment wirklich Energie verbraucht habe.
&lt;/p&gt;

&lt;p&gt;
Die Menge die ein Aaufheizvorgang an Energie benötigt ist dabei weitgehend gleich. Es kommt also im wesentlichen darauf an wie häufig der Kessel aufheizen muss. Je mehr Energie ich verbrauche, desto öfter muss die Heizung den Kessel aufheizen.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 class="collapsible" id="org35a60d2"&gt;Was habe ich also für Handlungsoptionen?&lt;/h2&gt;
&lt;div id="outline-container-org35a60d2" class="outline-2 collapsme"&gt;
&lt;div class="outline-text-2" id="text-org35a60d2"&gt;
&lt;/div&gt;
&lt;h3 class="collapsible" id="org81560b3"&gt;Beim Duschen&lt;/h3&gt;
&lt;div id="outline-container-org81560b3" class="outline-3 collapsme"&gt;
&lt;div class="outline-text-3" id="text-org81560b3"&gt;
&lt;p&gt;
Als erstes habe ich mir mal das Bedienungshandbuch unserer Heizung vorgenommen, denn kein Mensch braucht 70 Grad heißes Wasser, und selbst 40 Grad sind zum duschen noch sehr großzügig bemessen. Ich habe beschlossen dass mir als Solltemperatur 45 Grad reichen, das heißt der Kessel oszilliert zwischen 30 und 60 Grad. 30 Grad sind zum duschen zwar recht wenig, aber dafür liege ich im mittel bei 45 Grad, und sollte ich wirklichen nah an der 30 Grad Grenze sein, dann sorgt der Temperaturabfall durch das Duschen sehr schnell dafür, dass der Kessel neu aufgeheizt. Ich habe das ganze jetzt eine Woche ausprobiert, und komme mit dieser Temperatureinstellung auch beim Duschen hervorragend und ohne Komfortverlust klar.
&lt;/p&gt;

&lt;p&gt;
&lt;img src="https://plaindrops.de/images/Nennwert.jpg" alt="Der neue Nennwert"&gt;
&lt;/p&gt;

&lt;p&gt;
Dann kann ich beim Duschen noch dafür sorgen, dass ich dem Kessel möglichst wenig abkühle. Das geht zum einen dadurch, dass ich möglichst kurz dusche, das heißt beim einseifen zum Beispiel das Wasser abstelle, und zum anderen, wenn das Wasser eingeschaltet ist, möglichst wenig davon verbrauche. Das kann man zum Beispiel dadurch erreichen, dass man einen Durchflussminderer in seinen Schlauch einsetzt, im Prinzip eine Art kleine Unterlegscheibe, die ein Loch hat, das kleiner ist als der Schlauchdurchmesser.
&lt;/p&gt;

&lt;p&gt;
Und zu guter Letzt gibt es natürlich noch die Option seltener zu duschen. Wenn ich zum Beispiel weiß, dass ich einen Tag HomeOffices vor mir habe, und auch ansonsten das Haus nicht verlassen und anderen Menschen treffen möchte, spricht überhaupt nichts dagegen auch mal das Duschen zu überspringen.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3 class="collapsible" id="org59c76ba"&gt;Bei der Heizung&lt;/h3&gt;
&lt;div id="outline-container-org59c76ba" class="outline-3 collapsme"&gt;
&lt;div class="outline-text-3" id="text-org59c76ba"&gt;
&lt;p&gt;
Der effektivste Ansatz ist natürlich auch hier, einfach nicht zu heizen. Da das aber im tiefsten Winter nicht wirklich Sinn macht, geht es hier nicht darum seine Heizung komplett abzustellen. Natürlich kann man das machen, denn beim heizen geht es ja eigentlich darum, mich als Menschen warm zu halten, und nicht die Räume in meinem Haus. Ich könnte also im Extremfall komplett auf die Heizung meines Hauses verzichten, und einfach nur mich warm halten, indem ich warme Kleidung trage, oder direkt -zum Beispiel durch eine Wärmflasche- meinem Körper heize. Wer einen interessanten Artikel dazu lesen möchte, dem sei &lt;a href="https://www.lowtechmagazine.com/2011/02/body-insulation-thermal-underwear.html"&gt;dieser Artikel&lt;/a&gt; im &lt;a href="https://www.lowtechmagazine.com/"&gt;LOW-TECH MAGAZINE&lt;/a&gt;  empfohlen.
&lt;/p&gt;

&lt;p&gt;
&lt;img src="https://plaindrops.de/images/Heizung.jpg" alt="Die Heizung"&gt;
&lt;/p&gt;

&lt;p&gt;
Soweit möchte ich nicht gehen, aber es ist überhaupt kein Problem, erst etwas später mit dem heizen anzufangen, oder, wenn es Frühling wird, schon etwas früher damit aufzuhören, und sich mit einer schönen warmen Decke aufs Sofa zu setzen.
&lt;/p&gt;

&lt;p&gt;
Räume in denen ich mich kaum, oder gar nicht, aufhalte, muss ich auch überhaupt nicht heizen,
&lt;/p&gt;

&lt;p&gt;
In der Küche mache ich es zum Beispiel so, dass ich die Abwärme des Herdes und des Ofens nutze. Das reicht mir da an Wärme in der Küche, und ich brauche die Heizung dort gar nicht, obwohl ich mich dort öfters aufhalte. 
&lt;/p&gt;

&lt;p&gt;
Im Arbeitszimmer machen der Computer oder der Laptops eine Menge Abwärme, so dass mir dort eine kleine Kerze ausreicht um ebenfalls auf eine angenehme Arbeitstemperatur zu kommen, solange ich die Tür dort geschlossen halte.
&lt;/p&gt;


&lt;p&gt;
Im Schlafzimmer mochte ich es früher immer ungewöhnlich warm, da ich Problem mit meinen Nebenhöhlen bekomme, wenn diese nachts sehr auskühlen. Dieses Problem habe ich mittlerweile dadurch gelöst, dass ich wärmere Bettwäsche für den Winter habe, und man glaubt es oder nicht, Opas gute alte Nachtmütze wirkt Wunder gegen verkühlte Nebenhöhlen.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 class="collapsible" id="org80f272e"&gt;Ich wurde geNerdSniped&lt;/h2&gt;
&lt;div id="outline-container-org80f272e" class="outline-2 collapsme"&gt;
&lt;div class="outline-text-2" id="text-org80f272e"&gt;
&lt;p&gt;
Für mein relativ grob aufgelöstes Lastprofil habe ich übrigens in der Zwischenzeit eine sehr viel bessere Lösung gefunden. Ich bin auf TUM und SigLinDe gestoßen, die beiden Modelle mit denen die Energiewirtschaft in Deutschland tatsächlich arbeitet, und es gibt sogar ein Dokument darüber, dass leider 166 Seiten umfasst, wie diese Modelle im Detail arbeiten. Nachdem ich nun einige Stunden darüber gebrütet habe, glaube ich, dass ich die Modelle komplett verstanden habe, was ich nachher mal überprüfen werde, indem ich sie in eine Excel-tabelle überführe. In diese Modelle stecke ich die Tagesmitteltemperaturen eines Jahres und erhalte dann eine Prognose für den tagesgenauen Energieverbrauch für mein Gas.
&lt;/p&gt;

&lt;p&gt;
&lt;img src="https://plaindrops.de/images/SigLinDe.png" alt="SigLinDe"&gt;
&lt;/p&gt;

&lt;p&gt;
Mit diesem Modell werde ich definitiv noch sehr intensiv rumspielen, und nachdem der nächste Blogeintrag aus der reihe Wintermute nun um das Benzin gehen soll, würde ich sagen geht der übernächste um SigLinDe.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;</description><guid>https://plaindrops.de/de/blog/2022/wintermute3/</guid><pubDate>Thu, 29 Sep 2022 15:00:00 GMT</pubDate></item><item><title>Einsparpotentiale ermitteln (Strom)</title><link>https://plaindrops.de/de/blog/2022/wintermute2/</link><dc:creator>Andy Drop</dc:creator><description>&lt;p&gt;
In der letzten Folge von &lt;a href="https://plaindrops.de/blog/2022/wintermute/"&gt;Operation Wintermute&lt;/a&gt; hatte ich ja versucht, ein Ziel festzulegen um das Energiesparen ein bisschen zu gamifizieren. es geht nun also um 2.000 kWh Stromverbrauch, 10.000 kWh Gasverbrauch und unter 150 Euro pro Monat für Benzin als Zielmarke. Um herauszufinden wo ich zum Beispiel Strom sparen kann bin ich die letzten 24 Stunden durchs Haus gelaufen und habe den Verbrauch aller möglichen elektrischen Geräte nachgemessen, und habe dabei ein paar nette Stellen zum sparen gefunden,
&lt;/p&gt;
&lt;!-- TEASER_END --&gt;

&lt;p&gt;
&lt;img src="https://plaindrops.de/images/Messgeraet.jpg" alt="Mein Verbrauchsmesser"&gt;
&lt;/p&gt;

&lt;p&gt;
Nachdem ich mir eine Tabelle erstellt hatte, in der ich alle Räume, und dann alle darin befindlichen elektrischen Verbraucher eingetragen habe, bin ich losgezogen. Bereits im Wohnzimmer erwarteten mich die ersten Überraschungen. In der Lampe über der Couch hatte ich eigentlich Energiesparbirnen erwartet bei näherer Betrachtung fanden sich dort allerdings Halogenbirnchen vier Stück zu je 20 Watt. Also verbraucht diese Lampe um die achtzig Watt. Und sie ist, wenn ich auf dem Sofa sitze, die Lampe die am häufigsten und längsten benutzt wird im Raum.
&lt;/p&gt;

&lt;table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides"&gt;


&lt;colgroup&gt;
&lt;col class="org-left"&gt;

&lt;col class="org-left"&gt;

&lt;col class="org-left"&gt;

&lt;col class="org-left"&gt;
&lt;/colgroup&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th scope="col" class="org-left"&gt;Raum&lt;/th&gt;
&lt;th scope="col" class="org-left"&gt;Verbraucher&lt;/th&gt;
&lt;th scope="col" class="org-left"&gt;Strom&lt;/th&gt;
&lt;th scope="col" class="org-left"&gt;Bemerkung&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="org-left"&gt;Wohnzimmer&lt;/td&gt;
&lt;td class="org-left"&gt;Lampe Couch&lt;/td&gt;
&lt;td class="org-left"&gt;80 Watt&lt;/td&gt;
&lt;td class="org-left"&gt;Fuuuuck!&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt;Lampe Raum&lt;/td&gt;
&lt;td class="org-left"&gt;12 Watt&lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt;Lampe Esstisch&lt;/td&gt;
&lt;td class="org-left"&gt;11,5 Watt&lt;/td&gt;
&lt;td class="org-left"&gt;evtl Kriechstrom&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt;Stehlampe&lt;/td&gt;
&lt;td class="org-left"&gt;11 Watt&lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt;Fernseher&lt;/td&gt;
&lt;td class="org-left"&gt;10/90 Watt&lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt;XBox&lt;/td&gt;
&lt;td class="org-left"&gt;22/62 Watt&lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt;Lautsprecher&lt;/td&gt;
&lt;td class="org-left"&gt;10 Watt&lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;
Die zweite Lampe, die über am Esstisch, konnte auch mit einer Überraschung aufwarten. Zwar waren hier bereits Energiesparbirnchen verbaut, aber im Dunkeln konnte ich feststellen, dass diese auch bei abgeschalteter Lampe ganz sachte vor sich hin glimmen. Lustigerweise lässt sich die Helligkeit des Glimmens dadurch verändern dass ich die Stehlampe ein- und ausschalte. Es sieht also so aus, als wenn in der Verteilerdose irgendwie Strom vom Anschluss der Stehlampe zur Lampe überm Esstisch fließt. Mal schauen wie viel das ist, oder ob ich das abschalten kann.
&lt;/p&gt;

&lt;p&gt;
Bei den AV-Komponeten also Fernseher und die Boxen hat mich nicht wirklich überrascht dass sie Stand-By Strom ziehen, allerdings war ich über die Höhe überrascht. Der Fernseher tut sich im Standbybetrieb 10 Watt weg, die XBox habe ich mit 22 Watt gemessen und die Lautsprecher haben zwar im abgeschalteten Zustand keinen Stromverbrauch, jedoch sind sie ständig eingeschaltet damit ich nur den Fernseher einschalten muss, und direkt Ton habe. Alles zusammen waren das schicke 42 Watt die 24 Stunden am Tag verbraucht werden. Das Telefon, das daneben auf dem Tisch stand, spielte dagegen überhaupt keine Rolle. Sein Stromverbrauch liegt unter einem Watt, war allerdings der Grund warum ich bisher davon abgesehen habe, einen Schalter dort einzubauen, da das Telefon ja ständig geladen werden muss, und nicht vom Strom genommen werden kann.
&lt;/p&gt;

&lt;p&gt;
Nach kurzem Nachdenken habe ich aber festgestellt, dass, seit meine Tochter aus dem Haus ist, ich mich sowieso am meisten in meinem Arbeitszimmer aufhalte, und das Telefon dort unten eigentlich nutzlos ist. Ich könnte es viel besser oben im Arbeitszimmer gebrauchen. Also habe ich das Telefon nach oben befördert, und alle Audio-Video Geräte zusammen an einer Mehrfachsteckdose mit einem Schalter angeschlossen. Damit wurden aus 42 Watt Dauerleistung 0 Watt.
&lt;/p&gt;

&lt;p&gt;
ich gehe Moment davon aus, dass beim zukünftigen Strompreis 1 Watt Dauerverbrauch circa 6 Euro pro Jahr kosten wird. Hier ließen sich also bereits 240.- Euro einsparen
&lt;/p&gt;

&lt;table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides"&gt;


&lt;colgroup&gt;
&lt;col class="org-left"&gt;

&lt;col class="org-left"&gt;

&lt;col class="org-left"&gt;

&lt;col class="org-left"&gt;
&lt;/colgroup&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th scope="col" class="org-left"&gt;Raum&lt;/th&gt;
&lt;th scope="col" class="org-left"&gt;Verbraucher&lt;/th&gt;
&lt;th scope="col" class="org-left"&gt;Strom&lt;/th&gt;
&lt;th scope="col" class="org-left"&gt;Bemerkung&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="org-left"&gt;Küche&lt;/td&gt;
&lt;td class="org-left"&gt;Lampe Tisch&lt;/td&gt;
&lt;td class="org-left"&gt;20 Watt&lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt;Lampe Raum&lt;/td&gt;
&lt;td class="org-left"&gt;19,5 Watt&lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt;Lampe Arbeitsfläche&lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt;Herd&lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt;Abzugshaube&lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt;Kühlschrank&lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt;Geschirrspüler&lt;/td&gt;
&lt;td class="org-left"&gt;7/  Watt&lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt;Wasserkocher&lt;/td&gt;
&lt;td class="org-left"&gt;7/1850  Watt&lt;/td&gt;
&lt;td class="org-left"&gt;0,05 kWh pro Kaffee. Oh. Standby&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt;Mikrowelle&lt;/td&gt;
&lt;td class="org-left"&gt;800 Watt&lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;
In der Küche entpuppte sich dann die Lampe über dem Esstisch zwar als Energiesparlampe, aber eine aus der allerersten Generationen. Ihr erinnert euch bestimmt noch daran, dass Energiesparlampen damals eine Weile brauchten, bis sie die volle Helligkeit erreicht haben. Und für den Spaß tut sich das Exemplar über meinem Esstisch in der Küche auch noch 20 Watt rein.  Die Putzbeleuchtung im Raum ist dagegen mit 19,5 Watt deutlich heller, und wird auch nur selten gebraucht. Die lappen über der Arbeitsfläche sind kleine Halogenstrahler, die ich bisher noch nicht ausgebaut bekommen habe, aber ich vermute, dass dort dreimal circa 15 Watt verbaut sind.
&lt;/p&gt;

&lt;p&gt;
Geschirrspüler und Wasserkocher haben mich durch ihren Standby Strom überrascht. Sie nehmen jeweils 7 Watt, sodass dort 14 Watt mal 6 Euro, also 84 Euro pro Jahr den Kamin rausgehen, Die Mikrowelle die sogar ein hintergrundbeleuchtetes Display hat, hält sich dabei mit einem Standbyverbrauch von unter einem Watt nett zurück.
&lt;/p&gt;

&lt;table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides"&gt;


&lt;colgroup&gt;
&lt;col class="org-left"&gt;

&lt;col class="org-left"&gt;

&lt;col class="org-left"&gt;

&lt;col class="org-left"&gt;
&lt;/colgroup&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th scope="col" class="org-left"&gt;Raum&lt;/th&gt;
&lt;th scope="col" class="org-left"&gt;Verbraucher&lt;/th&gt;
&lt;th scope="col" class="org-left"&gt;Strom&lt;/th&gt;
&lt;th scope="col" class="org-left"&gt;Bemerkung&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="org-left"&gt;Hauswirtschaft&lt;/td&gt;
&lt;td class="org-left"&gt;Waschmaschine&lt;/td&gt;
&lt;td class="org-left"&gt;16/425 Watt&lt;/td&gt;
&lt;td class="org-left"&gt;0,75 kWh pro Ladung. Oh. Standby&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt;Trockner&lt;/td&gt;
&lt;td class="org-left"&gt;10/300 Watt&lt;/td&gt;
&lt;td class="org-left"&gt;0,78 kWh pro Ladung. Oh. Standby&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt;Gefrierschrank&lt;/td&gt;
&lt;td class="org-left"&gt;18.5 Watt&lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt;Router&lt;/td&gt;
&lt;td class="org-left"&gt;10 Watt&lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt;Heizung&lt;/td&gt;
&lt;td class="org-left"&gt;10 Watt&lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt;Lampe Raum&lt;/td&gt;
&lt;td class="org-left"&gt;–58– Watt&lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt;Raspi Home Assistant&lt;/td&gt;
&lt;td class="org-left"&gt;2.5 Watt&lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;
Im Hauswirtschaftsraum stehen erwartungsgemäß die Großverbraucher des Hauses. Waschmaschine, Trockner und Gefrierschrank. Letzteren habe ich noch nicht gemessen da ich dazu hinter den Schränken rumkrabbeln müsste, aber es handelt sich dabei um einen modernen Gefrierschrank mit brauchbaren Verbrauchswerten. Auch Waschmaschine und Trockner haben ansprechende Werte, wenn sie eingeschaltet sind. Erstaunt war ich hier über 26 Watt, die sich Waschmaschine und Trockner reintun, wenn sie nicht eingeschaltet sind. Hier war also der erste Einsatzort für meine Wunderwaffe: Schaltbare Steckdosen. Die sollten mich pro Jahr circa 150 Euro sparen, bei nur vier Euro Anschaffungskosten pro Stück
&lt;/p&gt;

&lt;p&gt;
&lt;img src="https://plaindrops.de/images/Schalter.jpg" alt="Schaltbare Steckdosen"&gt;
&lt;/p&gt;

&lt;table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides"&gt;


&lt;colgroup&gt;
&lt;col class="org-left"&gt;

&lt;col class="org-left"&gt;

&lt;col class="org-left"&gt;

&lt;col class="org-left"&gt;
&lt;/colgroup&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th scope="col" class="org-left"&gt;Raum&lt;/th&gt;
&lt;th scope="col" class="org-left"&gt;Verbraucher&lt;/th&gt;
&lt;th scope="col" class="org-left"&gt;Strom&lt;/th&gt;
&lt;th scope="col" class="org-left"&gt;Bemerkung&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="org-left"&gt;WC&lt;/td&gt;
&lt;td class="org-left"&gt;Lampe Raum&lt;/td&gt;
&lt;td class="org-left"&gt;5 Watt&lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;
Die Lampe im Gäste WC ist gut dimensioniert und wird sowieso nur sehr selten gebraucht.
&lt;/p&gt;

&lt;table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides"&gt;


&lt;colgroup&gt;
&lt;col class="org-left"&gt;

&lt;col class="org-left"&gt;

&lt;col class="org-left"&gt;

&lt;col class="org-left"&gt;
&lt;/colgroup&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th scope="col" class="org-left"&gt;Raum&lt;/th&gt;
&lt;th scope="col" class="org-left"&gt;Verbraucher&lt;/th&gt;
&lt;th scope="col" class="org-left"&gt;Strom&lt;/th&gt;
&lt;th scope="col" class="org-left"&gt;Bemerkung&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="org-left"&gt;Flur&lt;/td&gt;
&lt;td class="org-left"&gt;Lampe unten&lt;/td&gt;
&lt;td class="org-left"&gt;9,5 Watt&lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt;Lampe oben&lt;/td&gt;
&lt;td class="org-left"&gt;3,6 Watt&lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;
Im Flur ist alles im grünen Bereich.
&lt;/p&gt;

&lt;p&gt;
&lt;img src="https://plaindrops.de/images/Ladestation.jpg" alt="Mein Laderegal"&gt;
&lt;/p&gt;

&lt;table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides"&gt;


&lt;colgroup&gt;
&lt;col class="org-left"&gt;

&lt;col class="org-left"&gt;

&lt;col class="org-left"&gt;

&lt;col class="org-left"&gt;
&lt;/colgroup&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th scope="col" class="org-left"&gt;Raum&lt;/th&gt;
&lt;th scope="col" class="org-left"&gt;Verbraucher&lt;/th&gt;
&lt;th scope="col" class="org-left"&gt;Strom&lt;/th&gt;
&lt;th scope="col" class="org-left"&gt;Bemerkung&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="org-left"&gt;Arbeitszimmer&lt;/td&gt;
&lt;td class="org-left"&gt;Lampe Raum&lt;/td&gt;
&lt;td class="org-left"&gt;15 Watt&lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt;Schreibtischlampe&lt;/td&gt;
&lt;td class="org-left"&gt;6 Watt&lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt;Computer&lt;/td&gt;
&lt;td class="org-left"&gt;7/35 Watt&lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt;Laptop&lt;/td&gt;
&lt;td class="org-left"&gt;11/40 Watt&lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt;Monitor&lt;/td&gt;
&lt;td class="org-left"&gt;5/23 Watt&lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt;Moodlight&lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt;Mischpult&lt;/td&gt;
&lt;td class="org-left"&gt;10 Watt&lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt;Globus&lt;/td&gt;
&lt;td class="org-left"&gt;20 Watt&lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt;Video Licht&lt;/td&gt;
&lt;td class="org-left"&gt;1-2 Watt&lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt;Drucker&lt;/td&gt;
&lt;td class="org-left"&gt;8/30 Watt&lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt;3D-Drucker&lt;/td&gt;
&lt;td class="org-left"&gt;0/X Watt&lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt;Laderegal&lt;/td&gt;
&lt;td class="org-left"&gt;6/X Watt&lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt;Telefon&lt;/td&gt;
&lt;td class="org-left"&gt;&amp;lt;1 Watt&lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;
Im Arbeitszimmer geht es im wesentlichen um Verhaltensänderung. Die Geräte haben alle ungefähr die Werte, die ich erwartet hatte. Ich hab mir leider im Laufe der letzten Jahre angewöhnt, dass mein Rechner, und oft auch der Firmenrechner permanent eingeschaltet sind. Zusammen mit dem Standby vom Drucker sind das quasi permanente 70-80 Watt. Das sind pro Jahr dann knapp 500 Euro.
&lt;/p&gt;

&lt;p&gt;
Hier wird es also in Zukunft darum gehen die Geräte nach Gebrauch wirklich abzuschalten, und damit auch die Standby-Last verschwindet, sie alle an eine schaltbare Steckdose zu hängen. Positiv überrascht hat mich das Videolicht, dass ich für Livestreams nutze. Obwohl meine Schreibtischlampe nur 6 Watt hat, verbraucht das Videolicht mit seinen zwei sehr hellen Scheinwerfern im Normalfall nicht einmal die Hälfte der Schreibtischlampe, und erreicht sie so eben, wenn ich die Leistung voll aufdrehe. Dann werde ich allerdings blind.
&lt;/p&gt;

&lt;table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides"&gt;


&lt;colgroup&gt;
&lt;col class="org-left"&gt;

&lt;col class="org-left"&gt;

&lt;col class="org-left"&gt;

&lt;col class="org-left"&gt;
&lt;/colgroup&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th scope="col" class="org-left"&gt;Raum&lt;/th&gt;
&lt;th scope="col" class="org-left"&gt;Verbraucher&lt;/th&gt;
&lt;th scope="col" class="org-left"&gt;Strom&lt;/th&gt;
&lt;th scope="col" class="org-left"&gt;Bemerkung&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="org-left"&gt;Schlafzimmer&lt;/td&gt;
&lt;td class="org-left"&gt;Lampe Raum&lt;/td&gt;
&lt;td class="org-left"&gt;10,5 Watt&lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt;Lampe Bett&lt;/td&gt;
&lt;td class="org-left"&gt;7 Watt&lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt;Wecker&lt;/td&gt;
&lt;td class="org-left"&gt;2 Watt&lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;
Im Schlafzimmer ist alles im grünen Bereich.
&lt;/p&gt;

&lt;table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides"&gt;


&lt;colgroup&gt;
&lt;col class="org-left"&gt;

&lt;col class="org-left"&gt;

&lt;col class="org-left"&gt;

&lt;col class="org-left"&gt;
&lt;/colgroup&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th scope="col" class="org-left"&gt;Raum&lt;/th&gt;
&lt;th scope="col" class="org-left"&gt;Verbraucher&lt;/th&gt;
&lt;th scope="col" class="org-left"&gt;Strom&lt;/th&gt;
&lt;th scope="col" class="org-left"&gt;Bemerkung&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="org-left"&gt;Kinderzimmer&lt;/td&gt;
&lt;td class="org-left"&gt;Lampe Raum&lt;/td&gt;
&lt;td class="org-left"&gt;5,3 Watt&lt;/td&gt;
&lt;td class="org-left"&gt;unbewohnt&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;
Das Kinderzimmer ist aktuell unbewohnt, unbeheizt und unbeleuchtet.
&lt;/p&gt;

&lt;table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides"&gt;


&lt;colgroup&gt;
&lt;col class="org-left"&gt;

&lt;col class="org-left"&gt;

&lt;col class="org-left"&gt;

&lt;col class="org-left"&gt;
&lt;/colgroup&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th scope="col" class="org-left"&gt;Raum&lt;/th&gt;
&lt;th scope="col" class="org-left"&gt;Verbraucher&lt;/th&gt;
&lt;th scope="col" class="org-left"&gt;Strom&lt;/th&gt;
&lt;th scope="col" class="org-left"&gt;Bemerkung&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="org-left"&gt;Bad&lt;/td&gt;
&lt;td class="org-left"&gt;Lampe Raum&lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt;Lampe Spiegel&lt;/td&gt;
&lt;td class="org-left"&gt;3.5 Watt&lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt;Rasierer&lt;/td&gt;
&lt;td class="org-left"&gt;&amp;lt;1 Watt&lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt;Zahnstation&lt;/td&gt;
&lt;td class="org-left"&gt;&amp;lt;1 Watt&lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt;Föhn&lt;/td&gt;
&lt;td class="org-left"&gt;800 Watt&lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;
Die Deckenlampe im Bad habe ich mir noch nicht genauer angeguckt, da das Glas der Lampe dort gesprungen ist, und ich mich nicht traue sie von der Decke zu nehmen, weil ich nicht weiß ob ich sie wieder aufgehängt bekomme. Ich weiß allerdings, dass sich darin eine Energiesparbirne befindet die eher knapp bemessen ist, und gerade genug Licht macht. Spiegel, Lampe, Rasierer und die Zahnstation verbrauchen vorbildlich wenig Strom. Lediglich der Föhn mit seinen 800 Watt wäre zu nennen, aber mit meinen spärlichen Haaren brauche ich den nicht, und er ist überhaupt nur dort falls ich Bersuch mit längeren Haaren habe.
&lt;/p&gt;

&lt;table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides"&gt;


&lt;colgroup&gt;
&lt;col class="org-left"&gt;

&lt;col class="org-left"&gt;

&lt;col class="org-left"&gt;

&lt;col class="org-left"&gt;
&lt;/colgroup&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th scope="col" class="org-left"&gt;Raum&lt;/th&gt;
&lt;th scope="col" class="org-left"&gt;Verbraucher&lt;/th&gt;
&lt;th scope="col" class="org-left"&gt;Strom&lt;/th&gt;
&lt;th scope="col" class="org-left"&gt;Bemerkung&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="org-left"&gt;Garten&lt;/td&gt;
&lt;td class="org-left"&gt;Rasenmäher&lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt;Wasserpumpe&lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt;Trimmer&lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt;Springbrunnen&lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt;Schuppenbeleuchtung&lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt;Aussenbeleuchtung&lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt;Kriechstrom?&lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;


&lt;p&gt;
Den Strom im Garten konnte ich bisher noch nicht genau ermitteln, da ich den Garten bereits winterfest gemacht habe. Das werde ich mir dann also im nächsten Frühjahr vornehmen
&lt;/p&gt;

&lt;p&gt;
Insgesamt freue ich mich dass ich mir so ein Einsparpotenzial von etwa 800 Euro erschließen kann. Endgültig reich werde ich dann, wenn mir jeder einen Euro zahlt, der mir nun erklären möchte dass meine Glühbirnen eigentlich Leuchtmittel heißen.
&lt;/p&gt;

&lt;p&gt;
Im nächsten Beitrag nehme ich mir dann das Gas vor.
&lt;/p&gt;</description><guid>https://plaindrops.de/de/blog/2022/wintermute2/</guid><pubDate>Tue, 20 Sep 2022 11:00:00 GMT</pubDate></item><item><title>Operation Wintermute</title><link>https://plaindrops.de/de/blog/2022/wintermute/</link><dc:creator>Andy Drop</dc:creator><description>&lt;p&gt;
in den Nachrichten ist es aktuell überall Thema: Die steigenden Kosten für Gas und Strom und andere Energieträger. Dabei hatte ich bisher sogar noch Glück. Ich hatte relativ langfristige Verträge,  die erst in den kommenden Wochen auslaufen. Im Moment treffen bei mir die ersten Briefe ein, die mich darauf vorbereiten sollen. Also bereite ich mich darauf vor,  indem ich schaue wo  ich in diesem Winter Energie sparen kann.
&lt;/p&gt;
&lt;!-- TEASER_END --&gt;

&lt;p&gt;
Da die Verbrauchswerte messbar sind, bietet es sich an, das ganze zu gameifizieren. Das erhöht die Motivation, und wenn es da noch einen coolen Projektnamen wie "Operation Wintermute" kriegt, hoffe ich, dass ich dran bleibe. Die Chancen stehen gut, da ich ja auch in den vergangenen Jahren schon regelmäßig meine Zählerstände abgelesen habe, und immer wieder beim Verbrauch nachgesteuert.
&lt;/p&gt;
&lt;h2 class="collapsible" id="org857218c"&gt;Der IST-Zustand&lt;/h2&gt;
&lt;div id="outline-container-org857218c" class="outline-2 collapsme"&gt;
&lt;div class="outline-text-2" id="text-org857218c"&gt;
&lt;p&gt;
Ich lebe in einem kleinen Einfamilienhaus mit 117qm Wohnfläche. Bis Herbst letzten Jahres wohnten wir hier noch zu zweit doch seit meine Tochter zum studieren weggezogen ist, habe ich das Haus für mich alleine. Mein Arbeitsplatz und meine Freundin sind beide in der selben, etwa fünfzig Kilometer entfernten Stadt, welche leider nicht vernünftig mit öffentlichen Verkehrsmitteln an meinen Wohnort angebunden ist.
&lt;/p&gt;
&lt;/div&gt;
&lt;h3 class="collapsible" id="org037a9eb"&gt;Strom&lt;/h3&gt;
&lt;div id="outline-container-org037a9eb" class="outline-3 collapsme"&gt;
&lt;div class="outline-text-3" id="text-org037a9eb"&gt;
&lt;p&gt;
Beim Strom habe ich aktuell einem Grundpreis von 11 Euro im Monat und einen Verbrauchspreis pro Kilowattstunde von 29,91 Cent. Das bedeutet, ich habe aktuell noch keine Putin Erhöhung erhalten
&lt;/p&gt;

&lt;p&gt;
Der Verbrauch hat sich in den letzten Jahren so enwickelt:
&lt;/p&gt;


&lt;table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides"&gt;


&lt;colgroup&gt;
&lt;col class="org-right"&gt;

&lt;col class="org-right"&gt;
&lt;/colgroup&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th scope="col" class="org-right"&gt;Jahr&lt;/th&gt;
&lt;th scope="col" class="org-right"&gt;kWh&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="org-right"&gt;2018&lt;/td&gt;
&lt;td class="org-right"&gt;2381&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class="org-right"&gt;2019&lt;/td&gt;
&lt;td class="org-right"&gt;2390&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class="org-right"&gt;2020&lt;/td&gt;
&lt;td class="org-right"&gt;2731&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class="org-right"&gt;2021&lt;/td&gt;
&lt;td class="org-right"&gt;2788&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class="org-right"&gt;2022&lt;/td&gt;
&lt;td class="org-right"&gt;ca 2400&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;
Die Zahl für 2022 kann ich bisher nur schätzen,  da die Abrechnung etwa Mitte Dezember erfolgen wird. Da mein Verbrauch über das Jahr allerdings weitgehend linear erfolgt habe ich ihn anhand der bisherigen Zählerablesung extrapoliert. 
Die knapp 400 Kilowattstunden mehr die in den Jahren 2020/21 in der Liste stehen schiebe ich auf das Homeoffice. Ich habe seither hier natürlich öfter die Beleuchtung im Arbeitszimmer laufen,  und auch der Laptop trägt seinen Teil dazu bei. Damit läge ich für das Jahr 2022 bei 850 € Gesamtkosten, und einem Abschlag von etwa 71 €.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3 class="collapsible" id="org7d3fc30"&gt;Gas&lt;/h3&gt;
&lt;div id="outline-container-org7d3fc30" class="outline-3 collapsme"&gt;
&lt;div class="outline-text-3" id="text-org7d3fc30"&gt;
&lt;p&gt;
Beim Gas habe ich aktuell einem Grundpreis von 4,33 € im Monat und einen Verbrauchspreis pro Kilowattstunde von 6,3 Cent. Ab dem 1. November kommen die Gasbeschaffungs- und die Gasspeicher-Umlage dazu,  sodass mein Verbrauchspreis auf 10,2 Cent/kWh steigt. Die gestiegenen Beschaffungskosten hat mein Versorger bisher noch nicht weitergegeben. Ich denke er wird damit bis kurz vor Ende meines derzeitigen Vertrages warten, um einen möglichst genauen Stand weitergeben zu können.
&lt;/p&gt;

&lt;p&gt;
Der Verbrauch hat sich in den letzten Jahren so enwickelt:
&lt;/p&gt;


&lt;table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides"&gt;


&lt;colgroup&gt;
&lt;col class="org-right"&gt;

&lt;col class="org-right"&gt;
&lt;/colgroup&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th scope="col" class="org-right"&gt;Jahr&lt;/th&gt;
&lt;th scope="col" class="org-right"&gt;kWh&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="org-right"&gt;2018&lt;/td&gt;
&lt;td class="org-right"&gt;9840&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class="org-right"&gt;2019&lt;/td&gt;
&lt;td class="org-right"&gt;10689&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class="org-right"&gt;2020&lt;/td&gt;
&lt;td class="org-right"&gt;12723&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class="org-right"&gt;2021&lt;/td&gt;
&lt;td class="org-right"&gt;10447&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class="org-right"&gt;2022&lt;/td&gt;
&lt;td class="org-right"&gt;noch keine Schätzung&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;
Die Zahl für 2022 kann ich bisher noch nicht schätzen, da mein Verbrauch über das Jahr leider nicht linear erfolgt. Die Aufstellung einer entsprechend gewichteten Verbrauchskurve ist einer der nächsten Schritte die ich vorhabe. 
Bei einem Verbrauch vergleichbar zum Vorjahr, läge ich für das Jahr 2022 bei 775 € Gesamtkosten, und einem Abschlag von etwa 65 €.
&lt;/p&gt;

&lt;p&gt;
Durch die Verbrauchspreiserhöhung für die letzten beiden Monate des Jahres, werde ich vermutlich eine Nachzahlung haben. Da ich aber im letzten Jahr eine kleine Rückzahlung hatte und schon abzusehen war,  dass sich die Preise erhöhen werden, habe ich diese Rückzahlung in meinem Gas-Budget belassen, Ich gehe davon aus, dass diese Rückzahlung die Nachzahlung etwa ausgleicht.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3 class="collapsible" id="org6441ccc"&gt;Benzin&lt;/h3&gt;
&lt;div id="outline-container-org6441ccc" class="outline-3 collapsme"&gt;
&lt;div class="outline-text-3" id="text-org6441ccc"&gt;
&lt;p&gt;
Den Benzinverbrauch für mein Auto beobachte ich derzeit von allen Verbräuchen am ungenauesten. Was ich weiß, ist, dass mein Auto im Mischbetrieb mit einer Strecke die etwa zur Hälfte aus Autobahn besteht circa 4,2 l/100km verbraucht, wenn ich es extrem sparsam fahre ich etwa auf 3,8 l/100km komme. Im Moment mache ich es so, dass ich ein Benzin Budget von 180€ im Monat habe, von dem am Ende des Monats immer noch etwas übrig ist. Das übrige Geld buche ich derzeit auf das Budget für Wartung und Reparaturen um. Ich tanke also für weniger als 180€ im Monat. Ich würde schätzen dass es aktuell etwa 130€-140€ sind. In der nächsten Zeit werde ich vermutlich einmal pro Woche zur Arbeit und zweimal pro Woche zu meiner Freundin fahren. Es besteht allerdings die Möglichkeit die Fahrt zur Arbeit mit einer Fahrt zu meiner Freundin zu kombinieren, da beide im gleichen Ort sind.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 class="collapsible" id="orgd7fe16c"&gt;Der SOLL-Zustand&lt;/h2&gt;
&lt;div id="outline-container-orgd7fe16c" class="outline-2 collapsme"&gt;
&lt;div class="outline-text-2" id="text-orgd7fe16c"&gt;
&lt;p&gt;
Schön wäre es, wenn ich durch die Energieeinsparungen so viel Geld einsparen könnte, dass sich die Preiserhöhung damit auffangen ließe,  davon gehe ich allerdings noch nicht wirklich aus.  Beim Strom würde ich es gerne schaffen auf 2000 kWh zu kommen beim Gas etwa 10.000 kWh und beim Auto wäre ich gerne mittelfristig bei 150€ im Monat für Benzin.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;</description><guid>https://plaindrops.de/de/blog/2022/wintermute/</guid><pubDate>Mon, 19 Sep 2022 07:00:00 GMT</pubDate></item><item><title>Browser Lesezeichen in Org-Mode speichern</title><link>https://plaindrops.de/de/blog/2021/MyBookmarks/</link><dc:creator>Andy Drop</dc:creator><description>&lt;p&gt;
Das Problem begann eigentlich schon vor &lt;a href="https://de.wikipedia.org/wiki/Lynx_(Browser)"&gt;knapp 30 Jahren&lt;/a&gt;. Es war sehr einfach im Browser ein Lesezeichen zu einer Seite zu speichern, und genau so einfach war es auch die Seiten danach wieder damit aufzurufen. So sammelten sich im Laufe der Zeit mehr und mehr Lesezeichen an, und wenn dann eine neue Version des Browsers erschien, war es eine mühsame Arbeit die Datei mit den Lesezeichen in das passende Verzeichnis des neuen Browsers zu kopieren.
&lt;/p&gt;
&lt;!-- TEASER_END --&gt;

&lt;p&gt;
Immerhin hatten die Hersteller schnell begriffen, dass dies ein Problem war, und boten bald dann eine Möglichkeit an die Lesezeichen automatisiert von einer Vorgängerversion zu übernehmen.  Nun arbeiten Menschen aber durchaus mit mehr als einem Browser, und es wurde immer klarer, das es sehr praktisch ist wenn man sowohl auf dem Rechner zu Hause, als auch auf dem Laptop, oder dem Firmen-Rechner die gleichen Lesezeichen zur Verfügung hat.
&lt;/p&gt;

&lt;p&gt;
Damit begann zu erst die Zeit der Online- Lesezeichen Speicherdienste, die über ein Browser-Plugin die Favoriten in ihre Verzeichnisse aufnahmen, später bauten auch alle großen Browserhersteller eine Funktion ein um die Lesezeichen zwischen verschiedenen Browsern zu synchronisieren, was wiederum den Niedergang der Online-Speicherdienste einläutete.
&lt;/p&gt;

&lt;p&gt;
Ich habe damals auch so einen Dienst benutzt, auch weil es praktisch war, seine eigenen Lesezeichen für andere Personen freizugeben. Dennoch sind mir immer wieder Lesezeichen abhanden gekommen, wenn mal das Plugin nicht richtig funktionierte, und Unmengen von Dubletten waren an der Tagesordnung.
&lt;/p&gt;

&lt;p&gt;
So kam es, das ich mich entschied meine Lesezeichen ab jetzt an einem zentralen Ort zu sammeln, der unabhängig von Browser und Internet sein sollte. Seit damals, bis heute ist das eine reine Textdatei, und das Format ist auch nur wenig geändert wurden. Ich habe schon immer den Link gespeichert, und zu Anfang einfach noch ein paar Stichworte dazu geschrieben. Seit einigen Jahren bin ich beim jetzigen Format einem Org-Mode Link inklusive dem Seitentitel, plus einem Zeitstempel, wann ich das Lesezeichen erzeugt habe, angekommen.
&lt;/p&gt;

&lt;p&gt;
Dadurch ist das aufrufen von Seiten ein Kinderspiel. Im Org-Mode von Emacs sind Links einfach anklickbar, und rufen das konfigurierte Programm, also am besten einen Browser, auf.
&lt;/p&gt;

&lt;p&gt;
Das Abspeichern der Links war schon immer eine eigene Baustelle und läuft bei mir mittlerweile in der dritten Fassung
&lt;/p&gt;
&lt;h2 class="collapsible" id="org8b03d25"&gt;Die Emacs Seite&lt;/h2&gt;
&lt;div id="outline-container-org8b03d25" class="outline-2 collapsme"&gt;
&lt;div class="outline-text-2" id="text-org8b03d25"&gt;
&lt;p&gt;
Auf der Empfängerseite, also in Emacs war die Lösung von Anfang an sehr einfach. Hier gibt es einen Mechanismus der sich &lt;a href="https://orgmode.org/manual/Capture.html"&gt;Org-Capture&lt;/a&gt; nennt. Dieser ist eigentlich dazu gedacht, um neben der normalen Arbeit an einem Text mal eben eine Information zu einem Anruf, oder einem Gespräch mit dem Kollegen, der gerade ins Büro kam festzuhalten. Neben dem normalen Fenster geht ein weiteres Fenster auf, in das man seine Notiz eintragen kann, und diese wird dann an einem festgelegten Ort gespeichert. Dabei lassen sich &lt;a href="https://orgmode.org/manual/Capture-templates.html"&gt;Templates&lt;/a&gt; nutzen, die z.B. bereits Datum und Uhrzeit des Eintrags hinzugefügt haben, noch bevor man los tippt.
&lt;/p&gt;

&lt;p&gt;
Passend zu diesem Mechanismus gibt es das &lt;a href="https://orgmode.org/manual/The-capture-protocol.html#index-capture-protocol"&gt;Capture-Protocol&lt;/a&gt;. Dadurch wird es möglich Emacs von aussen her aufzurufen, und als Aufrufparameter Informationen mitzugeben, die dann in ein solches Template eingetragen werden, und in die entsprechende Datei eingetragen.
&lt;/p&gt;

&lt;p&gt;
Wer dieses Protokoll nutzen möchte stößt allerdings schnell auf zwei Probleme, die sich allerdings beide lösen lassen:
&lt;/p&gt;

&lt;ul class="org-ul"&gt;
&lt;li&gt;Da es sich um ein neues Protokoll handelt wird dieses vom Betriebssystem behandelt, und muss diesem zunächst mal bekannt gemacht werden. Das bedeutet unter Windows das &lt;a href="https://www.reddit.com/r/emacs/comments/gssl86/question_setting_up_orgcapture_on_windows/"&gt;anlegen von Registry Einträgen&lt;/a&gt;, und unter Linux das schreiben (wenn auch sehr kleiner) Konfigurationsdateien. Ohne diese Bekanntgabe passiert absolut nichts. Das Betriebssystem muss wissen, das es jedes mal den Emacsclient aufruft, wenn jemand das org-capture-protocol verwendet.&lt;/li&gt;
&lt;/ul&gt;


&lt;ul class="org-ul"&gt;
&lt;li&gt;Die Syntax des Aufrufs hat sich im Verlauf der Emacs Versionen einmal geändert, so das es quasi zwei verschiedene Versionen gibt, wie es richtig funktioniert, und auch wenn mittlerweile wohl nur noch Emacs Versionen mit der neuen Syntax in Gebrauch sein sollten, stammen sehr viele Erklärungen im Internet noch aus der Zeit der alten Syntax, die umständlicher, und dazu noch weniger flexibel war. Leider wird fast nirgendwo darauf hingewiesen, dass es mittlerweile eine neuere, bessere Syntax gibt. Selbst Anleitungen, die die neue Syntax zeigen, erwähnen selten, dass es auch mal eine alte Syntax gab, und so geraten Anfänger schnell in die Falle beide Versionen für die Wahrheit zu halten, und sie munter zu mixen, was dann dazu führt, das es überhaupt nicht mehr funktioniert.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Hat man diese beidem Probleme aber einmal erkannt, lässt sich das ganze schnell korrekt konfigurieren (und so schwer ist das dann auch nicht mehr). Ein Tipp: Die aktuelle Syntax findet sich in der Dokumentation, die man sowohl online, als auch innerhalb von in der Hilfe findet.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 class="collapsible" id="orgf2406e0"&gt;Die Browser-Seite&lt;/h2&gt;
&lt;div id="outline-container-orgf2406e0" class="outline-2 collapsme"&gt;
&lt;div class="outline-text-2" id="text-orgf2406e0"&gt;
&lt;p&gt;
Um in Emacs ein Lesezeichen abzuspeichern reicht also ein Aufruf von 
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;emacsclient "org-protocol://capture?template=L&amp;amp;url=%%TAB-URL%%&amp;amp;title=%%TAB-TITLE%%"
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;
Der Browser muss also einfach nur diesen Aufruf hinbekommen, und der Drops ist gelutscht. Leider ist der Aufruf von ausführbaren Programmen von der Platte des Benutzers auch eine riesige Sicherheitslücke, denn wenn ein Angreifer das von einer Internetseite aus tun kann, kann er auch Schadcode dort ausführen. Entsprechend haten die Browser Hersteller keinen einfachen Weg dafür in ihre Browser eingebaut.
&lt;/p&gt;
&lt;/div&gt;
&lt;h3 class="collapsible" id="org0630268"&gt;Iteration 1&lt;/h3&gt;
&lt;div id="outline-container-org0630268" class="outline-3 collapsme"&gt;
&lt;div class="outline-text-3" id="text-org0630268"&gt;
&lt;p&gt;
Mein erster Weg damit umzugehen, war es mir einen anderen Browser zuzulegen. Ich hab mir damals Qutebrowser ausgesucht, weil er eine Funktion bot, jede Funktion des Browsers mit einer Tastenkombination zu verbinden. Dazu war noch eine sehr wichtige Funktion eingebaut, mit der man beliebige Programme aufrufen konnte, und der Browser konnte dazu die URL, den Namen der Seite, oder den markierten Text als Aufrufparameter einsteuern. Der Ansatz war also trivial: einfach Ctrl-D mit dem Aufruf eines kleinen Python-Scripts verbunden, das die URL passend formatiert, und dann den Emacsclient aufruft.
&lt;/p&gt;

&lt;p&gt;
Es war ein Traum. … bis zu Debian 10. Dann stellte sich heraus, dass die Versionen von Python, und die von Debian installierten Qt-Bibliotheken für Python unterschiedliche Abhängigkeiten hatten, die sich widersprachen, kurz es knallte an allen Ecken und Enden, und die Lösung wäre es gewesen eine isolierte Python umgebung zu schaffen, mit gepinten Versionen der einzelnen Pakete, und das wollte ich mir dann doch nicht antun.
&lt;/p&gt;

&lt;p&gt;
Es wurde also Zeit für 
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3 class="collapsible" id="org2a315cc"&gt;Iteration 2&lt;/h3&gt;
&lt;div id="outline-container-org2a315cc" class="outline-3 collapsme"&gt;
&lt;div class="outline-text-3" id="text-org2a315cc"&gt;
&lt;p&gt;
Wenn ich den Qutebrowser sowieso nicht mehr nutzen konnte bin ich also wieder zurück zu einem der Standardbrowser gewechselt - Firefox
&lt;/p&gt;

&lt;p&gt;
Hier gab es also wieder das bekannte Problem, dass Firefox nicht besonders gewillt ist externe Programme aufzurufen, und ich habe ein wenig gegrübelt, wie sich das am besten umgehen lässt, ohne die Sicherheit von Firefox auszuhebeln. Die Lösung lieferte dann meine Freundin quasi frei Haus. Wir unterhielten uns eines Tages darüber, das Ihr Arbeitskollege unter Windows sehr virtuos Standard-eMails schreibt, indem er alle wichtigen
Textbausteine in einer Software namens Klavier hat, und auf Knopfdruck abrufen kann, verbunden mit der Frage, ob sie das nicht auch irgendwie installieren kann. Nun, für die Software hatte ihr Kollege wohl eine Lizenz gekauft, und das Geld wollte sie nicht ausgeben, aber ich hab eine Software namens AutoHotKey gefunden, die quasi das gleiche kann, und mit der sie seither arbeitet.
&lt;/p&gt;

&lt;p&gt;
Neugierig geworden wollte ich sehen, ob es so etwas auch für Linux gibt (ich hab es nie gebraucht, da Emacs ein paar eingebaute Wege hat mit Textbausteinen zu arbeiten).
&lt;/p&gt;

&lt;p&gt;
Und ich fand ein Programm namens Autokey, und schon die ersten Beispiele, die ich sah zeigten auch, das es auch mit dem Clipboard umgehen kann, und auch externe Programme aufrufen. BINGO!
&lt;/p&gt;

&lt;p&gt;
Von da an ging es ganz schnell. Ich hab Autokey installiert, und CTRL-D mit einen Script belegt das den Cursor in die URL-Zeile setzt, alles markiert, und die URL ins Clipboard kopiert. Mit dieser URL wurde dann mein altes Python-Script aus Iteration 1 aufgerufen, und Voila, die URL landete wieder in meinem Emacs, und damit in der Link-Datei.
&lt;/p&gt;

&lt;p&gt;
Es waren wieder friedliche Zeiten. So einigermaßen.
&lt;/p&gt;

&lt;p&gt;
Denn leider konnte ich so den Seitentitel nicht übernehmen, und musste im Nachgang nochmal ein Skript über meine Links laufen lassen, welches zu jedem Link den Seitetntitel holte, und den Org-Link entsprechend anpasste. Es funktionierte, aber meine Nerd-Seele litt. Ich wollte EINEN EINZIGEN SCHRITT mit EINEM Tastendruck.
&lt;/p&gt;

&lt;p&gt;
Ich begann also die Suche nach 
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3 class="collapsible" id="orgb6779b1"&gt;Iteration 3&lt;/h3&gt;
&lt;div id="outline-container-orgb6779b1" class="outline-3 collapsme"&gt;
&lt;div class="outline-text-3" id="text-orgb6779b1"&gt;
&lt;p&gt;
Ich hab dann angefangen die Firefox AddOns nach Erweiterungen zu durchsuchen, die es irgendwie doch ermöglichen ein externes Skript aus dem Browser zu starten. Die ersten Ergebnisse trieben mir eine Gänsehaut nach der anderen über den Rücken, viele davon verlangten, einen nicht näher  beschriebenen Code aus dem Internet zu laden, bei dem der Autor versprach, das er das Problem löst, aber nicht wie, oder ob damit die Browser Sicherheit ausgehebelt wird. Viele dieser Erweiterungen sind mittlerweile aus den AddOns verschwunden, und ich habe mich auch nie getraut, eine davon zu installieren.
&lt;/p&gt;

&lt;p&gt;
Bis ich auf &lt;a href="https://github.com/waldner/Firefox-RunWith"&gt;RunWith&lt;/a&gt; stieß. Auch hier muss man zwei weitere Dateien auf seinem System installieren, und eventuell war das auch genau der gleiche Mechanismus, wie die anderen AddOns die ich so ignoriert hatte, allerdings machte der Autor zwei entscheidende Dinge anders, als die Pakete, die mir so dubios erschienen. Er zeigte die beiden Dateien &lt;a href="https://github.com/waldner/Firefox-RunWith#configuration-example"&gt;ganz offen&lt;/a&gt;, und erklärte ihre Funktion Stück für Stück, so dass ich nachvollziehen konnte, wozu ich diese brauche und er stellte &lt;a href="https://github.com/waldner/Firefox-RunWith#detailed-explanation"&gt;ihre Funktion&lt;/a&gt; dar, in einen Framework, das sich &lt;a href="https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/Native_messaging"&gt;Native Messaging&lt;/a&gt; nennt, und das die von den Browserherstellern bevorzugte sichere Methode ist externe Programme aus einem Browser aufzurufen, und mit Parametern zu versehen. Also exakt das, wonach ich gesucht habe.
&lt;/p&gt;

&lt;p&gt;
URL, Seitentitel und markierter Text gehören auch hier zu den Standard Parametern, die übergeben werden können, aber darüber hinauch auch Bild-URLs oder die Art der Objekts von wo das Skript aufgerufen wurde, denn im Standard enthalten ist auch, das ich beim Klick nur Scripte angezeigt bekomme, die in der jeweiligen Situation sinnvoll sind. Wenn ich also einfach irgendwo auf der Seite dieses AddOn aufrufe bietet es mir an ein Script für
ein Lesezeichen auszuführen. Habe ich hingegen einen Teil der Seite markiert, wird zusätzlich ein Script angeboten, das mir den markierten Text als Zitat speichert, und die URL als Quelle darunter schreibt.
&lt;/p&gt;

&lt;p&gt;
Die zentrale Datei der Native Messaging Host ist hier in Python geschrieben, und damit schon mal auf seinen Inhalt überprüfbar. Darüber hinaus beschreibt der Autor auf der Homepage noch sehr schön wie die Schnittstelle aussieht, die ein Skript zur Verfügung stellen muss, um als NM Host fungieren zu können, und welche Aufgaben die einzelnen Teile des Skripts dabei übernehmen. Das ist nicht nur genug um mein Vertrauen zu gewinnen,
sondern geradezu vorbildlich.
&lt;/p&gt;

&lt;p&gt;
Ich hoffe daher, dass Iteration 3 damit die letzte Station auf der Reise zur perfekten Bookmark Lösung für mich war. Dabei bleibt wieder einmal eine Erkenntnis zurück. Obwohl alle 3 Iterationen technologisch vollständig unterschiedliche Ansätze waren, konnten alle perfekt mit einer Textdatei arbeiten, und ich möchte mir nicht ausmalen wie es gelaufen wäre, wenn diese auch noch in einem proprietären Dateiformat abgelegt wären.
&lt;/p&gt;

&lt;p&gt;
Dazu kommt noch, das ich diese Textdatei einfach in HTML exportieren kann, und das Ergebnis ist dann unmittelbar die &lt;a href="https://plaindrops.de/page/links/"&gt;LINKS Seite&lt;/a&gt; dieses Blogs, bei der einfach alle privaten Links nicht exportiert wurden.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description><category>bookmarks</category><category>browser</category><category>emacs</category><category>orgmode</category><guid>https://plaindrops.de/de/blog/2021/MyBookmarks/</guid><pubDate>Tue, 02 Nov 2021 02:00:00 GMT</pubDate></item></channel></rss>