initial commit [141.14.140.180,mike]
This commit is contained in:
@@ -0,0 +1,240 @@
|
||||
# mwxcol
|
||||
|
||||
Eine Farbpalette und die Themes, die sie auf die benutzten Werkzeuge übertragen.
|
||||
|
||||
Quelle der Wahrheit ist `mwxcol.go` — alles andere ist davon abgeleitet.
|
||||
`go run mwxcol.go` druckt die Palette zur Sichtprüfung ins Terminal.
|
||||
|
||||
## Palette
|
||||
|
||||
| Name | Hex | Dezimal | Rolle |
|
||||
|--------|-----------|---------------|-------|
|
||||
| white | `#F0F0EA` | 240,240,234 | normaler Text, Vordergrund |
|
||||
| yellow | `#F9E2AF` | 249,226,175 | Änderung, Warnung, Build-Dateien |
|
||||
| orange | `#FAB387` | 250,179,135 | Archive, Präprozessor |
|
||||
| red | `#F38BA8` | 243,139,168 | Fehler, Löschung, Strings |
|
||||
| green | `#94E2D5` | 148,226,213 | ausführbar, neu, ok (eigentlich ein Mint/Teal) |
|
||||
| blue | `#B4BEFE` | 180,190,254 | Verzeichnisse, Quelltext, Datum |
|
||||
| pink | `#F5B2F7` | 245,178,247 | Symlinks, Keywords, Treffer |
|
||||
| violet | `#CBA6F7` | 203,166,247 | Typen, Bilder, Sonderdateien |
|
||||
| grey | `#AAAABB` | 170,170,187 | Sekundärtext, Kommentare |
|
||||
| dark | `#777788` | 119,119,136 | Attribute, deaktiviert |
|
||||
| darker | `#444455` | 68,68,85 | Trenner, Rahmen, Hintergrundakzent |
|
||||
|
||||
Die Palette enthält **keine Hintergrundfarbe**. Als Terminal-Hintergrund dient
|
||||
`#252528` (iTerm2-Profil „Default"); wo ein Theme einen Hintergrund braucht,
|
||||
steht dieser Wert oder `darker`.
|
||||
|
||||
## Installation auf einem neuen Rechner
|
||||
|
||||
```sh
|
||||
git clone <repo> ~/src/mwxcol
|
||||
cd ~/src/mwxcol
|
||||
./install.sh --check # zeigt erst, was passieren würde
|
||||
./install.sh # kopiert, sichert Vorhandenes nach .bak
|
||||
exec zsh
|
||||
```
|
||||
|
||||
`./install.sh --link` symlinkt statt zu kopieren. Das ist die bessere Variante,
|
||||
wenn das Repo dauerhaft an seinem Platz bleibt: dann können installierte Datei
|
||||
und Repo-Kopie nicht mehr auseinanderlaufen. `--check` sagt jederzeit, ob sie
|
||||
es doch getan haben.
|
||||
|
||||
Nova muss nach der Installation einmal neu gestartet werden; das Theme steht
|
||||
dann unter *Einstellungen > Themes > mwx*.
|
||||
|
||||
## Was wo landet
|
||||
|
||||
| Werkzeug | Repo | Ziel | Wie es geladen wird |
|
||||
|---|---|---|---|
|
||||
| eza | `themes/eza/theme.yml` | `~/.config/eza/theme.yml` | automatisch aus dem Config-Verzeichnis |
|
||||
| joe | `themes/joe/default.jcf` | `~/.joe/colors/default.jcf` | Schema `default`, verdeckt die System-Version |
|
||||
| fzf | `themes/fzf/colors.zsh` | `~/.config/mwxcol/fzf-colors.zsh` | `source` in `~/.zshrc` → `FZF_DEFAULT_OPTS` |
|
||||
| iTerm2 | `themes/iterm/mwxcol.itermcolors` | `~/.config/mwxcol/mwxcol.itermcolors` | einmalig importieren, siehe unten |
|
||||
| Nova | `themes/nova/mwx.novaextension` | `~/Library/.../Nova/Extensions/org.mwx` | Nova-Extension, Theme `mwx` |
|
||||
| Xcode | `themes/xcode/mwxcol.xccolortheme` | `~/Library/Developer/Xcode/UserData/FontAndColorThemes/` | Theme `mwxcol`, einmal auswählen, siehe unten |
|
||||
| Claude Code | `themes/claude-code/mwxcol.json` | `~/.claude/themes/mwxcol.json` | `"theme": "custom:mwxcol"` in `settings.json` |
|
||||
|
||||
Getestet mit eza 0.23.5, joe 4.6, fzf 0.70.0 (und 0.58.0), iTerm2 3.6.11,
|
||||
Nova, Xcode 26.6 und Claude Code 2.1.220 auf macOS.
|
||||
|
||||
## iTerm2
|
||||
|
||||
Die Palette deckt die 16 ANSI-Slots nicht von sich aus ab: ein Cyan fehlt, und
|
||||
eigene bright-Varianten gibt es auch nicht. Die fehlenden sechs Werte sind
|
||||
**nicht neu erfunden**, sondern wörtlich aus dem Nova-Theme übernommen, das
|
||||
dieselbe Lücke bereits geschlossen hatte — dadurch sehen Novas Terminal und
|
||||
iTerm2 identisch aus. Abgeleitete Werte sind unten mit \* markiert.
|
||||
|
||||
| Slot | Farbe | | Slot | Farbe | |
|
||||
|---|---|---|---|---|---|
|
||||
| 0 black | `#444455` | darker | 8 br-black | `#777788` | dark |
|
||||
| 1 red | `#F38BA8` | red | 9 br-red | `#F7B5C8` | \* |
|
||||
| 2 green | `#94E2D5` | green | 10 br-green | `#B8EAE1` | \* |
|
||||
| 3 yellow | `#F9E2AF` | yellow | 11 br-yellow | `#FCEECB` | \* |
|
||||
| 4 blue | `#B4BEFE` | blue | 12 br-blue | `#CDD4FE` | \* |
|
||||
| 5 magenta | `#CBA6F7` | violet | 13 br-magenta| `#F5B2F7` | pink |
|
||||
| 6 cyan | `#94DAE0` | \* | 14 br-cyan | `#B8E7EB` | \* |
|
||||
| 7 white | `#AAAABB` | grey | 15 br-white | `#F0F0EA` | white |
|
||||
|
||||
Dazu Vordergrund `white`, Hintergrund `#252528` (unverändert), Cursor `red` mit
|
||||
dunklem Cursor-Text, Auswahl `darker`, Links `blue`.
|
||||
|
||||
**Import** — iTerm2 hält seine Einstellungen im Speicher und schreibt sie beim
|
||||
Beenden zurück. Eine direkt bearbeitete Plist wäre also wieder weg; der Import
|
||||
muss durch die Oberfläche:
|
||||
|
||||
Einstellungen > Profiles > Colors > Color Presets… > Import…
|
||||
~/.config/mwxcol/mwxcol.itermcolors
|
||||
|
||||
Danach im selben Menü `mwxcol` auswählen. Der Preset-Name kommt aus dem
|
||||
Dateinamen. Die älteren Presets `mwx` und `mwxdark` bleiben unangetastet — sie
|
||||
tragen noch die grellen Standard-ANSI-Töne und sind *nicht* diese Palette.
|
||||
|
||||
`themes/iterm/preview.sh` setzt die Palette per Escape-Sequenz in der laufenden
|
||||
Session, ohne etwas zu speichern — zum Ansehen vor dem Import. Ein neuer Tab
|
||||
hat wieder die alten Farben.
|
||||
|
||||
## Xcode
|
||||
|
||||
Xcode liest jede `.xccolortheme` aus dem Ordner oben und zeigt sie unter dem
|
||||
Dateinamen an — das Theme heißt also `mwxcol`, wie das iTerm2-Preset. Die
|
||||
älteren Themes `mwx` und `mwxdark` bleiben unangetastet.
|
||||
|
||||
Auswählen: **Einstellungen > Themes > mwxcol**. Xcode führt hell und dunkel
|
||||
getrennt (`XCFontAndColorCurrentTheme` bzw. `…CurrentDarkTheme`), das Theme
|
||||
also in beiden Erscheinungsbildern wählen, wenn es überall gelten soll.
|
||||
`./install.sh --check` liest beide Werte und sagt, was gerade aktiv ist.
|
||||
|
||||
Ein laufendes Xcode sieht die neue Datei erst nach einem Neustart.
|
||||
|
||||
Die Zuordnung folgt dem Nova-Theme, damit beide Editoren gleich aussehen:
|
||||
|
||||
| Xcode-Element | Farbe | | Xcode-Element | Farbe |
|
||||
|---|---|---|---|---|
|
||||
| Plain Text, Variablen | white | | Keywords | violet |
|
||||
| Kommentare, Doc-Kommentare | dark | | Strings | green |
|
||||
| Doc-Schlüsselwörter, `MARK:` | grey | | Attribute (`@State`) | green |
|
||||
| Typen und Klassen | yellow | | Zahlen, Zeichen | orange |
|
||||
| Typ-Deklaration | yellow | | Präprozessor, Makros | orange |
|
||||
| Funktionen, andere Deklarationen | blue | | Konstanten | orange |
|
||||
| URLs | blue | | Reguläre Ausdrücke | pink |
|
||||
|
||||
Unsichtbare Zeichen sind `darker`, der Cursor ist `red` wie im iTerm2-Preset,
|
||||
die Zeile mit dem Debugger `green` mit 25 % Deckkraft. Marker im Scrollbalken
|
||||
folgen der Palette: Fehler `red`, Warnung `yellow`, Laufzeitproblem `orange`,
|
||||
Analyzer `violet`, Breakpoint `blue`, Diff `grey`.
|
||||
|
||||
Die Flächen sind die einzigen Werte außerhalb der Palette. Der Editor ist
|
||||
`#15151C` — dunkler als der Terminal-Hintergrund und anders als überall sonst
|
||||
hier, weil er in Xcode so eingestellt wurde; Auswahl und aktuelle Zeile sind
|
||||
`#20202B`, die Konsole behält `#252528` aus dem iTerm2-Profil und der
|
||||
Quick-Help-Kasten `#2E2E35` (`darker` mit 30 % über `#252528`).
|
||||
|
||||
Drei Dinge, die man beim Anpassen wissen muss:
|
||||
|
||||
**Xcode unterscheidet eigene und fremde Symbole, dieses Theme nicht.** Für
|
||||
Klassen, Typen, Funktionen, Variablen, Konstanten und Makros gibt es jeweils
|
||||
einen Schlüssel für Projekt-Symbole und einen mit `.system` für Symbole aus
|
||||
Frameworks. Beide tragen hier denselben Wert, weil die Palette keine freien
|
||||
Farbtöne mehr hat, mit denen die Unterscheidung nicht wie eine zweite Bedeutung
|
||||
aussähe. Wer sie doch will, setzt die sechs `.system`-Schlüssel auf `violet`
|
||||
`#CBA6F7` — dann sind Framework-Symbole durchgehend violett wie in Xcodes
|
||||
eigenem Dark-Theme, kollidieren aber mit den Keywords.
|
||||
|
||||
**Schriften stehen mit im Theme, nicht nur Farben.** Alle Syntax-Schlüssel
|
||||
tragen `HackNFM-Regular - 15.0` (Hack Nerd Font Mono), der Quick-Help-Text
|
||||
`.SFNS-Regular - 14.0`. Andere Schrift gewünscht: die Werte in
|
||||
`DVTSourceTextSyntaxFonts` ersetzen — Xcode erwartet den PostScript-Namen
|
||||
(`HackNFM-Regular`), nicht den Anzeigenamen („Hack Nerd Font Mono"). Fette
|
||||
Schnitte für Keywords und Deklarationen hat das Theme absichtlich nicht mehr:
|
||||
Xcode ebnet sie beim nächsten Zurückschreiben ohnehin ein, siehe unten.
|
||||
|
||||
**Wer das Theme in den Einstellungen anfasst, schreibt die Datei um.** Xcode
|
||||
speichert dann seine eigene Fassung, und die ist nicht nur ohne Kommentare —
|
||||
beobachtet an Xcode 26.6 nach einer Größenänderung in der Oberfläche:
|
||||
|
||||
* `DVTFontSizeModifier` verschwindet und wird in die Schriftgrößen eingerechnet,
|
||||
* die Schnitte werden eingeebnet, `HackNFM-Bold` wird überall zu `-Regular`,
|
||||
* Schlüssel, die Xcodes eigenes Theme-Modell nicht führt, fallen heraus —
|
||||
hier `xcode.syntax.markup.aside.kind` und `DVTDebuggerInstructionPointerColor`
|
||||
(letzterer steht nur im Theme der `SourceEditor.framework`).
|
||||
|
||||
`--check` meldet die installierte Datei danach als „WEICHT AB"; wer die
|
||||
Änderung behalten will, überträgt sie von Hand ins Repo, sonst überschreibt der
|
||||
nächste `./install.sh` sie kommentarlos (das Backup liegt als `.bak` daneben).
|
||||
Bei `--link` ersetzt Xcode womöglich den Symlink durch eine echte Datei, dann
|
||||
ist die Verbindung ganz aufgehoben.
|
||||
|
||||
## Claude Code
|
||||
|
||||
Ab Version 2.1.220 liest Claude Code eigene Themes aus `~/.claude/themes/*.json`
|
||||
(mit `CLAUDE_CONFIG_DIR` verschiebt sich das Verzeichnis mit). Aufbau:
|
||||
|
||||
```json
|
||||
{ "name": "mwxcol", "base": "dark", "overrides": { "text": "#F0F0EA", … } }
|
||||
```
|
||||
|
||||
`base` ist eines der eingebauten Themes, `overrides` überschreibt einzelne
|
||||
Farbschlüssel davon. Erlaubt sind `#RRGGBB`, `#RGB`, `rgb(r,g,b)`, `ansi256(n)`
|
||||
und `ansi:<name>`; unbekannte Schlüssel und ungültige Werte werden still
|
||||
verworfen. Ausgewählt wird das Theme über `/theme` oder direkt mit
|
||||
`"theme": "custom:mwxcol"` in `~/.claude/settings.json` — der Dateiname ist der
|
||||
Slug. Claude Code beobachtet das Verzeichnis, Änderungen greifen sofort.
|
||||
|
||||
Dieses Theme setzt **alle** 72 Schlüssel des `dark`-Themes, damit keine Farbe
|
||||
aus dem Original durchschlägt:
|
||||
|
||||
| Element | Farbe | | Element | Farbe |
|
||||
|---|---|---|---|---|
|
||||
| Fließtext | white | | Erfolg, Plan-Modus | green |
|
||||
| Sekundärtext, inaktiv | grey | | Fehler | red |
|
||||
| Prompt-Rahmen | dark | | Warnung | yellow |
|
||||
| Auswahl, Flächen | darker | | Claude selbst, Fast Mode | orange |
|
||||
| Rechte, Vorschläge, IDE | blue | | Bash-Rahmen | pink |
|
||||
| Auto-Accept, Skills | violet | | | |
|
||||
|
||||
Die Shimmer-Varianten (die hellere Farbe der Laufanimation) nehmen, wo es sie
|
||||
gibt, die abgeleiteten Hellwerte aus der iTerm2-Tabelle oben — `blue` schimmert
|
||||
also nach `#CDD4FE`, `violet` nach `pink`.
|
||||
|
||||
Die Diff-Hintergründe sind die einzigen gemischten Werte: `green` bzw. `red`
|
||||
mit 30 % Deckkraft über `#252528` (`#465E5C` / `#63444E`), auf Wortebene mit
|
||||
50 %, für die gedimmte Fassung mit 15 %. Nachrichtenflächen sind `darker` mit
|
||||
30 % über `#252528` (`#2E2E35`).
|
||||
|
||||
**Ein einfacherer Weg, der die Palette nicht braucht:** das eingebaute Theme
|
||||
`dark-ansi` nimmt die 16 ANSI-Farben des Terminals — nach dem iTerm2-Import
|
||||
sind das ohnehin die Farben von hier, dann aber gerundet auf die 16 Slots.
|
||||
`custom:mwxcol` ist genauer und gilt auch in Terminals ohne das Preset.
|
||||
|
||||
## Fallstricke
|
||||
|
||||
Vier Dinge, die beim Übertragen Zeit gekostet haben und beim nächsten Mal Zeit
|
||||
sparen:
|
||||
|
||||
**eza mergt über sein eingebautes Theme, es ersetzt es nicht.** Wer nur
|
||||
`foreground` setzt, erbt `is_bold` und `is_underline` aus eza's Default. Genau
|
||||
so entstand die Unterstreichung bei `README.md` und `Makefile` — die stecken in
|
||||
`file_type: build`, und dessen Default ist *bold + underline*. Deshalb steht im
|
||||
Theme an mehreren Stellen ein explizites `is_underline: false`, das sonst
|
||||
überflüssig aussähe. Beim Ergänzen neuer Klassen daran denken.
|
||||
|
||||
**joes Statuszeile bleibt invers, egal was `-status` sagt.** Das kommt aus dem
|
||||
`\i` (= Inverse, joe(1)) am Anfang von `-lmsg` in `~/.joerc`. Wer dort die
|
||||
Palette sehen will, muss das `\i` entfernen — nicht am Theme drehen.
|
||||
|
||||
**`FZF_DEFAULT_OPTS` hängt an, es überschreibt nicht.** Die Zeile lautet
|
||||
`FZF_DEFAULT_OPTS=$FZF_DEFAULT_OPTS'…'`. Zweimal sourcen hängt den Block zweimal
|
||||
an; funktional gewinnt zwar das letzte `--color`, sauber ist es nicht. Nach
|
||||
Änderungen `exec zsh` statt `source ~/.zshrc`.
|
||||
|
||||
**joe `-term 0..15` reicht auf die Terminal-Palette durch.** Das Theme lässt die
|
||||
16 nummerierten Farben absichtlich auf der Identität (`-term 0 0` …), damit alte
|
||||
Syntax-Dateien, die Farben per Nummer angeben, die Terminal-Palette benutzen.
|
||||
Das ist erst korrekt, *nachdem* das iTerm2-Preset importiert ist — vorher landen
|
||||
solche Dateien auf den grellen Standard-ANSI-Tönen. Auf einem Rechner mit einem
|
||||
anderen, nicht angepassten Terminal gilt dasselbe: dann entweder dort die
|
||||
Palette setzen oder im joe-Theme `-term 1 $F38BA8`, `-term 2 $94E2D5` usw. auf
|
||||
Hex ziehen. Betroffen sind wenige Dateitypen — die mitgelieferten Syntax-Dateien
|
||||
von joe 4.6 benutzen überwiegend Klassennamen statt Nummern.
|
||||
Reference in New Issue
Block a user