4 Punkte von GN⁺ 2024-08-13 | 1 Kommentare | Auf WhatsApp teilen
  • Ein langjähriger Nutzer von iTerm 2 hat WezTerm erneut ausprobiert, um textbasierte Konfiguration zu nutzen und dotfiles zu teilen, und passt mit der Lua-Konfigurations-API Aussehen, Keybindings, Multiplexing und Workspaces detailliert an
  • Die Konfiguration liegt in wezterm.lua und wird direkt beim Speichern per Hot Reload neu geladen; im Debug-Overlay mit CTRL + SHIFT + L lassen sich Logs und eine Lua-REPL sofort prüfen
  • Mit Lua-Konfiguration lassen sich über 1.000 integrierte Farbschemata, Anbindung an den Dark-/Light-Mode des Systems, Fonts, macOS-Fensterdekorationen und eine Statusleiste im Powerline-Stil dynamisch konfigurieren
  • Standard-Keybindings können beibehalten oder deaktiviert werden; Option + Arrow für wortweise Navigation, CMD +, zum Öffnen der Konfiguration sowie Pane-Steuerung auf Basis von Leader Key und Key Tables werden selbst definiert
  • Integriertes Multiplexing und Workspaces halten wie tmux-Sessions den Zustand von Fenstern, Panes und Tabs je Projekt vor; mit Lua lassen sich sogar eine Projektauswahl-UI und der Wechsel-Flow bauen

Warum ich von iTerm 2 zu WezTerm gewechselt bin

  • Ich habe iTerm 2 fast zehn Jahre lang genutzt, wollte aber ein Terminal, dessen gesamte Konfiguration textbasiert verwaltet und in dotfiles abgelegt werden kann, um sie zwischen Arbeits- und Privatmaschinen zu teilen
  • WezTerm punktet mit einer starken API und Lua config; beim zweiten Versuch ließ sich eine schönere und funktionalere Terminal-Konfiguration bauen
  • Abgedeckt werden Aussehen, Keybindings, Multiplexing, Wechsel zwischen Workspaces, Statusleiste und dynamische Theme-Konfiguration
  • Einige Funktionen werden in diesem Artikel nicht behandelt
    • Benutzerdefinierte Regeln zum Hervorheben von Hyperlinks
    • Durchsuchbarer scrollback
    • quick copy mode
    • Bildunterstützung
  • Die Beispielkonfiguration ist auf die Nutzung unter macOS zugeschnitten; auf anderen Systemen wurde sie nicht getestet, WezTerm selbst läuft aber in verschiedenen Umgebungen
  • Die finale Beispielkonfiguration steht als gist bereit

Installation und Grundstruktur der Lua-Konfiguration

brew install wezterm
  • Als Ablauf wird verwendet, die Konfigurationsdatei unter $XDG_CONFIG_HOME/wezterm/wezterm.lua abzulegen
    • Auf den meisten Systemen einschließlich macOS wird das als ~/.config/wezterm/wezterm.lua interpretiert
    • Statt alles in einer einzelnen ~/.wezterm.lua zu halten, erleichtert ein Verzeichnis das Aufteilen der Konfiguration auf mehrere Dateien
local wezterm = require 'wezterm'
local config = wezterm.config_builder()

return config
  • Da die WezTerm-Konfiguration in Lua geschrieben wird, lassen sich komplexe dynamische Konfigurationen leichter erstellen als mit YAML oder TOML
  • Lua ist eine Programmiersprache und daher schwerer zu lernen als YAML/TOML; wer Erfahrung mit dynamischen Sprachen wie Ruby, Python oder JavaScript hat, kann Beispielcode aber gut lesen
  • Als Lernmaterial für Lua eignet sich der Getting Started guide

Hot Reload und Debug-Overlay

  • WezTerm erkennt Änderungen an der Konfigurationsdatei und führt einen automatischen Reload aus, sodass sich Konfigurationseffekte ohne Neustart des Terminals sofort prüfen lassen
  • Speichert man eine fehlerhafte Konfiguration, etwa mit einem falschen Funktionsnamen, erscheint sofort ein Runtime-Error-Popup
