Git Leitfaden für Beginner

Wer Projekte per git auf dem aktuellen Stand halten will, aber sonst nicht viel mit git macht, braucht immer mal wieder dieselben Befehle, um die notwendigen Aktualisierungen durchzuführen. Da sind dann immer wieder diese Leute, die dann ein paar Befehle rüber werfen, aber nicht wirklich zwei klärende Worte zum Zusammenhang hinzufügen. Das Problem ist zwar damit vielleicht aus der Welt, aber es ist nichts damit gewonnen. Konfuzius rotierte im Grabe!

Gib einem Mensch einen Fisch und du ernährst ihn für einen Tag. Lehre einen Menschen zu fischen und du ernährst ihn für sein Leben.

Konfuzius

Wenn die Mehrzahl der EmpfehlerInnen nach dieser Maxime handeln würden, wäre das Frustrationspotential auf Myriaden von Webseiten und Foren nicht so hoch. Das musste ich mal los werden.

Ich gehe am praktischen Beispiel des Fediverse Servers Friendica vor. Den geübten Umgang mit z.B. Linux und der Konsole bzw der Shell Bash setze ich voraus. Ebenso ein installiertes git .

Git und das Repo

Das Software Repository, oft auch nur Repository oder Repo genannt, von Friendica liegt z.B. auf https://github.com/friendica/friendica . Das ist der Speicherort, auf dem die Software liegt und von Entwicklern gepflegt, programmiert und aktualisiert wird. Git ist eine Software, die gleichzeitig verschiedene Versionen von Dateien verwalten kann und für die Softwareentwicklung entwickelt wurde. Kurz gesagt ermöglicht sie es sehr einfach recht komplexe Version- Upgrades oder Downgrades absolut korrekt durchzuführen, so dass als Ergebnis immer eine saubere und lauffähige Version der Software bzw des Quellcodes herauskommt.
Mehr zum Thema git

Schritt 1: Die Software installieren – Das Repo clonen

Ich nehme mal an, du willst Friendica auf deinem Server installieren und hast das Webverzeichnis für deine Domain www.MeineDomain.de eingerichtet, das sich z.B. unter /var/web/MeineDomain/htdocs befindet. Und genau hier willst du Friendica installieren, daher wechselst du in dieses Verzeichnis. Das Verzeichnis muss komplett leer sein, sonst weigert sich git die Dateien hier abzulegen.

Der Befehl der dafür vorgeschlagen wird, ist oft

git clone https://github.com/friendica/friendica

ABER! Dieser würde dir in deinem /var/web/MeineDomain/htdocs/ Verzeichnis ein Unterverzeichnis friendica /var/web/MeineDomain/htdocs/friendica/anlegen und dort alle Dateien und Verzeichnisse ablegen. Und dein Server wäre dann nur unter www.MeineDomain.de/friendica/ erreichbar. Aber du möchtest, dass der Friendica Server unter www.MeineDomain.de erreichbar ist.

Daher musst du dem vorgeschlagenen Befehl noch ein Leerzeichen (Trenner) und einen Punkt (repräsentiert immer das aktuelle Verzeichnis) mitgeben, mit dem du angibst, dass die Dateien im aktuellen Verzeichnis abgelegt werden. Und dann sieht das so aus:

git clone https://github.com/friendica/friendica .

Damit liegt nun die Software, genauer gesagt die stable (früher master) Version, auf deinem Server und du kannst mit der Konfiguration und Einrichtung beginnen. Die Dokumentation dazu findest du unter https://wiki.friendi.ca/ .

Da die Addons für Friendica ein einem extra Repo https://github.com/friendica/friendica-addons liegen, müssen diese natürlich mit den gleichen Schritten eingerichtet und später dann auch aktualisiert werden.

Schritt 2: Aktualisierungen

In so einem Software Repo wird in den meisten Fällen nicht nur eine Software Version gepflegt, sondern meist mehrere. Eigentlich sind immer stable und develop bzw origin/stable und origin/develop verfügbar. Wie oben schon erwähnt hieß stable früher standardmäßig master, aber in modernen Repos gibt es nur noch den Namen stable oder öfter main. Hintergründe Bei Friendica heisst die aktuelle stabile Version stable.

Info: Für Friendica ist ein wenig mehr erforderlich. Die kompletten Befehle führe ich weiter unten auf. Aus Gründen der Verständlichkeit vereinfache ich die Vorgehensweise hier.

Ganz allgemein: Um deine Software zu aktualisieren wechselst du zukünftig in dein Verzeichnis /var/web/MeineDomain/htdocs/ und gibst den Befehl ein

git pull

und dein Friendica wird auf den neusten Stand gebracht. (Addons nicht vergessen)

Schritt 3: Versionen und branches

Nun gibt es wie oben schon geschrieben meist mindestens 2 Versionen. Die stable und die development Version. Die Versionen in git werden branches genannt. Welche branches du hast, kannst du ganz einfach herausfinden mit den Befehlen

Welche Branches liegen (remote) auf dem Software Repo
git branch -r

ergibt z.B. so eine Ausgabe

 origin/2022.09-rc
 origin/2022.12-rc
 origin/2023.03-rc
 origin/2023.05-rc
 origin/2023.09-rc
 origin/2024.03-rc
 origin/HEAD -> origin/develop
 origin/develop
 origin/stable

Welche Branches liegen (lokal) deinem Server
git branch -a

Um zu einem anderen branch bzw Version zu wechseln, gibst du einfach z.B. ein

git checkout develop um auf die Entwicklerversion zu wechseln
git checkout stable um auf die stabile Hauptversion zu wechseln.

Allerdings sollte so ein Wechsel immer gut durchdacht sein, denn oftmals kann das weitere Abhängigkeiten haben, wie zum Beispiel bei Friendica irgendwelche Updates von Datenstrukturen in der Datenbank. Älter Versionen kennen neuere Datenbankstrukturen nicht und das wird dann vermutlich zu Fehlern führen. Prüfe stehts!

Schritt 4: Updates und Versionen – development, stable & RC

Es gibt also die development Version, die immer die neusten Funktionen und Features hat, die aktiv entwickelt werden und daher mit einer hohen Wahrscheinlichkeit Fehler enthalten, die noch korrigiert (gefixt) werden müssen. Und die stabile stable Version, die zum produktiven Einsatz freigegeben wurde.

Dann gibt es oft noch RC (Release Candiates) Versionen. Zum Beispiel eine 2024.04-RC . Das ist eine aktuelle development Version, zu der keine neuen Features dazu kommen (Feature Freeze) und die zur nächsten stabilen Version werden soll. Diese Version ist mit einer öffentlichen Beta Version vergleichbar, die zur Verfügung gestellt wird, damit sie von vielen getestet und eventuelle Fehler behoben werden können. Wenn dann alle Fehler behoben sind, dann wird diese 2024.04-RC Version in die stable Version überführt.

Das heißt, wenn die Aktualisierung des eigenen Friendica Servers immer auf das branch stable eingestellt ist, dann wird beim nächsten git pull der Server automatisch auf die neuste Version aktualisiert. Wurde zuvor auf z.B. auf das RC 2024.04-RC branch gewechselt, muss natürlich dann aktiv auf das stable branch wieder zurück gewechselt werden. git checkout stable & git pull

Friendica per Git aktualisieren

Bei Friendica gibt es wie beschrieben noch das addon Verzeichnis und zusätzlich noch den Composer, der Abhängigkeiten von bestimmten Softwarebibliotheken verwaltet und sicherstellt, dass die richtigen Versionen auf deinem Server liegen. Daher müssen bei einer Aktualisierung mindestens folgende Befehle eingegeben werden.

Ausgehend dass du dich in deinem deinem Verzeichnis /var/web/MeineDomain/htdocs befindest:

git pull https://github.com/friendica/friendica.git
bin/composer.phar install --no-dev 
cd addon 
git pull https://github.com/friendica/friendica-addons.git 

weitere nützliche Git Befehle

git fetch – Die Liste der Branches vom Repo holen
git checkout <branch name> – Den Branch wechseln
git stash – Local commits „verwerfen“
git checkout -b <NAME> – Lokal einen neuen Branch <NAME> erstellen
git branch -D <NAME> – Lokalen Branch <NAME> löschen
git push origin --delete <NAME> – Den remote Branch <NAME> löschen
git branch -r – Remote Branches anzeigen lassen
git branch -a – Lokale Branches anzeigen lassen
git remote prune origin – Löscht alle lokalen Branches, die auch nicht mehr auf dem remote Repo sind
git gc --auto – Garbage Collection. führt Aufräumarbeiten durch (komprimiert Revisionen, entfernt lose/unzugängliche Objekte). Mit der Option –auto wird zunächst festgestellt, ob Maßnahmen erforderlich sind, und wenn dies nicht der Fall ist, wird das Programm beendet, ohne etwas zu tun.

Falls es zu Fehlermeldungen und größeren Problemen kommt, dann sind folgende Befehle hilfreich. ABER bitte vorher das Handbuch dazu lesen !!! Nicht einfach per Copy n Paste von hier benutzen! Sonst selber schuld!
git reset --hard
git clean -df -x

Linux statt Windows auf dem Desktop – Nicht nur Musikproduktion

Wie Golem schreibt, erwägen wohl mittlerweile viele BenutzerInnen den Schritt auf Linux, statt von Window 10 auf Windows 11 und eventuell später auf irgendwelche monatliche Abo Varianten zu wechseln.

Da ich seit über 25 Jahren Linux auf dem Desktop nutze und immer noch absolut begeistert bin, würde ich jeden Menschen immer wieder ermutigen das auch auszuprobieren.

Um einige Zeit verschwendende Diskussionen zu vermeiden ein paar Punkte vorweg:

  1. Wer wenig visuelle Veränderungen haben will entscheidet sich für eine Linux Distribution mit KDE/Plasma z.B. die Distribution Kubuntu oder aus Deutschland das Tuxedo OS oder Mint oder eine andere Linux Distributionen
  2. Um nicht komplett ins kalte Wasser springen zu müssen, können so ziemlich alle Linux Distributionen auf einen USB Stick „installiert“ (Live-USB Stick) werden und von dort einfach mal gestartet und ausprobiert werden. Ein USB Stick ist zwar langsam, aber es geht erst mal dabei nicht um Geschwindigkeit, sondern darum, ob es läuft und einen ersten Eindruck zu bekommen. Und zum Thema Geschwindigkeit: Ein installiertes Linux ist in 99% der Fälle wesentlich schneller als ein installiertes Windows.
  3. Viele nutzen bereits schon Opensource Software, die hauptsächlich für Linux entwickelt wird. Da ist der Umstieg super einfach. Weil es gar kein Umstieg ist. Das prominenteste Beispiel dafür ist der Mozilla Firefox Browser.
  4. Viele sind über die Jahre so darauf getrimmt worden, dass sie z.B. auf Microsoft Office nicht verzichten können. Das ist aber reine Gehirnwäsche. Libreoffice bietet für 99% der Menschen mehr Funktionen, als sie tatsächlich nutzen.
  5. Eine Sache, die mir immer wieder auffällt, wenn Menschen den Wechsel von Windows zu Linux erwägen ist, dass sie aufgrund der erweiterten Möglichkeiten plötzlich vorgefertigte Funktionsanforderungen stellen, die sie zuvor noch nie hatten bzw die unter Windows nur sehr sehr umständlich möglich sind. Hier bitte die Kirche im Dorf lassen, oder sich selbst um diese hoch individualisierten Lösungen kümmern bzw die Suchmaschine dazu konsultieren. Vermutlich gibt es diese Lösung schon.
  6. Natürlich ändern sich bei einem Betriebssystemwechsel auch häufig die Namen bestimmter Softwarekomponenten. Aber auch die Eingewöhnungsphase ist recht kurz. Ich spreche da aus Erfahrung mit Menschen, die teils einfach so spontan Linux haben wollten und bis heute sehr glücklich damit sind.
  7. Ich habe im Laufe der Zeit ein paar einfach verständliche Erklär-Videos zum Thema Linux und Linux und Musikproduktion auf meinem Musikproduktions Kanal „Odo Sendaidokai“ produziert, die ich hier für alle interessierten Menschen verlinke. Und wer sich für Musikproduktion generell interessiert, ist natürlich gerne eingeladen den Kanal zu abonnieren. Seit längerer Zeit produziere ich die Videos auf Deutsch und Englisch. Inklusive regelmäßiger Livestreams auf Deutsch, in denen ich meist Tracks von Anfang an produziere bzw auch Vieles erkläre. Zum Thema Musikproduktion betreibe ich zusätzlich noch das Blog „Klangwerk“.
  8. Für die Musikproduktion unter Linux ist für dich Pipewire natürlich sehr interessant und dafür habe ich hier im Blog auch noch einige erklärende Artikel.

