Segment
Deze pagina is vertaald door PageTurner AI (beta). Niet officieel goedgekeurd door het project. Een fout gevonden? Probleem melden →
Een segment is een onderdeel van de prompt met een specifieke context. Er zijn verschillende typen standaard beschikbaar. Als je wilt weten welke segmenten er zijn, kun je gerust dit deel overslaan en door de segments bladeren. Lees verder om te begrijpen hoe je een segment configureert.
- json
- yaml
- toml
{
"blocks": [
{
"segments": [
{
"type": "path",
"style": "powerline",
"powerline_symbol": "",
"foreground": "#ffffff",
"background": "#61AFEF",
"template": " {{ .Path }} ",
"include_folders": [
"/Users/posh/Projects"
]
}
]
}
]
}
blocks:
- segments:
- type: path
style: powerline
powerline_symbol:
foreground: "#ffffff"
background: "#61AFEF"
template: " {{ .Path }} "
include_folders:
- /Users/posh/Projects
[[blocks]]
[[blocks.segments]]
type = "path"
style = "powerline"
powerline_symbol = ""
foreground = "#ffffff"
background = "#61AFEF"
template = " {{ .Path }} "
include_folders = [ "/Users/posh/Projects" ]
Instellingen
| Name | Type | Default | Description |
|---|---|---|---|
type | string | takes the string value referencing which segment logic it needs to run (see segments for possible values) | |
style | string | plain | see Style below. Possible values:
|
powerline_symbol | string | character to use at the end of the segment when "style": "powerline" (e.g., \uE0B0) | |
leading_powerline_symbol | string | character to use at the start of the segment when "style": "powerline". By default, Oh My Posh uses an ANSI hack to invert the powerline_symbol, which provides the best alignment but may not work in all terminals. If you see black artifacts at segment starts, set this to the corresponding opening glyph (e.g., \uE0D6 when using \uE0B0, or \uE0D7 when using \uE0B1) | |
invert_powerline | boolean | false | if true swaps the foreground and background colors. Can be useful when the character you want does not exist in the perfectly mirrored variant for example - defaults to false |
leading_diamond | string | character to use at the start of the segment. Will take the background color of the segment as its foreground color | |
trailing_diamond | string | character to use at the end of the segment. Will take the background color of the segment as its foreground color | |
foreground | string | color | |
foreground_templates | []Template | color templates | |
background | string | color | |
background_templates | []Template | color templates | |
template | string | a go text/template template to render the prompt | |
templates | []Template | in some cases having a single template string is a bit cumbersome. Templates allows you to span the segment's template string multiple lines where every template is evaluated and depending on what you aim to achieve, there are two possible outcomes based on templates_logic | |
templates_logic | string | join |
|
options | []Option | see [Options][options] below | |
interactive | boolean | false | when true, the segment text is not escaped to allow the use of interactive prompt escape sequences in Bash/Zsh - defaults to false |
alias | string | for use with cross segment template properties | |
min_width | int | 0 | if the terminal width is smaller than this value, the segment will be hidden. For your terminal width, see oh-my-posh get width. Defaults to 0 (disable) |
max_width | int | 0 | if the terminal width exceeds this value, the segment will be hidden. For your terminal width, see oh-my-posh get width. Defaults to 0 (disable) |
cache | Cache | how to cache the segment to avoid fetching information too much, see below | |
include_folders | []string | define which folders to include to enable the segment, see below | |
exclude_folders | []string | define which folders to exclude to disable the segment, see below | |
force | boolean | false | when true, the segment is always rendered, even when it's only whitespace - defaults to false |
timeout | int | 0 | timeout in milliseconds for segment execution. If the segment takes longer than this value to complete, it will be disabled. Defaults to 0 (no timeout) |
index | int | used to override a specific segment (1-based) |
In Bash/Zsh kan de lengteberekening van de prompt onjuist zijn wanneer de eigenschap interactive op true staat voor een segment,
door mogelijke string-expansies (bijv. \w in Bash en %d in Zsh die beide uitbreiden naar de huidige werkmap).
Hierdoor wordt een rechts uitgelijnd blok niet correct gepositioneerd.
Helaas kan Oh My Posh de uiteindelijke promptlengte niet bepalen omdat de string-expansie door je shell wordt gedaan, dus gebruik dit op eigen risico.
Stijl
Stijl bepaalt hoe een prompt wordt weergegeven. Door naar de meeste promptthema's te kijken, hebben we 4 typen geïdentificeerd. Elk hiervan vereist een andere configuratie, en afhankelijk van het gewenste uiterlijk moet je mogelijk alle typen begrijpen/gebruiken.
Powerline
Dit was voor ons het startpunt. Maakt gebruik van één symbool (powerline_symbol) om segmenten te scheiden. Het neemt de
achtergrondkleur van het vorige segment (of transparant als die er niet is) en de voorgrondkleur van het huidige segment (of transparant
bij het laatste segment). Veronderstelt dat segmenten een gekleurde achtergrond hebben, anders heeft dit weinig nut.
Wanneer je zwarte driehoeken (of andere karakters afhankelijk van het gebruikte powerline_symbol) aan het begin van een segment ziet,
kun je leading_powerline_symbol instellen op de "openende" versie van het powerline_symbol.
Dit gebruikt niet de omgekeerde ANSI-truc die we hebben geïmplementeerd, omdat dit niet in elke terminal wordt ondersteund. Mogelijk moet je
je lettertype-instellingen aanpassen voor een optimale uitlijning.
De powerline-stijl heeft problemen in Git Bash door onjuiste berekening van de iconenbreedte, waardoor
de prompt kapot gaat bij het typen van lange commando's of het doorzoeken van de geschiedenis.
De volgende promptconfiguratie heeft hetzelfde probleem:
export PS1=" "
Eenvoudig
Simpel. Gekleurde tekst op een transparante achtergrond. Zorg ervoor dat je foreground instelt voor optimaal resultaat.
Diamant
Hoewel Powerline goed werkt met één symbool, wil je soms een segment met verschillende begin- en eindsymbolen.
Net als een diamant: < my segment text >. Het verschil met de eenvoudige stijl is dat de diamantsymbolen de
achtergrondkleur van het segment als hun voorgrondkleur nemen.
Accordeon
Hetzelfde als Powerline, behalve dat het wordt weergegeven zelfs wanneer uitgeschakeld, maar zonder tekst. Zo lijkt het alsof het segment niet is uitgevouwen, net als een accordeon.
Opties
Het options-attribuut stelt je in staat om het gedrag en uiterlijk van een segment aan te passen voorbij de standaardinstellingen.
Deze opties kunnen variëren van feature flags en configuratie tot extra stijldetails die alleen gelden voor het betreffende segment.
Raadpleeg de bijbehorende documentatiesectie voor beschikbare opties per segment, waar elke optie gedetailleerd wordt uitgelegd.
Cache
De cache-eigenschap stelt je in staat te bepalen hoe vaak een segment wordt ververst. Dit is handig wanneer een segment traag is om te genereren of wanneer je te frequente informatieopvrachten wilt voorkomen. De cache-eigenschap is een object met de volgende eigenschappen:
| Name | Type | Description |
|---|---|---|
duration | string | the duration for which the segment will be cached. The duration is a string in the format 1h2m3s. The duration is parsed using the time.ParseDuration function from the Go standard library. To disable the cache, use none |
strategy | string | the strategy to use to identify if we should show the segment's cache value. See below for more information on strategy |
- json
- yaml
- toml
{
"cache": {
"duration": "1h",
"strategy": "folder"
}
}
cache:
duration: 1h
strategy: folder
[cache]
duration = "1h"
strategy = "folder"
Strategie
Sessie
De sessiestrategie zal het segment cachen op basis van de huidige shellsessie. Gebruik dit voor segmenten die je continu wilt tonen maar niet te vaak wilt vernieuwen.
Map
De mapstrategie cached het segment op basis van de huidige werkmap. Er wordt een aparte waarde voor elke map gecached. Dit is nuttig bij bijvoorbeeld taal- of versiebeheersegmenten. De versiebeheersegmenten begrijpen in dit geval de repositorycontext, dus dezelfde cachewaarde wordt gebruikt binnen een git-repository, ongeacht de map waarin je je bevindt.
Apparaat
De apparaatstrategie cached het segment op basis van het huidige apparaat. Dit betekent dat dezelfde cachewaarde wordt gebruikt, ongeacht de map of shellsessie. Gebruik dit voor segmenten die traag zijn om te genereren maar niet vaak veranderen, zoals systeeminformatiesegmenten.
Mappen In- / Uitsluiten
Soms wil je dat een segment alleen wordt weergegeven in bepaalde mappen. Als include_folders is opgegeven,
wordt het segment alleen getoond wanneer je je in één van die locaties bevindt. Als exclude_folders is opgegeven,
wordt het segment niet getoond wanneer je je in een uitgesloten locatie bevindt.
- json
- yaml
- toml
{
"include_folders": [
"/Users/posh/Projects"
]
}
include_folders:
- /Users/posh/Projects
include_folders = [ "/Users/posh/Projects" ]
- json
- yaml
- toml
{
"exclude_folders": [
"/Users/posh/Projects"
]
}
exclude_folders:
- /Users/posh/Projects
exclude_folders = [ "/Users/posh/Projects" ]
De strings die in deze eigenschappen zijn opgegeven, worden geëvalueerd als reguliere expressies. Je
kunt elke geldige regex-construct gebruiken, maar de expressie moet de VOLLEDIGE mapnaam matchen.
Het volgende voorbeeld zal /Users/posh/Projects/Foo matchen maar niet /home/Users/posh/Projects/Foo.
- json
- yaml
- toml
{
"include_folders": [
"/Users/posh/Projects/.*"
]
}
include_folders:
- /Users/posh/Projects/.*
include_folders = [ "/Users/posh/Projects/.*" ]
Je kunt deze eigenschappen ook combineren:
- json
- yaml
- toml
{
"include_folders": [
"/Users/posh/Projects/.*"
],
"exclude_folders": [
"/Users/posh/Projects/secret-project.*"
]
}
include_folders:
- /Users/posh/Projects/.*
exclude_folders:
- /Users/posh/Projects/secret-project.*
include_folders = [ "/Users/posh/Projects/.*" ]
exclude_folders = [ "/Users/posh/Projects/secret-project.*" ]
- Oh My Posh accepteert zowel
/als\als padscheidingstekens en zal matchen ongeacht welk teken door het huidige besturingssysteem wordt gebruikt. - Omdat de strings als reguliere expressies worden geëvalueerd, moet je voor een backslash (
\) in een Windows mapnaam dubbele backslashes gebruiken. In JSON-formaat moet je dit escapen als\\\\. - Het teken
~aan het begin van een opgegeven map zal matchen met de thuismap van de gebruiker. - De vergelijking is hoofdletterongevoelig op Windows en macOS, maar hoofdlettergevoelig op andere besturingssystemen.
Dit betekent dat voor gebruiker Bill, met account Bill op Windows en bill op Linux, ~/Foo kan matchen
met C:\Users\Bill\Foo of C:\Users\Bill\foo op Windows, maar alleen met /home/bill/Foo op Linux.
Index
De index van het segment in de configuratie. Dit wordt gebruikt om een specifiek segment te override in een basisconfiguratie.
Dit is een 1-based index, dus het eerste segment heeft index 1.
Segmenten verbergen
Voorwaardelijk
Om een heel segment inclusief voor- en nasymbool te verbergen op basis van een sjabloon, moet het sjabloon
evalueeren naar een lege string. Dit kan bereikt worden met voorwaardelijke statements (if). Het onderstaande voorbeeld
toont een diamond-segment alleen als de omgevingsvariabele POSH_ENV niet leeg is.
Alleen spaties worden uitgesloten, wat betekent dat je nog steeds regeleinden en tabs kunt gebruiken als je dat wilt.
- json
- yaml
- toml
{
"type": "text",
"style": "diamond",
"leading_diamond": " ",
"trailing_diamond": "",
"foreground": "#ffffff",
"background": "#d53c14",
"template": "{{ if .Env.POSH_ENV }} {{ .Env.POSH_ENV }} {{ end }}"
}
type: text
style: diamond
leading_diamond: " "
trailing_diamond:
foreground: "#ffffff"
background: "#d53c14"
template: "{{ if .Env.POSH_ENV }} {{ .Env.POSH_ENV }} {{ end }}"
type = "text"
style = "diamond"
leading_diamond = " "
trailing_diamond = ""
foreground = "#ffffff"
background = "#d53c14"
template = "{{ if .Env.POSH_ENV }} {{ .Env.POSH_ENV }} {{ end }}"
Dynamisch
Soms kom je in een situatie waarin je een specifiek segment niet wilt zien, maar de use-case rechtvaardigt niet
het gebruik van een voorwaardelijke template. In dat geval kun je het commando oh-my-posh toggle <type> gebruiken om het
segment aan of uit te schakelen. Dit werkt op basis van per shell-sessie, wat betekent dat als je een segment uitschakelt in één shell-instantie,
het niet wordt uitgeschakeld in de andere instanties.
Gebruik oh-my-posh get toggles om de huidige instellingen voor uitgeschakelde segmenten te bekijken.