wezterm.config_builderZ()
  • Logs lassen sich mit wezterm.log_info() schreiben
wezterm.log_info("hello world! my name is " .. wezterm.hostname())
  • Mit CTRL + SHIFT + L öffnet man das debug overlay und kann Logs sowie eine Lua-REPL ansehen
    • Lua-Ausdrücke wie 1 + 1 lassen sich ausführen
    • Auch Werte des Moduls wezterm, etwa wezterm.home_dir, können geprüft werden
  • Zusammen verkürzen Hot Reload und Debug-Overlay die Feedback-Schleife beim Ändern und Prüfen der Konfiguration

Aussehen konfigurieren: Farben, System-Theme, Font, Fensterstil

  • Farbschemata und dynamische Konfiguration

    • WezTerm bietet über 1.000 integrierte Farbschemata, ausgewählt werden sie über config.color_scheme
    config.color_scheme = 'Tokyo Night'
    
    • Die Liste der Farbschemata findet sich unter WezTerm colorschemes
    • Mit dem Event window-config-reloaded und wezterm.color.get_builtin_schemes() ist auch eine dynamische Konfiguration möglich, die für jedes neue Fenster ein zufälliges Farbschema setzt
    • Wenn nach dem Setzen eines fensterspezifischen config override wieder zu einem statischen Farbschema gewechselt wird, greift der Hot Reload möglicherweise nicht sofort
    • Durch Ausführen von window:set_config_overrides({}) im Debug-Terminal oder durch Schließen und erneutes Öffnen des Fensters lässt sich der Override entfernen
  • Anbindung an Dark-/Light-Mode des Systems

    • Durch Auslagern der Konfiguration in ein Modul appearance.lua kann das Farbschema abhängig vom Erscheinungsbild des Betriebssystems gewechselt werden
    • In wezterm.gui.get_appearance() wird nach dem String "Dark" gesucht, um zu bestimmen, ob Dark Mode aktiv ist
    • In Umgebungen ohne wezterm.gui wird standardmäßig Dark Mode angenommen
    if appearance.is_dark() then
      config.color_scheme = 'Tokyo Night'
    else
      config.color_scheme = 'Tokyo Night Day'
    end
    
  • Fonts und Fensterdekorationen

    • WezTerm enthält standardmäßig JetBrains Mono und Nerd Font Symbols
    • Die Beispielkonfiguration verwendet Berkeley Mono in 13 pt
    config.font = wezterm.font({ family = 'Berkeley Mono' })
    config.font_size = 13
    
    • Das Beispiel für den macOS-Fensterstil enthält einen halbtransparenten Hintergrund, Blur, das Entfernen der Titelleiste und Font-Einstellungen für die Tab-Leiste
    config.window_background_opacity = 0.9
    config.macos_window_background_blur = 30
    config.window_decorations = 'RESIZE'
    

Statusleiste und WezTerm Event API

  • Über einen Callback für das Event update-status werden rechts in der Statusleiste Segmente in Powerline-Optik hinzugefügt
  • Das anfängliche Beispiel nutzt Hintergrund- und Vordergrundfarbe des aktuellen Farbschemas sowie wezterm.hostname(), um ein Hostname-Segment anzuzeigen
  • wezterm.on verbindet Callbacks mit Terminal-Events
    • update-status tritt periodisch auf, wenn ein Status-Update vorbereitet ist
    • WezTerm stellt sicher, dass jeweils nur ein Update gleichzeitig läuft, und beendet den Handler, wenn der Code zu lange braucht
  • Mit window:effective_config().resolved_palette lässt sich die aktuelle Palette inklusive Overrides abrufen
  • wezterm.format wird verwendet, um Strings mit Stilen wie Farbe, Fettschrift und Unterstreichung zu versehen
  • Im späteren Beispiel werden weitere Statusleistensegmente ergänzt
    • Aktueller Workspace
    • Datum und Uhrzeit
    • Hostname
  • Mit wezterm.color.parse, color:lighten, color:darken und wezterm.color.gradient werden Gradient-Farben auf Basis des aktuellen Themes berechnet