Hier die Liste der Linux Erklär-Videos:

  1. Linux Supersonic from Zero to Hero Musikproduktion | DE (16.01.2024)
  2. Bitwig Linux Musicproduction 11/2023 | deutsch (19.11.2023)
  3. Musikproduktion mit Linux (auch Bitwig) (12.07.2021)
  4. Windows VST mit Bitwig unter Linux (02.10.2021)
  5. Bitwig JackAudio OBS Linux (Deutsch) – UPDATE 2022 Pipewire ist jetzt der Standard (15.11.2020)

Vim – Bereiche mit Klammern umschließen


Manchmal ist die Denke einfach zu kompliziert. Da wollte ich in vim einen Bereich möglichst effizient mit runden Klammern versehen und habe eine Weile rum gemurgst, bis ich dann die einfache Lösung gefunden habe:

  1. Bereich auswählen mit v und z.B. $ bis zum Zeilenende
  2. dann c drücken
  3. () schreiben
  4. ESC drücken und
  5. ein großes (shift) P drücken

also v$c()<ESC>P

Und alles ist schön umklammert.

Wenn es egal ist den Bereich visuell zu markieren, dann geht es auch ohne das v und das $ (bis Zeilenende) muss nach dem c eingegeben werden. (Danke Rebeka!)

c$()<ESC>P oder gleich C()<ESC>P

Weitere Varianten wären:

  1. Bis zum nächsten Vorkommen z.B. des Buchstabens „m“ cfm()<ESC>P
  2. Vom vorherigem Vorkommen eines „t“ bis zum nächsten Vorkommen eines „m“ Ftcfm()<ESC>P
  3. Wenn mitten im Wort gestartet wird, das natürlich auch umklammert werden soll, als erstes ein b tippen z.B. bC()<ESC>P
  4. Die nächsten 3 Worte c3w()<ESC>P oder eben bc3w()<ESC>P

GTK Apps in KDE gut aussehen lassen

Vor einiger Zeit habe ich vom X11.org Displayserver auf Wayland umgestellt. In diesem Zusammenhang fingen an meine GTK/Gnome Applikationen überwiegend schlecht auszusehen. Die Schriftarten (Fonts) sahen einfach furchtbar pixelig aus.

Eine Abhilfe schuf dann die Installation des Pakets xdg-desktop-portal-gnome.

sudo apt install xdg-desktop-portal-gnome
sudo apt install adwaita-qt

Zusätzlich musste ich noch folgende Dateien anpassen

sudo vim /usr/share/xdg-desktop-portal/kde-portals.conf
[preferred]
default=kde
org.freedesktop.impl.portal.Settings=kde;gtk;
~                                               

Und dann noch in vim .fonts.conf

<fontconfig>
 <dir>~/.fonts</dir>
<match target="font">
  <edit name="hinting" mode="assign">
    <bool>true</bool>
  </edit>
</match>
</fontconfig>

Dann einmal neu booten und die GTK/Gnome Applikationen sehen wieder gut aus.

Vim Zeitgeschichte – Time Table

Ich bin letztens über einen Artikel auf pikuma.com über die Vor- und Geschichte von Vim gestolpert, den ich auch weiter unten in den Quellen verlinkt habe. Ich fand die Geschichte über die Entstehung des Editors Vim und seiner Vorgänger so beeindruckend, dass ich für mich eine Zeittafel zusammengestellt habe, wann wer was gemacht hat.

Das ist schon sehr krass, dass Vim 1988 auf dem Amiga begonnen und am 02.11.1991 in der Version 1.14 über die Disketten Distribution Fred Fish Disk #591 verteilt wurde. Und dass der Ursprung dieses Editors jetzt über 55 Jahre zurück liegt.

Am Beeindruckendsten ist eigentlich die hohe Qualität, der riesig große Funktionsumfang, die Verfügbarkeit auf so vielen Plattformen, die unglaubliche Geschwindigkeit und die extrem resourcenschonenden Eigenschaften, alles vereint in einem unscheinbar wirkenden Editor.

Wenn ihr die Details zur Geschichte wissen wollt, dann lest den englischen Artikel auf pikuma.com (in den Quellen unten). Dort sind auch alle wichtigen Informationen nochmal verlinkt.

  • 1968 – ed von Ken Thompson
  • 1973 – em von George Coulouris
  • 1973 – en & ex von Bill Joy und Chuck Haley
  • 1977 – Bill Joy entwickelte den Visual Mode VI in ex . Viele der vi shortcuts und Navigationstasten, die bis heute benutzt werden, basieren auf dem DM-3A keyboard Layout.
  • 1979 – In BSD Unix wird ein vi hard link auf den ex Visual Mode gesetzt (Mai 1979 )
  • 1987 – Steve für Atari von Tim Thompson
  • 1988 – Start an den Arbeiten von Vi IMitation 1.0 von Bram Moolenaar on Amiga
  • 1990 – Elvis von Steve Kirkendall
  • 1991 – Vim „Vi IMitation“ v1.14 von Bram Moolenaar erscheint 02.11.1991 auf dem Amiga auf Fred Fish disk #591
  • 1993 – Der Name wurde auf "Vi iMproved" mit dem Erscheinen der Version v1.22 von Bram Moolenaar geändert. Außerdem erscheint ein Port für Unix
  • 1994 – Vim 3.0 Feature: Multiple windows
  • 1996 – Vim 4.0 Feature: Graphical User Interface
  • 1998 – Vim 5.0 Feature: Syntax highlighting
  • 2001 – Vim 6.0 Feature: Folding and multi-language
  • 2006 – Vim 7.0 Feature: Spell checking support – Intelligent completion – Tab pages – Undo branches – Browsing remote directories, zip and tar archives
  • 2007 – Vim 7.1 Feature: Bug Fix Release
  • 2008 – Vim 7.2 Feature: floating point support
  • 2010 – Vim 7.3 Feature: Persistent undo and undo for reload – Blowfish encryption, encryption of the swap file – Conceal text – Lua interface – Python 3 interface
  • 2013 – Vim 7.4 Feature: A new, faster regular expression engine. – More than a thousand fixes and small improvements.
  • 2016 – Vim 8.0 Feature: Asynchronous I/O support, channels, JSON – Jobs – Timers – Partials, Lambdas and Closures – Packages – New style testing – Viminfo merged by timestamp – GTK+ 3 support – MS-Windows DirectX support
  • 2018 – Vim 8.1 Feature: Bug Fix Release
  • 2019 – Vim 8.2 Feature: Popup Windows
  • 2022 – Vim 9.0 Feature: Vim9 Script
  • 20. Februar 2022 – Todestag von Sven Guckes, längster Projektbegleiter und Registrierer der Domain vim.org
  • 03. August 2023 – Todestag von Bram Moolenaar, der Vim ins Leben gerufen hat
  • 2024 – Vim 9.1 Feature: Classes and objects for the Vim9 scripting language & Smooth scrolling

Abfrage in Vim für die Features einer bestimmten Version
z.B. :help version-7.2

Quellen

  1. https://de.wikipedia.org/wiki/Vim
  2. https://en.wikipedia.org/wiki/Vim_(text_editor)
  3. https://github.com/vim/vim-history
  4. https://en.wikipedia.org/wiki/Elvis_(text_editor)
  5. https://en.wikipedia.org/wiki/ADM-3A
  6. https://en.wikipedia.org/wiki/Ex_(text_editor)
  7. https://en.wikipedia.org/wiki/Ed_(text_editor)
  8. http://www.eecs.qmul.ac.uk/~gc/history/
  9. https://pikuma.com/blog/origins-of-vim-text-editor
  10. https://de.wikipedia.org/wiki/Bram_Moolenaar
  11. https://www.heise.de/news/Vim-Versteher-und-Kommandozeilenerklaerer-Sven-Guckes-ist-tot-6511004.html
  12. https://www.heise.de/news/Zum-Tode-Bram-Moolenaars-Vim-Koryphaee-Weltenbummler-und-Spendensammler-9235897.html

Landscape of Open Source Databases

Ein Vortrag von Lorna Mitchell auf dem emf2022 Kongress über die aktuelle Landschaft der der Opensource Datenbanken. Eine rassante und guter Einblick was es alles gibt und welche Funktionalitäten die einzelnen Datenbanken besonders macht.

Every year we collect more data than before, and the tools we use to manage that data are evolving to accommodate our changing needs – but it can be difficult to keep up with all the innovations! This session will give you a tour of what’s happening in open source databases, from someone who lives the adventures of open source data in her day job. You will travel from the well-trodden paths of relational databases, through the leafy glades of time series, to the landmarks of search and document databases. This session is recommended for people with an interest in software who want to learn about the overall trends, license changes, rising stars, and which database technologies are here to stay.

Video https://media.ccc.de/v/emf2022-325-landscape-of-open-source-databases

Vim – mit Tabs fensterln

Ein Buffer (Puffer) ist der im Arbeitsspeicher befindliche Text einer Datei.
└- Ein Fenster (Window) ist ein Ausschnitt (Viewport) aus einem Buffer.
└— Eine Tab-Seite (Tab) ist eine Sammlung von Fenstern.

Hilfe :help tab-page
Kommando: <none>

Öffnen

  • tabnew <NAME> Neues Tab (Buffer)
  • tabf <NAME> Find – sucht im aktuellen Verzeichnis nach einer Datei. Tabulator Completion funktioniert
  • tab <VIM BEFEHL> öffnet ein neues Tab und führt einen Vim Befehl aus z.B. :tab help tab-pages

Mit einem neuen Tab kann auch gleich eine bestehende Datei geladen werden, indem mit dem Befehl der Dateiname mitgegeben wird.

Mehrere Dateien können als Tabs direkt bei Aufruf von vim mit dem Parameter -p geladen werden

vim -p Datei1 Datei2 Datei3 Datei4

Standardmäßig können 10 Dateien gleichzeitig geladen werden. Dieses Maximum kann verkleinert oder erweitert werden mit der Direktive :set tabpagemax=<NUMMER> oder in der vimrc mit set tabpagemax=<NUMMER>

Schließen

  • tabclose Schliesst das Tab. Mit einem ! Ausrufezeichen, wenn Änderungen nicht gespeichert werden sollen
  • :q
  • Strg+w q funktioniert nur, wenn nichts geändert wurde
  • tabonly Schliesse alle anderen Tabs außer dem aktuellen Tab

Navigation

  • Strg+BildRunter / Strg+BildHoch Tab wechseln rechts/links. Tipp: 2+Strg+BildRunter
  • gt / :tabn zum nächsten Tab rechts wechseln (next). Tipp: 5gt springt 5 Tabs nach rechts
  • gT / :tabp zum vorherigen Tag links wechseln (previous)
  • :tabs zeigt eine Übersicht aller Tabs

Reihenfolge

  • :tabm / :tabmove verschiebt das aktuelle Tab ganz nach rechts
  • :tabm <NUMMER> verschiebt das aktuelle Tab aun die Postion von NUMMER. Fängt bei 0 an !

Weitere Infos

  • :set showtabline=<NUMMER> 0 = Tabline ausblenden, 1 = automatisch, 2 = immer einblenden
  • :tabdo Einen Befehl für alle offenen Tabs ausführen. Zum Beispiel :tabdo %s/foo/bar/g

Mehr Artikel zu Vim im Blog

Vim – Windows

Ein Buffer (Puffer) ist der im Arbeitsspeicher befindliche Text einer Datei.
└- Ein Fenster (Window) ist ein Ausschnitt (Viewport) aus einem Buffer.
└— Eine Tab-Seite (Tab) ist eine Sammlung von Fenstern.

Hilfe :help windows
Kommando :wincmd Strg+w

Die aktuelle Ansicht in mehrere Fenster aufteilen.

Detailliertere Informationen und weitere alternative Befehle sind in der Hilfe zu finden

Teilen & Neu

  • Strg+w s / :sp / :split Fenster horizontal teilen (gleicher Inhalt/Buffer)
  • Strg+w v / :vs / :vsplit Fenster vertikal teilen (gleicher Inhalt/Buffer)
  • Strg+w n / :new Fenster horizontal teilen und neues Dokument (leerer Buffer) erstellen
  • :vne / :vnew Fenster vertikal teilen und neues Dokument (leerer Buffer) erstellen

Schliessen

  • Strg+w q / :q Fenster schließen.
  • Strg+w o / :on / :only schließt alle anderen Fenster, ausser das aktuelle Fenster
  • Es gibt noch viele weitere Parameter zum Fenster schließen

Navigation

  • Strg+w Pfeiltasten Zwischen den Fenstern wechseln. Es gehen auch die Vim Cursor
  • Strg+w p Zum letzten Fenster zurück wechseln
  • Strg+w r / Strg+w R Fenster durchrotieren runter/rechts und hoch/links

