Overzicht
Waarom zouden we Z-Shell Prompt aanpassen?
De standaard Z-Shell prompt is bevat gebruikersnaam, host-naam, en de huidige directory.
Stanraard Z-Shell prompt onder macOS
Voor mijn toepassingen is deze informatie niet echt zinvol.
Ik weet al dat ik ben ingelogd als mijzelf (er is maar 1 gebruikersaccount), en ik weet ook de host-naam van mijn Mac (welke ik overigens zelden ergens voor nodig heb).
In plaats daarvan zie ik liever een prompt die duidelijk verschilt van standaard tekst, zodat ik sneller kan vinden waar ik het commando heb uitgevoerd.
Tip: Er is wel een valide argument natuurlijk voor gebruikersnaam en host-naam in de prompt. Dit is met name zinvol als je meerdere Terminal vensters open hebt staan welke elk op een andere machine draaien of waar je bent ingelogd met een andere gebruikersnaam. Echter, ik gebruik meestal SSH om op een andere machine te werken, en betreffende verbinding heeft zijn eigen prompt definitie die dit al weergeeft.
Ad Blocking Gedetecteerd Vriendelijk verzoek om te overwegen Ad Blocking uit te zetten voor onze website.
We zijn afhankelijk van inkomen uit Advertenties om de website te kunnen draaien.
Je kunt ons ook op andere manieren ondersteunen (zie Ondersteun ons links bovenin).
Tijdelijk vs Permanent aanpassen van de Z-Shell prompt
Voor we in detail gaan, is het goed te weten dat we de prompt tijdelijk of permanent kunnen aanpassen.
Een tijdelijke prompt is handig voor testen en voor specifieke taken.
Echter een permanente prompt is natuurlijk geschikt voor het formaat waar de standaard de voorkeur aan geven.
Om te zien hoe dit werkt, wat basis principes hoe Z-Shell hier mee om gaat.
Tijdelijke de Z-Shell Prompt wijzigen
Het “formaat” van onze Z-Shell prompt staat opgeslagen in de environment variabele PROMPT.
N.B.: zsh gebruikt de environment variabele PS1 voor de prompt definitie. De environment variabele PROMPT, wat we in dit artikel gebruiken, is een synoniem hiervoor. Het kan dus gebeuren dat andere artikelen naar PS1 verwijzen en weer andere artikelen PROMPT hanteren. Omdat ze beide hetzelfde zijn en ik persoonlijk de naam PROMPT meer voor de hand liggend vindt, gebruik ik dus de environment variabele PROMPT – ook nog makkelijker te onthouden ook nog.
We kunnen (tijdelijk) de prompt op deze manier aanpassen (in Terminal natuurlijk):
Type bovenstaande tekst in en druk op Enter. Je ziet het effect meteen.
Echter … wanneer je Terminal afsluit en weer opent, dan zul je zien dat de prompt wee terug staat op de standaard prompt. Jouw definitie is dus weg.
Zoals gezegd: ideaal voor testen natuurlijk – als het goed fout gaat, gewoon Terminal opnieuw starten en er is geen vuiltje aan de lucht.
Permanent de Z-Shell Prompt aanpassen
De Z-Shell, bij het opstarten, kijkt altijd naar het bestand .zshrc in jouw home directory (~) – welke standaard niet bestaat.
N.B.: Omdat de bestandsnaam met een punt begint, is dit bestand een verborgen bestand en dus niet zichtbaar in b.v. Finder.
In dit bestand kunnen we het commando opslaan om bij het opstarten de prompt te veranderen.
De volgende keer dat je dan Terminal opent, zal Z-Shell dit bestand openen en uitvoeren wat hier instaat – dus inclusief het aanpassen van de prompt.
N.B.: Dit bestand kun je bewerken met een platte tekst editor zoals bijvoorbeeld nano (in Terminal), TextEdit (zit standaard bij macOS) of een applicatie zoals BBEdit (mijn favoriete tekst editor – waarvan een gratis versie bestaat, en een commerciële versie).
Terug naar de standaard Z-Shell Prompt
Voor het geval er van alles fout ging, of je wilt terug naar de standaard prompt, om wat voor reden dan ook, dan kun je dat bereiken door gewoon het bestand ~/.zshrc te verwijderen en Terminal opnieuw op te starten.
Waarschuwing! Voor je dit bestand verwijderd, controleer wel even of er misschien meer in staat dan alleen maar jouw prompt instellinge. Mocht dit het geval zijn, dan verwijderen we natuurlijk alleen maar de PROMPT regel.
Definiëren van de Z-Shell prompt
Nu dat we wat van de achtergrond weten kunnen we aan de slag …
Hieronder een lijst met opties die we in de prompt kunnen gebruiken.
Als eerste dus in de gaten houden dat we de PROMPT definitie tussen aanhalingstekens zetten (in dit geval enkelvoudige aanhalingstekens).
Tussen de aanhalingstekens kunnen we speciale codes plaatsen, welke dynamische informatie weergeven of formattering aanpassen zoals kleur, dik, schuin, etc.
Maar we kunnen hier ook gewone tekst inzetten natuurlijk.
N.B.: “%” en “)” worden gezien als speciale karakters, dus als je die als tekst wilt weergeven dan zul je ze moeten “escapen”. Dit doen we door een “%” voor deze tekens te zetten. Dus als je een “%” in de prompt wilt weergeven dan voer je dat in als “%%“. Hetzelfde geldt voor “)” wat dan “%)” wordt.
N.B.: Ik heb de lijst met opties beperkt tot ganbare opties en opties die werken onder macOS – er zijn echter nog veel meer mogelijkheden.
Zie hiervoor de zsh handleiding m.b.t. de PROMPT.
Dynamische Prompt Elementen
Dit zijn elementen in de prompt die kunnen veranderen, op basis van wat er zich afspeelt. Bijvoorbeeld de tijd of de huidige directory.
Z-Shell heeft een aardige selectie.
Dynamische Elementen
Login Informatie |
%l |
Het TTY device waarmee je verbinding hebt gemaakt, met “/dev/” of “/dev/tty” verwijderd |
Merk op: Kleine letter “L” |
%M |
Volledige hostnaam |
|
%m |
Hostnaam tot de eerste punt |
Een nummer na ‘%m’ geeft aan hoeveel elementen van de naam zichtbaar moeten zijn |
%n |
Grbuikersnaam |
De gebruiker die nu is ingelogd |
%y |
Zelfde als “%l” maar dan zonder verwijderen van “/dev” of “/dev/tty” |
|
Shell State Informatie |
%? |
Geeft de return code van het laatste commando weer |
Bij succes is dat over het algemeen “0” |
%d
|
Huidige directory
(alternatief: %/ ) |
Een nummer na “%” geeft aan hoe diep het pad wat weergegeven wordt mag zijn (van achteren naar voren). Een negatief nummer begint van vooraf aan (pad) |
%~ |
Huidige directory, gebruik “~” voor de home directory |
Hetzelfde als %d, echter zal de home directory als “~” worden weergegeven |
%h |
History event regel nummer (alternatief: %! ) |
|
%C |
Huidige Directory |
Zie ook %d en %~. Alternatieven zijn %c en %. |
Date and Time Informatie |
%D |
Huidige datum in JJ-MM-DD formaat |
|
%T |
Huidige tijd in 24-uur formaat (UU:MM) |
|
%t |
Huidige tijd in 12-hour formaat (UU:MM) met AM/PM |
Alternatief: %@ |
%* |
Huidige tijd in 24-uur formaat met seconden |
|
%w |
Huidige datum in dag-DD formaat |
|
%W |
Huidige datum in MM/DD/JJ formaat |
|
%D{string} |
Huidige datum en tijd gebaseerd op de formaat string {string} |
Zie strftime formaat opties.
Voorbeeld: PROMPT=’%D{%a}’
Meest gebruikt:
%a = Dag van de week afkorting
%A = Volledige dag van de week
%w = dag van de week (0-6)
%d = dag van de maand (01-31)
%b = Maand naam afgekort
%B = Volledige maand naam
%m = Maand (00-12)
%y = Jaar (00-99)
%Y = Jaar (4 cijfers)
%H = Uur (00-23)
%k = Uur (0-23)
%I = Uur (01-12)
%l = Uur (1-12)
%M = Minuten (00-59)
%S = Seconden (00-59)
%p = AM of PM
%P = am of pm
|
Visuele Elementen
Visuele elementen worden gebruikt om het tekst formaat aan te passen, zoals kleuren, dik gedrukt, schuin, etc.
For example this make the text red:
Visual Elements
Start |
Stop |
Effect |
%B |
%b |
Dik gedrukt |
%U |
%u |
Onderstreeps |
%S |
%s |
Gemarkeerd |
%F{kleur} |
%f |
Verander voorgrond kleur (tekst) |
%K{kleur} |
%k |
Verander achtergrond kleur |
Kleur: Z-Shell kent standaard deze kleur namen: black, red, green, yellow, blue, magenta, cyan and white.
Het kan echter prima 256 kleuren (0-255) aan – Zie ook het kleuren schema hieronder of zie ook het uitgebreide XTerm Kleuren artikel.
Tekst rechts uitlijnen
Een van de visuele opties die ik miste was de optie om tekst uit te lijnen, of beter gezegd: de optie om tekst helemaal rechts te zetten.
De reden waarom ik die niet kon vinden is omdat dit niet gedefinieerd wordt in PROMPT, maar in de environment variabele RPROMPT.
Om een voorbeeld uit te proberen; hier een voorbeeld hoe je een klok helemaal rechts kunt zetten (ook dit kun je toevoegen aan het bestand .zshrc, in jouw home directory (~)):
Ad Blocking Gedetecteerd Vriendelijk verzoek om te overwegen Ad Blocking uit te zetten voor onze website.
We zijn afhankelijk van inkomen uit Advertenties om de website te kunnen draaien.
Je kunt ons ook op andere manieren ondersteunen (zie Ondersteun ons links bovenin).
Kleuren Tabel
Hier een klein tabelletje met de 16 basis kleuren. Je hebt er waarschijnlijk niet meer nodig, maar in het artikel XTerm Kleuren Lijsten kun je nog meer kleuren vinden.
XTerm 16 Kleuren Set
000
#000000 |
001
#800000 |
002
#008000 |
003
#808000 |
004
#000080 |
005
#800080 |
006
#008080 |
007
#c0c0c0 |
008
#808080 |
009
#ff0000 |
010
#00ff00 |
011
#ffff00 |
012
#0000ff |
013
#ff00ff |
014
#00ffff |
015
#ffffff |
Voorbeelden
Dus als we een prompt definieren, vergeet dan dus niet dat we 1 of meer codes, en mogelijke tekst, combineren.
Door de onderstaande voorbeelden krijg je misschien een beter idee wat ik hiermee bedoel.
Vergeet niet dat bij deze voorbeelden de prompt dus maar tijdelijk wordt veranderd. Als er iets maf gebeurt dus geen paniek: Gewoon Terminal sluiten en opnieuw opstarten.
Als je uiteindelijk een PROMPT en/of RPROMPT hebt gedefinieert die je bevalt dan kun je ze toevoegen aan het .zshrc bestand.
Huidige Tijd en Directory (kort)(
Alternatief:
Z-Shell voorbeeld – Huidige tijd en directory
We kunnen ook de directory laten weergeven als een tilde ( ~ ) door deze code te gebruiken:
Z-Shell example – Current time and directory (home dir as tilde)
Huidige Directory links, en klok rechts
PROMPT='%1~ >'
RPROMPT='%F{015}%T%f'
Z-Shell voorbeeld – Huidige tijd rechts, en de huidige directory links
N.B.: in plaats van het nummer “015” (wit in de kleuren tabel), kun je ook het woord “white” gebruiken. Echter onder macOS levert dit meer een grijstint i.p.v. wit.
Tijd en Huidige Directory met meerdere kleuren
PROMPT='%B%1~%b %F{011}>%f'
RPROMPT='%F{015}%T%f'
Uiteraard kun je spelen met de kleuren naar wens.
Persoonlijk zie ik graag de prompt flink afwijken van de normale tekst. Vooral bij lange tekst output kun je dan makkelijker het begin terug vinden.
Z-Shell voorbeeld – Met meer kleuren
Ad Blocking Gedetecteerd Vriendelijk verzoek om te overwegen Ad Blocking uit te zetten voor onze website.
We zijn afhankelijk van inkomen uit Advertenties om de website te kunnen draaien.
Je kunt ons ook op andere manieren ondersteunen (zie Ondersteun ons links bovenin).
Bonus Tips
Twee tips die de Z-Shell nog een klein beetje kan veranderen …
Verander de Cursor in Z-Shell
Hier wat voorbeelden hoe men de cursor in Z-Shell kan aanpassen. Denk daarbij aan de vorm (blok, lijn) en of het wel of niet knippert.
1 2 3 4 5 6 7 8 9 10 11
| # Cursor is een Blok:
echo -e -n "\x1b[\x31 q" # Knipperen
echo -e -n "\x1b[\x32 q" # Niet knipperen
# Cursor is een liggend streepje
echo -e -n "\x1b[\x33 q" # Knipperen
echo -e -n "\x1b[\x34 q" # Niet knipperen
# Cursor is een verticaal streepje
echo -e -n "\x1b[\x35 q" # Knipperen
echo -e -n "\x1b[\x36 q" # Niet knipperen |
Dus om een knipperend blok als cursor te krijgen, kopieer het onderstaande commando, plak het in Terminal en druk op Enter.
echo -e -n "\x1b[\x31 q" # Blinking
Dit mag ook zonder het commentaar aan het einde (het wordt toch genegeerd):
Om dit permanent te maken, kun je ook dit aan het .zshrc bestand toevoegen.
Jouw .zshrc bestand zou er dan bijvoorbeeld zo uit kunnen zien:
echo -e -n "\x1b[\x31 q"
PROMPT='%B%1~%b %F{009}$%f '
RPROMPT='%F{015}%T%f'
Dit maakt de cursor een blok die knippert, geeft de huidige directory links weer, en de klok rechts.
Onderdrukken van het Welkomstbericht
Als je Terminal opent, dan krijg je een welkom/status bericht, zoiets als dit:
Last login: Mon May 10 17:41:21 on ttys000
You have new mail.
hans@MAC_PRO_1 ~ %
Deze melding is vaak niet erg zinvol, en je kunt het eventueel uitzetten door een bestand aan te maken met de naam .hushlogin in jouw home directory (~).
Dit gaat het eenvoudigste met onderstaand commando (maakt een leeg bestand aan – zie ook Hoe maak je lege dummy bestanden aan):
De volgende keer dat je Terminal opent, zul je de melding niet meer zien.
Om dit ongedaan te maken verwijder je het bestand .hushlogin gewoon weer.
Tip: De handleiding van zsh laat nog meer (en complexere) zsh trucs zien (man zsh).
Reacties
Er zijn nog geen reacties geplaatst.
Je kunt jouw eigen opmerkingen plaatsen m.b.v. dit formulier, of een reactie op een bestaande opmerking plaatsen door op de "Beantwoorden" knop te klikken.