Keybindings: macOS-Wortnavigation und Konfiguration öffnen

  • WezTerm stellt Standard-Keybindings bereit; im Beispiel bleiben sie aktiviert
  • Zum Abschalten der Standard-Keybindings kann config.disable_default_key_bindings = true verwendet werden
  • Damit sich unter macOS wie in iTerm 2 und Terminal.app mit Option + LeftArrow und Option + RightArrow wortweise navigieren lässt, werden ESC + b und ESC + f gesendet
{
  key = 'LeftArrow',
  mods = 'OPT',
  action = wezterm.action.SendString '\x1bb',
}
  • CMD + , kann so konfiguriert werden, dass die WezTerm-Konfigurationsdatei in einem neuen Tab geöffnet wird
    • Das Beispiel verwendet nvim und wezterm.config_file
  • Wenn WezTerm über den macOS Finder gestartet wurde, fehlt im PATH möglicherweise das Editor-Binary, sodass die Befehlsausführung fehlschlägt
  • Wird der Default-Umgebung über config.set_environment_variables mehr hinzugefügt, wird dieselbe Umgebung auch an spätere spawn-Befehle weitergegeben
config.set_environment_variables = {
  PATH = '/opt/homebrew/bin:' .. os.getenv('PATH')
}

Integriertes Multiplexing und Leader Key

  • Das integrierte Multiplexing von WezTerm kann als Ersatz für tmux genutzt werden
  • Die integrierten Funktionen bieten einen scrollback buffer pro Pane, bessere Maussteuerung, einfachere Auswahlfunktionen und meist höhere Performance
  • Mit CTRL + SHIFT + P öffnet man die command palette und kann Befehle wie „Shell: Split Horizontally“ und „Shell: Split Vertically“ ausführen
  • Die Standard-Shortcuts zum Splitten sind zur Vermeidung von Konflikten komplex; mit einem Leader Key lassen sich einfachere Kombinationen bauen
config.leader = { key = 'a', mods = 'CTRL', timeout_milliseconds = 1000 }
  • Das Beispiel führt im tmux-Stil nach dem Leader mit " einen horizontalen Split und mit % einen vertikalen Split aus
{
  key = '"',
  mods = 'LEADER',
  action = wezterm.action.SplitHorizontal { domain = 'CurrentPaneDomain' },
}
  • Wenn CTRL + A selbst an das Terminal gesendet werden soll, wird die Kombination LEADER|CTRL so gemappt, dass wieder CTRL + A gesendet wird

Pane-Wechsel, Resize und Key Table

  • Pane-Wechsel werden auf die Vim-Richtungstasten h, j, k, l in Kombination mit dem Leader gemappt
  • Mit ActivatePaneDirection wird die Bewegung nach Down, Up, Left oder Right ausgeführt
  • Wiederholte Lua-Tabellen lassen sich mit einer Funktion reduzieren
local function move_pane(key, direction)
  return {
    key = key,
    mods = 'LEADER',
    action = wezterm.action.ActivatePaneDirection(direction),
  }
end
  • Panes können zwar auch per Maus vergrößert oder verkleinert werden, im Beispiel wird für einen tastaturzentrierten Workflow jedoch eine Key Table verwendet
  • Eine Key Table ist ein Modus, in den man wechselt, um modusspezifische Keybindings zu verwenden
    • Ähnlich wie ein Leader Key, aber so konfigurierbar, dass sie nach einer Aktion nicht sofort deaktiviert wird
    • Gut geeignet für Aufgaben wie Resize, bei denen dieselbe Taste wiederholt gedrückt werden muss
  • Das Beispiel aktiviert mit LEADER + r die Key Table resize_panes und passt mit h/j/k/l die Pane-Größe jeweils um 3 Zellen an
  • Mit timeout_milliseconds = 1000 wird konfiguriert, dass der Resize-Modus nach 1 Sekunde verlassen wird
  • Neovim-Nutzer können sich smart-splits.nvim ansehen, um die Navigation zwischen WezTerm-Panes und Vim-Panes zu erleichtern