Größe

  • Strg+w = Alle Fenster gleich groß machen
  • Strg+w - Das aktuelle Fenster um 1 vertikal kleiner machen. Strg+w 5 - um 5 kleiner machen
  • Strg+w + Das aktuelle Fenster um 1 vertikal größer machen
  • Strg+w _ Das aktuelle Fenster vertikal maximieren. Alle anderen Fenster so klein wie möglich machen
  • Strg+w < Das aktuelle Fenster um 1 horizontal kleiner machen. Strg+w 7 < um 7 kleiner machen
  • Strg+w > Das aktuelle Fenster um 1 horizontal größer machen
  • Strg+w | Das aktuelle Fenster horizontal maximieren
  • In einer grafischen Oberfläche lassen sich die Fenster am Rahmen mit der Maus kleiner und größer machen

Mehr Artikel zu Vim im Blog

LibreOffice: Suchen&Ersetzen – Mit RegEx Hashtags markieren

Da ich meine Notizen nicht direkt in LibreOffice schreibe und ich gerne Hashtags nutze und ich diese etwas anders formatieren muss, habe ich nach einer Möglichkeit gesucht, wie ich in LibreOffice diese suchen und markieren kann, so dass ich sie mit einer Formatvorlage versehen kann. Aber alles der Reihe nach.

Ich schreibe meine Texte normalerweise in Markdown. Weil das extrem schnell, mit jedem Editor und auf jedem Gerät dieser Erde, auf dem Texte eingeben werden können funktioniert. Markdown ist im Prinzip nur Text. Wer mehr darüber wissen will, findet hier in der Wikipedia schon mal einen guten Einstieg.

Kurzer Ablauf in einzelnen Schritten

  1. Ich schreibe meinen Text in Obsidian (Markdown Suite) und versehe ihn mit Hashtags wie z.B. #english #deutsch #himmel und #hölle
  2. Dann exportiere ich den Text mit „Export to“ nach OpenOffice. Wobei OpenOffice hier für das Dateiformat ODT (Open Document Text) steht. Ich benutze aber kein OpenOffice, sondern das modernere LibreOffice
  3. In LibreOffice definiere ich eine neue Zeichenvorlage für meine Hashtags, damit alle Hashtags das gleiche Aussehen haben
  4. Dann öffne ich im LibreOffice Menü „Bearbeiten“ den Dialog „Suchen und Ersetzen“ (Strg+Alt+F)
  5. Dort gebe ich im Suchen Feld \#[:alpha:]+ ein (siehe Screenshot unten)
  6. klicke auf „Reguläre Ausdrücke“
  7. klicke dann auf „Alle suchen“
  8. Jetzt werden alle Hashtags markiert, ohne dass Leerzeichen oder andere Wörter dazwischen mitmarkiert werden.
  9. Ich schließe den Suchen und Ersetzen Dialog und doppelklicke auf die Hashtag Zeichenvorlage
Suchen und Ersetzen Dialog von LibreOffice

RegEx erklärt

Eine kurze Erklärung was der Reguläre Ausdruck genau macht. Dafür zerlege ich ihn in die Einzelteile

\#[:alpha:]+
  • \# definiert das Zeichen # . Das Kreuz ist bei den RegEx normalerweise ein Befehl, so dass ich dem Programm sagen muss, dass es nicht der Befehl ist, den ich hier angebe, sondern nur das Zeichen. Dafür muss ich einen Backslash \ , ein sogenanntes ESCAPE Zeichen vorweg stellen. Mehr weiter unten in den Quellen.
  • [:alpha:] heißt, dass nur alphanumerische Zeichen a-Z und 0-9 vorkommen dürfen
  • + so oft wie sie vorkommen

Ausgeschrieben heißt das

Suche nach einem Wort, das mit einem # anfängt und dann nur noch alphanumerische Zeichen hat und zwar egal wie viele. Und nichts anderes! Folgt danach ein Komma oder ein Leerzeichen oder ein Zeilenumbruch oder ein Tab oder irgendein anderes Zeichen, das nicht in [:alpha:] vor kommt, ist die Suche beendet. Dadurch dass ich im Dialog „Alle suchen“ angeklickt habe, wird diese Suche auf den gesamten Text angewandt.

Quellen

Automatisch generierte Kalender Geburtstags- Benachrichtigung zur Geisterstunde eliminieren

Erinnerungen sind was Schönes. Geburtstagserinnerungen auch. Aber seit je her nervt es mich, dass die automatisch generierten Geburtstagserinnerungen im Kalender immer um 24 Uhr loseiern. Also habe ich mich mal auf die Suche gemacht und bin bei Nextcloud fündig geworden.

2016 nervte das schon jemand, also wurde ein Issue auf github geöffnet und 2023 sind wir nun fast soweit eine GUI Lösung für dieses Problem zu haben. Schön wäre gewesen, erstmal das Klingeln zu später Stunde einfach als Standard auszuschalten. Millionen Menschen hätten über Jahre hinweg einen besseren Schlaf gehabt.

Auf der Server Konsole lässt sich dies durch den Server Admin schon länger ausschalten. Ich zitiere aus dem Issue Ticket

sudo -u www-data php occ user:setting <username> dav birthdayCalendarReminderOffset ""

Quelle: Users should be able to choose whether reminders are generated for events in the birthday calendar · Issue #1505 · nextcloud/server https://github.com/nextcloud/server/issues/1505#issuecomment-1636744095

PDF Inhaltsverzeichnisse (TOC) erstellen

Ein Plädoyer gegen die Hyperlink Ignoranz

Das Wunderbare an digitalen Medien wie PDF Dateien ist, dass sie mit Strg+f durchsuchbar sind und dass sie ein klickbares Inhaltsverzeichnis und Index haben. Aber leider viel zu oft haben sie das nicht. Manchmal werden Dokumente ausgedruckt und als Bild wieder eingescannt und somit ist der Text nicht mehr verfügbar. Der entsprechende Haken Beim Export nach PDF für ein klickbares Inhaltsverzeichnis wird einfach nicht gesetzt und der Index wird oft auch nur „ausgedruckt“. Seit der großen Verbreitung des World Wide Webs haben wir die Hyperlinks schätzen gelernt und dass ein Klick so viel effizienter sein kann, als das mühsame Blättern durch Dokumente an die richtige Stelle.

Es ist einfach extrem ärgerlich, wenn Handbücher nichts davon enthalten. Mit Handbüchern arbeite ich. Heißt: ich springe von Stelle zu Stelle, muss die Suche benutzen, damit ich mir nicht ein ganzes Buch im Kopf merken muss. Leider gibt es immer noch neu erscheinende Dokumente, die aus einem Prä-Internet Zeitalter zu kommen scheinen. Und wenn einem nichts anderes übrig bleibt, als diese Dokumente zu nutzen, kann man sich beim Durcharbeiten eines kleinen kostenlosen Opensource Tools von 2011 bedienen und das Inhaltsverzeichnis (PDF Bookmarks) selbst setzen.

Am liebsten hätte ich gleich noch eine Webresource, auf der ich meine Arbeit mit anderen teilen könnte. Gar nicht mal das Dokument selbst, denn die unterliegen oft gewissen Copyright Rechten. Aber die Meta Info. Die Arbeit, die ich mir machen musste, weil jemand den Haken beim Export nicht gefunden hat.

Der Tool – JPDFBookmarks

Das kostenlose Opensource Programm von 2011 ist in Java geschrieben und läuft unter Linux und Windows. Für Mac weiß ich das leider nicht.
Die Nutzung ist sehr einfach. Die PDF Datei wird einfach rein geladen und wenn ein Eintrag im Inhaltsverzeichnis erstellt werden soll, dann muss nur ein Bookmark Strg+Alt+s erzeugt werden. Soll ein Unterpunkt erzeugt werden, dann Strg+Alt+f . Dabei speichert das Bookmark nicht nur die Seite, sondern auch auf welcher Höhe der Seite das Bookmark ist. So macht es Sinn z.B. die Kapitel Überschrift auf dem Bildschirm auszurichten und dann erst das entsprechende Bookmark zu setzen.

JPDFBookmarks Ein absolut einfach zu bedienendes Programm, das du hier finden und runterladen kannst http://flavianopetrocchi.blogspot.com/2008/07/jpsdbookmarks-download-page.html

Falls das Programm unter Linux nicht starten sollte, musst du nur (unter Ubuntu) das Paket „default-jre“ installieren.

Und Bitte!

Erstellt in euren PDFs immer ein klickbares Inhaltsverzeichnis und einen Index. Wir haben schließlich das Jahr 2023. Die überleben wollen …

Danke.

Vim-Zeilenspielereien – Join

Zeilen zusammenfügen oder teilen in allen Variationen.
Der Befehl dafür heißt JOIN

Anmerkung: Groß-/Kleinschreibung ist wichtig. Großbuchstaben werden nicht extra mit einem SHIFT hervorgehoben

Join zwei Zeilen zusammenführen J mit Leerzeichen

J – Sollen zwei Zeilen, die durch einen Zeilenumbruch getrennt wurden zusammengeführt werden, so kann in der oberen Zeile einfach ein großes J gedrückt werden. Das führt dazu, dass die untere Zeile nach oben geholt UND mit einem Leerzeichen Abstand an die aktuellen Zeile angehängt wird.

Im Befehlsmodus – :join!
Suchmuster – :g/pattern/join

Join ohne Leerzeichen gJ

gJ – Soll die untere Zeile ohne Leerzeichen an die aktuelle Zeile angehängt werden, so lässt der Befehl gJ das Leerzeichen weg.

Visual Join – Mehrere Zeilen verbinden v+Motion+J

Join kann auch mit der Visual Markierung v und Motion Befehle benutzt werden.

v + Motion + J oder gJ für mit oder ohne Leerzeichen

Beispiele

  • Befehl v4kJ
    • v startet den visuellen Modus in der aktuellen Zeile
    • 4 wird das nächste Kommando 4x wiederholen
    • k eine Zeile hoch (und das dann 4x)
    • J und verbinde diese 4 Zeilen miteinander

  • Befehl v5jgJ
    • v startet den visuellen Modus in der aktuellen Zeile
    • 5 wird das nächste Kommando 5x wiederholen
    • j eine Zeile runter (und das dann 5x)
    • g der Befehl JOIN soll keine Leerzeichen hinzufügen
    • J und verbinde diese 5 Zeilen miteinander ohne zusätzliche Leerzeichen

Hilfe

Eine ausführlichere Hilfe findet sich in Vim unter :help J

Weitere Vim Artikel im Blog

Touchpad effizient nutzen – Touchegg & Touché

Funktioniert nicht unter Wayland.

Ein Werkzeug effizient nutzen zu können, ist die Grundlage sich ganz auf den Inhalt konzentrieren zu können. Ein Grund warum ich z.B. den Editor Vim gerne mag, weil mit ihm Test hocheffizient bearbeitet werden können. Aber das ist eine andere Geschichte.

Effizienz heisst auch, bei einer Eingabemethode bleiben zu können und nicht ständig die Eingabegeräte zu wechseln. So ist der Wechsel von Tastatur zu Maus oder Touchpad immer eine Unterbrechung. Nicht nur im motorischen Ablauf, sondern eben auch in der Konzentration.
Also bei der Eingabe ausschliesslich auf der Tastatur bleiben zu können, oder bei der Nutzung der Maus oder des Touchpads nur auf diesen Geräten bleiben zu können, hat viele Vorteile.

Für das Touchpad gibt es die Programme Touchegg, das die Erkennung von Gesten mit mehreren Fingern und Steuerung von Befehlen verwaltet, und Touché mit dem die Einstellungen komfortabel eingerichtet werden können.

Beides ist für viele Linuxsysteme verfüg- und installierbar. Für Ubuntu ist die Installation extrem einfach.

Touchegg (der Dienst) gibt es hier https://github.com/JoseExposito/touchegg und die Installation wird sehr gut beschrieben. Im wesentlichen läuft sie so ab

sudo add-apt-repository ppa:touchegg/stable
sudo apt update
sudo apt install touchegg

Damit ist der Dienst installiert und gestartet.

Jetzt nur noch Touché installieren. Bei Touchegg wird auf die Seite hingewiesen https://github.com/JoseExposito/touche . Touché wird als Flatpak über Flathub installiert. Wer nicht weiß, wie das geht sucht auf dieser Seite https://flathub.org/setup seine Distribution raus. Achtung! Es wird zwischen Ubuntu und z.B. Kubuntu unterschieden. Also ruhig lieber genauer suchen und dann der Installationsanleitung folgen.

Also wenn Flathub integriert ist, kann Touché ganz einfach installiert werden. Bei meinem KDE öffne ich dazu einfach das Programm Discover und gebe in der Suche Touché ein und drücke auf installieren. Warten. Fertig. Das Programm starten.

Jetzt können Touchgesten konfiguriert werden. Und zwar

  • 2 Finger Kneifgesten
  • 3 Finger Wischgesten
  • 4 Finger Kneifgesten
  • 4 Finger Wischgesten
  • Nur auf Touchscreens: Tippgesten für 2 und 4 Finger

