Farben und Themen in Rsh
In vielen Teilen von rshs Oberfläche sind die Farben anpassbar.
Dies wird in der Konfigurationsdatei
config.rsh
erstellt. Ein Hashtag in der
Konfigurationsdatei kommentiert den danach folgenden Text aus.
- Tabellen Rahmen
- Werte einfacher Typen
- Formen (Kommandozeilen Syntax)
- Prompt
- LS_COLORS
Tabellen Rahmen
Tabellen Rahmen werden mit der Einstellung
table_mode
in der
config.rsh
konfiguriert. Hier ein Beispiel:
> $env.config = {
table_mode: rounded
}
Dies sind die aktuellen Optionen für table_mode
:
rounded
# das ist natürlich der beste 😃basic
compact
compact_double
light
thin
with_love
reinforced
heavy
none
other
Farb-Symbolik
r
- Normale Farbe Abkürzung für rot-
rb
- Normale Farbe rot mitb
fürbold
, fette Schrift red
- Normale Farbe rot-
red_bold
- Normale Farbe rot mit fetter Schrift -
"#ff0000"
- "#hex" Format Vordergrund-Farbe rot (Anführungszeichen benötigt) -
{ fg: "#ff0000" bg: "#0000ff" attr: b }
- "komplettes #hex" Format Vordergrund rot in "#hex" Format mit einem blauen Hintergund in "#hex" Format mitb
als Abkürzung für fette Schrift.
Attribute
Code | Bedeutung |
---|---|
l | blink |
b | bold |
d | dimmed |
h | hidden |
i | italic |
r | reverse |
s | strikethrough |
u | underline |
n | nothing |
defaults to nothing |
Normale Farben
and Abkürzungen
Code | Name |
---|---|
g | green |
gb | green_bold |
gu | green_underline |
gi | green_italic |
gd | green_dimmed |
gr | green_reverse |
gbl | green_blink |
gst | green_strike |
lg | light_green |
lgb | light_green_bold |
lgu | light_green_underline |
lgi | light_green_italic |
lgd | light_green_dimmed |
lgr | light_green_reverse |
lgbl | light_green_blink |
lgst | light_green_strike |
r | red |
rb | red_bold |
ru | red_underline |
ri | red_italic |
rd | red_dimmed |
rr | red_reverse |
rbl | red_blink |
rst | red_strike |
lr | light_red |
lrb | light_red_bold |
lru | light_red_underline |
lri | light_red_italic |
lrd | light_red_dimmed |
lrr | light_red_reverse |
lrbl | light_red_blink |
lrst | light_red_strike |
u | blue |
ub | blue_bold |
uu | blue_underline |
ui | blue_italic |
ud | blue_dimmed |
ur | blue_reverse |
ubl | blue_blink |
ust | blue_strike |
lu | light_blue |
lub | light_blue_bold |
luu | light_blue_underline |
lui | light_blue_italic |
lud | light_blue_dimmed |
lur | light_blue_reverse |
lubl | light_blue_blink |
lust | light_blue_strike |
b | black |
bb | black_bold |
bu | black_underline |
bi | black_italic |
bd | black_dimmed |
br | black_reverse |
bbl | black_blink |
bst | black_strike |
ligr | light_gray |
ligrb | light_gray_bold |
ligru | light_gray_underline |
ligri | light_gray_italic |
ligrd | light_gray_dimmed |
ligrr | light_gray_reverse |
ligrbl | light_gray_blink |
ligrst | light_gray_strike |
y | yellow |
yb | yellow_bold |
yu | yellow_underline |
yi | yellow_italic |
yd | yellow_dimmed |
yr | yellow_reverse |
ybl | yellow_blink |
yst | yellow_strike |
ly | light_yellow |
lyb | light_yellow_bold |
lyu | light_yellow_underline |
lyi | light_yellow_italic |
lyd | light_yellow_dimmed |
lyr | light_yellow_reverse |
lybl | light_yellow_blink |
lyst | light_yellow_strike |
p | purple |
pb | purple_bold |
pu | purple_underline |
pi | purple_italic |
pd | purple_dimmed |
pr | purple_reverse |
pbl | purple_blink |
pst | purple_strike |
lp | light_purple |
lpb | light_purple_bold |
lpu | light_purple_underline |
lpi | light_purple_italic |
lpd | light_purple_dimmed |
lpr | light_purple_reverse |
lpbl | light_purple_blink |
lpst | light_purple_strike |
c | cyan |
cb | cyan_bold |
cu | cyan_underline |
ci | cyan_italic |
cd | cyan_dimmed |
cr | cyan_reverse |
cbl | cyan_blink |
cst | cyan_strike |
lc | light_cyan |
lcb | light_cyan_bold |
lcu | light_cyan_underline |
lci | light_cyan_italic |
lcd | light_cyan_dimmed |
lcr | light_cyan_reverse |
lcbl | light_cyan_blink |
lcst | light_cyan_strike |
w | white |
wb | white_bold |
wu | white_underline |
wi | white_italic |
wd | white_dimmed |
wr | white_reverse |
wbl | white_blink |
wst | white_strike |
dgr | dark_gray |
dgrb | dark_gray_bold |
dgru | dark_gray_underline |
dgri | dark_gray_italic |
dgrd | dark_gray_dimmed |
dgrr | dark_gray_reverse |
dgrbl | dark_gray_blink |
dgrst | dark_gray_strike |
"#hex"
Format
Das "#hex" Format ist gebräuchlich um Farben zu
repräsentieren. Es besteht immer aus dem #
gefolgt
von 6 Zeichen. Die ersten zwei sind für rot
, die
nächsten zwei für grün
und die letzten zwei für
blau
. Es ist wichtig, dass dieser Text mit
Anführungszeichen geschrieben wird, damit rsh es nicht für einen
Kommentar hält.
Beispiel: Die primäre Farbe rot
ist
"#ff0000"
oder
"#FF0000"
. Gross- und Kleinschreibung
sollten hier keine Rolle spielen.
Dieses "#hex"
Format erlaubt es, 24-bit
Echtfarben für verschiedene Bereiche von rsh zu spezifizieren.
Volles "#hex"
Format
Das volle "#hex"
Format ist eine
Interpretation des "#hex"
Formats,
welches den Vordergrund, Hintergrund und Attribute in einer
Zeile spezifizieren kann.
Beispiel:
{ fg: "#ff0000" bg: "#0000ff" attr: b
}
- Vordergrund rot in "#hex" format
- Hiuntergund blau in "#hex" format
- Attribute in fetter Schrift als Abkürzung spezifiziert
Primitive Typen
Werte primitiver Typen sind z.B. int
und
string
. Primitive Typen und Formen können ebenfalls
mit verschiedenster Farben symbolisiert werden.
Hier die aktuelle Liste von Primitiven Typen. Nicht alle davon sind konfigurierbar. Die konfigurierbaren sind mit * markiert.
primitive | default color | configurable |
---|---|---|
any |
||
binary |
Color::White.normal() | * |
block |
Color::White.normal() | * |
bool |
Color::White.normal() | * |
cellpath |
Color::White.normal() | * |
condition |
||
custom |
||
date |
Color::White.normal() | * |
duration |
Color::White.normal() | * |
expression |
||
filesize |
Color::White.normal() | * |
float |
Color::White.normal() | * |
glob |
||
import |
||
int |
Color::White.normal() | * |
list |
Color::White.normal() | * |
nothing |
Color::White.normal() | * |
number |
||
operator |
||
path |
||
range |
Color::White.normal() | * |
record |
Color::White.normal() | * |
signature |
||
string |
Color::White.normal() | * |
table |
||
var |
||
vardecl |
||
variable |
Spezielle "primitives" (keine wirklichen Primitiven Typen, denn sie existieren nur für die Farbgebung)
primitive | default color | configurable |
---|---|---|
leading_trailing_space_bg |
Color::Rgb(128, 128, 128)) | * |
header |
Color::Green.bold() | * |
empty |
Color::Blue.normal() | * |
row_index |
Color::Green.bold() | * |
hints |
Color::DarkGray.normal() | * |
Hier ein kleines Beispiel, wie diese Werte angewendet werden können.
> let config = {
color_config: {
separator: purple
leading_trailing_space_bg: "#ffffff"
header: gb
date: wd
filesize: c
row_index: cb
bool: red
int: green
duration: blue_bold
range: purple
float: red
string: white
nothing: red
binary: red
cellpath: cyan
hints: dark_gray
}
}
Hier ein anderes Beispiel, welches mehrere Farben Schreibweisen sowie Kommentare verwendet.
> let config = {
color_config: {
separator: "#88b719" # Dies setzt nur die Vordergrundsfarbe wie in PR #486
leading_trailing_space_bg: white # Dies setzt nur die Vordergrundsfarbe im ursprünglichen Stil
header: { # Analog PR #489
fg: "#B01455", # Hinweis, Bei Werten mit hex Farben, werden Anführungszeichen benötigt
bg: "#ffb900",# Hinweis, Kommas werden nicht benötigt, es könnte auch alles auf eine Zeile passen
attr: bli # Hinweis, Um diesen Wert sind keine Anführungszeichen, hier geht es auch ohne
}
date: "#75507B"
filesize: "#729fcf"
row_index: {
# Hinweis, Dies ist eine andere Möglichkeit, nur den Vordergrund anzugeben, ohne Angabe von bg oder attr
fg: "#e50914"
}
}
}
Formen
Werte
Wie oben bereits erwähnt, ist Formen
oder
shapes
ein Begriff, der angibt, wie Syntax
eingefärbt wird.
Hier die aktuelle Formen Liste.
shape | default style | configurable |
---|---|---|
shape_block |
fg(Color::Blue).bold() | * |
shape_bool |
fg(Color::LightCyan) | * |
shape_custom |
bold() | * |
shape_external |
fg(Color::Cyan) | * |
shape_externalarg |
fg(Color::Green).bold() | * |
shape_filepath |
fg(Color::Cyan) | * |
shape_flag |
fg(Color::Blue).bold() | * |
shape_float |
fg(Color::Purple).bold() | * |
shape_garbage |
fg(Color::White).on(Color::Red).bold() | * |
shape_globpattern |
fg(Color::Cyan).bold() | * |
shape_int |
fg(Color::Purple).bold() | * |
shape_internalcall |
fg(Color::Cyan).bold() | * |
shape_list |
fg(Color::Cyan).bold() | * |
shape_literal |
fg(Color::Blue) | * |
shape_nothing |
fg(Color::LightCyan) | * |
shape_operator |
fg(Color::Yellow) | * |
shape_range |
fg(Color::Yellow).bold() | * |
shape_record |
fg(Color::Cyan).bold() | * |
shape_signature |
fg(Color::Green).bold() | * |
shape_string |
fg(Color::Green) | * |
shape_string_interpolation |
fg(Color::Cyan).bold() | * |
shape_table |
fg(Color::Blue).bold() | * |
shape_variable |
fg(Color::Purple) | * |
Hier ein kleines Beispiel wie Farben auf diese Teile angewendet werden. Was nicht spezifiziert wird, erhält die Standardfarbe.
> $env.config = {
color_config: {
shape_garbage: { fg: "#FFFFFF" bg: "#FF0000" attr: b}
shape_bool: green
shape_int: { fg: "#0000ff" attr: b}
}
}
Prompt
Konfiguration und Farbgebung
Der rsh Prompt ist konfigurierbar mit diesen Umgebungsvariablen:
-
PROMPT_COMMAND
: Code der ausgeführt wird beim Aufsetzen des Prompts (Block) -
PROMPT_COMMAND_RIGHT
: Code um die rechte Seite, RIGHT prompt (Block), auf zu setzen. (Siehe auch oh-my.rsh in rsh_scripts) -
PROMPT_INDICATOR
= "〉": Der Indikator, welcher nach dem Prompt ausgegeben wird (Standardmässig das ">" Unicode Symbol) -
PROMPT_INDICATOR_VI_INSERT
= ": " -
PROMPT_INDICATOR_VI_NORMAL
= "v " -
PROMPT_MULTILINE_INDICATOR
= "::: "
Beispiel: Für einen einfachen Prompt wäre folgendes mögllich.
Hinweis PROMPT_COMMAND
benötigt einen
block
wogegen die anderen einen
string
erwarten.
> $env.PROMPT_COMMAND = { build-string (date now | date format '%m/%d/%Y %I:%M:%S%.3f') ': ' (pwd | path basename) }
Soll der standard PROMPT_INDICATOR
geändert werden,
sieht das so aus.
> $env.PROMPT_INDICATOR = "> "
Den Prompt einfärben wird duch den block
PROMPT_COMMAND
kontrolliert und individualisiert.
In
rsh_scripts repo
wurde ein recht ausgefallener geschrieben, welcher den git
Status darstellt.
LS_COLORS
Farben für den ls
Befehl
rsh wird die Umgebungsvariable LS_COLORS
auf Linu,
Mac und Windows respektieren. Diese Einstellung erlaubt es
Farben anhand ihres Dateityps zu definieren, wenn ein
ls
ausgeführt wird. Zum Beispiel können Verzeichnisse in einer
Farbe, _.md Markdown Dateien in einer anderen Farbe, _.toml
Dateien in einer dritten Farbe usw. dargestellt werden.
Es gibt verschiedenste Wege um Dateitypen ein zu färben.
Hier
findet sich eine ausführliche Liste, welche ein rudimentäres
Verständnis bietet, wie eine ls_colors Datei ein
dircolors
in eine
LS_COLORS
Umgebungsvariable überführt.
Dies
ist eine sehr gute Einführung in LS_COLORS
. Es
finden sich sicher noch viele mehr im Internet.
Freunde der vivid
Anwendung finden Informationen
hier. Die Konfiguration in config.rsh
erfolgt so:
$env.LS_COLORS = (vivid generate molokai | str trim)
Ist LS_COLORS
nicht gesetzt, wird rsh auf die
eingebaute LS_COLORS
Einstellung zurückgreifen,
welche auf den erweiterten 8-bit ANSI Farben aufbaut.
Theming
Theming kombiniert all die eben beschriebene Farbgebung. Hier
ein einfaches Beispiel, welches die Fähigkeiten des Themings
demonstriert. Dies ist nur ein Ausschnitt der
base16
Themes, welche im Internet weit verbreitet
sind.
Entscheidend damit Theming funktioniert ist, dass alle Farben
und Themen in der config.rsh
definiert werden
bevor die let config =
Zeile definiert
wird.
# Definition von einigen Farben
let base00 = "#181818" # Standard Hinergrund
let base01 = "#282828" # Heller Hintergrund (Verwendet für Status Bar, Linien Nummern und Faltmarken)
let base02 = "#383838" # Auswahl Hintergrund
let base03 = "#585858" # Kommentare, Verstecktes, Zeilen Hervorhebungen
let base04 = "#b8b8b8" # Dunkler Vordergrund (Für Status Bars)
let base05 = "#d8d8d8" # Standard Vordergrund, Einfügebarken, Trennzeichen, Operatoren
let base06 = "#e8e8e8" # Heller Vordergrund (Nicht oft verwendet)
let base07 = "#f8f8f8" # Heller Hintergrund (Nicht oft verwendet)
let base08 = "#ab4642" # Variablen, XML Tags, Markup Link Text, Markup Listen, Diff gelöscht
let base09 = "#dc9656" # Ganzzahlen, Boolean, Konstanten, XML Attribute, Markup Link Url
let base0a = "#f7ca88" # Klassen, Markup fett, Such-Text Hintergrund
let base0b = "#a1b56c" # Strings, vererbte Klasse, Markup Code, Diff eingefügt
let base0c = "#86c1b9" # Support, Reguläre Ausdrücke, Escape Zeichen, Markup Quotes
let base0d = "#7cafc2" # Funktionen, Methoden, Attribut IDs, Überschriften
let base0e = "#ba8baf" # Keywörter, Speicher, Selectoren, Markup Italic, Diff geändert
let base0f = "#a16946" # Veraltet, Öffnende/Schliessende eingebettete Sprach Tags, z.B. <?php ?>
# und nund wird das Theme mit diesen Farbdefinitionen erstellt.
let base16_theme = {
separator: $base03
leading_trailing_space_bg: $base04
header: $base0b
date: $base0e
filesize: $base0d
row_index: $base0c
bool: $base08
int: $base0b
duration: $base08
range: $base08
float: $base08
string: $base04
nothing: $base08
binary: $base08
cellpath: $base08
hints: dark_gray
# shape_garbage: { fg: $base07 bg: $base08 attr: b} # base16 white on red
# but i like the regular white on red for parse errors
shape_garbage: { fg: "#FFFFFF" bg: "#FF0000" attr: b}
shape_bool: $base0d
shape_int: { fg: $base0e attr: b}
shape_float: { fg: $base0e attr: b}
shape_range: { fg: $base0a attr: b}
shape_internalcall: { fg: $base0c attr: b}
shape_external: $base0c
shape_externalarg: { fg: $base0b attr: b}
shape_literal: $base0d
shape_operator: $base0a
shape_signature: { fg: $base0b attr: b}
shape_string: $base0b
shape_filepath: $base0d
shape_globpattern: { fg: $base0d attr: b}
shape_variable: $base0e
shape_flag: { fg: $base0d attr: b}
shape_custom: {attr: b}
}
# nun werden die regulären Konfigurations Einstellungen sowie das "color_config:" Theme angewendet.
let config = {
filesize_metric: true
table_mode: rounded # basic, compact, compact_double, light, thin, with_love, rounded, reinforced, heavy, none, other
use_ls_colors: true
color_config: $base16_theme # <-- this is the theme
use_grid_icons: true
footer_mode: always #always, never, number_of_rows, auto
animate_prompt: false
float_precision: 2
use_ansi_coloring: true
filesize_format: "b" # b, kb, kib, mb, mib, gb, gib, tb, tib, pb, pib, eb, eib, auto
edit_mode: emacs # vi
max_history_size: 10000
log_level: error
}
Wer in Sachen Theming aufs ganze gehen will, will bestimmt alle Parameter von LS_COLORS und den Prompt konfigurieren, viel Glück!