Projektbezogene Workspace-Konfiguration

  • Wenn man parallel an mehreren Projekten arbeitet, möchte man pro Projekt separate Multiplexer-Instanzen sowie den Zustand von Fenstern, Panes und Tabs behalten
  • Einen ähnlichen Zweck wie tmux-session erfüllen in WezTerm Workspaces
  • Es wird eine Struktur verwendet, bei der projects.lua eine Projektauswahlfunktion bereitstellt, die von der Hauptkonfiguration geladen wird
  • Das erste Beispiel listet Projektpfade direkt auf und zeigt mit InputSelector eine Auswahl-UI an
    • Mit fuzzy = true wird Fuzzy-Suche aktiviert
    • Das Auswahlergebnis wird zunächst nur als Log im Debug-Overlay ausgegeben
  • LEADER + p öffnet die Projektauswahl-UI, und LEADER + f zeigt die vorhandene Workspace-Liste per Fuzzy-Suche an
action = wezterm.action.ShowLauncherArgs { flags = 'FUZZY|WORKSPACES' }
  • Der Aufwand, Projektpfade manuell zu pflegen, wird reduziert, indem mit wezterm.glob() Unterverzeichnisse des Projektordners automatisch gesammelt werden
  • Das Beispiel verwendet Unterverzeichnisse unter ~/Projects als Projekte und nimmt auch das Home-Verzeichnis in die Projektliste auf
  • Wird ein Projekt ausgewählt, wird SwitchToWorkspace ausgeführt
    • Existiert der Workspace, wird dorthin gewechselt
    • Existiert er nicht, wird er neu erstellt
    • Als Workspace-Name wird das letzte Segment des Pfads verwendet
    • Das aktuelle Arbeitsverzeichnis des neuen Terminals wird auf den ausgewählten Projektpfad gesetzt

Was man noch ausprobieren kann

  • WezTerm bietet viele weitere Funktionen, die in der Funktionsliste aufgeführt sind
  • Die Möglichkeiten der Lua-Konfiguration lassen sich in den WezTerm API docs weiter erkunden
  • Bei einer schrittweise nachgebauten Konfiguration ist es sinnvoll, nur die tatsächlich genutzten Teile zu behalten, sie im eigenen Stil neu zu schreiben und dann die benötigten Funktionen zu ergänzen
  • Wenn einem WezTerm gefällt, kann man Wez, der an Open Source arbeitet, auch unterstützen