Verfügbar sind folgende Optionen für eine ausgewählte Geste, die wohl so ziemlich fast alles abdecken, was so gebraucht werden könnte.

Meine Konfiguration sieht aktuell folgendermaßen aus. Eine Kombination aus „Es ist praktisch, aber nicht zu viel, was ich mir merken muss“

2 Finger kneifen Rein = Vollbildmodus an/aus
2 Finger kneifen Raus = Maximieren und zurück

3 Finger wischen hoch = Alle Fenster auf dem Desktop anzeigen / Fensterwechsler
3 Finger wischen runter = Minimieren
3 Finger wischen rechts = Programm beenden
3 Finger wischen links = Strg+w … in den meisten Programmen das Tab schliessen.

4 Finger wischen Hoch = Neues Dokument Strg+n
4 Finger wischen Runter = Speichern Strg+s

Tuxedo OS und Nextcloud Desktop Client

Praktischerweise ist der Nextcloud Desktop Client in den Quellen enthalten. Tuxedo OS hat als grafischen Desktop KDE als Grundlage. Der Nextcloud Client greift aber auf eine Technologie zur Speicherung von Authentifikationen zurück, die in einem Paket von GNOME, der andere große grafische Desktop. Das ist standardmäßig nicht installiert.

Das hat zur Folge, dass jedes Mal, wenn der Rechner neu gestartet wird, hat der Nextcloud Client vergessen, dass er schon authentifizier ist und fordert erneut eine Authentifikation an. Kann man mögen, muss man aber nicht.

Damit der Nextcloud Desktopclient nur einmal für immer authentifiziert werden kann, muss noch zusätzlich das Paket gnome-keyring installiert werden.

Das kann ganz fix in der Konsole oder einem Terminal gemacht werden mit dem Befehl

sudo apt install gnome-keyring

Dann nur noch einmal authentifizieren. Den Dialog mit dem gnome-keyring durchspielen. Und das war es schon.

Kleine Anmerkung, aber keine Empfehlung: Wer beim Gnome-Keyring, ein Passwort eingibt, muss auch nicht jedes Mal beim Start des Systems ein Passwort eingeben. Allerdings die Authentifizierung dann auch nicht mehr geschützt. Bequemlichkeit gegen Sicherheit. Beides ist legitim. Es sollte nur gewusst werden.

Tuxedo OS und Wine

Tuxedo OS bzw aktuell zur Erstellung des Artikels Tuxedo OS 2 ist ein maßgeschneidertes Ubuntu, der gleichnamigen Augsburger Computer Firma Tuxedocomputers ohne die zusätzliche umstrittene SNAP Paketverwaltung, aber dafür mit dem sehr aktuellen KDE Neon, Pipewire und einigem mehr.

Maßgeschneidert kann als „erweitert“ verstanden werden.

So bleibt das Grundsystem gleich. Außer dass Anpassungen für die Hardware verfügbar sind, die Windows Wrapper Software Wine, mit der Windows Programme direkt unter Linux installiert und lauffähig sind. Und auch noch ein paar Optimierungen für den Grafikbeschleuniger Vulkan, dem Nachfolger von OpenGL.

Grundsätzlich kann gesagt werden, dass es ähnlich wie ein Kubuntu ist, nur aktueller und optimaler für die Hardware der Produkte von Tuxedocomputers angepasst.

Ich halte das hier in diesem Blogartikel fest, weil die Installation von Wine über die Installationsanleitung für Ubuntu über die Webseite WineHQ fehl schlägt. Aber Tuxedocomputers hat hier, wie oben schon erwähnt, ein zusätzliches Repository (angepasste Softwarequelle) mit der das Hinzufügen von Wine kein Problem mehr ist.

Da ich für meine Musikproduktion das Paket winehq-staging für die Windows Synthesizer und Audio Plugins und yabridge brauche, füge ich einfach das Småland-Repo wie auf der Webseite beschrieben hinzu – statt dem WineHQ Repo – und installiere es in der Kommandozeile (Konsole) mit

sudo apt install --install-recommends winehq-staging

Und damit kann ich nun alle Windowsprogramme in meinem Linux starten.

Quellen

Obsidian – PDF Export mit TOC

Für meine digitalen Notizen und Handbücher verwende ich seit längerer Zeit nur noch Markdown Textdateien. Aus Resilienz Gründen, um mit allen möglichen Programmen an meinen Daten arbeiten zu können und auch noch nach Jahren darauf zugreifen zu können, wenn es diverse Programme nicht mehr gibt.

Dazu benutze ich aktuell die Suite Obsidian unter Linux, weil sie mir eine sehr gute Oberfläche und Suche bietet. Ab und zu exportiere ich dann auch die eine oder andere Datei, oder eine Zusammenstellung als PDF Datei.

Der Export nach PDF ist zwar super, aber leider integriert sie kein Inhaltsverzeichnis (TOC: Table of Content). Gerade bei längeren Texten, die bei mir häufiger vorkommen, empfinde ich das als absolut notwendig.

In den Community Plugins, über das Einstellungsmenü von Obsidian, bin ich auch nicht fündig geworden. Aber glücklicherweise hat jemand dann noch ein Plugin geschrieben, das sich Obsidian Better Export PDF nennt und mit einer kleinen Installationsanleitung beschrieben wird.

Nun kann ich direkt PDFs mit wunderbaren Inhaltsverzeichnissen exportieren, ohne den Umweg über Copy n Paste über LibreOffice zu gehen.

Vim-Cheat Sheet

Weitere Vim Artikel hier im Blog.

Vim Modi

Erklärung

Vim ist ein modaler Editor. Dies bedeutet, dass man in unterschiedlichen Modi arbeitet, was Einsteigern oft Probleme bereitet, andererseits aber eine sehr große Zahl von Tastenkürzeln erlaubt, da sich diese an einzelne Modi binden und daher auch mehrfach belegen lassen.
Es gibt sechs Grundmodi. Zusätzlich gibt es noch fünf weitere Grundvarianten der Grundmodi.

Normalmodus ESC

Vim startet im Normalmodus, oft auch als Kommando- oder Befehlsmodus bezeichnet. Hier kann man über Tastenkürzel zum Beispiel Zeilen kopieren und verschieben oder Text formatieren. Dies ist der zentrale Modus, von dem in alle anderen Modi gewechselt wird. Durch das zweifache Drücken der Esc-Taste gelangt man immer in den Normalmodus zurück.

Der Punkt . wiederholt immer den letzten eingegebenen Befehl.

Einfügemodus / Insert

Im Einfügemodus verändern Tastatureingaben den editierten Text, so wie man es von anderen Editoren kennt. Man erreicht diesen Modus vom Normalmodus aus zum Beispiel über i (für engl. insert = einfügen).

Kommandomodus / Command

Vom Normalmodus ausgehend! Dieser Modus wird durch den einleitenden Doppelpunkt : erreicht. Hinter dem Doppelpunkt können dann komplexe Kommandos wie beispielsweise zum Suchen und Ersetzen eingegeben werden. Nach dem abschließenden Enter „Eingabetaste“ wird der Befehl ausgeführt und man befindet sich wieder im Normalmodus. Zu diesem Modus zählen des Weiteren die Kommandos / (Textmuster vorwärts suchen), ? (Textmuster rückwärts suchen) und das Filter-Kommando !, mit dem die UNIX-Kommandos „UNIX-Kommandos“ (zum Beispiel sort) aufgerufen und auf den Text angewandt werden können.

Vim Normalmodus ESC ESC

Vim beenden & speichern (Kommandomodus)

  • :q beenden (quit)
  • :q! , :cq, SHIFT + ZQ beenden ohne zu speichern trotz Änderungen (cancel)
  • :wq , SHIFT + zz speichern (write) und beenden
  • :w aktueller Inhalt in Datei speichern
  • :w FILE.TXT speichert den Inhalt des Editors in die Datei FILE.TXT
  • :w !sudo tee FILE.TXT speichert die Datei mit dem vorangehenden sudo Aufruf

Multiplikator

:help motion-count-multiplied

Zu einem Befehl kann noch eine Zahl eingegeben werden, dann wird der Befehl entsprechend oft wiederholt.
Beispiele

  1. Wurde eine Zeile mit yy (yank) in den Zwischenspeicher kopiert, dann wird sie mit 5p 5x darunter eingefügt.
  2. Sollen die nächsten 7 Zeichen rechts gelöscht werden : 7x
  3. Sollen ab der aktuellen Position die nächsten 3 Wörter gelöscht werden: 3dw
  4. Soll ab der aktuellen Position mitten in einem Wort, insgesamt 3 Wörter gelöscht werden: 3diw (3x Delete Include Word)
  5. Soll ab der aktuellen Position mitten in einem Wort, insgesamt 3 Wörter gelöscht werden und gleich in den Eingabemodus gewechselt werden: 3ciw (3x Change Include Word)
  6. Die nächsten 10 Zeilen löschen: 10dd
