mirror of
https://github.com/JanDeDobbeleer/oh-my-posh.git
synced 2024-12-27 03:49:40 -08:00
feat(transient): add Filler
This commit is contained in:
parent
d1265c5ff3
commit
cdc560c7bd
|
@ -130,8 +130,8 @@ func (e *Engine) isWarp() bool {
|
|||
return e.Env.Getenv("TERM_PROGRAM") == "WarpTerminal"
|
||||
}
|
||||
|
||||
func (e *Engine) shouldFill(block *Block, length int) (string, bool) {
|
||||
if len(block.Filler) == 0 {
|
||||
func (e *Engine) shouldFill(filler string, length int) (string, bool) {
|
||||
if len(filler) == 0 {
|
||||
return "", false
|
||||
}
|
||||
terminalWidth, err := e.Env.TerminalWidth()
|
||||
|
@ -142,7 +142,7 @@ func (e *Engine) shouldFill(block *Block, length int) (string, bool) {
|
|||
if padLength <= 0 {
|
||||
return "", false
|
||||
}
|
||||
e.Writer.Write("", "", block.Filler)
|
||||
e.Writer.Write("", "", filler)
|
||||
filler, lenFiller := e.Writer.String()
|
||||
if lenFiller == 0 {
|
||||
return "", false
|
||||
|
@ -228,14 +228,14 @@ func (e *Engine) renderBlock(block *Block, cancelNewline bool) {
|
|||
e.newline()
|
||||
case Hide:
|
||||
// make sure to fill if needed
|
||||
if padText, OK := e.shouldFill(block, 0); OK {
|
||||
if padText, OK := e.shouldFill(block.Filler, 0); OK {
|
||||
e.write(padText)
|
||||
}
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
if padText, OK := e.shouldFill(block, length); OK {
|
||||
if padText, OK := e.shouldFill(block.Filler, length); OK {
|
||||
// in this case we can print plain
|
||||
e.write(padText)
|
||||
e.write(text)
|
||||
|
@ -462,10 +462,15 @@ func (e *Engine) PrintExtraPrompt(promptType ExtraPromptType) string {
|
|||
background := prompt.BackgroundTemplates.FirstMatch(nil, e.Env, prompt.Background)
|
||||
e.Writer.SetColors(background, foreground)
|
||||
e.Writer.Write(background, foreground, promptText)
|
||||
str, length := e.Writer.String()
|
||||
if promptType == Transient {
|
||||
if padText, OK := e.shouldFill(prompt.Filler, length); OK {
|
||||
str += padText
|
||||
}
|
||||
}
|
||||
switch e.Env.Shell() {
|
||||
case shell.ZSH:
|
||||
// escape double quotes contained in the prompt
|
||||
str, _ := e.Writer.String()
|
||||
if promptType == Transient {
|
||||
prompt := fmt.Sprintf("PS1=\"%s\"", strings.ReplaceAll(str, "\"", "\"\""))
|
||||
// empty RPROMPT
|
||||
|
@ -475,13 +480,11 @@ func (e *Engine) PrintExtraPrompt(promptType ExtraPromptType) string {
|
|||
return str
|
||||
case shell.PWSH, shell.PWSH5:
|
||||
// Return the string and empty our buffer
|
||||
str, _ := e.Writer.String()
|
||||
// clear the line afterwards to prevent text from being written on the same line
|
||||
// see https://github.com/JanDeDobbeleer/oh-my-posh/issues/3628
|
||||
return str + e.Writer.ClearAfter()
|
||||
case shell.CMD, shell.BASH, shell.FISH, shell.NU, shell.GENERIC:
|
||||
// Return the string and empty our buffer
|
||||
str, _ := e.Writer.String()
|
||||
return str
|
||||
}
|
||||
return ""
|
||||
|
|
|
@ -39,6 +39,7 @@ type Segment struct {
|
|||
Alias string `json:"alias,omitempty"`
|
||||
MaxWidth int `json:"max_width,omitempty"`
|
||||
MinWidth int `json:"min_width,omitempty"`
|
||||
Filler string `json:"filler,omitempty"`
|
||||
|
||||
Enabled bool `json:"-"`
|
||||
|
||||
|
|
|
@ -3168,7 +3168,14 @@
|
|||
"transient_prompt": {
|
||||
"$ref": "#/definitions/extra_prompt",
|
||||
"title": "Transient Prompt Setting",
|
||||
"description": "https://ohmyposh.dev/docs/configuration/transient"
|
||||
"description": "https://ohmyposh.dev/docs/configuration/transient",
|
||||
"properties": {
|
||||
"filler": {
|
||||
"type": "string",
|
||||
"title": "Filler",
|
||||
"description": "Right aligned filler text, will span the remaining width"
|
||||
}
|
||||
}
|
||||
},
|
||||
"valid_line": {
|
||||
"$ref": "#/definitions/extra_prompt",
|
||||
|
|
|
@ -45,12 +45,13 @@ You need to extend or create a custom theme with your transient prompt. For exam
|
|||
## Properties
|
||||
|
||||
| Name | Type | Description |
|
||||
| ---------------------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------ |
|
||||
| ---------------------- | -------- | ---------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| `foreground` | `string` | [color][colors] |
|
||||
| `foreground_templates` | `array` | [color templates][color-templates] |
|
||||
| `background` | `string` | [color][colors] |
|
||||
| `background_templates` | `array` | [color templates][color-templates] |
|
||||
| `template` | `string` | a go [text/template][go-text-template] template extended with [sprig][sprig] utilizing the properties below - defaults to `{{ .Shell }}> ` |
|
||||
| `filler` | `string` | when you want to create a line with a repeated set of characters spanning the width of the terminal. Will be added _after_ the `template` text |
|
||||
|
||||
## Enable the feature
|
||||
|
||||
|
|
Loading…
Reference in a new issue