1 Kommentare

 
GN⁺ 2024-08-13
Meinungen auf Hacker News
  • Ich bin vor Kurzem zu WezTerm gewechselt und bin sehr zufrieden.
    Davor habe ich kitty genutzt, und nach dem Umstieg von iTerm2 gefielen mir dessen Konfiguration und Einfachheit. Was die mitgelieferten Funktionen angeht, ist WezTerm aber deutlich besser. Auch die Terminal-Konfiguration ist so kurz, dass sie auf eine Editor-Ansicht passt, und seitdem stört das Terminal einfach nicht mehr, sodass ich mich nicht weiter darum kümmern muss.
    Der entscheidende Grund, kitty aufzugeben, war, dass ich jedes Mal, wenn ich auf ein Problem stieß oder eine iTerm2-Funktion nachbauen wollte, kurze, abweisend wirkende Antworten des Maintainers zu sehen bekam.
    Ich erinnere mich zum Beispiel, dass auf die Frage „Wie richtet man tmux in kitty ein?“ sinngemäß mit „Lass es, tmux ist dumm“ geantwortet und der Fall geschlossen wurde; da habe ich schließlich aufgegeben.

    • Auch ich bin wegen solcher Antworten des Maintainers von Kitty zu WezTerm gewechselt.
      Natürlich ist es sein eigenes Projekt und er ist ein hervorragender Programmierer, aber ein bisschen Demut würde wohl nicht schaden.
    • Ich frage mich, ob WezTerm eine Entsprechung zu iTerms hotkey window unterstützt.
      Für alle, die es nicht kennen: Das ist ein Fenster, dessen Ein-/Ausblenden man mit einem bestimmten Tastenkürzel umschaltet und das, wenn es angezeigt wird, über allen Fenstern schwebt, sodass man das Terminal von überall sofort nutzen kann. Man kann zwar auch ohne leben, aber ich möchte diese Funktion nicht ohne Not aufgeben; selbst wenn die anderen Funktionen von WezTerm gut sind, wäre es für mich ohne das von vornherein raus.
    • Je älter ich werde, desto mehr empfinde ich einen übermäßig dogmatischen und abweisenden Maintainer als das größte Warnsignal, ein Projekt zu meiden.
      Nach außen wirkt es oft wie das beste Produkt, aber sobald man es intensiver nutzt, sitzt man in den Entscheidungen dieser Person fest und hat keinen Ausweg mehr.
    • Abgesehen davon, dass der Kitty-Maintainer etwas ruppig ist, halte ich das nicht für besonders gravierend; ein Maintainer ist nicht verpflichtet, der Freund der Nutzer zu sein.
      Als ich Anfang dieses Jahres WezTerm zu nutzen begann, war ich allerdings wirklich überrascht. Ich habe viele Texte von Wez gelesen, und der Ton war jedes Mal perfekt; ich fand das wirklich großartig.
    • Der Entwickler von kitty scheint eher zu glauben, dass er besser als alle anderen weiß, wie man ein Terminal zu benutzen hat, und dass die Ansichten anderer Leute grundsätzlich falsch sind.
      Bezeichnend ist, dass es nicht einmal die alte make menuconfig-UI von Linux korrekt rendern kann und man das auch nicht per Einstellung beheben kann, weil er offenbar nicht an Konfiguration glaubt. Wenn man den Issue-Tracker liest, ist das nicht nur beleidigend; es löst sogar das ungesunde Gefühl aus, dass ich meine zufällige Art, ein Terminal zu benutzen, genauso heftig „verteidigen“ müsste.
      Sicher wissen kann ich es nicht, aber selbst wenn ich in allen Terminal-Fragen seiner Meinung wäre, hätte ich wohl trotzdem das Gefühl, lieber ein eigenes Terminal zu bauen, als seines zu benutzen.
  • Meiner Erfahrung nach reagiert Wez erstaunlich schnell auf GitHub-Issues, und wenn tatsächlich etwas falsch ist, behebt er es meist innerhalb von ein, zwei Tagen.
    Abgesehen von ein, zwei kleinen Beschwerden zu Modifier-Tasten über SSH hinweg passt der Funktionsumfang fast perfekt zu meinen Bedürfnissen, und außerdem ist es schnell. Früher war ich ein begeisterter Alacritty-Nutzer, brauchte aber bessere Modifier-Unterstützung in entfernten Emacs-Sitzungen.

    • Ich habe auch ein Issue eröffnet (https://github.com/wez/wezterm/issues/4917); er hat nicht nur geantwortet, sondern auch Nebenfragen beantwortet, und zwei von mir erstellte Fix-PRs wurden wirklich schnell gemergt.
    • Meine Erfahrung war nicht ganz so positiv.
      Ich habe zwar einen Kommentar zu einem bereits geschlossenen Issue geschrieben, aber es war jedenfalls als „won’t do“ geschlossen, und mein Kommentar wurde ignoriert. Ich wollte kein neues Issue mit demselben, bereits abgelehnten Thema eröffnen.
      https://github.com/wez/wezterm/issues/4706
    • In Bezug auf entfernte Emacs-Sitzungen kann WezTerm Tastenkombinationen vollständig abfangen und neu definieren.
      Kombinationen wie C-S-" werden vom Terminalprotokoll nicht unterstützt, es gibt also keine gute Möglichkeit, sie zu senden. Deshalb habe ich WezTerm stattdessen " c s '" senden lassen und in Emacs eine zusätzliche Bindung eingerichtet. Dank dieses F12-Tricks konnte ich auch recht komplexe Kombinationen senden, die das Terminalprotokoll nicht unterstützt.
  • Ursprünglich habe ich WezTerm installiert, als ich von Kubuntu zu Ubuntu gewechselt bin, weil ich einige Funktionen von Konsole nutzen wollte, ohne Konsole zu installieren, zum Beispiel unbegrenzten Scrollback und die Suche im Scrollback.
    Ich weiß, dass man Konsole auch unter Gnome installieren kann, aber irgendwie fühlte sich das nicht passend an. WezTerm gefiel mir sofort, aber durch diesen Artikel ist mir klar geworden, dass ich bei den Konfigurationsmöglichkeiten bisher nur an der Oberfläche gekratzt habe.
    Mein einziger Kritikpunkt ist, dass viele Funktionen schwer zu entdecken sind. Die Dokumentation ist wirklich gut, und der Autor ist aktiv und hilfsbereit, aber ich habe zum Beispiel einmal herausgefunden, wie man große Textblöcke nur mit der Tastatur auswählt, es ausprobiert und gedacht: „Das muss ich mir merken!“ – und es dann sofort wieder vergessen. Jetzt markiere ich wieder wie ein kompletter Anfänger mit der Maus. Da ich das ohnehin nicht oft mache, ist das schneller, als die entsprechende Doku-Seite erneut zu googeln.
    Die erwähnte Seite ist übrigens https://wezfurlong.org/wezterm/copymode.html; vom Namen her klingt sie nach dem, was ich gesucht hatte, aber es ist nicht die völlig andere Funktion https://wezfurlong.org/wezterm/quickselect.html. Auch die ist sehr nützlich und eine gute Idee, aber nicht das, wonach ich gesucht hatte.

    • Ich habe meine WezTerm-Konfiguration in mein dotfiles-Repository gelegt und diese Notizen ins README geschrieben, damit ich sie später leicht wiederfinde.
      https://github.com/bbkane/dotfiles/tree/master/wezterm
    • Der QuickSelect-Modus ist wirklich großartig.
      Schon im Standardzustand ist er nützlich, aber seine eigentliche Stärke liegt darin, dass man die regulären Ausdrücke für Treffer anpassen kann. Ich habe einen Regex hinzugefügt, der alle Dateinamen in der Ausgabe von eza --icons findet; \p{Co} matcht dabei die Icons. Deshalb habe ich ls als Alias auf eza gesetzt und kann dann sofort mit Shift+QuickSelect-Buchstabe jeden beliebigen Dateinamen eingeben.
    • Ich frage mich, ob das bedeutet, dass es in WezTerm eine Möglichkeit gibt, unbegrenzten Scrollback und Live-Suche im Scrollback wie in Konsole zu nutzen.
      Ich habe diese Möglichkeit noch nicht gefunden, weshalb ich häufig zusätzlich eine Konsole-Session offen habe. Beim Tailing von Live-Logs sind diese beiden Funktionen wirklich mächtig.
    • Mich würde interessieren, warum du von Kubuntu weggewechselt bist. Ich frage, weil ich über eine Installation nachdenke.
  • Nachdem ich Mac Terminal, iTerm2, Kitty, Warp und andere ausprobiert hatte, bin ich am Ende bei WezTerm geblieben.
    Es ist einfach zu konfigurieren, schnell und sieht gut aus. Ich habe auch ein Theme dafür erstellt.
    https://tiniri.vlad.studio/

    • Ich habe solche Terminals ebenfalls ausprobiert, bin aber letztlich bei WezTerm geblieben, und inzwischen ist es eines meiner liebsten Terminals.
      Beim Vergleichen verschiedener Terminals bin ich zufällig auf diese Seite gestoßen: https://terminaltrove.com/terminals/
      Sie wirkt ziemlich nützlich für alle, die Terminals vergleichen möchten.
    • Dieses Theme ist sehr schön. Ich frage mich, ob es eine Möglichkeit gibt, es auch in JetBrains-Editoren zu verwenden.
    • Mir hat das helle Vlad-Theme gefallen, also habe ich es installiert.
    • Die Farbthemes sind wirklich gut. Schön wäre es, wenn es sie auch für Konsole und Sublime Text gäbe.
  • Ich nutze WezTerm seit etwa einem Jahr und unterstütze Wez auf GitHub; es ist ein hervorragendes Terminal, und er ist ein guter Entwickler.
    Auch wenn der Artikel sagt, dass er es nicht behandelt, gehören Quick Copy und die anderen Kopiermodi zu meinen Lieblingsfunktionen. Ich benutze sie wirklich ständig. Man drückt C-S-Space und gibt dann den Buchstaben ein, der neben dem Element angezeigt wird, das man kopieren möchte.
    Ein wichtiger Anwendungsfall ist, auf einem macOS-Laptop etwas Ähnliches wie mosh+tmux für eine Linux-Maschine der Firma zu verwenden. Ich lasse immer eine Session laufen und kann vom Mac aus auf der Firmenmaschine arbeiten. Es bietet wiederverbindbare Sessions mit Panes und Tabs, sodass ich auch arbeiten kann, wenn ich nicht am Platz bin, und die Qualität ist sehr hoch.

    • Eine wirklich coole Funktion des Quick-Copy-Modus ist, dass der Wert automatisch wieder in den Terminal-Prompt eingefügt wird, wenn man den Buchstaben in seiner Großbuchstaben-Version eingibt.
    • Ich habe QuickSelect gerade erst entdeckt und glaube, dass ich es künftig häufig nutzen werde.
  • Ich frage mich, was einem an WezTerm nicht gefallen könnte.
    Meine Lieblingsfunktion, die aber oft übersehen wird, ist die vollständige Cross-OS-Unterstützung. Wenn man wie ich mit Linux, macOS und Windows arbeitet, muss man nur WezTerm lernen, und das war’s. Einen großen Teil meiner Terminal-Konfiguration teile ich ebenfalls zwischen den Betriebssystemen.

    • Der eine Punkt, der mir an WezTerm nicht gefallen hat und der Grund war, warum ich es nicht mehr nutze, betrifft die Art, wie umgebrochene Zeilen in die Zwischenablage kopiert werden.
      Vielleicht ist es nur mein Problem oder liegt daran, wie ich tmux nutze, aber wenn ich Zeilen kopierte, die umgebrochen waren, schien der kopierte Text Zeilenumbrüche zu enthalten. Das war sehr störend, und ich vermute, dass es an der Interaktion zwischen WezTerm und tmux lag.
      Ich habe nicht genug Belege, um einen guten Bug-Report zu schreiben, und da WezTerm mit „ssh domains“ einen eigenen Terminal-Multiplexing-Server hat, ist es vielleicht auch nicht wichtig genug, um es zu beheben. Aber ich möchte den WezTerm-Multiplexing-Server nicht überall installieren, und auf den Hosts, auf die ich per SSH gehe, ist in der Regel bereits tmux vorhanden.
      Abgesehen davon ist WezTerm hervorragend.
    • Der größte Schmerz beim Wechsel zwischen dem Firmen-MacBook und meinem privaten Linux-Rechner sind die Tastenkürzel.
      Die Einstellmöglichkeiten unter macOS sind begrenzt und erfordern diverse Workarounds; man kann zwar Linux an macOS anpassen, aber die macOS-Tastenkürzel selbst mag ich nicht besonders. Dadurch entsteht so ein seltsamer Mischzustand, und bei jedem Wechsel drücke ich ständig die falschen Tasten.
      Ich frage mich, ob jemand eine gut passende Konfiguration gefunden hat.
    • In meiner Umgebung war die Performance nicht gut, und mit der Zeit neigte es dazu, beim Wechseln von Tabs für mehrere Sekunden einzufrieren.
      Ich weiß nicht warum und auch nicht, wie ich das diagnostizieren soll. Ein großer Scrollback ist meine einzige Vermutung, aber darauf kann ich nicht verzichten. Am Ende bin ich zu Kitty gewechselt; Kitty hat zwar auch seine Probleme, aber zumindest funktioniert es.
    • Ich finde, die Sprachwahl ist hier wirklich wichtig.
      Die Konfigurationssprache Lua glänzt, weil sie umgebungsspezifische Änderungen ziemlich einfach macht. Ich denke auch, dass es einen unterschätzten Nebeneffekt von Rust gibt. Moderne Rust-Tools haben oft hervorragende Cross-Platform-Unterstützung, vielleicht weil die Abstraktionsschicht zwischen Sprache und Betriebssystem gut ist.
    • Dass es auf allen drei Betriebssystemen gut getestet ist, ist ebenfalls ein großer Punkt.
      Um 2019 herum reichte es mir schon, das wez-Repository einmal in Bezug auf GitHub Actions, Issues und Dokumentation mit anderen zu vergleichen, um überzeugt zu sein, und seitdem bin ich nicht mehr zurückgewechselt. Tab-Unterstützung ist sogar standardmäßig dabei.
      Es ist das erste Terminal, das urxvt in Sachen Unterstützung und Geschwindigkeit wirklich ersetzt hat. Davor nutzte ich termite und behielt urxvt als Backup, falls termite in merkwürdigen Situationen Bugs zeigte.
  • Der Grund, warum ich bei iTerm2 bleibe, ist Edit->Selection Respects Soft Boundaries.
    Das ist die Funktion, bei der „wenn sie aktiviert ist, der vertikale Strich des Pipe-Zeichens | wie eine Pane-Trennlinie in vim oder emacs interpretiert wird und die Auswahl an dieser Stelle umbricht“.
    In meinem Fall brauche ich das, wenn ich in IRC Text auswähle.
    https://github.com/wez/wezterm/issues/596

    • Das ist im Grunde das Bloat-Problem im Stil von Microsoft Word.
      Niemand braucht alle Funktionen, aber jeder hat 10 Nischenfunktionen, die er haben will, und diese 10 sind nicht dieselben. Um also seine 10 Nischenfunktionen zu bekommen, akzeptiert man den Bloat.
    • Diese Funktion sieht unglaublich gut aus. Ich frage mich, ob es unter Linux ein Terminal gibt, das sie unterstützt.
    • zellij unterstützt das standardmäßig, wenn das Terminal die passenden OSC-Funktionen unterstützt. Mit den Terminals in diesem Thread sollte es funktionieren.
      Edit: Das war grob formuliert, sorry. Ich hatte übersehen, dass du es in IRC verwendest.
    • Wenn man es in Aktion sieht, stimme ich zu 100 % zu, dass es eine hervorragende UI/UX-Funktion ist.
    • Ich benutze iTerm seit Jahren und kannte diese Einstellung überhaupt nicht. Für meine Emacs-Nutzung ist sie eine entscheidende Funktion.
  • Ich war iTerm2-Nutzer, seit ich vor fast 10 Jahren zum ersten Mal macOS zu verwenden begann.
    In letzter Zeit kam es mir aber wirklich langsam vor, und als ich nach einem Wechsel mit cmd-tab über eine Sekunde warten musste, bis das Terminal erschien, war meine Grenze erreicht.
    Ich habe mir ein paar Alternativen angesehen, aber nichts passte so richtig. Ein Terminal brauchte ein Konto/Login, um zu funktionieren, was ein großer Nachteil war, und ein anderes war in {Java,Type}Script geschrieben und hat wegen der asynchronen Natur von Node.js-Streams sogar einfache Befehle wie yes kaputtgemacht.
    Bisher gefällt mir WezTerm sehr gut. Es ist ziemlich schnell, sehr gut konfigurierbar, und das Theme, das ich in iTerm2 eingestellt hatte, OneDark(base16), ist standardmäßig enthalten.
    Die einzige anfängliche Unannehmlichkeit war, dass ich cmd-left und cmd-right in der Lua-Konfiguration selbst hinzufügen musste; es wäre schön gewesen, wenn das in den Defaults enthalten wäre.

    • Du meinst, das mit Konto/Login ist Warp, und das in {Java,Type}Script ist entweder Tabby oder extraterm?
  • Wez veröffentlicht auch ein Buch über Rust-Systemprogrammierung.
    https://leanpub.com/sysprog

  • Das ist ein guter Beitrag, und vielleicht probiere ich WezTerm einmal aus, aber ich bin erst vor Kurzem zu Kitty gewechselt und möchte nicht zu häufig wechseln.
    Allerdings braucht es eine Korrektur zu Kitty: Kitty verwendet weder YAML noch TOML, sondern eine eigene einfache Konfigurations-DSL, und darüber hinaus lässt es sich vollständig mit Python skripten.

    • Geht mir ähnlich, ich habe es erst einmal nur gebookmarkt.