:help motion
:help scroll-cursor
  • Pfeiltasten , hjkl links, runter, hoch, rechts . Die Pfeiltasten hjkl sind sehr wichtig bei der Nutzung von Multiplikatoren.
  • Bild hoch , Bild runter Eine Seite hoch / runter
  • Pos1 , 0 an den Zeilenanfang springen
  • ^ springt an den Zeilenanfang auf das erste Zeichen, das kein Leerzeichen oder Tab ist
  • Ende , $ an das Zeilenende springen
  • w ein Wort nach rechts springen (Wortanfang)
  • e an das Ende eines Wortes, auf den letzten Buchstaben springen (Wortende)
  • b ein Wort nach links springen (Wortanfang)
  • ) einen Satz vorwärts springen
  • ( einen Satz rückwärts springen
  • SHIFT + h zur ersten Zeile des aktuellen Fensters springen
  • SHIFT + m in die Mitte des aktuellen Fensters springen
  • SHIFT + l in die letzte Zeile des aktuellen Fensters springen
  • STRG + d einen halben Bildschirm runter blättern (down)
  • STRG + u einen halben Bildschirm hoch blättern (up)
  • gg an den Datei Anfang springen
  • SHIFT + g an das Datei Ende springen
  • : + ZAHL springt in die Zeile ZAHL
  • f + ZEICHEN springt zum nächsten Vorkommen des Zeichens
  • SHIFT+ f + ZEICHEN springt zum vorherigen Vorkommen des Zeichens
  • z + ENTER oder zt aktuelle Zeile in die erste Zeile des Displays scrollen (top)
  • zz oder z. aktuelle Zeile in die Mitte des Bildschirms scrollen
  • z- oder zb aktuelle Zeile an den unteren Rand scrollen (bottom)

Marks (Bookmarks)

:help bookmark

Bookmarks sind einzelne Zeichen von a-z und A-Z die im Text gesetzt werden können, um schnell hin und her zu springen.

  • m + ZEICHEN einen Marker setzen. z.B. mb setzt den Marker b
  • ' + ZEICHEN zu einem Marker springen . z.B. 'b springt zum Marker b
    • Das ' ist das Zeichen auf einer deutschen Tastatur auf dem #

Undo & Redo

:help undo
  • u Undo (Rückgängig machen)
  • SHIFT + u Undo alle Änderungen, die zuletzt in der aktuellen Zeile gemacht wurden
  • STRG + R Redo
  • :undolist zeigt den Verlauf der letzten Änderungen, die rückgängig gemacht werden können. Dabei zeigt die Nummer den Index der Veränderung, die direkt ausgewählt werden kann. Changes zeigt an, wieviele Veränderungen gemacht wurden und die Uhrzeit, wann die Veränderungen gemacht wurden.
  • NUMMER + STRG + r macht die Veränderung mit der Index NUMMER wieder rückgängig
  • Plugins wie undotree oder mundo machen das Undo & Redo sehr übersichtlich und einfacher

Copy & Paste

  • y Kopieren (yank)
  • yy Ganze Zeile kopieren
  • p vor dem aktuellen Cursor einfügen, oder Zeile
  • Shift + p nach dem aktuellen Cursor einfügen, oder Zeile
  • Zwischenablage / Clipboard (FAQ System Clipboard !)
  • "*y , "+y in den System Zwischenspeicher kopieren
  • "*p , "+p aus den System Zwischenspeicher einfügen. Analog "* oder "+ + SHIFT + p
  • Register / Vim interne Zwischenablage
    • Vim unterstützt von a-z 48 verschiedene Register (Zwischenablagen). So können unterschiedliche Dinge in verschiedene Register kopiert und an anderer Stelle in gleicher oder neuer Reihenfolge eingefügt werden.
    • Das Register wird mit " eingeleitet und der folgende Buchstabe a-z definiert in welchem Register der Inhalt gespeichert werden soll
  • "gyy kopiert die aktuelle Zeile ins Register g
  • "gp fügt den Inhalt aus dem Register ab dem aktuellen Cursor ein

Register / Zwischenspeicher 48 :registers

:help registers

  • Auszüge aus dem Hilfedokument
  • :registers zeigt alle Register an. :registers ZEICHEN zeigt das Register ZEICHEN an
  • STRG + r + REGISTER fügt im Insertmodus den Inhalt von REGISTER direkt ein.
  • "" (unnamed) Standardregister in das alles rein kopiert wird, was mit dcsx gelöscht oder mit y kopiert wurde
  • "a-z (named) mit einem großen A-Z wird das Kopierte an das a-z Register angehängt. Zusammen mit einem > wird vor dem Anhängen ein Zeilenumbruch eingefügt.
  • "0-9 (numbered) In Register 0 wird immer der zuletzt kopierte (yank) Inhalt. In Register 1 steht immer der zuletzt gelöschte Inhalt dc
  • "- Im Small Delete Register steht immer der zuletzt gelöschte Inhalt, wenn es weniger als eine Zeile war
  • Read-Only
    • ". enthält immer den zuletzt eingefügten Text
    • "% enthält den Dateinamen
    • ": enthält den zuletzt eingegeben Befehl
  • "* , "+ , "~ Zwischenspeicher / Clipboard . "~ ist der Inhalt des letzten Drag’n’Drop auf das Vim Fenster
  • "_ (black hole) bei einem Löschvorgang wird nichts in Register gespeichert
  • "/ (last search) enthält den Text der letzten Suche

Makros / Recording q

:help recording
  • MAKRO AUFZEICHNEN
    • q + a-z mit q wird das Recording gestartet und das nächste Zeichen z.b. a ist der Name des Makros. Also qa startet die Aufnahmen von Makro a
    • Mit dem erneuten Drücken der Taste q wird die Aufzeichnung des Makros beendet
  • MAKRO ABSPIELEN / AUFRUFEN
    • @q + a-z mit z.B. @qa wird das Makro a abgespielt bzw ausgeführt
    • Mit @@ wird das Makro wiederholt
    • mit 10@qa wird das Makro 10x hintereinander ausgeführt
  • MAKROS EDITIEREN
    • Makros werden als normaler Text in Registern gespeichert
    • Das REGISTER am besten in eine leere Zeile einfügen, weil nach dem Editieren einfach direkt die gesamte Zeile wieder im Register gespeichert werden kann " + REGISTERNUMMER + p z.B. "4p
    • Die Zeile editieren und (die gesamte Zeile) wieder zurück in das Register schreiben " + 4 + yy
    • Zur Kontrolle kann :registers oder :registers 4 eingegeben werden
    • Ein Makro kann einfach gelöscht werden, indem nichts aufgezeichnet wird. Z.b. Makro a = q4q
  • STEUERUNGZEICHEN EINGEBEN
    • Im Eingabemodus STRG + v + TASTE z.B. Enter/Return, ESC, F2, Backspace ….
  • REKURSIVE MAKROS
    • Im Makro selbst das Makro aufrufen
    • Läuft solange, bis es auf einen Fehler aufläuft

Autovervollständigung :abbr

  • :abbr + abkrz + AUSGESCHRIEBENER BEGRIFF wenn im Einfügemodus der Begriff abkrz und Leertaste (oder Enter, dann mit Zeilenumbruch) eingegeben wird, erscheint der AUSGESCHRIEBENER BEGRIFF
  • Beispiel: :abbr zb Zum Beispiel

Groß-/Kleinschreibung

  • ZEICHEN
    • ~ ändert das aktuelle Zeichen auf Groß oder Klein
  • WORT
    • g~w Invertiert die Groß-/Kleinschreibung des aktuellen Wortes
    • guw Ändert von der aktuellen Position bis zum Ende des Worts von Groß- auf Kleinschreibung
    • guaw Ändert das gesamte Wort auf Kleinschreibung. Egal auf welcher Position der Cursor ist
    • gUw Ändert von der aktuellen Position bis zum Ende des Worts von Klein- auf Großschreibung
    • gUaw Ändert das gesamte Wort auf Großschreibung. Egal auf welcher Position der Cursor ist
  • ZEILE
    • guu Ändert die aktuelle Zeile von Groß- auf Kleinschreibung
    • gUU Ändert die aktuelle Zeile von Klein- auf Großschreibung
    • g~~ Invertiert die Groß-/Kleinschreibung der gesamten Zeile
    • gU5jÄndert die darunter liegenden Zeilen zu Großschreibung
    • gu3k Ändert die darüber liegenden Zeilen zu Großschreibung
  • SATZ
    • gU)Ändert alles zu Großschreibung bis zum Ende des Satzes
  • ABSATZ
    • gu} Ändert alles bis zum Ende des Absatzes zu Kleinschreibung
  • DOKUMENT
    • guG Ändert alles zu Kleinschreibung bis zum Ende des Dokumentes

Auswählen/Markieren

  • v Zeichenweise
  • SHIFT + v + Pfeiltasten Zeilenweise
  • STRG + v + Pfeiltasten Vertikal
  • Beispiele: 10v markiert 10 Zeichen, 3wv markiert 3 Wörter, )vy markiert bis zum Ende des Satzes und kopiert ihn in den Zwischenspeicher/Register.

Löschen & entfernen

  • x Zeichen unter dem Cursor löschen
  • SHIFT + x Zeichen links vom Cursor löschen
  • DELETE & CHANGE
    • Gelöscht werden kann mit d (delete) oder c (change). Bei d bleibt Vim im Normalmodus und bei c wird nach dem Löschen in den Eingabemodus gewechselt und es kann direkt mit der Eingabe begonnen werden.
  • dd löscht die komplette Zeile
  • dw , cw löscht das Wort rechts
  • dip , cip Lösche nur den Absatz
  • dap , cap Lösche den Absatz und die nachfolgenden Leerzeilen

Suchen

  • /Suchbegriff<ENTER> vorwärts suchen. Vim zeigt den ersten Fundort an. Soll der nächste Fundort angesprungen werden muss die Taste n (Next) oder * gedrückt werden mit Shift + n oder # wird die Suche rückwärts ausgeführt.
  • ?Suchbegriff<ENTER> rückwärts suchen

Vim Command Modus

Datei laden

  • :e Öffnet den Dateibrowser. Bei Auswahl mit der Entertaste wird die Datei in das aktuelle Fenster geladen.
  • :e FILE.TXT öffnet direkt die Datei in das aktuelle Fenster
  • :Sex Teilt das Fenster horizontal in ein weiteres Fenster mit einem Dateibrowser
  • :Vex Teilt das Fenster vertikal in ein weiteres Fenster mit einem Dateibrowser

Fenstermanagement

  • :tabnew Neues Fenster in neuem Tab
    • :tabprev , gt gehe zum nächsten Tab
    • :tabnext , gT gehe zum vorherigen Tab
      • Bessere Lesbarkeit der Tabs
      • :hi tablinesel ctermbg=darkblue ctermfg=white
      • :hi tabline ctermbg=black ctermfg=green
    • Hilfe :help tabpage
  • :new Neues Fenster horizontal
  • :split Aktuelles Fenster horizontal teilen
  • :vsplit Aktuelles Fenster vertikal teilen
  • STRG + ww wechselt zum nächsten Fenster und rotiert bei Wiederholung durch alle Fenster
  • STRG + w<N> mit <N> sind die Pfeiltasten gemeint, oder auch hjkl mit denen direkt in das entsprechende Fenster gewechselt werden kann.
    Zum Beispiel
    • STRG + wl wechselt in das linke Fenster
    • STRG + wj in das untere Fenster
    • STRG + w<Pfeiltaste links> in das linke Fenster.
    • :ls die offenen Buffer (Fenster/Tabs) anzeigen lassen

Session Management

  • vim -S startet Vim wieder mit der zuletzt gespeicherten Session (aus der Session.vim Datei)
  • :mks! speichert die aktuelle Session in der Session.vim Datei

FAQ

  1. Paste Modes (Einfüge Modi)
    :set paste deaktiviert einige Automatismen, so dass eingefügte Daten z.B. ihre Struktur erhalten und nicht umformatiert werden. :set nopaste deaktiviert dieses Verhalten wieder.
    Hilfen :help paste , :help pastetoggle
  2. System Clipboard (Zwischenablage) Copy&Paste – Interaktion
    Damit "* und "+ funktioniert, muss ein Vim Paket mit grafischer Unterstützung installiert sein, in das die Option +clipboard mit eincompiliert wurde.
    Unter Linux mit einem X11 System repräsentiert "* die Option, womit der Inhalt mit der mittleren Maustaste an die aktuelle Stelle eingefügt werden kann.
    Um zu prüfen, ob die aktuelle Vim Installation den Austausch mit dem System Clipboard unterstützt: Im Normalmodus :echo has('clipboard') und ENTER eingeben. Wenn als Ergebnis eine 0 heraus kommt, wird es nicht unterstützt.
    Durch die Installation des Paketes vim-gtk3 (Ubuntu) wird Copy&Paste unterstützt.
    Hilfen :help clipboard , :help registers , :help cb (Current Buffer)

Weitere Vim Artikel hier im Blog.

Quellen

  1. https://de.wikipedia.org/wiki/Vim
  2. https://wiki.ubuntuusers.de/VIM/
  3. Einführung zu Vim – Tutorials Deutsch https://www.youtube.com/playlist?list=PLZ0CUq-i3Io9dAIKsHNwNAnTeKXamcQ5N
  4. Vim Tricks Live Coding auf Deutsch mit Daniel Siepmann https://youtu.be/P5tAKRVYj4E
  5. Register und Makros in Vim (clt23) Info Seite / Video

Eine tmux.conf Konfiguration

Eine für mich sehr gut funktionierende tmux.conf entweder systemweit in /etc/ oder nur für einen Benutzer in der ~/.tmux.conf ist die folgende Konfiguration. Für mich waren hier die Statuszeile und die Einbindung des Maus Scrollrades zum Scrollen wichtig.

######################
### DESIGN CHANGES ###
######################

# loud or quiet?
set -g visual-activity off
set -g visual-bell off
set -g visual-silence off
setw -g monitor-activity off
set -g bell-action none

set -g mouse on

# modes
setw -g clock-mode-colour colour25
setw -g mode-style "fg=colour255 bg=colour25 bold"

# panes
set -g pane-border-style "fg=colour19 bg=colour0"
set -g pane-active-border-style "bg=colour0 fg=colour9"

# statusbar
set -g status-position bottom
set -g status-justify left
set -g status-style "bg=colour25 fg=colour255"
set -g status-left "#[bg=colour25,fg=colour255]"
set -g status-right "#[fg=colour255,bg=colour25] %d/%m/%Y #[fg=colour255,bg=colour25] %H:%M "
set -g status-right-length 50
set -g status-left-length 20

setw -g window-status-current-style "fg=colour15 bg=colour31 bold"
setw -g window-status-current-format "#I#[fg=colour249]:#[fg=colour255]#W#[fg=colour249]#F"

setw -g window-status-style "fg=colour0 bg=colour25 bold"
setw -g window-status-format "#I#[fg=colour237]:#[fg=colour250]#W#[fg=colour244]#F"

setw -g window-status-bell-style "fg=colour255 bg=colour1 bold"

Pipewire Latenz mit pw-metadata setzen

Wenn du Musikproduktion mit einer DAW z.B. Bitwig unter Linux machst, dann ist für dich das Thema Latenz sehr wichtig.

Was ist Latenz?

  1. Die Latenz (Verzögerung/Puffer) ist wichtig im Zusammenspiel zwischen dem Computer und dem Audiointerface (Audio und Midi).
  2. Je niedriger die Latenz, desto höher wird die CPU belastet, weil sie in sehr kurzen Abständen die Datenpakete verarbeiten muss. Je größer die Latenz, desto mehr Zeit darf vergehen, bis sich die CPU wieder um die Datenpakete kümmern muss.
  3. Wenn ausschließlich nur im Computer produziert wird, kann die Latenz ohne Probleme hoch sein.
  4. Ein guter Startwert ist schon mal 1024 Samples (21.3ms) – bei 48kHz.
  5. Erst wenn hier störende Verzögerungen bemerkbar sind, z.B. beim Spielen auf einem Controller oder Synthesizer und der Umsetzung auf den Computer, macht es Sinn diesen Wert zu verkleinern. Zum Beispiel wenn der Tastendruck und das Ertönen eines Sounds spürbar verzögert sind.

Eventuell interessiert dich noch der Artikel zum Thema Pipewire Realtime Konfiguration „Pipewire modul-rt Konfiguration“ , um deine Audio/Videoanwendungen noch performanter zu machen

Pipewire Metadaten lesen mit pw-metadata

Der Befehl lautet pw-metadata und kann folgendermaßen benutzt werden

pw-metadata [options] [ id [ key [ value [ type ] ] ] ]
  -h, --help     Show this help
      --version  Show version
  -r, --remote   Remote daemon name
  -l, --list     List available metadata
  -m, --monitor  Monitor metadata
  -d, --delete   Delete metadata
  -n, --name     Metadata name (default: "default")

