feat: remove functions to enable prompt features

This commit is contained in:
Jan De Dobbeleer 2022-08-05 07:16:16 +02:00 committed by Jan De Dobbeleer
parent 4d1f8f4ea0
commit 35efd3cf00
9 changed files with 49 additions and 171 deletions

View file

@ -2,6 +2,7 @@ package cli
import (
"fmt"
"oh-my-posh/engine"
"oh-my-posh/environment"
"oh-my-posh/shell"
@ -56,6 +57,10 @@ func runInit(shellName string) {
}
env.Init()
defer env.Close()
cfg := engine.LoadConfig(env)
shell.Transient = cfg.TransientPrompt != nil
shell.ErrorLine = cfg.ErrorLine != nil || cfg.ValidLine != nil
shell.Tooltips = len(cfg.Tooltips) > 0
if print {
init := shell.PrintInit(env)
fmt.Print(init)

View file

@ -123,11 +123,6 @@ func loadConfig(env environment.Environment) *Config {
err = config.BindStruct("", &cfg)
cfg.exitWithError(err)
// initialize default values
if cfg.TransientPrompt == nil {
cfg.TransientPrompt = &Segment{}
}
return &cfg
}

View file

@ -3,6 +3,7 @@ package shell
import (
_ "embed"
"path/filepath"
"strconv"
"fmt"
"oh-my-posh/environment"
@ -33,6 +34,12 @@ const (
noExe = "echo \"Unable to find Oh My Posh executable\""
)
var (
Transient bool
ErrorLine bool
Tooltips bool
)
func getExecutablePath(env environment.Environment) (string, error) {
executable, err := os.Executable()
if err != nil {
@ -102,6 +109,9 @@ func PrintInit(env environment.Environment) string {
func getShellInitScript(executable, configFile, script string) string {
script = strings.ReplaceAll(script, "::OMP::", executable)
script = strings.ReplaceAll(script, "::CONFIG::", configFile)
script = strings.ReplaceAll(script, "::TRANSIENT::", strconv.FormatBool(Transient))
script = strings.ReplaceAll(script, "::ERROR_LINE::", strconv.FormatBool(ErrorLine))
script = strings.ReplaceAll(script, "::TOOLTIPS::", strconv.FormatBool(Tooltips))
return script
}

View file

@ -64,7 +64,7 @@ function _render_tooltip
commandline --function repaint
end
function enable_poshtooltips
if test "::TOOLTIPS::" = "true"
bind \x20 _render_tooltip
end
@ -76,6 +76,12 @@ function _render_transient
commandline --function execute
end
function enable_poshtransientprompt
if test "::TRANSIENT::" = "true"
bind \r _render_transient
end
# legacy functions
function enable_poshtooltips
end
function enable_poshtransientprompt
end

View file

@ -100,7 +100,7 @@ New-Module -Name "oh-my-posh-core" -ScriptBlock {
}
}
function Enable-PoshTooltips {
if ("::TOOLTIPS::" -eq "true") {
Set-PSReadLineKeyHandler -Key SpaceBar -ScriptBlock {
[Microsoft.PowerShell.PSConsoleReadLine]::Insert(' ')
$position = $host.UI.RawUI.CursorPosition
@ -116,7 +116,7 @@ New-Module -Name "oh-my-posh-core" -ScriptBlock {
}
}
function Enable-PoshTransientPrompt {
if ("::TRANSIENT::" -eq "true") {
Set-PSReadLineKeyHandler -Key Enter -ScriptBlock {
$previousOutputEncoding = [Console]::OutputEncoding
try {
@ -145,7 +145,7 @@ New-Module -Name "oh-my-posh-core" -ScriptBlock {
}
}
function Enable-PoshLineError {
if ("::ERROR_LINE::" -eq "true") {
$validLine = @(Start-Utf8Process $script:OMPExecutable @("print", "valid", "--config=$env:POSH_THEME", "--shell=$script:ShellName")) -join "`n"
$errorLine = @(Start-Utf8Process $script:OMPExecutable @("print", "error", "--config=$env:POSH_THEME", "--shell=$script:ShellName")) -join "`n"
Set-PSReadLineOption -PromptText $validLine, $errorLine
@ -344,6 +344,11 @@ Example:
# set secondary prompt
Set-PSReadLineOption -ContinuationPrompt (@(Start-Utf8Process $script:OMPExecutable @("print", "secondary", "--config=$env:POSH_THEME", "--shell=$script:ShellName")) -join "`n")
# legacy functions
function Enable-PoshTooltips {}
function Enable-PoshTransientPrompt {}
function Enable-PoshLineError {}
Export-ModuleMember -Function @(
"Set-PoshContext"
"Enable-PoshTooltips"

View file

@ -60,9 +60,9 @@ function self-insert() {
zle .self-insert
}
function enable_poshtooltips() {
if [[ "::TOOLTIPS::" = "true" ]]; then
zle -N self-insert
}
fi
_posh-zle-line-init() {
[[ $CONTEXT == start ]] || return 0
@ -91,6 +91,10 @@ _posh-zle-line-init() {
return ret
}
function enable_poshtransientprompt() {
if [[ "::TRANSIENT::" = "true" ]]; then
zle -N zle-line-init _posh-zle-line-init
}
fi
# legacy functions for backwards compatibility
function enable_poshtooltips() {}
function enable_poshtransientprompt() {}

View file

@ -20,7 +20,8 @@ There are two config settings you need to tweak:
- `error_line`: displays when the line is faulty
You can use go [text/template][go-text-template] templates extended with [sprig][sprig] to enrich the text.
Environment variables are available, just like the [`console_title_template`][console-title] functionality.
All [template][templates] functionality is available, even reusing [cross segment template properties][cstp] from
the previous primary prompt run.
## Configuration
@ -49,35 +50,7 @@ The configuration has the following properties:
- background: `string` [color][colors]
- foreground: `string` [color][colors]
- template: `string` - a go [text/template][go-text-template] template extended with [sprig][sprig] utilizing the
properties below - defaults to ` `
## Template ([info][templates])
- `.Root`: `boolean` - is the current user root/admin or not
- `.PWD`: `string` - the current working directory
- `.Folder`: `string` - the current working folder
- `.Shell`: `string` - the current shell name
- `.UserName`: `string` - the current user name
- `.HostName`: `string` - the host name
- `.Env.VarName`: `string` - Any environment variable where `VarName` is the environment variable name
## Enable the feature
Invoke Oh My Posh in your `$PROFILE` and add the following line below.
```powershell
oh-my-posh init pwsh --config $env:POSH_THEMES_PATH/jandedobbeleer.omp.json | Invoke-Expression
// highlight-start
Enable-PoshLineError
// highlight-end
```
:::caution
If you import **PSReadLine** separately, make sure to import it before the `Enable-PoshLineError` command.
:::
Restart your shell or reload your `$PROFILE` using `. $PROFILE` for the changes to take effect.
- template: `string` - a fully featured [template][templates] - defaults to ` `
[colors]: /docs/configuration/colors
[go-text-template]: https://golang.org/pkg/text/template/
@ -85,3 +58,4 @@ Restart your shell or reload your `$PROFILE` using `. $PROFILE` for the changes
[console-title]: /docs/configuration/title#console-title-template
[psreadline]: https://github.com/PowerShell/PSReadLine
[templates]: /docs/configuration/templates
[cstp]: /docs/configuration/templates#cross-segment-template-properties

View file

@ -53,58 +53,4 @@ This configuration will render a right-aligned git segment when you type `git` o
A tip should not include any leading or trailing space but an interpolated one can be used, e.g., `g s`.
Keep in mind that this is a blocking call, meaning that if the segment renders slow, you can't type until it's visible. Optimizations in this space are being explored.
## Enable the feature
<Tabs
defaultValue="pwsh"
groupId="shell"
values={[
{ label: 'powershell', value: 'pwsh', },
{ label: 'zsh', value: 'zsh', },
{ label: 'fish', value: 'fish', },
]
}>
<TabItem value="pwsh">
Import/invoke Oh My Posh in your `$PROFILE` and add the following line below:
```powershell
Enable-PoshTooltips
```
For example:
```powershell
# $PROFILE
oh-my-posh init pwsh --config ~\wildertheme.json | Invoke-Expression
Enable-PoshTooltips
```
Restart your shell or reload your `$PROFILE` using `. $PROFILE` for the changes to take effect.
</TabItem>
<TabItem value="zsh">
Invoke Oh My Posh in `.zshrc` and add the following line below:
```bash
enable_poshtooltips
```
Restart your shell or reload `.zshrc` using `exec zsh` for the changes to take effect.
</TabItem>
<TabItem value="fish">
Invoke Oh My Posh in `~/.config/fish/config.fish` and add the following line below:
```bash
enable_poshtooltips
```
Restart your shell or reload fish using `exec fish` for the changes to take effect.
</TabItem>
</Tabs>
[clink]: https://chrisant996.github.io/clink/

View file

@ -13,7 +13,8 @@ This feature only works in `fish`, `zsh`, `powershell` and `cmd` for the time be
Transient prompt, when enabled, replaces the prompt with a simpler one to allow more screen real estate.
You can use go [text/template][go-text-template] templates extended with [sprig][sprig] to enrich the text.
Environment variables are available, just like the [`console_title_template`][console-title] functionality.
All [template][templates] functionality is available, even reusing [cross segment template properties][cstp] from
the previous primary prompt run.
Typically, your prompt will simply leave the prompt on the screen when you execute a command (or press enter) like so:
@ -48,86 +49,17 @@ The configuration has the following properties:
- foreground_templates: foreground [color templates][color-templates]
- background: `string` [color][colors]
- background_templates: background [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 }}> `
## Template ([info][templates])
- `.Root`: `boolean` - is the current user root/admin or not
- `.PWD`: `string` - the current working directory
- `.Folder`: `string` - the current working folder
- `.Shell`: `string` - the current shell name
- `.UserName`: `string` - the current user name
- `.HostName`: `string` - the host name
- `.Code`: `int` - the last exit code
- `.Env.VarName`: `string` - Any environment variable where `VarName` is the environment variable name
- template: `string` - a fully featured [template][templates] - defaults to `{{ .Shell }}> `
## Enable the feature
<Tabs
defaultValue="pwsh"
groupId="shell"
values={[
{ label: 'powershell', value: 'pwsh', },
{ label: 'cmd', value: 'cmd', },
{ label: 'zsh', value: 'zsh', },
{ label: 'fish', value: 'fish', },
]
}>
<TabItem value="pwsh">
Invoke Oh My Posh in your `$PROFILE` and add the following line below.
```powershell
oh-my-posh init pwsh --config "$env:POSH_THEMES_PATH/jandedobbeleer.omp.json" | Invoke-Expression
// highlight-start
Enable-PoshTransientPrompt
// highlight-end
```
:::caution
If you import **PSReadLine** separately, make sure to import it before the `Enable-PoshTransientPrompt` command.
:::
Restart your shell or reload your `$PROFILE` using `. $PROFILE` for the changes to take effect.
</TabItem>
<TabItem value="cmd">
You can run the command below to enable the feature permanently:
Oh My posh handles enabling the feature automatically for all shells except `cmd` when the config contains a
transient prompt configuration. For `cmd`, you can run the command below once to enable the feature permanently:
```shell
clink set prompt.transient always
```
Restart your shell for the changes to take effect.
</TabItem>
<TabItem value="zsh">
Invoke Oh My Posh in `.zshrc` and add the following line below:
```bash
enable_poshtransientprompt
```
Restart your shell or reload `.zshrc` using `exec zsh` for the changes to take effect.
</TabItem>
<TabItem value="fish">
Invoke Oh My Posh in `~/.config/fish/config.fish` and add the following line below:
```bash
enable_poshtransientprompt
```
Restart your shell or reload fish using `exec fish` for the changes to take effect.
</TabItem>
</Tabs>
[colors]: /docs/configuration/colors
[go-text-template]: https://golang.org/pkg/text/template/
[console-title]: /docs/configuration/title#console-title-template
@ -135,3 +67,4 @@ Restart your shell or reload fish using `exec fish` for the changes to take effe
[clink]: https://chrisant996.github.io/clink/
[templates]: /docs/configuration/templates
[color-templates]: /docs/configuration/colors#color-templates
[cstp]: /docs/configuration/templates#cross-segment-template-properties