Die ID mit pw-metadata rausfinden

pw-metadataohne weitere Angaben ergibt so eine Ausgabe, die je nach Hardware natürlich unterschiedlich ist. Die ID steht hier immer weit links id:0

odo@computer~$ pw-metadata

update: id:0 key:'default.configured.audio.sink' value:'{"name":"alsa_output.usb-SOOPERAUDIOCARD_192k-00.pro-output-0"}' type:'Spa:String:JSON'
update: id:0 key:'default.configured.audio.source' value:'{"name":"alsa_input.usb-SOOPERAUDIOCARD_192k-00.pro-input-0"}' type:'Spa:String:JSON'
update: id:0 key:'default.audio.sink' value:'{"name":"alsa_output.usb-SOOPERAUDIOCARD_192k-00.pro-output-0"}' type:'Spa:String:JSON'
update: id:0 key:'default.audio.source' value:'{"name":"alsa_input.usb-SOOPERAUDIOCARD_192k-00.pro-input-0"}' type:'Spa:String:JSON'
update: id:0 key:'default.video.source' value:'{"name":"v4l2_input.pci-0000_00_14.0-usb-0_7_1.0"}' type:'Spa:String:JSON'

Alle verfügbaren Metadaten mit pw-metadata -l anzeigen lassen

odo@computer~$ pw-metadata -l

Found "settings" metadata 32
Found "default" metadata 40
Found "route-settings" metadata 41

Alle verfügbaren settings mit pw-metadata -n settings anzeigen lassen

odo@computer~$ pw-metada -n settings

Found "settings" metadata 32  
update: id:0 key:'log.level' value:'2' type:''  
update: id:0 key:'clock.rate' value:'48000' type:''  
update: id:0 key:'clock.allowed-rates' value:'[ 48000 ]' type:''  
update: id:0 key:'clock.quantum' value:'1024' type:''  
update: id:0 key:'clock.min-quantum' value:'32' type:''  
update: id:0 key:'clock.max-quantum' value:'2048' type:''  
update: id:32 key:'clock.force-quantum' value:'64' type:'(null)'  
update: id:64 key:'clock.force-quantum' value:'64' type:'(null)'

Settings temporär setzen mit pw-metadata -n settings id key value type

Hier werden nun Samplefrequenz auf 48kHz und die Samples auf 1024 gestellt, so dass 1024/48000 = 0,021333 als 21,3 Millisekunden Latenz raus kommen.
Soll es eine niedrigere Latenz bei einer Samplefrequenz von 48kHz sein, müssen die 1024 Samples herunter gesetzt werden. z.B. 768 (16ms) , 512 (10,6ms), 256 (5,3ms), 128 (2,6ms), 64 (1,33ms), 32 (0,68ms).

pw-metadata -n settings 0 clock.rate 48000
pw-metadata -n settings 0 clock.quantum 1024

Die Konfiguration permanent machen. Auch nach einem Reboot.

Folgende Datei im folgenden Verzeichnis erstellen ~/.config/pipewire/pipewire.conf.d/choppy-under-load.conf. Sie sollte z.B. diesen Inhalt enthalten. Wenn andere Werte ausgewählt wurden, dann natürlich die anderen Werte.

context.properties = {
   default.clock.rate = 48000
   default.clock.quantum = 1024
}
Quellen
  1. Pipewire Module-rt https://docs.pipewire.org/page_module_rt.html
  2. Pipewire Docs https://docs.pipewire.org/index.html
  3. Pipewire Configuration https://gitlab.freedesktop.org/pipewire/pipewire/-/wikis/Config-PipeWire
  4. pw-metadata https://docs.pipewire.org/page_man_pw_metadata_1.html
  5. pw-top https://docs.pipewire.org/page_man_pw_top_1.html
  6. Troubleshooting & XRuns https://gitlab.freedesktop.org/pipewire/pipewire/-/wikis/Troubleshooting#xruns
  7. Pipewire Ubuntuusers https://wiki.ubuntuusers.de/Pipewire/
  8. Pipewire Home https://pipewire.org/

Pipewire modul-rt Konfiguration

Hier findest du eine kurz & knackige Anleitung und Erklärung, wie du das Realtime Modul von Pipewire für deine Audio/Video Anwendungen einrichtest.

Für die Musikproduktion mit einer DAW z.B. Bitwig unter Linux kann dieses Thema für dich sehr wichtig sein.

Eventuell interessiert dich noch der Artikel über pw-metadata, mit dem du temporär und permanent deine Pipewire Konfigurationen verändern kannst

Benutzer in Gruppen aufnehmen

Der Benutzer unter dem die Applikation laufen soll, muss in die entsprechenden Gruppen (wenn vorhanden) aufgenommen werden mit einem Editor (z.B. nano oder vim) und Superuser Rechten die Datei /etc/group editieren

sudo vim /etc/group

und in den Zeilen, in denen rtkit und pipewire steht den Benutzernamen anhängen

rtkit:x:117:BENUTZERNAMEN
pipewire:x:136:BENUTZERNAMEN

Damit das wirksam (aktiv) wird, muss die Session neu gestartet werden. Entweder einfach ausloggen und wieder einloggen, oder den Computer neu starten.

Module-rt konfigurieren

Falls noch gar keine Pipewire Konfiguration vorhanden ist, muss diese erst angelegt werden. Das kann Systemweit in /etc/pipewire gemacht werden. Zu empfehlen ist es aber bei den meisten Systemen, da es sich meist um Eine-Person-Computer handelt im Heimverzeichnis des Benutzers z.B. /home/BENUTZERNAME/.config/pipewire/pipewire.conf.d .

Warum im Heimverzeichnis? Weil bei einem Backup des Benutzerverzeichnisses gleich die Pipewirekonfiguration der BernutzerIn mit gesichert wird. Gibt es auf dem Computer mehrere BenutzerInnen mit unterschiedlichen Konfigurationen, werden alle entsprechenden Konfigurationen mitgesichert und werden beim Zurückspielen einer Sicherung wieder „aktiviert“.

Info: Im Verzeichnis /usr/share/pipewire/ liegen bereits einige Beispiele von Konfigurationsdateien. Diese brauchen wir aber für unsere Aufgabe nicht. Und diese sind auch so generisch, dass sie nicht unbedingt auf unsere Konfiguration passen, ohne dass wir größere Änderungen an den gesamten Konfigurationsdateien vornehmen.

Konfiguration erstellen

Wir erstellen uns einfach die Datei pipewire.conf im Verzeichnis /home/Benutzername/.config/pipewire/pipewire.conf.d/ ganz einfach mit dem Aufruf eines Editors wie nano oder auch vim

vim /home/BENUTZERNAME/.config/pipewire/pipewire.conf.d/pipewire.conf

Und tragen folgende Zeilen ein. Das RTKit Modul libpipewire-module-rtkit ist hier deaktiviert und greift je nach Konfiguration nicht immer. Probiert es einfach aus, ob es bei euch funktioniert.
Darunter befindet sich dann das Pipewire Modul libpipewire-module-rt . DAS braucht ihr!

# Reload Configuration File
# systemctl --user daemon-reload
#
# Restart Pipewire Daemon 
# systemctl --user restart pipewire.service pipewire-pulse.socket

context.modules = [  

    # Uses RTKit to boost the data thread priority.
    #{ name = libpipewire-module-rtkit
    #    args = {
    #       nice.level   = -11
    #       rt.prio      = 88
    #       rt.time.soft = 2000000
    #       rt.time.hard = 2000000
    #   }
    #   flags = [ ifexists nofail ]
    #}

   # Set thread priorities without using RTKit.
   { name = libpipewire-module-rt  
       args = {  
           nice.level    = -11  
           rt.prio      = 88  
           rt.time.soft = 2000000  
           rt.time.hard = 2000000  
           rlimits.enabled = true  
           rtportal.enabled = true  
           rtkit.enabled = true  
       }  
       flags = [ ifexists nofail ]  
   }  
]

Pipewire als Benutzer neu starten

Da sich die Konfiguration auf der Festplatte geändert hat, müssen zwei Befehle mit ganz normalen Benutzerrechten eingegeben werden.

Neuladen der Konfiguration

systemctl --user daemon-reload

Pipewire neu starten

systemctl --user restart pipewire.service pipewire-pulse.socket

Check rt Prio Prozess

Mit dem folgenden Befehl kannst du im Systemjournal sehen ob eine Anwendung mit dem rtkit gestartet wurde.

journalctl --no-hostname -b 0 -e -u rtkit-daemon

Erklärung zu Xruns

Zur Vollständigkeit, weil das Thema Xruns in diesem Zusammenhang manchmal kommt.

Es gibt 2 Ursachen für Xruns

  1. Die Anwendungen können den Zyklus nicht rechtzeitig abschließen. Das kann daran liegen, dass der Kernel sie nicht rechtzeitig aufgeweckt hat oder dass sie nicht genügend Zeit zugewiesen bekommen haben.
  2. Das Timing des Treibers ist zu eng. Der Treiber wird nicht schnell genug aufgeweckt, um den Puffer gefüllt zu halten.
  • Ursache 1 kann zu Ursache 2 führen.
  • Ursache 2 kann durch Hinzufügen von mehr Pufferung (Vergrößerung des Headrooms) verbessert werden.
  • Das Hinzufügen von Headroom verbessert Ursache 1 aber nicht.

Mit pw-top kannst du sehen, was die Xruns verursacht.

  1. Wenn die Xruns der Anwendung zunehmen, ist es Ursache 1
  2. Wenn nur der Treiber die Xruns erhöht, ist es Ursache 2
  3. Wenn beide zunehmen, ist es Ursache 1, die Ursache 2 verursacht
Quellen
  1. Pipewire Module-rt https://docs.pipewire.org/page_module_rt.html
  2. Pipewire Docs https://docs.pipewire.org/index.html
  3. Pipewire Configuration https://gitlab.freedesktop.org/pipewire/pipewire/-/wikis/Config-PipeWire
  4. pw-metadata https://docs.pipewire.org/page_man_pw_metadata_1.html
  5. pw-top https://docs.pipewire.org/page_man_pw_top_1.html
  6. Troubleshooting & XRuns https://gitlab.freedesktop.org/pipewire/pipewire/-/wikis/Troubleshooting#xruns
  7. Pipewire Ubuntuusers https://wiki.ubuntuusers.de/Pipewire/
  8. Pipewire Home https://pipewire.org/

Audio in Video normalisieren mit ffmpeg

Manchmal ist das Audio in einem Video relativ leise und eigentlich ist da noch richtig Luft nach oben es lauter zu machen. Ein schöner und sehr eleganter Weg ist es mit ffmpeg die Normalisierungsfunktion zu nutzen, ohne das Video selbst erneut zu encoden. Das Audio muss natürlich neu encoded werden.

Zuerst muss ermittelt werden welches der lauteste Peak (lauteste Stelle) im gesamten Audio ist

Lautstärkenermittlung – Highest Peak

ffmpeg -i Videodatei.mp4 -af "volumedetect" -vn -sn -dn -f null /dev/null

Dann steht in der Ausgabe irgendwo relativ weit oben so etwas:

[Parsed_volumedetect_0 @ 0x00000000000] mean_volume: -29.1 dB
[Parsed_volumedetect_0 @ 0x00000000000] max_volume: -3.6 dB

Das „max_volume mit -3.6 dB“ ist das Interessante für uns. Das maximale Level in der digitalen Welt ist 0dB . Alles was darüber „gedrückt“ wird, wird sehr hässlich verzerrt. Das sollte unbedingt vermieden werden!!

Lautstärkenlimit beachten!

Und vielleicht ein kleiner Sicherheitsabstand wäre auch noch ganz gut, denn beim Umwandeln über D/A (Digital/Analog) Wandler passieren auch je nach Qualität manchmal merkwürdige Dinge. Stichwort Truepeak bzw True Inter-Sample Peak Level.
Also als Empfehlung wäre hier einen Puffer von 0,5 dB bis 1 dB einzuhalten.

In unserem Beispiel von „max_volume mit -3.6 dB“ nehmen wir mal einen Puffer von 1 dB, das würde dann heissen, dass wir das max_volume um 2.6dB erhöhen: -3.6+2.6= -1dB Ziellautstärke

Lautstärkenanhebung

Der Befehl dazu lautet (Ziel Audioformat: AAC)
ffmpeg -i Videodatei.mp4 -af "volume=2.6dB" -c:v copy -c:a aac -b:a 192k VideodateiErgebnis.mp4

Alias und Function

Und in der Shell Bash ist das natürlich schöner mit einem kurzen Alias aufzurufen. Aber ein Alias ist nur ein anderer Name für ein bestehender Name. Also könnte ich dem Programm Ulrike den Namen Peter geben und egal, welchen Namen ich jetzt eingebe Ulrike oder Peter, das selbe Programm wird ausgeführt.

Da sich hier aber Aufrufparameter, wie Videodatei und die 2.6dB handelt, reicht ein Alias nicht. Dafür gibt es in der Bash die Function. Hier können dann auch die Aufrufparameter abgefragt werden.

Diese Functions weiter unten gelten immer nur für die aktuelle Session. Sobald das Fenster geschlossen oder die Bash beendet wird, ist auch die Function gelöscht. Soll die Function für immer bleiben, muss sie in der Datei .~bashrc im eigenen Homeverzeichnis definiert werden.

Lautstärke herausfinden

Der Aufruf sieht so aus myMaxvol Videodatei.mp4

myMaxvol() { ffmpeg -i "$1" -af "volumedetect" -vn -sn -dn -f null /dev/null; }

Lautstärke anheben

Der Aufruf sieht so aus: myGainvol Videodatei.mp4 2.6

myGainvol() { ffmpeg -i "$1" -af "volume=""$2""dB" -c:v copy -c:a aac -b:a 192k output.mp4 && mv output.mp4 "$1" ; }

Erklärung was hier passiert: Es wird als Parameter Videodatei.mp4 und 2.6 als Lautstärkenanhebung mitgegeben. Das Ergebnis wird in eine Datei namens output.mp4 geschrieben. Wenn die Lautstärkenanhebung erfolgreich war, dann wird die Datei output.mp4 umbenannt in die Videodatei.mp4, die damit natürlich überschrieben wird.

Wenn die Aktion schief läuft, dann liegt da eine Datei output.mp4 herum und noch die originale Datei Videodatei.mp4.

Bash Script

Vielleicht bastle ich noch ein kleine Bash Script, das automatisch die Lautstärke ermittelt, dann auch automatisch die Anhebung ermittelt und danach gleich die Lautstärkenanhebung durchführt. Und dann das ganze noch auf ein ganzes Verzeichnis anwendet.

Schaumermal.

Vim – Suchen & Ersetzen – RegEx

Reguläre Ausdrücke (RegEx) sind DER Shit, wenn es darum geht extrem schnelle und auch sehr komplexe Dinge mit Texten bzw Strings oder einfach generell bei Suchen zu veranstalten.

Ein Anwendungsfall kommt immer wieder vor, nämlich das Suchen&Ersetzen.

Das Muster sieht so aus

:[range] s / [pattern] / [string] / [flags] [count]

[range]

  • bei range steht meist ein Prozentzeichen % das für den gesamten Text aka alles steht
  • hier können auch 1,$ = erste Zeile, erstes Zeichen bis letzte Zeile, letztes Zeichen
  • .,$ heisst von der aktuellen Zeile bis zum Ende
  • {Nummer} – in Zeile Nummer sowieso z.B. Zeile 14
  • Die Übersicht der schier unendlichen Bereichsangaben bekommst du, wenn du vim aufrufst und dann :h range eingibst

s (substitute)

  • Substitute ist die Suchen&Ersetzen Funktion. Wichtig zu wissen ist, dass alle Zeichen, die nicht in a-z und A-Z sind, müssen mit einem vorangestelltem Backslash \ „escaped“ werden.
  • Also Zahlen, Punkte, Klammern und Sonderzeichen mit einem Backslash \ escaped werden.
  • Ein Backslash wird dann natürlich auch mit einem Backslash escaped \\. Und ein Slash im Suchstring wird natürlich auch mit einem Backslash escaped \/ . Auch ein Leerzeichen bzw Blank wird mit einem Backslash escaped.
  • Der Grund dafür ist, dass viele dieser Zeichen selbst eine Funktion für die Suche darstellen. Und damit da keine Verwechselung entsteht muss extra „escaped“ werden.

[pattern]

  • Pattern ist der zu suchende Text
  • In einem Pattern können auch wiederum Pattern-Funktionen eingefügt werden, wie z.B. ab dem 5. Zeichen (spalte/column) %5c oder bis zum 5. Zeichen %>5c und viele weitere.
  • in vim :help pattern

[string]

  • String ist der Text, der das gesuchte Pattern ersetzt werden soll.

[flags]

  • g (global) wiederholt das Suchen&Ersetzen, bis zum Ende des Textes. Wird g nicht angegeben, wird nach dem ersten Suchtreffer aufgehört.
  • c (confirm) zum Bestätigen des Ersetzens
  • i (ignore) um Groß/Kleinschreibung zu ignorieren

[count]

  • der Parameter count wird bei Bedarf in einer positiven ganzen Zahl wie z.B. 5 angegeben. Er wirkt sich auf das Suchen&Ersetzen so aus, dass z.B.
  • %s/blah/blubb/g 5 – vom Textanfang die ersten 5 Zeilen bearbeitet werden
  • 10,$ s/blah/blubb/g 5 – ab Zeile 10, die Zeilen 10, 11, 12, 13, 14, also insgesamt 5 Zeilen bearbeitet werden.

Slash / – das Slash „/“ trennt die verschiedenen Parameter voneinander.

Will ich also den merkwürdigen String „Maier/(Schmidt)-Hans\Jens.Familie?“ in meinem gesamten Text mit „Bullshit!„ersetzen, sähe der Aufruf so aus

:%s/Maier\/\(Schmidt\)\-Hans\\Jens\.Familie\?/Bullshit\\!/g

Einfach vor jedes nicht a-zA-Z Zeichen ein Backslash

Nützliche Bash Shortcuts

Wenn du in Linux die Konsole öffnest, dann öffnest du in den meisten Fällen eine Bash Shell. Eine Shell ist einfach nur ein Programm, mit dem du Befehle an deinen Computer senden kannst wie : Zeige mir alle Dateien und Verzeichnisse an, oder starte Programm XY. Eine Shell ist also eine Kommunikationsschnittstelle zu deinem Betriebssystem. Es gibt viele verschiedene Shells und eine davon ist eben Bash. Siehe auch Wikipedia https://de.wikipedia.org/wiki/Bash_(Shell)

So eine Shell (Mensch-Maschine-Schnittstelle) bietet sehr sehr sehr viele verschiedene Möglichkeiten. Darunter auch viele Shortcuts (Tastenkombinationen), die das Eingeben, Suchen, Editieren usw viel einfacher machen.

Hier habe ich einige und für mich sehr nützliche Shortcuts zusammengestellt

Die Buchstaben hier sind zwar alle groß geschrieben, aber das einfach nur wegen der besseren Lesbarkeit und Einheitlichkeit. Alle Buchstaben können ohne die Shift Taste eingegeben werden. Also ein L ist eigentlich ein l, das sonst schnell mit einem großen i verwechselt werden könnte. Ich schreibe extra Kommandozeile, weil die sich über mehrere Zeilen erstrecken kann und damit klar wird, dass nicht die Bildschirmränder gemeint sind.

Nützliches

  • TAB Tabulator Taste bei der Eingabe drücken, um die Autovervollständigung zu nutzen. Am Anfang der Zeile wird nach Befehlen aus dem System gesucht, wenn bereits ein Wort am Anfang steht, dann werden Datei- und Verzeichnisnamen vervollständigt
  • Strg + L Löscht den Bildschirm. Wie auch der Befehl clear
  • !! Den letzten Befehl nochmal wiederholen (NOCHMAL !! !! !! !!)

Suchen

  • Pfeil hoch / runter – Befehlshistorie hoch und runter (vor und zurück) blättern, um bereits ausgeführte Befehle nochmal zu wiederholen. Bash speichert eingegebene Befehle in einer Datei namens .bash_history in deinem Homeverzeichnis und diese wird dann durchsucht.
  • Strg + R Inkrementelle Rückwärtssuche der Bash Historie. Erneut Strg + R drücken, um das nächste Suchergebnis anzeigen zu lassen.
  • Strg + J die aktuelle Suche in der Bash Historie mit der Übernahme des aktuellen Befehls beenden (Jaaaaa)
  • Strg + G die aktuelle Suche in der History mit leerer Eingabe beenden (Geh weg!)

Cursor Navigation

  • Strg + A Springe ganz an den ANFANG der Kommandozeile
  • Strg + E Springe ganz an das ENDE der Kommandozeile
  • Alt + F schiebt den Cursor vorwärts (FORWARD) vor das nächste Wort
  • Alt + B schiebt Cursor zurück (BACK) auf den ersten Buchstaben des vorangegangen Wortes

Löschen & Tauschen

  • Strg + U Löscht alles links des Cursors bis zum Anfang der Kommandozeile (Uuuuund zurück)
  • Strg + K Löscht alles rechts des Cursors bis zum Ende der Kommandozeile (Kawumm)

  • Strg + W Löscht ab dem aktuellen Zeichen links den „Rest“ bis zum WORTanfang
  • Alt + D Löscht ab dem aktuellen Zeichen den „Rest“ DES Wortes rechts

  • Alt + T Das Wort an der aktuellen Cursorposition wird mit dem vorangehenden Wort vertauscht (Tausch)

Ausgabe Display

  • Strg + S Stoppt die Ausgabe von Meldungen auf dem Bildschirm – einfrieren/screenshot (das aktuell laufende Programm wird nicht gestoppt. Im „Hintergrund“ laufen die Meldungen weiter)
  • Strg + Q Beendet das Strg + S (screenshot/einfrieren)

Beenden

  • Strg + C Abbruch eines Programms
  • Strg + D Schliesst die Bash Shell und damit auch meist das Konsolen Terminal

Sonderzeichen in KDE eingeben

Ich bin ein großer Fan von KDE, aber natürlich gibt es auch hier und da Kritikpunkte. Einer davon ist die Sonderzeichen Eingabe in KDE. Während in GTK Anwendungen einfach Strg+Shift (während der Eingabe gehalten) + U gedrückt, der Unicode eingegeben wird, so funktioniert das in KDE sprich QT Anwendungen schon seit Jahren nicht.
Grund ist wohl, laut meiner oberflächlichen Recherche, dass KDE meint, das ist ein Problem, das vom Xorg Server gelöst werden muss. Xorg sagt, das Problem muss von Qt gelöst werden und Qt zeigt auf KDE und sagt Anwendungsschicht. Dieses Ringelreih ist nicht nur ein peinliches Fundamentalisten-Mimimimi, sondern auch schon über 10 Jahre alt. Was es nicht minder peinlich macht. EGAL! Weiter im Text.
 
Es gibt eine Lösung, die mit KDE Bordmitteln erreicht werden kann.

Vorneweg: Die rechte Strg Taste kann dann nur noch dafür verwendet werden! Aber es gibt ja schliesslich noch eine linke Strg Taste, die weiterhin normal benutzt werden kann.

Du öffnest die Systemeinstellung von KDE
Dann fährst du runter in den Abschnitt Hardware
Klickst da auf Eingabegeräte
Wählst Tastatur aus
Klick dann rechts auf den Tab „Erweitert“
Aktiviere „Tastatureinstellungen ändern“
Suche dir den Abschnitt „Key to choose the 3rd Level“ raus und klappe ihn auf
Wähle den Punkt Right Ctrl an .. das ist die recht Strg Taste
Dann klappe weiter unten den Punkt „Position of Compose Key“ auf
Wähle den Punkt „3rd level of Left Ctrl“ aus
Klicke rechts unten auf Anwenden

 
Wenn du jetzt auf das Tab „Belegungen“ zurück wechselst, dann solltest auf der rechten Seite in der Zeile „Kurzbefehle für die 3. Ebene“ die Einstellung „Right Ctrl“ sehen.
 
Jetzt kann ich meine Zeichen „zusammenbauen“.

ë = right Ctrl + left Ctrl (loslassen)   " + e
Ë = rCtrl + lCtrl (loslassen)   " + E
ÿ = rCtrl + lCtrl (loslassen)   " + y
¡ = rCtrl + lCtrl (loslassen)   ! + !
¿ = rCtrl + lCtrl (loslassen)   ? + ?
ə = rCtrl + lCtrl (loslassen)   e +e
å = rCtrl + lCtrl (loslassen)   a + a
ŭ = rCtrl + lCtrl (loslassen)   u + u
æ = rCtrl + lCtrl (loslassen)   a + e
č = rCtrl + lCtrl (loslassen)   c + c
Č = rCtrl + lCtrl (loslassen)   c + C
½ = rCtrl + lCtrl (loslassen)   1 + 2
⅔ = rCtrl + lCtrl (loslassen)   2 + 3
¾ = rCtrl + lCtrl (loslassen)   3 +4
⅘ = rCtrl + lCtrl (loslassen)   4 + 5
⅕ = rCtrl + lCtrl (loslassen)   1 + 5
♯ = rCtrl + lCtrl (loslassen)   # + #
× = rCtrl + lCtrl (loslassen)   x + x
… = rCtrl + lCtrl (loslassen)   . + .
— = rCtrl + lCtrl (loslassen)   - + - + -
¯ = rCtrl + lCtrl (loslassen)   _ + _
√ = rCtrl + lCtrl (loslassen)   / + v
∞ = rCtrl + lCtrl (loslassen)   8 + 8
ø|Ø = rCtrl + lCtrl (loslassen)   / + o|O
© = rCtrl + lCtrl (loslassen)   0 + c
ⓒ = rCtrl + lCtrl (loslassen)   ( + c + )
ⓣ = rCtrl + lCtrl (loslassen)   ( + t + )
ⓐⓛⓛⓔ Ⓑⓤⓒⓗⓢⓣⓐⓑⓔⓝ
™ = rCtrl + lCtrl (loslassen)   t + m
und natürlich noch mehr

 
Weitere Informationen findest du hier

https://en.wikipedia.org/wiki/Compose_key
https://en.wikipedia.org/wiki/Combining_character

Kommando zurück – Bash History Tipps

Die Standard-Kommandozeile Bash bei Kubuntu (wie auch bei vielen anderen Linux Distributionen) hat eine sehr praktische History bzw ein Verlauf, welche Befehle man so eingegeben hat.
 
Die entsprechende Datei heisst .bash_history (mit einem vorangehenen Punkt – weil es sich um eine versteckte Datei handelt) liegt im Benutzerverzeichnis z.B. /home/hoergen/.bash_history
 
Die gesamte History (Verlauf) auflisten mit dem Befehl: history, dann wird ein Liste der Eingaben mit vorangestellter Zeilennummer ausgegeben.
 
Das können unter Umständen sehr viele Zeilen sein. Wenn man nach dem Befehl eine Zahl angibt, so werden die letzten Zeilen der History (Verlaufs) angezeigt wie z.B. history 8 zeigt die letzten 8 Zeilen der History an.
Damit man z.B. den Befehl aus der gefundenen Zeile nicht noch einmal eingeben muss, kann man zur Abkürzung die Zeilennummer mit einem vorangestellten Ausrufezeichen verwenden z.B. !1500
 
In der History kann auch gesucht werden

  • SuchenStrg+r – und anfangen zu tippen
  • Weitersuchennochmal Strg+r drücken
  • Zeile aus der Suche übernehmen und startenEingabe Taste drücken
  • Zeile aus der Suche übernehmen und etwas ändernEnde- oder Pfeil nach rechts Taste

 
Und zum Korrigieren sind diese Tastenkürzel hilfreich

  • Will man die Zeile löschen und ist am Anfang der Zeile: Strg+k
  • Will man die Zeile löschen und ist am Ende der Zeile: Strk+u
  • Will man die zuvor gelöschte Zeile wieder herstellen: Strg+y
  • Das nächste Wort löschen Alt+d
  • Das vorherige Wort löschen Strg+w

 
In der Zeile bewegen

  • Pos 1 oder Strg+a springt an den Zeilenanfang
  • Ende oder Strg+e springt an das Zeilenende
  • Alt+f springt ein Wort vorwärts (Forward)
  • Alt+b springt ein Wort zurück (Back)

 
Es gibt noch wesentlich mehr Kürzel und Befehle, die sich mit der History der Bash beschäftigen. Was sind eure Highlights?


 
 

Touchpad / Touchscreen Gesten in Kubuntu

Moderne Touchpads und Touchscreens erkennen wenn mehere Finger auf das entsprechende Gerät gelegt werden. So ist es schon länger möglich mehr als nur die Maus von rechts nach links oder im Browser die Seite von oben nach unten zu schieben. Das nennt sich dann Gesten oder auf englisch Gestures oder ab 2 Fingern, eigentlich ab 3 gleichzeitig dann Multitouchgestures. Fenster mit einem Wisch minimieren, maximieren, schliessen, Vollbild, alle Fenster anzeigen usw usf.

Wer so ein Gerät, Notebook mit Touchpad, externes Touchpad oder einen Touchscreen hat, wil eigentlich von diesen Featuren profitieren, denn das reduziert den Wechsel zur Tastatur, oder das Rumgeschiebe mit der Maus oder sogar die Bewegung auf dem Touchpad/-screen selbst. Beispiele wie das aussieht sind auf der Projektseite zu sehen.

Vorweg sei gesagt, dass diese Lösung hier nicht mit dem neuen Displayserver Wayland getestet sind und dort vermutlich nicht laufen. Gedacht ist diese Lösung für den X11 Server (Standard). Ich habe sie unter Kubuntu 22.04 LTS erfolgreich eingerichtet, auch wenn die meisten Beschreibungen mit Ubuntu betitelt sind.Für KDE gibt es eine weitere Konfiguration, die ich selbst aber nicht nutze.

Die Installation ist recht einfach.
Es muss ein Treiber https://github.com/JoseExposito/touchegg installiert werden. Ein 3 Zeiler, in dem erst das Software Repository hinzugefügt, dann die Quellen aktualisiert und schließlich die Anwendung installiert wird. Bitte zur Sicherheit der Installationsanweisung auf der Projektseite folgen. Diese Anweisungen stimmten zur Erstellungszeit des Artikels.

sudo add-apt-repository ppa:touchegg/stable
sudo apt update
sudo apt install touchegg

Für andere Linuxdistributionen sind die entsprechenden Aktionen ebenfalls auf der Projektseite aufgeführt.

Danach das graphische Konfigurationsprogramm https://github.com/JoseExposito/touche per Flathub mit dem Programm Discover installieren.
Der Systemdienst touchegg sollte gestartet werden. Wenn du nicht weisst, wie das geht, dann kannst du einfach deinen Computer neu starten. Oder du versuchst es auf der Konsole mit dem Befehl

sudo systemctl start touchegg.service


Weitere Informationen

In Touché können Tastenkürzel angegeben werden. Dort kann man dann nach Herzenslust alle möglichen Tastenkürzel angeben, die auch in den Systemeinstellungen für diverse Aktionen hinterlegt sind, wie z.B. Strg+F10 um alle Fenster anzuzeigen.

Leider gibt es keine wirklich einfache bzw universelle Methode herauszufinden, wieviele Finger (touches) das Touchpad oder der Touchscreen unterstützt. Einige benutzen xinput, andere benutzen die geist-tools, die aber bei mir mit einem Pythonfehler den Dienst quittierten. Eine vielleicht noch hilfreiche Quelle mit https://wiki.archlinux.org/title/Touchpad_Synaptics#top-page Informationen ist das Archlinux Wiki
Ansonsten einfach ausprobieren. Mehr als dass es nicht funktioniert, kann eigentlich nicht passieren.

KDE Maus Doppelklick Intervall einstellen

Die KDE Standardeinstellung zum Doppelklick mit der Maus kann manchmal ein wenig zu schnell eingestellt sein und je nach Standard Treiberbibliothek (Libinput/evdev), gibt es eine Erweiterte Einstellung (Advanced) oder auch nicht.
Aber egal, welcher Treiber genutzt wird kann das eingestellt werden. Bei evdev halt über eine Oberfläche und bei libinput eben direkt in in einer Textdatei.
 
Die Textdatei kcminputrc befindet sich im Homeverzeichnis bei den versteckten Verzeichnissen im Pfad

~/.config/kcminputrc

 
Dort gibt es einen Abschnitt der mit [Mouse] beginnt und so aussehen kann

[Mouse]
X11LibInputXAccelProfileFlat=false
XLbInptPointerAcceleration=0.4
cursorSize=48
cursorTheme=breeze_cursors

Direkt unter der letzten Zeile dieses Blockes kann dann eine weitere Zeile mit der Option DoubleClickInterval eingefügt werden, damit der Block dann so aussieht

[Mouse]X11LibInputXAccelProfileFlat=false
XLbInptPointerAcceleration=0.4
cursorSize=48
cursorTheme=breeze_cursors
DoubleClickInterval=50ms

 
Je größer die Zahl (Millisekunden) ist, desto langsamer kann doppelgeklickt werden.
Aber Vorsicht: Irgendwann ist dann alles nur noch ein Doppelklick 😉
 
 
 

Barrier statt Synergy – Maus & Tastatur zwischen zwei Computern teilen

Um eine Tastatur und Maus für zwei Computer zu verwenden habe ich früher Synergy verwendet. Dann wurde das kommerzialisiert und ich habe mir Synergy gekauft, weil ich damals eine Brücke zwischen Windows und Linux brauchte.
 
Jetzt brauche ich gerade wieder so eine Verbindung. Allerdings zwischen zwei Linux Rechnern – genauer gesagt zwischen zwei Kubuntu Rechnern. Bei der Recherche bin ich dann auf Barrier gestoßen, das ein Fork des früheren Synergys ist.Barrier teilt Maus, Tastatur und die Zwischenablage.
 
Barrier ist in sehr vielen Linux Distributionen vorhanden und falls nicht, gibt es das noch als Flatpack. Daher geht die Installation auf beiden Rechnern schnell von der Hand mit einem
sudo apt install barrier
oder entsprechend mit der Flatpack Variante über Discover (Ubuntu).
 
Beim Start auf dem Rechner mit der Maus und der Tastatur (Server) öffnet sich das Barrier Konfigurationsfenster mit der Aufforderung eine Sprache auszuwählen. Danach kommt man in die eigentliche Konfiguration.

Server – im oberen (Serverbereich) „interaktiv konfigurieren“ anklicken
Server – „Server konfigurieren“ klicken
Server – Von der rechten oberen Seite das Monitor Symbol in das Feld auf die Seite ziehen, wo Maus und Tastatur auf den anderen Rechner wechseln sollen
Server – Doppelklick auf den neuen „Monitor“ und einen Anzeigenamen vergeben

Wechsel zum „Client“

Client – Barrier starten
Client – Auswahl „Client (Maus und Tastatur eines anderen Rechner benutzen)“ auswählen
Client – IP Adresse des Server eintragen (diese wird im Barrier Fenster des Servers angezeigt)
Client – Barrier starten (oder neu laden, falls schon gestartet)
Client – Es kommt eine Schüsselgenerierungsanzeige. Diese bestätigen

Barrier sollte jetzt mit der Maus und Tastatur funktionieren.
 
Nachtrag 20.08.2022
Will man eben schnell mal zwischen zwei Bildschirmen wechseln – bei mir war die Anforderung da, weil ich OBS Studio mit einem HDMI Grabber (MiraBox)auf einem anderen Rechner benutze – so kann man beim Server auf „Configure Server“ -> Hotkeys gehen und dort (habe ich) 2 neue „Hotkeys“ anlegen. z.B.

Shift + BildHoch = Action switchToComputer1
Shift + BildRunter = Action switchToComputer2

Die Maus landet dann immer dort, wo sie den jeweiligen Bildschirm verlassen hat. In meinem Fall sehr praktisch.
 
Barrier läuft unter Linux, FreeBSD, OpenBSD, Windows und macOS (hier bitte die Entwicklerseite wegen bekannten Problemen lesen!!)
 
Die Entwickler Webseite https://github.com/debauchee/barrier
 
 

Texteditor Kate sortieren

Ein Befehl zum Sortieren fehlt im KDE Texteditor Kate. Das ist insofern ungeschickt, weil so eine Funktion einfach integriert doch oft weiter hilft. Allerdings kann diese Funktion auf einem Linux System recht einfach durchgeführt werden, indem das Kommandozeilen Programm „sort“ benutzt wird. Dazu muss lediglich die Tastenkombination Strg+AltGr+\ oder im Menü „Extras – Filtern durch Befehl (Strg+\)“ aufgerufen werden.

Markiert man vorher einen Bereich, z.B. mehrere Zeilen mit einer Nummerierung, dann werden nur diese Zeilen dem aufgerufenen Programm übergeben.

So werden Zeilen dann einfach mit Strg+\ und der Eingabe „sort“ in die richtige Reihenfolge gebracht. WENN denn die Zahlen am Anfang für sich alleine stehen

Sort hat einige Parameter und vermutlich wird meist der Parameter „-V“ natural sort of (version) numbers within text“ gesucht, da dieser Parameter das so sortiert, wie wir das meist manuell machen würden.

sort -Vsort
1
2
3
20
30
1
2
20
3
30


Mit „sort -V“ werden zum Beispiel auch Nummer 1, Nummer 2, Nummer 3, Nummer 30 ordentlich sortiert.

Wer noch mehr Sortier-Parameter von sort erfahren möchte, gibt einfach „man sort“ auf der Kommandozeile ein.

Viel Spaß beim Sortieren.

PS: Kate gibt es übrigens auch als Windows und als Mac Version hier zum Runterladen

Beim ssh login tmux aufrufen

Da ich tmux (Alternative zu screen) sehr häufig benutze, nutze ich auch bei remote ssh logins einen Befehl, der mich nach dem erfolgreichen Login gleich in eine detachte tmux session bringt.

ssh -l <USERNAME> <HOST> -p <PORT> -t "tmux a"

Weitere Artikel zu tmux

  1. tmux – neues Fenster oder Pane im aktuellen Verzeichnis öffnen
  2. tmux ein Windowmanager für die Konsole
  3. Live-Anzeige der Webserver-Client Verbindungen
  4. Eine tmux.conf Konfiguration