mirror of
https://github.com/JanDeDobbeleer/oh-my-posh.git
synced 2025-03-05 20:49:04 -08:00
feat: templates for all segments
This commit is contained in:
parent
d71b6e8e07
commit
b816a0bf70
|
@ -146,6 +146,7 @@ You can use these on any segment, the engine is responsible for adding them corr
|
|||
- postfix: `string`
|
||||
- include_folders: `[]string`
|
||||
- exclude_folders: `[]string`
|
||||
- template: `string` - A go text/template [template][templates] to render the text
|
||||
|
||||
#### Prefix
|
||||
|
||||
|
@ -217,3 +218,4 @@ This means that for user Bill, who has a user account `Bill` on Windows and `bil
|
|||
[fg-templ]: /docs/config-overview#foreground-templates
|
||||
[regex]: https://www.regular-expressions.info/tutorial.html
|
||||
[aws]: /docs/aws
|
||||
[templates]: /docs/config-text#templates
|
||||
|
|
|
@ -1,10 +1,24 @@
|
|||
---
|
||||
id: config-text-style
|
||||
title: Text style
|
||||
sidebar_label: Text style
|
||||
id: config-text
|
||||
title: Text
|
||||
sidebar_label: Text
|
||||
---
|
||||
|
||||
## Text decorations
|
||||
## Templates
|
||||
|
||||
Every segment has a `template` property to tweak the text that is displayed.
|
||||
Under the hood, this uses go's [text/template][go-text-template] feature extended with [sprig][sprig] and
|
||||
offers a few standard properties to work with.
|
||||
|
||||
- `.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
|
||||
|
||||
## Text decoration
|
||||
|
||||
You can make use of the following syntax to decorate text:
|
||||
|
||||
|
@ -38,3 +52,5 @@ When using in a template, the syntax is like markdown:
|
|||
[terminal-list-hyperlinks]: https://gist.github.com/egmontkob/eb114294efbcd5adb1944c9f3cb5feda
|
||||
[path-segment]: /docs/path
|
||||
[git-segment]: /docs/git
|
||||
[go-text-template]: https://golang.org/pkg/text/template/
|
||||
[sprig]: https://masterminds.github.io/sprig/
|
|
@ -30,22 +30,12 @@ To manipulate the console title, you can make use of the following properties:
|
|||
|
||||
You can create a more custom console title with the use of `"console_title_style" = "template"`.
|
||||
When this is set, a `console_title_template` is also expected, otherwise, the title will remain empty.
|
||||
Under the hood, this uses go's [text/template][go-text-template] feature extended with [sprig][sprig] and
|
||||
offers a few standard properties to work with.
|
||||
|
||||
- `.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
|
||||
|
||||
A `boolean` can be used for conditional display purposes, a `string` can be displayed.
|
||||
|
||||
The following examples illustrate possible contents for `console_title_template`, provided
|
||||
the current working directory is `/usr/home/omp` and the shell is `zsh`.
|
||||
|
||||
To learn more about templates and their possibilities, have a look at the [template][templates] section.
|
||||
|
||||
```json
|
||||
{
|
||||
"console_title_template": "{{.Folder}}{{if .Root}} :: root{{end}} :: {{.Shell}}",
|
||||
|
@ -61,3 +51,4 @@ the current working directory is `/usr/home/omp` and the shell is `zsh`.
|
|||
|
||||
[go-text-template]: https://golang.org/pkg/text/template/
|
||||
[sprig]: https://masterminds.github.io/sprig/
|
||||
[templates]: /docs/config-text#templates
|
||||
|
|
|
@ -49,10 +49,10 @@ The configuration has the following properties:
|
|||
- template: `string` - A go [text/template][go-text-template] template extended with [sprig][sprig] utilizing the
|
||||
properties below - defaults to `{{ .Shell }}> `
|
||||
|
||||
## Template Properties
|
||||
## [Template][templates] Properties
|
||||
|
||||
- `.Root`: `boolean` - is the current user root/admin or not
|
||||
- `.Path`: `string` - the current working directory
|
||||
- `.PWD`: `string` - the current working directory
|
||||
- `.Folder`: `string` - the current working folder
|
||||
- `.Shell`: `string` - the current shell name
|
||||
- `.UserName`: `string` - the current user name
|
||||
|
|
|
@ -25,14 +25,12 @@ Display the currently active Angular CLI version.
|
|||
|
||||
## Properties
|
||||
|
||||
- display_version: `boolean` - display the active version or not; useful if all you need is an icon indicating `ng`
|
||||
- fetch_version: `boolean` - fetch the active version or not; useful if all you need is an icon indicating `ng`
|
||||
- display_mode: `string` - determines when the segment is displayed
|
||||
- `always`: the segment is always displayed
|
||||
- `files`: the segment is only displayed when `angular.json` file is present (default)
|
||||
- template: `string` - A go [text/template][go-text-template] template extended with [sprig][sprig] utilizing the
|
||||
properties below. Defaults to `{{ .Full }}`
|
||||
|
||||
## Template Properties
|
||||
## [Template][templates] Properties
|
||||
|
||||
- `.Full`: `string` - the full version
|
||||
- `.Major`: `string` - major number
|
||||
|
@ -42,5 +40,4 @@ properties below. Defaults to `{{ .Full }}`
|
|||
- `.BuildMetadata`: `string` - build metadata
|
||||
- `.Error`: `string` - when fetching the version string errors
|
||||
|
||||
[go-text-template]: https://golang.org/pkg/text/template/
|
||||
[sprig]: https://masterminds.github.io/sprig/
|
||||
[templates]: /docs/config-text#templates
|
||||
|
|
|
@ -26,15 +26,12 @@ Display the currently active AWS profile and region.
|
|||
|
||||
## Properties
|
||||
|
||||
- template: `string` - A go [text/template][go-text-template] template extended with [sprig][sprig] utilizing the
|
||||
properties below - defaults to `{{.Context}}{{if .Namespace}} :: {{.Namespace}}{{end}}`
|
||||
- display_default: `boolean` - display the segment or not when the user profile matches `default` - defaults
|
||||
to `true`
|
||||
|
||||
## Template Properties
|
||||
## [Template][templates] Properties
|
||||
|
||||
- `.Profile`: `string` - the currently active profile
|
||||
- `.Region`: `string` - the currently active region
|
||||
|
||||
[go-text-template]: https://golang.org/pkg/text/template/
|
||||
[sprig]: https://masterminds.github.io/sprig/
|
||||
[templates]: /docs/config-text#templates
|
||||
|
|
|
@ -24,12 +24,7 @@ Display the currently active Azure subscription information.
|
|||
}
|
||||
```
|
||||
|
||||
## Properties
|
||||
|
||||
- template: `string` - A go [text/template][go-text-template] template extended with [sprig][sprig] utilizing the
|
||||
properties below - defaults to `{{.Name}}`
|
||||
|
||||
## Template Properties
|
||||
## [Template][templates] Properties
|
||||
|
||||
- `.EnvironmentName`: `string` - the account environment name
|
||||
- `.HomeTenantID`: `string` - the home tenant id
|
||||
|
@ -41,5 +36,4 @@ properties below - defaults to `{{.Name}}`
|
|||
- `.UserName`: `string` - the user name
|
||||
- `.Origin`: `string` - where we received the information from, can be `CLI` or `PWSH`
|
||||
|
||||
[go-text-template]: https://golang.org/pkg/text/template/
|
||||
[sprig]: https://masterminds.github.io/sprig/
|
||||
[templates]: /docs/config-text#templates
|
||||
|
|
|
@ -19,7 +19,7 @@ Display the currently active Azure functions CLI version.
|
|||
"background": "#FEAC19",
|
||||
"properties": {
|
||||
"prefix": " \uf0e7 ",
|
||||
"display_version": true,
|
||||
"fetch_version": true,
|
||||
"display_mode": "files"
|
||||
}
|
||||
}
|
||||
|
@ -27,16 +27,14 @@ Display the currently active Azure functions CLI version.
|
|||
|
||||
## Properties
|
||||
|
||||
- display_version: `boolean` - display the Azure functions CLI version - defaults to `true`
|
||||
- fetch_version: `boolean` - fetch the Azure functions CLI version - defaults to `true`
|
||||
- display_error: `boolean` - show the error context when failing to retrieve the version information - defaults to `true`
|
||||
- missing_command_text: `string` - text to display when the command is missing - defaults to empty
|
||||
- display_mode: `string` - determines when the segment is displayed
|
||||
- `always`: the segment is always displayed
|
||||
- `files`: the segment is only displayed when a `host.json` or `local.settings.json` files is present (default)
|
||||
- template: `string` - A go [text/template][go-text-template] template extended with [sprig][sprig] utilizing the
|
||||
properties below. Defaults to `{{ .Full }}`
|
||||
|
||||
## Template Properties
|
||||
## [Template][templates] Properties
|
||||
|
||||
- `.Full`: `string` - the full version
|
||||
- `.Major`: `string` - major number
|
||||
|
@ -46,5 +44,4 @@ properties below. Defaults to `{{ .Full }}`
|
|||
- `.BuildMetadata`: `string` - build metadata
|
||||
- `.Error`: `string` - when fetching the version string errors
|
||||
|
||||
[go-text-template]: https://golang.org/pkg/text/template/
|
||||
[sprig]: https://masterminds.github.io/sprig/
|
||||
[templates]: /docs/config-text#templates
|
||||
|
|
|
@ -34,14 +34,12 @@ Battery displays the remaining power percentage for your battery.
|
|||
|
||||
## Properties
|
||||
|
||||
- template: `string` - A go [text/template][go-text-template] template extended with [sprig][sprig] utilizing the
|
||||
properties below - defaults to `{{.Icon}}{{ if not .Error }}{{.Percentage}}{{ end }}{{.Error}}`
|
||||
- display_error: `boolean` - show the error context when failing to retrieve the battery information - defaults to `false`
|
||||
- charging_icon: `string` - icon to display on the left when charging - defaults to empty
|
||||
- discharging_icon: `string` - icon to display on the left when discharging - defaults to empty
|
||||
- charged_icon: `string` - icon to display on the left when fully charged - defaults to empty
|
||||
|
||||
## Template Properties
|
||||
## [Template][templates] Properties
|
||||
|
||||
- `.State`: `struct` - the battery state, has a `.String` function
|
||||
- `.Current`: `float64` - Current (momentary) charge rate (in mW).
|
||||
|
@ -60,5 +58,4 @@ the same value as `Voltage`, for convenience
|
|||
|
||||
[colors]: /docs/config-colors
|
||||
[battery]: https://github.com/distatus/battery/blob/master/battery.go#L78
|
||||
[go-text-template]: https://golang.org/pkg/text/template/
|
||||
[sprig]: https://masterminds.github.io/sprig/
|
||||
[templates]: /docs/config-text#templates
|
||||
|
|
|
@ -7,10 +7,10 @@ sidebar_label: Brewfather
|
|||
## What
|
||||
|
||||
Calling all brewers! Keep up-to-date with the status of your [Brewfather][brewfather] batch directly in your
|
||||
commandline prompt using the brewfather segment!
|
||||
commandline prompt using the brewfather segment!
|
||||
|
||||
You will need your User ID and API Key as generated in
|
||||
Brewfather's Settings screen, enabled with **batches.read** and **recipes.read** scopes.
|
||||
You will need your User ID and API Key as generated in
|
||||
Brewfather's Settings screen, enabled with **batches.read** and **recipes.read** scopes.
|
||||
|
||||
## Sample Configuration
|
||||
|
||||
|
@ -46,8 +46,6 @@ NOTE: Temperature units are in degrees C and specific gravity is expressed as `X
|
|||
- batch_id: `string` - Get this by navigating to the desired batch on the brewfather website,
|
||||
the batch id is at the end of the URL in the address bar.
|
||||
- http_timeout: `int` in milliseconds - How long to wait for the Brewfather service to answer the request. Default 2 seconds.
|
||||
- template: `string` - a go [text/template][go-text-template] template extended
|
||||
with [sprig][sprig] utilizing the properties below.
|
||||
- cache_timeout: `int` in minutes - How long to wait before updating the data from Brewfather. Default is 5 minutes.
|
||||
- day_icon: `string` - icon or letter to use to indicate days. Default is "d".
|
||||
|
||||
|
@ -56,7 +54,7 @@ You can override the icons for temperature trend as used by template property `.
|
|||
- doubleup_icon - for increases of more than 4°C, default is ↑↑
|
||||
- singleup_icon - increase 2-4°C, default is ↑
|
||||
- fortyfiveup_icon - increase 0.5-2°C, default is ↗
|
||||
- flat_icon -change less than 0.5°C, default is →
|
||||
- flat_icon - change less than 0.5°C, default is →
|
||||
- fortyfivedown_icon - decrease 0.5-2°C, default is ↘
|
||||
- singledown_icon - decrease 2-4°C, default is ↓
|
||||
- doubledown_icon - decrease more than 4°C, default is ↓↓
|
||||
|
@ -70,7 +68,7 @@ You can override the default icons for batch status as used by template property
|
|||
- completed_status_icon
|
||||
- archived_status_icon
|
||||
|
||||
## Template Properties
|
||||
## [Template][templates] Properties
|
||||
|
||||
Commonly used fields
|
||||
|
||||
|
@ -85,7 +83,7 @@ Commonly used fields
|
|||
- .BatchNumer `int` - The number of this batch
|
||||
- .MeasuredAbv: `float` - The ABV for the batch - either estimated from recipe or calculated from entered OG and FG values
|
||||
- .ReadingAge `int` - age in hours of most recent reading or -1 if there are no readings available
|
||||
|
||||
|
||||
.Reading contains the most recent data from devices or manual entry as visible on the Brewfather's batch Readings graph.
|
||||
If there are no readings available, .Reading will be null.
|
||||
|
||||
|
@ -95,7 +93,7 @@ If there are no readings available, .Reading will be null.
|
|||
- .Reading.Comment `string` - comment attached to this reading
|
||||
- .Reading.DeviceType `string` - source of the reading, e.g. "Tilt"
|
||||
- .Reading.DeviceID `string` - id of the device, e.g. "PINK"
|
||||
|
||||
|
||||
Additional template properties
|
||||
|
||||
- .MeasuredOg: `float` - The OG for the batch as manually entered into Brewfather
|
||||
|
@ -147,7 +145,7 @@ The following conversion functions are available to the template to convert to o
|
|||
|
||||
- SGToBrix - input `float` SG in x.xxx decimal; output `float` Brix (2 decimal places)
|
||||
- SGToPlato - input `float` SG in x.xxx decimal; output `float` Plato (2 decimal places)
|
||||
|
||||
|
||||
*(These use the polynomial conversions from [Wikipedia][wikipedia_gravity_page])*
|
||||
|
||||
#### Example
|
||||
|
@ -166,7 +164,6 @@ To display gravity as SG in XXXX format (e.g. "1020" instead of "1.020"), use th
|
|||
}
|
||||
````
|
||||
|
||||
[go-text-template]: https://golang.org/pkg/text/template/
|
||||
[sprig]: https://masterminds.github.io/sprig/
|
||||
[templates]: /docs/config-text#templates
|
||||
[brewfather]: http://brewfather.app
|
||||
[wikipedia_gravity_page]:https://en.wikipedia.org/wiki/Brix#Specific_gravity_2
|
||||
|
|
|
@ -45,4 +45,9 @@ error). The `&&` functionality will join the output of the commands when success
|
|||
- shell: `string` - the shell in which to run the command in. Uses `shell -c command` under the hood.
|
||||
- command: `string` - the command(s) to run
|
||||
|
||||
## [Template][templates] Properties
|
||||
|
||||
- `.Output`: `string` - the output of the command.
|
||||
|
||||
[env]: /docs/environment
|
||||
[templates]: /docs/config-text#templates
|
||||
|
|
|
@ -26,16 +26,14 @@ Display the currently active crystal version.
|
|||
## Properties
|
||||
|
||||
- home_enabled: `boolean` - display the segment in the HOME folder or not - defaults to `false`
|
||||
- display_version: `boolean` - display the julia version - defaults to `true`
|
||||
- fetch_version: `boolean` - fetch the julia version - defaults to `true`
|
||||
- display_error: `boolean` - show the error context when failing to retrieve the version information - defaults to `true`
|
||||
- missing_command_text: `string` - text to display when the command is missing - defaults to empty
|
||||
- display_mode: `string` - determines when the segment is displayed
|
||||
- `always`: the segment is always displayed
|
||||
- `files`: the segment is only displayed when `*.cr` or `shard.yml` files are present (default)
|
||||
- template: `string` - A go [text/template][go-text-template] template extended with [sprig][sprig] utilizing the
|
||||
properties below. Defaults to `{{ .Full }}`
|
||||
|
||||
## Template Properties
|
||||
## [Template][templates] Properties
|
||||
|
||||
- `.Full`: `string` - the full version
|
||||
- `.Major`: `string` - major number
|
||||
|
@ -45,5 +43,4 @@ Display the currently active crystal version.
|
|||
- `.BuildMetadata`: `string` - build metadata
|
||||
- `.Error`: `string` - when fetching the version string errors
|
||||
|
||||
[go-text-template]: https://golang.org/pkg/text/template/
|
||||
[sprig]: https://masterminds.github.io/sprig/
|
||||
[templates]: /docs/config-text#templates
|
||||
|
|
|
@ -26,17 +26,15 @@ Display the currently active dart version.
|
|||
## Properties
|
||||
|
||||
- home_enabled: `boolean` - display the segment in the HOME folder or not - defaults to `false`
|
||||
- display_version: `boolean` - display the dart version - defaults to `true`
|
||||
- fetch_version: `boolean` - fetch the dart version - defaults to `true`
|
||||
- display_error: `boolean` - show the error context when failing to retrieve the version information - defaults to `true`
|
||||
- missing_command_text: `string` - text to display when the command is missing - defaults to empty
|
||||
- display_mode: `string` - determines when the segment is displayed
|
||||
- `always`: the segment is always displayed
|
||||
- `files`: the segment is only displayed when `*.dart`, `pubspec.yaml`, `pubspec.yml`, `pubspec.lock` files or the `.dart_tool`
|
||||
folder are present (default)
|
||||
- template: `string` - A go [text/template][go-text-template] template extended with [sprig][sprig] utilizing the
|
||||
properties below. Defaults to `{{ .Full }}`
|
||||
|
||||
## Template Properties
|
||||
## [Template][templates] Properties
|
||||
|
||||
- `.Full`: `string` - the full version
|
||||
- `.Major`: `string` - major number
|
||||
|
@ -46,5 +44,4 @@ properties below. Defaults to `{{ .Full }}`
|
|||
- `.BuildMetadata`: `string` - build metadata
|
||||
- `.Error`: `string` - when fetching the version string errors
|
||||
|
||||
[go-text-template]: https://golang.org/pkg/text/template/
|
||||
[sprig]: https://masterminds.github.io/sprig/
|
||||
[templates]: /docs/config-text#templates
|
||||
|
|
|
@ -26,7 +26,7 @@ Display the currently active .NET SDK version.
|
|||
## Properties
|
||||
|
||||
- home_enabled: `boolean` - display the segment in the HOME folder or not - defaults to `false`
|
||||
- display_version: `boolean` - display the active version or not; useful if all you need is an icon indicating `dotnet`
|
||||
- fetch_version: `boolean` - fetch the active version or not; useful if all you need is an icon indicating `dotnet`
|
||||
is present - defaults to `true`
|
||||
- display_error: `boolean` - show the error context when failing to retrieve the version information - defaults to `true`
|
||||
- missing_command_text: `string` - text to display when the command is missing - defaults to empty
|
||||
|
@ -36,12 +36,10 @@ Display the currently active .NET SDK version.
|
|||
or `*.fsproj` files are present (default)
|
||||
- unsupported_version_icon: `string` - text/icon that is displayed when the active .NET SDK version (e.g., one specified
|
||||
by `global.json`) is not installed/supported - defaults to `\uf071` (X in a rectangle box)
|
||||
- template: `string` - A go [text/template][go-text-template] template extended with [sprig][sprig] utilizing the
|
||||
properties below. Defaults to `{{ .Full }}`
|
||||
- version_url_template: `string` - A go [text/template][go-text-template] template extended
|
||||
with [sprig][sprig] utilizing the properties below. Defaults does nothing(backward compatibility).
|
||||
|
||||
## Template Properties
|
||||
## [Template][templates] Properties
|
||||
|
||||
- `.Full`: `string` - the full version
|
||||
- `.Major`: `string` - major number
|
||||
|
@ -51,5 +49,4 @@ with [sprig][sprig] utilizing the properties below. Defaults does nothing(backwa
|
|||
- `.BuildMetadata`: `string` - build metadata
|
||||
- `.Error`: `string` - when fetching the version string errors
|
||||
|
||||
[go-text-template]: https://golang.org/pkg/text/template/
|
||||
[sprig]: https://masterminds.github.io/sprig/
|
||||
[templates]: /docs/config-text#templates
|
||||
|
|
|
@ -49,7 +49,9 @@ Style specifies the format in which the time will be displayed. The table below
|
|||
| amarillo | `0.001s` | `2.1s` | `182.1s` | `14,582.1s` |
|
||||
| round | `1ms` | `2s` | `3m 2s` | `4h 3m` |
|
||||
|
||||
## Template Properties
|
||||
## [Template][templates] Properties
|
||||
|
||||
- `.Ms`: `number` - the execution time in milliseconds
|
||||
- `.FormattedMs`: `string` - the formatted value based on the `style` above.
|
||||
|
||||
[templates]: /docs/config-text#templates
|
||||
|
|
|
@ -35,7 +35,9 @@ Displays the last exit code or that the last command failed based on the configu
|
|||
|
||||
[colors]: /docs/config-colors
|
||||
|
||||
## Template Properties
|
||||
## [Template][templates] Properties
|
||||
|
||||
- `.Code`: `number` - the last known exit code
|
||||
- `.Text`: `string` - the textual meaning linked to exit code (if applicable, otherwise identical to `.Code`)
|
||||
|
||||
[templates]: /docs/config-text#templates
|
||||
|
|
|
@ -53,9 +53,6 @@ An alternative is to use the [Posh-Git segment][poshgit]
|
|||
|
||||
## Properties
|
||||
|
||||
- template: `string` - A go [text/template][go-text-template] template extended with [sprig][sprig] utilizing the
|
||||
properties below - defaults to empty.
|
||||
|
||||
### Fetching information
|
||||
|
||||
As doing multiple git calls can slow down the prompt experience, we do not fetch information by default.
|
||||
|
@ -96,7 +93,7 @@ You can set the following properties to `true` to enable fetching additional inf
|
|||
- azure_devops_icon: `string` - icon/text to display when the upstream is Azure DevOps - defaults to `\uFD03 `
|
||||
- git_icon: `string` - icon/text to display when the upstream is not known/mapped - defaults to `\uE5FB `
|
||||
|
||||
## Template Properties
|
||||
## [Template][templates] Properties
|
||||
|
||||
- `.Working`: `GitStatus` - changes in the working tree (see below)
|
||||
- `.Staging`: `GitStatus` - staged changes in the work tree (see below)
|
||||
|
@ -121,6 +118,5 @@ You can set the following properties to `true` to enable fetching additional inf
|
|||
- `.String`: `string` - a string representation of the changes above
|
||||
|
||||
[poshgit]: /docs/poshgit
|
||||
[go-text-template]: https://golang.org/pkg/text/template/
|
||||
[sprig]: https://masterminds.github.io/sprig/
|
||||
[hyperlinks]: /docs/config-text-style#hyperlinks
|
||||
[templates]: /docs/config-text#templates
|
||||
[hyperlinks]: /docs/config-text#hyperlinks
|
||||
|
|
|
@ -26,17 +26,15 @@ Display the currently active golang version.
|
|||
## Properties
|
||||
|
||||
- home_enabled: `boolean` - display the segment in the HOME folder or not - defaults to `false`
|
||||
- display_version: `boolean` - display the golang version - defaults to `true`
|
||||
- fetch_version: `boolean` - display the golang version - defaults to `true`
|
||||
- display_error: `boolean` - show the error context when failing to retrieve the version information - defaults to `true`
|
||||
- missing_command_text: `string` - text to display when the command is missing - defaults to empty
|
||||
- display_mode: `string` - determines when the segment is displayed
|
||||
- `always`: the segment is always displayed
|
||||
- `files`: the segment is only displayed when `*.go` or `go.mod` files are present (default)
|
||||
- template: `string` - A go [text/template][go-text-template] template extended with [sprig][sprig] utilizing the
|
||||
properties below. Defaults to `{{ .Full }}`
|
||||
- parse_mod_file: `boolean`: parse the go.mod file instead of calling `go version`
|
||||
|
||||
## Template Properties
|
||||
## [Template][templates] Properties
|
||||
|
||||
- `.Full`: `string` - the full version
|
||||
- `.Major`: `string` - major number
|
||||
|
@ -45,3 +43,5 @@ properties below. Defaults to `{{ .Full }}`
|
|||
- `.Prerelease`: `string` - prerelease info text
|
||||
- `.BuildMetadata`: `string` - build metadata
|
||||
- `.Error`: `string` - when fetching the version string errors
|
||||
|
||||
[templates]: /docs/config-text#templates
|
||||
|
|
|
@ -33,13 +33,10 @@ sidebar_label: Ipify
|
|||
defaults to 20ms
|
||||
- cache_timeout: `int` in minutes - How long do you want your IP address cached? -
|
||||
defaults to 10 min
|
||||
- template: `string` - a go [text/template][go-text-template] template extended
|
||||
with [sprig][sprig] utilizing the properties below. - defaults to `{{ .IP }}`
|
||||
|
||||
## Template Properties
|
||||
## [Template][templates] Properties
|
||||
|
||||
- .IP: `string` - Your external IP address
|
||||
|
||||
[go-text-template]: https://golang.org/pkg/text/template/
|
||||
[sprig]: https://masterminds.github.io/sprig/
|
||||
[templates]: /docs/config-text#templates
|
||||
[ipify]: https://www.ipify.org/
|
||||
|
|
|
@ -26,7 +26,7 @@ Display the currently active java version.
|
|||
## Properties
|
||||
|
||||
- home_enabled: `boolean` - display the segment in the HOME folder or not - defaults to `false`
|
||||
- display_version: `boolean` - display the java version - defaults to `true`
|
||||
- fetch_version: `boolean` - display the java version - defaults to `true`
|
||||
- display_error: `boolean` - show the error context when failing to retrieve the version information - defaults to `true`
|
||||
- missing_command_text: `string` - text to display when the java command is missing - defaults to empty
|
||||
- display_mode: `string` - determines when the segment is displayed
|
||||
|
@ -45,10 +45,8 @@ Display the currently active java version.
|
|||
- `*.jar`
|
||||
- `*.clj`
|
||||
- `*.cljc`
|
||||
- template: `string` - A go [text/template][go-text-template] template extended with [sprig][sprig] utilizing the
|
||||
properties below. Defaults to `{{ .Full }}`
|
||||
|
||||
## Template Properties
|
||||
## [Template][templates] Properties
|
||||
|
||||
- `.Full`: `string` - the full version
|
||||
- `.Major`: `string` - major number
|
||||
|
@ -57,3 +55,5 @@ properties below. Defaults to `{{ .Full }}`
|
|||
- `.Prerelease`: `string` - prerelease info text
|
||||
- `.BuildMetadata`: `string` - build metadata
|
||||
- `.Error`: `string` - when fetching the version string errors
|
||||
|
||||
[templates]: /docs/config-text#templates
|
||||
|
|
|
@ -26,16 +26,14 @@ Display the currently active julia version.
|
|||
## Properties
|
||||
|
||||
- home_enabled: `boolean` - display the segment in the HOME folder or not - defaults to `false`
|
||||
- display_version: `boolean` - display the julia version - defaults to `true`
|
||||
- fetch_version: `boolean` - display the julia version - defaults to `true`
|
||||
- display_error: `boolean` - show the error context when failing to retrieve the version information - defaults to `true`
|
||||
- missing_command_text: `string` - text to display when the command is missing - defaults to empty
|
||||
- display_mode: `string` - determines when the segment is displayed
|
||||
- `always`: the segment is always displayed
|
||||
- `files`: the segment is only displayed when `*.jl` files are present (default)
|
||||
- template: `string` - A go [text/template][go-text-template] template extended with [sprig][sprig] utilizing the
|
||||
properties below. Defaults to `{{ .Full }}`
|
||||
|
||||
## Template Properties
|
||||
## [Template][templates] Properties
|
||||
|
||||
- `.Full`: `string` - the full version
|
||||
- `.Major`: `string` - major number
|
||||
|
@ -45,5 +43,4 @@ properties below. Defaults to `{{ .Full }}`
|
|||
- `.BuildMetadata`: `string` - build metadata
|
||||
- `.Error`: `string` - when fetching the version string errors
|
||||
|
||||
[go-text-template]: https://golang.org/pkg/text/template/
|
||||
[sprig]: https://masterminds.github.io/sprig/
|
||||
[templates]: /docs/config-text#templates
|
||||
|
|
|
@ -26,13 +26,11 @@ Display the currently active Kubernetes context name and namespace name.
|
|||
|
||||
## Properties
|
||||
|
||||
- template: `string` - A go [text/template][go-text-template] template extended with [sprig][sprig] utilizing the
|
||||
properties below - defaults to `{{.Context}}{{if .Namespace}} :: {{.Namespace}}{{end}}`
|
||||
- display_error: `boolean` - show the error context when failing to retrieve the kubectl information - defaults to `false`
|
||||
- parse_kubeconfig: `boolean` - parse kubeconfig files instead of calling out to kubectl to improve
|
||||
performance - defaults to `false`
|
||||
|
||||
## Template Properties
|
||||
## [Template][templates] Properties
|
||||
|
||||
- `.Context`: `string` - the current kubectl context
|
||||
- `.Namespace`: `string` - the current kubectl context namespace
|
||||
|
@ -46,5 +44,4 @@ It is common for the Kubernetes "default" namespace to be used when no namespace
|
|||
|
||||
`{{.Context}} :: {{if .Namespace}}{{.Namespace}}{{else}}default{{end}}`
|
||||
|
||||
[go-text-template]: https://golang.org/pkg/text/template/
|
||||
[sprig]: https://masterminds.github.io/sprig/
|
||||
[templates]: /docs/config-text#templates
|
||||
|
|
|
@ -27,12 +27,7 @@ The Nerdbank.GitVersioning CLI can be a bit slow causing the prompt to feel slow
|
|||
}
|
||||
```
|
||||
|
||||
## Properties
|
||||
|
||||
- template: `string` - A go [text/template][go-text-template] template extended with [sprig][sprig] utilizing the
|
||||
properties below - defaults to `{{ .Version }}`
|
||||
|
||||
## Template Properties
|
||||
## [Template][templates] Properties
|
||||
|
||||
- `.Version`: `string` - the current version
|
||||
- `.AssemblyVersion`: `string` - the current assembly version
|
||||
|
@ -43,5 +38,4 @@ properties below - defaults to `{{ .Version }}`
|
|||
- `.SimpleVersion`: `string` - the current simple version
|
||||
|
||||
[nbgv]: https://github.com/dotnet/Nerdbank.GitVersioning
|
||||
[go-text-template]: https://golang.org/pkg/text/template/
|
||||
[sprig]: https://masterminds.github.io/sprig/
|
||||
[templates]: /docs/config-text#templates
|
||||
|
|
|
@ -64,12 +64,6 @@ Or display in mmol/l (instead of the default mg/dl) with the following template:
|
|||
- http_timeout: `int` - How long do you want to wait before you want to see
|
||||
your prompt more than your sugar? I figure a half second is a good default -
|
||||
defaults to 500ms
|
||||
- template: `string` - a go [text/template][go-text-template] template extended
|
||||
with [sprig][sprig] utilizing the properties below.
|
||||
See the example above where I added a syringe.
|
||||
You can change the icon, put the trend elsewhere, add text, however you like!
|
||||
Make sure your NerdFont has the glyph you want or search for one
|
||||
at nerdfonts.com
|
||||
- NSCacheTimeout: `int` in minutes - How long do you want your numbers cached? -
|
||||
defaults to 5 min
|
||||
|
||||
|
@ -85,7 +79,7 @@ Or display in mmol/l (instead of the default mg/dl) with the following template:
|
|||
- SingleDownIcon - defaults to ↓
|
||||
- DoubleDownIcon - defaults to ↓↓
|
||||
|
||||
## Template Properties
|
||||
## [Template][templates] Properties
|
||||
|
||||
- .ID: `string` - The internal ID of the object
|
||||
- .Sgv: `int` - Your Serum Glucose Value (your sugar)
|
||||
|
@ -100,6 +94,5 @@ Or display in mmol/l (instead of the default mg/dl) with the following template:
|
|||
- .TrendIcon: `string` - By default, this will be something like ↑↑ or ↘ etc but you can
|
||||
override them with any glpyh as seen above
|
||||
|
||||
[go-text-template]: https://golang.org/pkg/text/template/
|
||||
[sprig]: https://masterminds.github.io/sprig/
|
||||
[templates]: /docs/config-text#templates
|
||||
[nightscout]: http://www.nightscout.info/
|
||||
|
|
|
@ -33,10 +33,8 @@ Display the currently active node version.
|
|||
- fetch_package_manager: `boolean` - define if the current project uses Yarn or NPM - defaults to `false`
|
||||
- yarn_icon: `string` - the icon/text to display when using Yarn - defaults to ` \uF61A`
|
||||
- npm_icon: `string` - the icon/text to display when using NPM - defaults to ` \uE71E`
|
||||
- template: `string` - A go [text/template][go-text-template] template extended with [sprig][sprig] utilizing the
|
||||
properties below. Defaults to `{{ .Full }}`
|
||||
|
||||
## Template Properties
|
||||
## [Template][templates] Properties
|
||||
|
||||
- `.Full`: `string` - the full version
|
||||
- `.Major`: `string` - major number
|
||||
|
@ -48,5 +46,4 @@ properties below. Defaults to `{{ .Full }}`
|
|||
- `.PackageManagerIcon`: `string` - the Yarn on NPM icon when setting `fetch_package_manager` to `true`
|
||||
- `.Mismatch`: `boolean` - if the version in `.nvmrc` matches with `.Full`
|
||||
|
||||
[go-text-template]: https://golang.org/pkg/text/template/
|
||||
[sprig]: https://masterminds.github.io/sprig/
|
||||
[templates]: /docs/config-text#templates
|
||||
|
|
|
@ -28,8 +28,6 @@ Display OS specific info - defaults to Icon.
|
|||
- macos: `string` - the string to use for macOS - defaults to macOS icon - defaults to `\uF179`
|
||||
- linux: `string` - the icon to use for Linux - defaults to Linux icon - defaults to `\uF17C`
|
||||
- windows: `string` - the icon to use for Windows - defaults to Windows icon - defaults to `\uE62A`
|
||||
- wsl: `string` - the string/icon to use for WSL - defaults to `WSL`
|
||||
- wsl_separator: `string` - the string to use for separating WSL from Linux - defaults to ` - `
|
||||
- display_distro_name: `boolean` - display the distro name or icon (for WSL and Linux) - defaults to `false`
|
||||
- alpine: `string` - the icon to use for Alpine - defaults to Alpine icon - defaults to `\uF300`
|
||||
- aosc: `string` - the icon to use for Aosc - defaults to Aosc icon - defaults to `\uF301`
|
||||
|
@ -51,6 +49,8 @@ Display OS specific info - defaults to Icon.
|
|||
- slackware: `string` - the icon to use for Slackware - defaults to Slackware icon - defaults to `\uF319`
|
||||
- ubuntu: `string` - the icon to use for Ubuntu - defaults to Ubuntu icon - defaults to `\uF31b`
|
||||
|
||||
## Template Properties
|
||||
## [Template][templates] Properties
|
||||
|
||||
- `.OS`: `string` - the OS platform
|
||||
|
||||
[templates]: /docs/config-text#templates
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
---
|
||||
id: owm
|
||||
title: Open Weather Map
|
||||
sidebar_label: Open Weather Map
|
||||
sidebar_label: Open Weather Map
|
||||
---
|
||||
|
||||
## What
|
||||
|
@ -12,7 +12,6 @@ Shows the current weather of a given location.
|
|||
|
||||
You **must** request an API key at the [Open Weather Map](https://openweathermap.org/price) website.
|
||||
The free tier for *Current weather and forecasts collection* is sufficient.
|
||||
|
||||
:::
|
||||
|
||||
## Sample Configuration
|
||||
|
@ -50,9 +49,11 @@ The free tier for *Current weather and forecasts collection* is sufficient.
|
|||
- template: `string` - A go [text/template][go-text-template] template extended with [sprig][sprig] utilizing the
|
||||
properties below - defaults to `{{.Weather}} ({{.Temperature}}{{.UnitIcon}})`
|
||||
|
||||
## Template Properties
|
||||
## [Template][templates] Properties
|
||||
|
||||
- `.Weather`: `string` - the current weather icon
|
||||
- `.Temperature`: `string` - the current temperature
|
||||
- `.UnitIcon`: `string` - the current unit icon(based on units property)
|
||||
- `.URL`: `string` - the url of the current api call
|
||||
|
||||
[templates]: /docs/config-text#templates
|
||||
|
|
|
@ -38,8 +38,6 @@ Display the current path.
|
|||
- mixed_threshold: `number` - the maximum length of a path segment that will be displayed when using `Mixed` -
|
||||
defaults to `4`
|
||||
- max_depth: `number` - maximum path depth to display before shortening when using `Agnoster Short` - defaults to `1`
|
||||
- template: `string` - A go [text/template][go-text-template] template extended with [sprig][sprig] utilizing the
|
||||
properties below. Defaults to `{{ .Path }}`
|
||||
|
||||
## Mapped Locations
|
||||
|
||||
|
@ -125,10 +123,9 @@ starts with a symbol or icon.
|
|||
- `__pycache__` will be shortened to `__p`
|
||||
- `➼ folder` will be shortened to `➼ f`
|
||||
|
||||
## Template Properties
|
||||
## [Template][templates] Properties
|
||||
|
||||
- `.Path`: `string` - the current directory (styled)
|
||||
- `.StackCount`: `int` - the stack count
|
||||
|
||||
[go-text-template]: https://golang.org/pkg/text/template/
|
||||
[sprig]: https://masterminds.github.io/sprig/
|
||||
[templates]: /docs/config-text#templates
|
||||
|
|
|
@ -27,17 +27,15 @@ Display the currently active php version.
|
|||
## Properties
|
||||
|
||||
- home_enabled: `boolean` - display the segment in the HOME folder or not - defaults to `false`
|
||||
- display_version: `boolean` - display the php version - defaults to `true`
|
||||
- fetch_version: `boolean` - display the php version - defaults to `true`
|
||||
- display_error: `boolean` - show the error context when failing to retrieve the version information - defaults to `true`
|
||||
- missing_command_text: `string` - text to display when the command is missing - defaults to empty
|
||||
- display_mode: `string` - determines when the segment is displayed
|
||||
- `always`: the segment is always displayed
|
||||
- `files`: the segment is only displayed when `*.php, composer.json, composer.lock, .php-version` files are present (default)
|
||||
- enable_hyperlink: `bool` - display an hyperlink to the php release notes - defaults to `false`
|
||||
- template: `string` - A go [text/template][go-text-template] template extended with [sprig][sprig] utilizing the
|
||||
properties below. Defaults to `{{ .Full }}`
|
||||
|
||||
## Template Properties
|
||||
## [Template][templates] Properties
|
||||
|
||||
- `.Full`: `string` - the full version
|
||||
- `.Major`: `string` - major number
|
||||
|
@ -47,5 +45,4 @@ properties below. Defaults to `{{ .Full }}`
|
|||
- `.BuildMetadata`: `string` - build metadata
|
||||
- `.Error`: `string` - when fetching the version string errors
|
||||
|
||||
[go-text-template]: https://golang.org/pkg/text/template/
|
||||
[sprig]: https://masterminds.github.io/sprig/
|
||||
[templates]: /docs/config-text#templates
|
||||
|
|
|
@ -45,14 +45,11 @@ Local changes can also be displayed which uses the following syntax (see `.Statu
|
|||
## Plastic SCM Icon
|
||||
|
||||
If you want to use the icon of Plastic SCM in the segment, then please help me push the icon in this [issue][fa-issue]
|
||||
by leaving a like!
|
||||
by leaving a like!
|
||||

|
||||
|
||||
## Properties
|
||||
|
||||
- template: `string` - A go [text/template][go-text-template] template extended with [sprig][sprig] utilizing the
|
||||
properties below - defaults to empty.
|
||||
|
||||
### Fetching information
|
||||
|
||||
As doing multiple `cm` calls can slow down the prompt experience, we do not fetch information by default.
|
||||
|
@ -74,12 +71,12 @@ You can set the following property to `true` to enable fetching additional infor
|
|||
- commit_icon: `string` - icon/text to display before the commit context (detached HEAD) - defaults to `\uF417`
|
||||
- tag_icon: `string` - icon/text to display before the tag context - defaults to `\uF412`
|
||||
|
||||
## Template Properties
|
||||
## [Template][templates] Properties
|
||||
|
||||
- `.Selector`: `string` - the current selector context (branch/changeset/label)
|
||||
- `.Behind`: `bool` - the current workspace is behind and changes are incoming
|
||||
- `.Status`: `PlasticStatus` - changes in the workspace (see below)
|
||||
- `.MergePending`: `bool` - if a merge is pending and needs to be commited
|
||||
- `.MergePending`: `bool` - if a merge is pending and needs to be commited
|
||||
(kown issue: when no file is left after a *Change/Delete conflict* merge, the `MergePending` property is not set)
|
||||
|
||||
### PlasticStatus
|
||||
|
@ -92,6 +89,5 @@ You can set the following property to `true` to enable fetching additional infor
|
|||
- `.Changed`: `boolean` - if the status contains changes or not
|
||||
- `.String`: `string` - a string representation of the changes above
|
||||
|
||||
[go-text-template]: https://golang.org/pkg/text/template/
|
||||
[sprig]: https://masterminds.github.io/sprig/
|
||||
[templates]: /docs/config-text#templates
|
||||
[fa-issue]: https://github.com/FortAwesome/Font-Awesome/issues/18504
|
||||
|
|
|
@ -25,4 +25,9 @@ To enable the `posh-git` module, set `$env:POSH_GIT_ENABLED = $true` in your `$P
|
|||
}
|
||||
```
|
||||
|
||||
## [Template][templates] Properties
|
||||
|
||||
- `.Status`: `string` - the status reported from posh-git
|
||||
|
||||
[posh-git]: https://github.com/dahlbyk/posh-git
|
||||
[templates]: /docs/config-text#templates
|
||||
|
|
|
@ -30,7 +30,7 @@ Supports conda, virtualenv and pyenv.
|
|||
- fetch_virtual_env: `boolean` - fetch the name of the virtualenv or not - defaults to `true`
|
||||
- display_default: `boolean` - show the name of the virtualenv when it's default (`system`, `base`)
|
||||
or not - defaults to `true`
|
||||
- display_version: `boolean` - display the python version - defaults to `true`
|
||||
- fetch_version: `boolean` - fetch the python version - defaults to `true`
|
||||
- display_error: `boolean` - show the error context when failing to retrieve the version information - defaults to `true`
|
||||
- missing_command_text: `string` - text to display when the command is missing - defaults to empty
|
||||
- display_mode: `string` - determines when the segment is displayed
|
||||
|
@ -39,10 +39,8 @@ or not - defaults to `true`
|
|||
files are present (default)
|
||||
- `environment`: the segment is only displayed when a virtual env is present
|
||||
- `context`: the segment is only displayed when either `environment` or `files` is active
|
||||
- template: `string` - A go [text/template][go-text-template] template extended with [sprig][sprig] utilizing the
|
||||
properties below. Defaults to `{{ .Full }}`
|
||||
|
||||
## Template Properties
|
||||
## [Template][templates] Properties
|
||||
|
||||
- `.Venv`: `string` - the virtual environment name (if present)
|
||||
- `.Full`: `string` - the full version
|
||||
|
@ -53,5 +51,4 @@ properties below. Defaults to `{{ .Full }}`
|
|||
- `.BuildMetadata`: `string` - build metadata
|
||||
- `.Error`: `string` - when fetching the version string errors
|
||||
|
||||
[go-text-template]: https://golang.org/pkg/text/template/
|
||||
[sprig]: https://masterminds.github.io/sprig/
|
||||
[templates]: /docs/config-text#templates
|
||||
|
|
|
@ -18,11 +18,7 @@ Show when the current user is root or when in an elevated shell (Windows).
|
|||
"foreground": "#111111",
|
||||
"background": "#ffff66",
|
||||
"properties": {
|
||||
"root_icon": "\uF0E7"
|
||||
"template": "\uF0E7"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Properties
|
||||
|
||||
- root_icon: `string` - icon to display in case of root/elevated - defaults to `\uF0E7`
|
||||
|
|
|
@ -26,16 +26,14 @@ Display the currently active ruby version.
|
|||
## Properties
|
||||
|
||||
- home_enabled: `boolean` - display the segment in the HOME folder or not - defaults to `false`
|
||||
- display_version: `boolean` - display the ruby version - defaults to `true`
|
||||
- fetch_version: `boolean` - display the ruby version - defaults to `true`
|
||||
- display_error: `boolean` - show the error context when failing to retrieve the version information - defaults to `true`
|
||||
- missing_command_text: `string` - text to display when the command is missing - defaults to empty
|
||||
- display_mode: `string` - determines when the segment is displayed
|
||||
- `always`: the segment is always displayed
|
||||
- `files`: the segment is only displayed when `*.rb`, `Gemfile` or `Rakefile` files are present (default)
|
||||
- template: `string` - A go [text/template][go-text-template] template extended with [sprig][sprig] utilizing the
|
||||
properties below. Defaults to `{{ .Full }}`
|
||||
|
||||
## Template Properties
|
||||
## [Template][templates] Properties
|
||||
|
||||
- `.Full`: `string` - the full version
|
||||
- `.Major`: `string` - major number
|
||||
|
@ -45,5 +43,4 @@ properties below. Defaults to `{{ .Full }}`
|
|||
- `.BuildMetadata`: `string` - build metadata
|
||||
- `.Error`: `string` - when fetching the version string errors
|
||||
|
||||
[go-text-template]: https://golang.org/pkg/text/template/
|
||||
[sprig]: https://masterminds.github.io/sprig/
|
||||
[templates]: /docs/config-text#templates
|
||||
|
|
|
@ -26,16 +26,14 @@ Display the currently active rust version.
|
|||
## Properties
|
||||
|
||||
- home_enabled: `boolean` - display the segment in the HOME folder or not - defaults to `false`
|
||||
- display_version: `boolean` - display the rust version (`rustc --version`) - defaults to `true`
|
||||
- fetch_version: `boolean` - display the rust version (`rustc --version`) - defaults to `true`
|
||||
- display_error: `boolean` - show the error context when failing to retrieve the version information - defaults to `true`
|
||||
- missing_command_text: `string` - text to display when the command is missing - defaults to empty
|
||||
- display_mode: `string` - determines when the segment is displayed
|
||||
- `always`: the segment is always displayed
|
||||
- `files`: the segment is only displayed when `*.rs`, `Cargo.toml` or `Cargo.lock` files are present (default)
|
||||
- template: `string` - A go [text/template][go-text-template] template extended with [sprig][sprig] utilizing the
|
||||
properties below. Defaults to `{{ .Full }}`
|
||||
|
||||
## Template Properties
|
||||
## [Template][templates] Properties
|
||||
|
||||
- `.Full`: `string` - the full version
|
||||
- `.Major`: `string` - major number
|
||||
|
@ -45,5 +43,4 @@ properties below. Defaults to `{{ .Full }}`
|
|||
- `.BuildMetadata`: `string` - build metadata
|
||||
- `.Error`: `string` - when fetching the version string errors
|
||||
|
||||
[go-text-template]: https://golang.org/pkg/text/template/
|
||||
[sprig]: https://masterminds.github.io/sprig/
|
||||
[templates]: /docs/config-text#templates
|
||||
|
|
|
@ -24,17 +24,11 @@ Show the current user and host name.
|
|||
}
|
||||
```
|
||||
|
||||
## Properties
|
||||
|
||||
- template: `string` - A go [text/template][go-text-template] template extended with [sprig][sprig] utilizing the
|
||||
properties below.
|
||||
|
||||
## Template Properties
|
||||
## [Template][templates] Properties
|
||||
|
||||
- `.UserName`: `string` - the current user's name
|
||||
- `.HostName`: `string` - the current computer's name
|
||||
- `.SSHSession`: `boolean` - active SSH session or not
|
||||
- `.Root`: `boolean` - are you a root/admin user or not
|
||||
|
||||
[go-text-template]: https://golang.org/pkg/text/template/
|
||||
[sprig]: https://masterminds.github.io/sprig/
|
||||
[templates]: /docs/config-text#templates
|
||||
|
|
|
@ -28,3 +28,9 @@ Show the current shell name (ZSH, powershell, bash, ...).
|
|||
## Properties
|
||||
|
||||
- mapped_shell_names: `object` - custom glyph/text to use in place of specified shell names (case-insensitive)
|
||||
|
||||
## [Template][templates] Properties
|
||||
|
||||
- `.Name`: `string` - the shell name
|
||||
|
||||
[templates]: /docs/config-text#templates
|
||||
|
|
|
@ -6,10 +6,10 @@ sidebar_label: Spotify
|
|||
|
||||
## What
|
||||
|
||||
Show the currently playing song in the Spotify MacOS/Windows client.
|
||||
On Windows/WSL, only the playing state is supported (no information when paused/stopped).
|
||||
On macOS, all states are supported (playing/paused/stopped).
|
||||
**Be aware this can make the prompt a tad bit slower as it needs to get a response from the Spotify player.**
|
||||
Show the currently playing song in the Spotify MacOS/Windows client.
|
||||
On Windows/WSL, only the playing state is supported (no information when paused/stopped).
|
||||
On macOS, all states are supported (playing/paused/stopped).
|
||||
**Be aware this can make the prompt a tad bit slower as it needs to get a response from the Spotify player.**
|
||||
|
||||
## Sample Configuration
|
||||
|
||||
|
@ -24,8 +24,7 @@ On macOS, all states are supported (playing/paused/stopped).
|
|||
"prefix": "\uF9C6 ",
|
||||
"playing_icon": "\uE602 ",
|
||||
"paused_icon": "\uF8E3 ",
|
||||
"stopped_icon": "\uF04D ",
|
||||
"track_separator" : " - "
|
||||
"stopped_icon": "\uF04D "
|
||||
}
|
||||
}
|
||||
```
|
||||
|
@ -35,4 +34,12 @@ On macOS, all states are supported (playing/paused/stopped).
|
|||
- playing_icon: `string` - text/icon to show when playing - defaults to `\uE602 `
|
||||
- paused_icon: `string` - text/icon to show when paused - defaults to `\uF8E3 `
|
||||
- stopped_icon: `string` - text/icon to show when stopped - defaults to `\uF04D `
|
||||
- track_separator: `string` - text/icon to put between the artist and song name - defaults to ` - `
|
||||
|
||||
## [Template][templates] Properties
|
||||
|
||||
- `.Status`: `string` - player status (`playing`, `paused`, `stopped`)
|
||||
- `.Artist`: `string` - current artist
|
||||
- `.Track`: `string` - current track
|
||||
- `.Icon`: `string` - icon (based on `.Status`)
|
||||
|
||||
[templates]: /docs/config-text#templates
|
||||
|
|
|
@ -62,8 +62,6 @@ if that color is visible against any of your backgrounds.
|
|||
- refresh_token: `string` - token from Strava login, see login link in section above. It has the following format: `1111111111111111111111111`
|
||||
- expires_in: `int` - the default timeout of the token from the Strava login
|
||||
- http_timeout: `int` - how long do you want to wait before you want to see your prompt more than your strava data? - defaults to 500ms
|
||||
- template: `string` - a go [text/template][go-text-template] template extended with [sprig][sprig] utilizing the properties below.
|
||||
See the example above. Make sure your NerdFont has the glyph you want or search for one at nerdfonts.com
|
||||
- CacheTimeout: `int` in minutes - How long do you want your numbers cached? - defaults to 5 min
|
||||
- RideIcon - defaults to `\uf5a2`
|
||||
- RunIcon - defaults to `\ufc0c`
|
||||
|
@ -72,7 +70,7 @@ See the example above. Make sure your NerdFont has the glyph you want or search
|
|||
- UnknownActivityIcon - defaults to `\ue213`
|
||||
- enable_hyperlink - display an hyperlink to activities - defaults to `false`
|
||||
|
||||
## Template Properties
|
||||
## [Template][templates] Properties
|
||||
|
||||
The properties below are available for use in your template
|
||||
|
||||
|
@ -94,7 +92,6 @@ The properties below are available for use in your template
|
|||
|
||||
Now, go out and have a fun ride or run!
|
||||
|
||||
[go-text-template]: https://golang.org/pkg/text/template/
|
||||
[sprig]: https://masterminds.github.io/sprig/
|
||||
[templates]: /docs/config-text#templates
|
||||
[strava]: http://www.strava.com/
|
||||
[strava-connect]: https://www.strava.com/oauth/authorize?client_id=76033&response_type=code&redirect_uri=https://ohmyposh.dev/api/auth&approval_prompt=force&scope=read,activity:read
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
---
|
||||
id: sysinfo
|
||||
title: SysInfo
|
||||
sidebar_label: SysInfo
|
||||
title: System Info
|
||||
sidebar_label: System Info
|
||||
---
|
||||
|
||||
## SysInfo
|
||||
|
@ -30,10 +30,8 @@ Display SysInfo.
|
|||
## Properties
|
||||
|
||||
- Precision: `int` - The precision used for any float values - defaults to 2
|
||||
- template: `string` - A go [text/template][go-text-template] template extended with [sprig][sprig] utilizing the
|
||||
properties below - defaults to `{{ round .PhysicalPercentUsed .Precision }}> `
|
||||
|
||||
## Template Properties
|
||||
## [Template][templates] Properties
|
||||
|
||||
- `.PhysicalTotalMemory`: `int` - is the total of used physical memory
|
||||
- `.PhysicalFreeMemory`: `int` - is the total of free physical memory
|
||||
|
@ -47,3 +45,4 @@ properties below - defaults to `{{ round .PhysicalPercentUsed .Precision }}> `
|
|||
- `.CPU`: `[]struct` - an array of [InfoStat][cpuinfo] object, you can use any property it has e.g. `(index .CPU 0).Cores`
|
||||
|
||||
[cpuinfo]: https://github.com/shirou/gopsutil/blob/78065a7ce2021f6a78c8d6f586a2683ba501dcec/cpu/cpu.go#L32
|
||||
[templates]: /docs/config-text#templates
|
|
@ -27,9 +27,8 @@ This requires a terraform binary in your PATH and will only show in directories
|
|||
}
|
||||
```
|
||||
|
||||
- template: `string` - A go [text/template][go-text-template] template extended with [sprig][sprig] utilizing the
|
||||
properties below - defaults to `{{ .WorkspaceName }}> `
|
||||
|
||||
## Template Properties
|
||||
## [Template][templates] Properties
|
||||
|
||||
- `.WorkspaceName`: `string` - is the current workspace name
|
||||
|
||||
[templates]: /docs/config-text#templates
|
||||
|
|
|
@ -35,12 +35,7 @@ New-Alias -Name 'Set-PoshContext' -Value 'Set-EnvVar' -Scope Global -Force
|
|||
|
||||
:::
|
||||
|
||||
## Properties
|
||||
|
||||
- template: `string` - text/icon to display. Powered by go [text/template][go-text-template] templates extended
|
||||
with [sprig][sprig] utilizing the properties below.
|
||||
|
||||
## Template Properties
|
||||
## [Template][templates] Properties
|
||||
|
||||
- `.Root`: `boolean` - is the current user root/admin or not
|
||||
- `.Path`: `string` - the current working directory
|
||||
|
@ -51,5 +46,4 @@ with [sprig][sprig] utilizing the properties below.
|
|||
- `.Env.VarName`: `string` - Any environment variable where `VarName` is the environment variable name
|
||||
|
||||
[coloring]: /docs/config-colors
|
||||
[go-text-template]: https://golang.org/pkg/text/template/
|
||||
[sprig]: https://masterminds.github.io/sprig/
|
||||
[templates]: /docs/config-text#templates
|
||||
|
|
|
@ -25,14 +25,7 @@ Show the current timestamp.
|
|||
|
||||
- time_format: `string` - format to use, follows the [golang standard][format] - defaults to `15:04:05`
|
||||
|
||||
[format]: https://yourbasic.org/golang/format-parse-string-time-date-example/
|
||||
|
||||
- template: `string` - A go [text/template][go-text-template] template extended with [sprig][sprig] utilizing the
|
||||
properties below. Only used when a value is set, making the above properties obsolete.
|
||||
|
||||
example: `{{ now | date \"January 02, 2006 15:04:05 PM\" | lower }}`
|
||||
|
||||
## Template Properties
|
||||
## [Template][templates] Properties
|
||||
|
||||
- `.CurrentDate`: `time` - The time to display(testing purpose)
|
||||
|
||||
|
@ -72,5 +65,5 @@ Show the current timestamp.
|
|||
- StampMicro = "Jan _2 15:04:05.000000"
|
||||
- StampNano = "Jan _2 15:04:05.000000000"
|
||||
|
||||
[go-text-template]: https://golang.org/pkg/text/template/
|
||||
[sprig]: https://masterminds.github.io/sprig/
|
||||
[templates]: /docs/config-text#templates
|
||||
[format]: https://yourbasic.org/golang/format-parse-string-time-date-example/
|
||||
|
|
|
@ -39,10 +39,8 @@ The free tier for is sufficient. You'll find the API key in your profile setting
|
|||
works if you can curl it yourself and a result. - defaults to ``
|
||||
- http_timeout: `int` - The default timeout for http request is 20ms. If no segment is shown, try increasing this timeout.
|
||||
- cache_timeout: `int` - The default timeout for request caching is 10m. A value of 0 disables the cache.
|
||||
- template: `string` - A go [text/template][go-text-template] template extended with [sprig][sprig] utilizing the
|
||||
properties below - defaults to `{{ secondsRound .CummulativeTotal.Seconds }}`
|
||||
|
||||
## Template Properties
|
||||
## [Template][templates] Properties
|
||||
|
||||
- `.CummulativeTotal`: `wtTotals` - object holding total tracked time values
|
||||
|
||||
|
@ -53,5 +51,4 @@ properties below - defaults to `{{ secondsRound .CummulativeTotal.Seconds }}`
|
|||
|
||||
[wt]: https://wakatime.com
|
||||
[wk-summaries]: https://wakatime.com/developers#summaries
|
||||
[go-text-template]: https://golang.org/pkg/text/template/
|
||||
[sprig]: https://masterminds.github.io/sprig/
|
||||
[templates]: /docs/config-text#templates
|
||||
|
|
|
@ -30,12 +30,7 @@ Currently only supports Windows and WSL. Pull requests for Darwin and Linux supp
|
|||
}
|
||||
```
|
||||
|
||||
## Properties
|
||||
|
||||
- template: `string` - A go [text/template][go-text-template] extended with [sprig][sprig] using the properties below.
|
||||
Defaults to `{{ if .Error }}{{ .Error }}{{ else }}\uFAA8 {{ .SSID }} {{ .Signal }}% {{ .ReceiveRate }}Mbps{{ end }}`
|
||||
|
||||
## Template Properties
|
||||
## [Template][templates] Properties
|
||||
|
||||
- `.SSID`: `string` - the SSID of the current wifi network
|
||||
- `.RadioType`: `string` - the radio type - _e.g. 802.11ac, 802.11ax, 802.11n, etc._
|
||||
|
@ -45,5 +40,4 @@ Defaults to `{{ if .Error }}{{ .Error }}{{ else }}\uFAA8 {{ .SSID }} {{ .Signal
|
|||
- `.TransmitRate`: `int` - the transmit rate (Mbps)
|
||||
- `.Signal`: `int` - the signal strength (%)
|
||||
|
||||
[go-text-template]: https://golang.org/pkg/text/template/
|
||||
[sprig]: https://masterminds.github.io/sprig/
|
||||
[templates]: /docs/config-text#templates
|
||||
|
|
|
@ -34,15 +34,12 @@ Supported registry key types:
|
|||
|
||||
## Properties
|
||||
|
||||
- path: `string` - registry path to the desired key using backslashes and with a valid root HKEY name.
|
||||
- path: `string` - registry path to the desired key using backslashes and with a valid root HKEY name.
|
||||
Ending path with \ will get the (Default) key from that path.
|
||||
- fallback: `string` - the value to fall back to if no entry is found
|
||||
- template: `string` - a go [text/template][go-text-template] template extended
|
||||
with [sprig][sprig] utilizing the properties below.
|
||||
|
||||
## Template Properties
|
||||
## [Template][templates] Properties
|
||||
|
||||
- .Value: `string` - The result of your query, or fallback if not found.
|
||||
|
||||
[go-text-template]: https://golang.org/pkg/text/template/
|
||||
[sprig]: https://masterminds.github.io/sprig/
|
||||
[templates]: /docs/config-text#templates
|
||||
|
|
|
@ -26,8 +26,7 @@ Remote Control password.
|
|||
"prefix": "\uF16A ",
|
||||
"playing_icon": "\uE602 ",
|
||||
"paused_icon": "\uF8E3 ",
|
||||
"stopped_icon": "\uF04D ",
|
||||
"track_separator" : " - "
|
||||
"stopped_icon": "\uF04D "
|
||||
}
|
||||
}
|
||||
```
|
||||
|
@ -37,5 +36,15 @@ Remote Control password.
|
|||
- playing_icon: `string` - text/icon to show when playing - defaults to `\uE602 `
|
||||
- paused_icon: `string` - text/icon to show when paused - defaults to `\uF8E3 `
|
||||
- stopped_icon: `string` - text/icon to show when paused - defaults to `\uF04D `
|
||||
- track_separator: `string` - text/icon to put between the artist and song name - defaults to ` - `
|
||||
- api_url: `string` - the YTMDA Remote Control API URL- defaults to `http://127.0.0.1:9863`
|
||||
|
||||
## [Template][templates] Properties
|
||||
|
||||
- `.Status`: `string` - player status (`playing`, `paused`, `stopped`)
|
||||
- `.Artist`: `string` - current artist
|
||||
- `.Track`: `string` - current track
|
||||
- `.Icon`: `string` - icon (based on `.Status`)
|
||||
|
||||
[templates]: /docs/config-text#templates
|
||||
|
||||
[templates]: /docs/config-text#templates
|
||||
|
|
|
@ -25,7 +25,7 @@ module.exports = {
|
|||
"config-sample",
|
||||
"config-title",
|
||||
"config-colors",
|
||||
"config-text-style",
|
||||
"config-text",
|
||||
"config-transient",
|
||||
"config-tooltips",
|
||||
"config-fonts"
|
||||
|
|
|
@ -558,6 +558,7 @@ func (env *environment) templateCache() *templateCache {
|
|||
Root: env.isRunningAsRoot(),
|
||||
Shell: env.getShellName(),
|
||||
Code: env.lastErrorCode(),
|
||||
WSL: env.isWsl(),
|
||||
}
|
||||
tmplCache.Env = make(map[string]string)
|
||||
const separator = "="
|
||||
|
|
|
@ -10,7 +10,11 @@ type angular struct {
|
|||
}
|
||||
|
||||
func (a *angular) string() string {
|
||||
return a.language.string()
|
||||
segmentTemplate := a.language.props.getString(SegmentTemplate, "")
|
||||
if len(segmentTemplate) == 0 {
|
||||
return a.language.string()
|
||||
}
|
||||
return a.language.renderTemplate(segmentTemplate, a)
|
||||
}
|
||||
|
||||
func (a *angular) init(props Properties, env Environment) {
|
||||
|
|
|
@ -5,7 +5,11 @@ type azfunc struct {
|
|||
}
|
||||
|
||||
func (az *azfunc) string() string {
|
||||
return az.language.string()
|
||||
segmentTemplate := az.language.props.getString(SegmentTemplate, "")
|
||||
if len(segmentTemplate) == 0 {
|
||||
return az.language.string()
|
||||
}
|
||||
return az.language.renderTemplate(segmentTemplate, az)
|
||||
}
|
||||
|
||||
func (az *azfunc) init(props Properties, env Environment) {
|
||||
|
|
|
@ -5,7 +5,8 @@ import "strings"
|
|||
type command struct {
|
||||
props Properties
|
||||
env Environment
|
||||
value string
|
||||
|
||||
Output string
|
||||
}
|
||||
|
||||
const (
|
||||
|
@ -24,9 +25,9 @@ func (c *command) enabled() bool {
|
|||
if strings.Contains(command, "||") {
|
||||
commands := strings.Split(command, "||")
|
||||
for _, cmd := range commands {
|
||||
output := c.env.runShellCommand(shell, cmd)
|
||||
output := c.env.runShellCommand(shell, strings.TrimSpace(cmd))
|
||||
if output != "" {
|
||||
c.value = output
|
||||
c.Output = output
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
@ -35,17 +36,27 @@ func (c *command) enabled() bool {
|
|||
var output string
|
||||
commands := strings.Split(command, "&&")
|
||||
for _, cmd := range commands {
|
||||
output += c.env.runShellCommand(shell, cmd)
|
||||
output += c.env.runShellCommand(shell, strings.TrimSpace(cmd))
|
||||
}
|
||||
c.value = output
|
||||
return c.value != ""
|
||||
c.Output = output
|
||||
return c.Output != ""
|
||||
}
|
||||
c.value = c.env.runShellCommand(shell, command)
|
||||
return c.value != ""
|
||||
c.Output = c.env.runShellCommand(shell, strings.TrimSpace(command))
|
||||
return c.Output != ""
|
||||
}
|
||||
|
||||
func (c *command) string() string {
|
||||
return c.value
|
||||
segmentTemplate := c.props.getString(SegmentTemplate, "{{.Output}}")
|
||||
template := &textTemplate{
|
||||
Template: segmentTemplate,
|
||||
Context: c,
|
||||
Env: c.env,
|
||||
}
|
||||
text, err := template.render()
|
||||
if err != nil {
|
||||
return err.Error()
|
||||
}
|
||||
return text
|
||||
}
|
||||
|
||||
func (c *command) init(props Properties, env Environment) {
|
||||
|
|
|
@ -1,5 +1,3 @@
|
|||
//go:build !windows
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
|
@ -9,11 +7,10 @@ import (
|
|||
)
|
||||
|
||||
func TestExecuteCommand(t *testing.T) {
|
||||
env := &environment{}
|
||||
debug := false
|
||||
env.init(&args{
|
||||
Debug: &debug,
|
||||
})
|
||||
env := new(MockedEnvironment)
|
||||
env.On("hasCommand", "bash").Return(true)
|
||||
env.On("runShellCommand", "bash", "echo hello").Return("hello")
|
||||
env.onTemplate()
|
||||
props := properties{
|
||||
Command: "echo hello",
|
||||
}
|
||||
|
@ -27,11 +24,12 @@ func TestExecuteCommand(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestExecuteMultipleCommandsOrFirst(t *testing.T) {
|
||||
env := &environment{}
|
||||
debug := false
|
||||
env.init(&args{
|
||||
Debug: &debug,
|
||||
})
|
||||
env := new(MockedEnvironment)
|
||||
env.On("hasCommand", "bash").Return(true)
|
||||
env.On("runShellCommand", "bash", "exit 1").Return("")
|
||||
env.On("runShellCommand", "bash", "echo hello").Return("hello")
|
||||
env.On("runShellCommand", "bash", "exit 1 || echo hello").Return("hello")
|
||||
env.onTemplate()
|
||||
props := properties{
|
||||
Command: "exit 1 || echo hello",
|
||||
}
|
||||
|
@ -45,11 +43,11 @@ func TestExecuteMultipleCommandsOrFirst(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestExecuteMultipleCommandsOrSecond(t *testing.T) {
|
||||
env := &environment{}
|
||||
debug := false
|
||||
env.init(&args{
|
||||
Debug: &debug,
|
||||
})
|
||||
env := new(MockedEnvironment)
|
||||
env.On("hasCommand", "bash").Return(true)
|
||||
env.On("runShellCommand", "bash", "echo hello").Return("hello")
|
||||
env.On("runShellCommand", "bash", "echo world").Return("world")
|
||||
env.onTemplate()
|
||||
props := properties{
|
||||
Command: "echo hello || echo world",
|
||||
}
|
||||
|
@ -63,11 +61,11 @@ func TestExecuteMultipleCommandsOrSecond(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestExecuteMultipleCommandsAnd(t *testing.T) {
|
||||
env := &environment{}
|
||||
debug := false
|
||||
env.init(&args{
|
||||
Debug: &debug,
|
||||
})
|
||||
env := new(MockedEnvironment)
|
||||
env.On("hasCommand", "bash").Return(true)
|
||||
env.On("runShellCommand", "bash", "echo hello").Return("hello")
|
||||
env.On("runShellCommand", "bash", "echo world").Return("world")
|
||||
env.onTemplate()
|
||||
props := properties{
|
||||
Command: "echo hello && echo world",
|
||||
}
|
||||
|
@ -81,11 +79,10 @@ func TestExecuteMultipleCommandsAnd(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestExecuteSingleCommandEmpty(t *testing.T) {
|
||||
env := &environment{}
|
||||
debug := false
|
||||
env.init(&args{
|
||||
Debug: &debug,
|
||||
})
|
||||
env := new(MockedEnvironment)
|
||||
env.On("hasCommand", "bash").Return(true)
|
||||
env.On("runShellCommand", "bash", "").Return("")
|
||||
env.onTemplate()
|
||||
props := properties{
|
||||
Command: "",
|
||||
}
|
||||
|
@ -98,11 +95,10 @@ func TestExecuteSingleCommandEmpty(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestExecuteSingleCommandNoCommandProperty(t *testing.T) {
|
||||
env := &environment{}
|
||||
debug := false
|
||||
env.init(&args{
|
||||
Debug: &debug,
|
||||
})
|
||||
env := new(MockedEnvironment)
|
||||
env.On("hasCommand", "bash").Return(true)
|
||||
env.On("runShellCommand", "bash", "echo no command specified").Return("no command specified")
|
||||
env.onTemplate()
|
||||
var props properties
|
||||
c := &command{
|
||||
props: props,
|
||||
|
@ -110,15 +106,14 @@ func TestExecuteSingleCommandNoCommandProperty(t *testing.T) {
|
|||
}
|
||||
enabled := c.enabled()
|
||||
assert.True(t, enabled)
|
||||
assert.Equal(t, "no command specified", c.value)
|
||||
assert.Equal(t, "no command specified", c.Output)
|
||||
}
|
||||
|
||||
func TestExecuteMultipleCommandsAndDisabled(t *testing.T) {
|
||||
env := &environment{}
|
||||
debug := false
|
||||
env.init(&args{
|
||||
Debug: &debug,
|
||||
})
|
||||
env := new(MockedEnvironment)
|
||||
env.On("hasCommand", "bash").Return(true)
|
||||
env.On("runShellCommand", "bash", "echo").Return("")
|
||||
env.onTemplate()
|
||||
props := properties{
|
||||
Command: "echo && echo",
|
||||
}
|
||||
|
@ -131,11 +126,11 @@ func TestExecuteMultipleCommandsAndDisabled(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestExecuteMultipleCommandsOrDisabled(t *testing.T) {
|
||||
env := &environment{}
|
||||
debug := false
|
||||
env.init(&args{
|
||||
Debug: &debug,
|
||||
})
|
||||
env := new(MockedEnvironment)
|
||||
env.On("hasCommand", "bash").Return(true)
|
||||
env.On("runShellCommand", "bash", "echo").Return("")
|
||||
env.On("runShellCommand", "bash", "echo|| echo").Return("")
|
||||
env.onTemplate()
|
||||
props := properties{
|
||||
Command: "echo|| echo",
|
||||
}
|
||||
|
|
|
@ -5,7 +5,11 @@ type crystal struct {
|
|||
}
|
||||
|
||||
func (c *crystal) string() string {
|
||||
return c.language.string()
|
||||
segmentTemplate := c.language.props.getString(SegmentTemplate, "")
|
||||
if len(segmentTemplate) == 0 {
|
||||
return c.language.string()
|
||||
}
|
||||
return c.language.renderTemplate(segmentTemplate, c)
|
||||
}
|
||||
|
||||
func (c *crystal) init(props Properties, env Environment) {
|
||||
|
|
|
@ -5,7 +5,11 @@ type dart struct {
|
|||
}
|
||||
|
||||
func (d *dart) string() string {
|
||||
return d.language.string()
|
||||
segmentTemplate := d.language.props.getString(SegmentTemplate, "")
|
||||
if len(segmentTemplate) == 0 {
|
||||
return d.language.string()
|
||||
}
|
||||
return d.language.renderTemplate(segmentTemplate, d)
|
||||
}
|
||||
|
||||
func (d *dart) init(props Properties, env Environment) {
|
||||
|
|
|
@ -181,13 +181,14 @@ const (
|
|||
|
||||
func (e *exit) deprecatedString() string {
|
||||
colorBackground := e.props.getBool(ColorBackground, false)
|
||||
if e.code != 0 && !colorBackground {
|
||||
code := e.env.lastErrorCode()
|
||||
if code != 0 && !colorBackground {
|
||||
e.props.set(ForegroundOverride, e.props.getColor(ErrorColor, e.props.getColor(ForegroundOverride, "")))
|
||||
}
|
||||
if e.code != 0 && colorBackground {
|
||||
if code != 0 && colorBackground {
|
||||
e.props.set(BackgroundOverride, e.props.getColor(ErrorColor, e.props.getColor(BackgroundOverride, "")))
|
||||
}
|
||||
if e.code == 0 {
|
||||
if code == 0 {
|
||||
return e.props.getString(SuccessIcon, "")
|
||||
}
|
||||
errorIcon := e.props.getString(ErrorIcon, "")
|
||||
|
@ -195,7 +196,7 @@ func (e *exit) deprecatedString() string {
|
|||
return errorIcon
|
||||
}
|
||||
if e.props.getBool(AlwaysNumeric, false) {
|
||||
return fmt.Sprintf("%s%d", errorIcon, e.code)
|
||||
return fmt.Sprintf("%s%d", errorIcon, code)
|
||||
}
|
||||
return fmt.Sprintf("%s%s", errorIcon, e.Text)
|
||||
}
|
||||
|
@ -297,7 +298,7 @@ func (s *session) legacyEnabled() bool {
|
|||
return true
|
||||
}
|
||||
|
||||
func (s *session) getFormattedText() string {
|
||||
func (s *session) legacyString() string {
|
||||
separator := ""
|
||||
if s.props.getBool(DisplayHost, true) && s.props.getBool(DisplayUser, true) {
|
||||
separator = s.props.getString(UserInfoSeparator, "@")
|
||||
|
@ -336,17 +337,9 @@ func (l *language) string() string {
|
|||
if !l.props.getOneOfBool(FetchVersion, DisplayVersion, true) {
|
||||
return ""
|
||||
}
|
||||
|
||||
err := l.setVersion()
|
||||
if err != nil {
|
||||
l.Error = err.Error()
|
||||
}
|
||||
displayError := l.props.getBool(DisplayError, true)
|
||||
if err != nil && displayError {
|
||||
return err.Error()
|
||||
}
|
||||
if err != nil {
|
||||
return ""
|
||||
if len(l.Error) != 0 && displayError {
|
||||
return l.Error
|
||||
}
|
||||
|
||||
segmentTemplate := l.props.getString(SegmentTemplate, "{{ .Full }}")
|
||||
|
@ -458,3 +451,11 @@ func (e *envvar) init(props Properties, env Environment) {
|
|||
e.props = props
|
||||
e.env = env
|
||||
}
|
||||
|
||||
// Dotnet
|
||||
|
||||
const (
|
||||
// UnsupportedDotnetVersionIcon is displayed when the dotnet version in
|
||||
// the current folder isn't supported by the installed dotnet SDK set.
|
||||
UnsupportedDotnetVersionIcon Property = "unsupported_version_icon"
|
||||
)
|
||||
|
|
|
@ -2,6 +2,7 @@ package main
|
|||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"testing"
|
||||
|
||||
"github.com/distatus/battery"
|
||||
|
@ -271,18 +272,26 @@ func TestStatusColorsWithoutDisplayStatus(t *testing.T) {
|
|||
status := "## main...origin/main [ahead 33]\n M myfile"
|
||||
env := new(MockedEnvironment)
|
||||
env.On("isWsl").Return(false)
|
||||
env.On("inWSLSharedDrive").Return(false)
|
||||
env.On("getRuntimeGOOS").Return("unix")
|
||||
env.On("hasFolder", "/rebase-merge").Return(false)
|
||||
env.On("hasFolder", "/rebase-apply").Return(false)
|
||||
env.On("hasFolder", "/sequencer").Return(false)
|
||||
env.On("getFileContent", "/HEAD").Return(status)
|
||||
env.On("hasFilesInDir", "", "CHERRY_PICK_HEAD").Return(false)
|
||||
env.On("hasFilesInDir", "", "REVERT_HEAD").Return(false)
|
||||
env.On("hasFilesInDir", "", "MERGE_MSG").Return(false)
|
||||
env.On("hasFilesInDir", "", "MERGE_HEAD").Return(false)
|
||||
env.On("hasFilesInDir", "", "sequencer/todo").Return(false)
|
||||
env.mockGitCommand("", "describe", "--tags", "--exact-match")
|
||||
env.mockGitCommand(status, "status", "-unormal", "--branch", "--porcelain=2")
|
||||
env.On("hasCommand", "git").Return(true)
|
||||
fileInfo := &fileInfo{
|
||||
path: "/dir/hello",
|
||||
parentFolder: "/dir",
|
||||
isDir: true,
|
||||
}
|
||||
env.On("hasParentFilePath", ".git").Return(fileInfo, nil)
|
||||
env.On("getFileContent", fmt.Sprintf("%s/HEAD", fileInfo.path)).Return("")
|
||||
env.mockGitCommand(fileInfo.path, "", "describe", "--tags", "--exact-match")
|
||||
env.mockGitCommand(fileInfo.path, status, "status", "-unormal", "--branch", "--porcelain=2")
|
||||
env.On("hasFolder", fmt.Sprintf("%s/rebase-merge", fileInfo.path)).Return(false)
|
||||
env.On("hasFolder", fmt.Sprintf("%s/rebase-apply", fileInfo.path)).Return(false)
|
||||
env.On("hasFilesInDir", fileInfo.path, "CHERRY_PICK_HEAD").Return(false)
|
||||
env.On("hasFilesInDir", fileInfo.path, "REVERT_HEAD").Return(false)
|
||||
env.On("hasFilesInDir", fileInfo.path, "MERGE_MSG").Return(false)
|
||||
env.On("hasFilesInDir", fileInfo.path, "MERGE_HEAD").Return(false)
|
||||
env.On("hasFilesInDir", fileInfo.path, "sequencer/todo").Return(false)
|
||||
|
||||
props := properties{
|
||||
DisplayStatus: false,
|
||||
StatusColorsEnabled: true,
|
||||
|
@ -297,6 +306,7 @@ func TestStatusColorsWithoutDisplayStatus(t *testing.T) {
|
|||
}
|
||||
g.Working = &GitStatus{}
|
||||
g.Staging = &GitStatus{}
|
||||
_ = g.enabled()
|
||||
g.string()
|
||||
assert.Equal(t, expected, g.props.getColor(BackgroundOverride, ""))
|
||||
}
|
||||
|
@ -335,7 +345,8 @@ func TestExitWriterDeprecatedString(t *testing.T) {
|
|||
env: env,
|
||||
props: props,
|
||||
}
|
||||
assert.Equal(t, tc.Expected, e.string())
|
||||
_ = e.enabled()
|
||||
assert.Equal(t, tc.Expected, e.deprecatedString())
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -2,23 +2,19 @@ package main
|
|||
|
||||
type dotnet struct {
|
||||
language
|
||||
|
||||
Unsupported bool
|
||||
}
|
||||
|
||||
const (
|
||||
// UnsupportedDotnetVersionIcon is displayed when the dotnet version in
|
||||
// the current folder isn't supported by the installed dotnet SDK set.
|
||||
UnsupportedDotnetVersionIcon Property = "unsupported_version_icon"
|
||||
)
|
||||
|
||||
func (d *dotnet) string() string {
|
||||
version := d.language.string()
|
||||
|
||||
exitCode := d.language.exitCode
|
||||
if exitCode == dotnetExitCode {
|
||||
segmentTemplate := d.language.props.getString(SegmentTemplate, "")
|
||||
if len(segmentTemplate) != 0 {
|
||||
return d.language.renderTemplate(segmentTemplate, d)
|
||||
}
|
||||
if d.Unsupported {
|
||||
return d.language.props.getString(UnsupportedDotnetVersionIcon, "\uf071 ")
|
||||
}
|
||||
|
||||
return version
|
||||
return d.language.string()
|
||||
}
|
||||
|
||||
func (d *dotnet) init(props Properties, env Environment) {
|
||||
|
@ -39,5 +35,10 @@ func (d *dotnet) init(props Properties, env Environment) {
|
|||
}
|
||||
|
||||
func (d *dotnet) enabled() bool {
|
||||
return d.language.enabled()
|
||||
enabled := d.language.enabled()
|
||||
if !enabled {
|
||||
return false
|
||||
}
|
||||
d.Unsupported = d.language.exitCode == dotnetExitCode
|
||||
return true
|
||||
}
|
||||
|
|
|
@ -60,7 +60,17 @@ func (t *executiontime) enabled() bool {
|
|||
}
|
||||
|
||||
func (t *executiontime) string() string {
|
||||
return t.FormattedMs
|
||||
segmentTemplate := t.props.getString(SegmentTemplate, "{{.FormattedMs}}")
|
||||
template := &textTemplate{
|
||||
Template: segmentTemplate,
|
||||
Context: t,
|
||||
Env: t.env,
|
||||
}
|
||||
text, err := template.render()
|
||||
if err != nil {
|
||||
return err.Error()
|
||||
}
|
||||
return text
|
||||
}
|
||||
|
||||
func (t *executiontime) init(props Properties, env Environment) {
|
||||
|
|
|
@ -6,11 +6,11 @@ type exit struct {
|
|||
props Properties
|
||||
env Environment
|
||||
|
||||
code int
|
||||
Text string
|
||||
}
|
||||
|
||||
func (e *exit) enabled() bool {
|
||||
e.Text = e.getMeaningFromExitCode(e.env.lastErrorCode())
|
||||
if e.props.getBool(AlwaysEnabled, false) {
|
||||
return true
|
||||
}
|
||||
|
@ -18,17 +18,6 @@ func (e *exit) enabled() bool {
|
|||
}
|
||||
|
||||
func (e *exit) string() string {
|
||||
return e.getFormattedText()
|
||||
}
|
||||
|
||||
func (e *exit) init(props Properties, env Environment) {
|
||||
e.props = props
|
||||
e.env = env
|
||||
}
|
||||
|
||||
func (e *exit) getFormattedText() string {
|
||||
e.code = e.env.lastErrorCode()
|
||||
e.Text = e.getMeaningFromExitCode()
|
||||
segmentTemplate := e.props.getString(SegmentTemplate, "")
|
||||
if len(segmentTemplate) == 0 {
|
||||
return e.deprecatedString()
|
||||
|
@ -45,8 +34,13 @@ func (e *exit) getFormattedText() string {
|
|||
return text
|
||||
}
|
||||
|
||||
func (e *exit) getMeaningFromExitCode() string {
|
||||
switch e.code {
|
||||
func (e *exit) init(props Properties, env Environment) {
|
||||
e.props = props
|
||||
e.env = env
|
||||
}
|
||||
|
||||
func (e *exit) getMeaningFromExitCode(code int) string {
|
||||
switch code {
|
||||
case 1:
|
||||
return "ERROR"
|
||||
case 2:
|
||||
|
@ -100,6 +94,6 @@ func (e *exit) getMeaningFromExitCode() string {
|
|||
case 128 + 22:
|
||||
return "SIGTTOU"
|
||||
default:
|
||||
return strconv.Itoa(e.code)
|
||||
return strconv.Itoa(code)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -59,8 +59,7 @@ func TestGetMeaningFromExitCode(t *testing.T) {
|
|||
errorMap[7000] = "7000"
|
||||
for exitcode, want := range errorMap {
|
||||
e := &exit{}
|
||||
e.code = exitcode
|
||||
assert.Equal(t, want, e.getMeaningFromExitCode())
|
||||
assert.Equal(t, want, e.getMeaningFromExitCode(exitcode))
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -105,6 +105,35 @@ const (
|
|||
)
|
||||
|
||||
func (g *git) enabled() bool {
|
||||
if !g.shouldDisplay() {
|
||||
return false
|
||||
}
|
||||
statusColorsEnabled := g.props.getBool(StatusColorsEnabled, false)
|
||||
displayStatus := g.props.getOneOfBool(FetchStatus, DisplayStatus, false)
|
||||
if !displayStatus {
|
||||
g.setPrettyHEADName()
|
||||
}
|
||||
if displayStatus || statusColorsEnabled {
|
||||
g.setGitStatus()
|
||||
g.setGitHEADContext()
|
||||
g.setBranchStatus()
|
||||
} else {
|
||||
g.Working = &GitStatus{}
|
||||
g.Staging = &GitStatus{}
|
||||
}
|
||||
if g.Upstream != "" && g.props.getOneOfBool(FetchUpstreamIcon, DisplayUpstreamIcon, false) {
|
||||
g.UpstreamIcon = g.getUpstreamIcon()
|
||||
}
|
||||
if g.props.getOneOfBool(FetchStashCount, DisplayStashCount, false) {
|
||||
g.StashCount = g.getStashContext()
|
||||
}
|
||||
if g.props.getOneOfBool(FetchWorktreeCount, DisplayWorktreeCount, false) {
|
||||
g.WorktreeCount = g.getWorktreeContext()
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
func (g *git) shouldDisplay() bool {
|
||||
// when in wsl/wsl2 and in a windows shared folder
|
||||
// we must use git.exe and convert paths accordingly
|
||||
// for worktrees, stashes, and path to work
|
||||
|
@ -162,36 +191,13 @@ func (g *git) enabled() bool {
|
|||
}
|
||||
|
||||
func (g *git) string() string {
|
||||
statusColorsEnabled := g.props.getBool(StatusColorsEnabled, false)
|
||||
displayStatus := g.props.getOneOfBool(FetchStatus, DisplayStatus, false)
|
||||
if !displayStatus {
|
||||
g.setPrettyHEADName()
|
||||
}
|
||||
if displayStatus || statusColorsEnabled {
|
||||
g.setGitStatus()
|
||||
g.setGitHEADContext()
|
||||
g.setBranchStatus()
|
||||
} else {
|
||||
g.Working = &GitStatus{}
|
||||
g.Staging = &GitStatus{}
|
||||
}
|
||||
if g.Upstream != "" && g.props.getOneOfBool(FetchUpstreamIcon, DisplayUpstreamIcon, false) {
|
||||
g.UpstreamIcon = g.getUpstreamIcon()
|
||||
}
|
||||
if g.props.getOneOfBool(FetchStashCount, DisplayStashCount, false) {
|
||||
g.StashCount = g.getStashContext()
|
||||
}
|
||||
if g.props.getOneOfBool(FetchWorktreeCount, DisplayWorktreeCount, false) {
|
||||
g.WorktreeCount = g.getWorktreeContext()
|
||||
}
|
||||
// use template if available
|
||||
segmentTemplate := g.props.getString(SegmentTemplate, "")
|
||||
if len(segmentTemplate) > 0 {
|
||||
return g.templateString(segmentTemplate)
|
||||
}
|
||||
// legacy render string if no template
|
||||
// remove this for 6.0
|
||||
return g.deprecatedString(statusColorsEnabled)
|
||||
return g.deprecatedString(g.props.getBool(StatusColorsEnabled, false))
|
||||
}
|
||||
|
||||
func (g *git) templateString(segmentTemplate string) string {
|
||||
|
|
|
@ -29,16 +29,18 @@ func TestEnabledGitNotFound(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestEnabledInWorkingDirectory(t *testing.T) {
|
||||
env := new(MockedEnvironment)
|
||||
env.On("inWSLSharedDrive").Return(false)
|
||||
env.On("hasCommand", "git").Return(true)
|
||||
env.On("getRuntimeGOOS").Return("")
|
||||
env.On("isWsl").Return(false)
|
||||
fileInfo := &fileInfo{
|
||||
path: "/dir/hello",
|
||||
parentFolder: "/dir",
|
||||
isDir: true,
|
||||
}
|
||||
env := new(MockedEnvironment)
|
||||
env.On("inWSLSharedDrive").Return(false)
|
||||
env.On("hasCommand", "git").Return(true)
|
||||
env.On("getRuntimeGOOS").Return("")
|
||||
env.On("getFileContent", "/dir/hello/HEAD").Return("")
|
||||
env.mockGitCommand(fileInfo.path, "", "describe", "--tags", "--exact-match")
|
||||
env.On("isWsl").Return(false)
|
||||
env.On("hasParentFilePath", ".git").Return(fileInfo, nil)
|
||||
g := &git{
|
||||
scm: scm{
|
||||
|
@ -61,6 +63,8 @@ func TestEnabledInWorkingTree(t *testing.T) {
|
|||
parentFolder: "/dev/folder_worktree",
|
||||
isDir: false,
|
||||
}
|
||||
env.On("getFileContent", "/dev/real_folder/.git/worktrees/folder_worktree/HEAD").Return("")
|
||||
env.mockGitCommand(fileInfo.parentFolder, "", "describe", "--tags", "--exact-match")
|
||||
env.On("hasParentFilePath", ".git").Return(fileInfo, nil)
|
||||
env.On("getFileContent", "/dev/folder_worktree/.git").Return("gitdir: /dev/real_folder/.git/worktrees/folder_worktree")
|
||||
env.On("getFileContent", "/dev/real_folder/.git/worktrees/folder_worktree/gitdir").Return("/dev/folder_worktree.git\n")
|
||||
|
@ -86,6 +90,8 @@ func TestEnabledInSubmodule(t *testing.T) {
|
|||
parentFolder: "/dev/parent/test-submodule",
|
||||
isDir: false,
|
||||
}
|
||||
env.On("getFileContent", "/dev/parent/test-submodule/../.git/modules/test-submodule/HEAD").Return("")
|
||||
env.mockGitCommand("/dev/parent/test-submodule/../.git/modules/test-submodule", "", "describe", "--tags", "--exact-match")
|
||||
env.On("hasParentFilePath", ".git").Return(fileInfo, nil)
|
||||
env.On("getFileContent", "/dev/parent/test-submodule/.git").Return("gitdir: ../.git/modules/test-submodule")
|
||||
env.On("getFileContent", "/dev/parent/.git/modules/test-submodule").Return("/dev/folder_worktree.git\n")
|
||||
|
@ -119,8 +125,8 @@ func TestGetGitOutputForCommand(t *testing.T) {
|
|||
assert.Equal(t, want, got)
|
||||
}
|
||||
|
||||
func (m *MockedEnvironment) mockGitCommand(returnValue string, args ...string) {
|
||||
args = append([]string{"-C", "", "--no-optional-locks", "-c", "core.quotepath=false", "-c", "color.status=false"}, args...)
|
||||
func (m *MockedEnvironment) mockGitCommand(dir, returnValue string, args ...string) {
|
||||
args = append([]string{"-C", dir, "--no-optional-locks", "-c", "core.quotepath=false", "-c", "color.status=false"}, args...)
|
||||
m.On("runCommand", "git", args).Return(returnValue, nil)
|
||||
}
|
||||
|
||||
|
@ -231,9 +237,9 @@ func TestSetGitHEADContextClean(t *testing.T) {
|
|||
env.On("inWSLSharedDrive").Return(false)
|
||||
env.On("getRuntimeGOOS").Return("unix")
|
||||
env.On("isWsl").Return(false)
|
||||
env.mockGitCommand("", "describe", "--tags", "--exact-match")
|
||||
env.mockGitCommand(tc.Theirs, "name-rev", "--name-only", "--exclude=tags/*", tc.Theirs)
|
||||
env.mockGitCommand(tc.Ours, "name-rev", "--name-only", "--exclude=tags/*", tc.Ours)
|
||||
env.mockGitCommand("", "", "describe", "--tags", "--exact-match")
|
||||
env.mockGitCommand("", tc.Theirs, "name-rev", "--name-only", "--exclude=tags/*", tc.Theirs)
|
||||
env.mockGitCommand("", tc.Ours, "name-rev", "--name-only", "--exclude=tags/*", tc.Ours)
|
||||
// rebase merge
|
||||
env.On("hasFolder", "/rebase-merge").Return(tc.RebaseMerge)
|
||||
env.On("getFileContent", "/rebase-merge/head-name").Return(tc.Ours)
|
||||
|
@ -299,7 +305,7 @@ func TestSetPrettyHEADName(t *testing.T) {
|
|||
env.On("getFileContent", "/HEAD").Return(tc.HEAD)
|
||||
env.On("getRuntimeGOOS").Return("unix")
|
||||
env.On("isWsl").Return(false)
|
||||
env.mockGitCommand(tc.Tag, "describe", "--tags", "--exact-match")
|
||||
env.mockGitCommand("", tc.Tag, "describe", "--tags", "--exact-match")
|
||||
g := &git{
|
||||
scm: scm{
|
||||
env: env,
|
||||
|
@ -416,7 +422,7 @@ func TestSetGitStatus(t *testing.T) {
|
|||
env := new(MockedEnvironment)
|
||||
env.On("getRuntimeGOOS").Return("unix")
|
||||
env.On("isWsl").Return(false)
|
||||
env.mockGitCommand(strings.ReplaceAll(tc.Output, "\t", ""), "status", "-unormal", "--branch", "--porcelain=2")
|
||||
env.mockGitCommand("", strings.ReplaceAll(tc.Output, "\t", ""), "status", "-unormal", "--branch", "--porcelain=2")
|
||||
g := &git{
|
||||
scm: scm{
|
||||
env: env,
|
||||
|
|
|
@ -13,7 +13,11 @@ const (
|
|||
)
|
||||
|
||||
func (g *golang) string() string {
|
||||
return g.language.string()
|
||||
segmentTemplate := g.language.props.getString(SegmentTemplate, "")
|
||||
if len(segmentTemplate) == 0 {
|
||||
return g.language.string()
|
||||
}
|
||||
return g.language.renderTemplate(segmentTemplate, g)
|
||||
}
|
||||
|
||||
func (g *golang) init(props Properties, env Environment) {
|
||||
|
|
|
@ -7,7 +7,11 @@ type java struct {
|
|||
}
|
||||
|
||||
func (j *java) string() string {
|
||||
return j.language.string()
|
||||
segmentTemplate := j.language.props.getString(SegmentTemplate, "")
|
||||
if len(segmentTemplate) == 0 {
|
||||
return j.language.string()
|
||||
}
|
||||
return j.language.renderTemplate(segmentTemplate, j)
|
||||
}
|
||||
|
||||
func (j *java) init(props Properties, env Environment) {
|
||||
|
|
|
@ -5,7 +5,11 @@ type julia struct {
|
|||
}
|
||||
|
||||
func (j *julia) string() string {
|
||||
return j.language.string()
|
||||
segmentTemplate := j.language.props.getString(SegmentTemplate, "")
|
||||
if len(segmentTemplate) == 0 {
|
||||
return j.language.string()
|
||||
}
|
||||
return j.language.renderTemplate(segmentTemplate, j)
|
||||
}
|
||||
|
||||
func (j *julia) init(props Properties, env Environment) {
|
||||
|
|
|
@ -84,13 +84,6 @@ const (
|
|||
)
|
||||
|
||||
func (l *language) renderTemplate(segmentTemplate string, context SegmentWriter) string {
|
||||
if l.props.getBool(FetchVersion, true) {
|
||||
err := l.setVersion()
|
||||
if err != nil {
|
||||
l.Error = err.Error()
|
||||
}
|
||||
}
|
||||
|
||||
template := &textTemplate{
|
||||
Template: segmentTemplate,
|
||||
Context: context,
|
||||
|
@ -101,6 +94,7 @@ func (l *language) renderTemplate(segmentTemplate string, context SegmentWriter)
|
|||
return err.Error()
|
||||
}
|
||||
|
||||
// TODO: this needs to be removed or refactored
|
||||
if !l.props.getBool(EnableHyperlink, false) {
|
||||
return text
|
||||
}
|
||||
|
@ -124,31 +118,40 @@ func (l *language) renderTemplate(segmentTemplate string, context SegmentWriter)
|
|||
func (l *language) enabled() bool {
|
||||
// override default extensions if needed
|
||||
l.extensions = l.props.getStringArray(LanguageExtensions, l.extensions)
|
||||
|
||||
inHomeDir := func() bool {
|
||||
return l.env.pwd() == l.env.homeDir()
|
||||
}
|
||||
var enabled bool
|
||||
homeEnabled := l.props.getBool(HomeEnabled, l.homeEnabled)
|
||||
if inHomeDir() && !homeEnabled {
|
||||
return false
|
||||
enabled = false
|
||||
} else {
|
||||
// set default mode when not set
|
||||
if len(l.displayMode) == 0 {
|
||||
l.displayMode = l.props.getString(DisplayMode, DisplayModeFiles)
|
||||
}
|
||||
l.loadLanguageContext()
|
||||
switch l.displayMode {
|
||||
case DisplayModeAlways:
|
||||
enabled = true
|
||||
case DisplayModeEnvironment:
|
||||
enabled = l.inLanguageContext()
|
||||
case DisplayModeFiles:
|
||||
enabled = l.hasLanguageFiles()
|
||||
case DisplayModeContext:
|
||||
fallthrough
|
||||
default:
|
||||
enabled = l.hasLanguageFiles() || l.inLanguageContext()
|
||||
}
|
||||
}
|
||||
// set default mode when not set
|
||||
if len(l.displayMode) == 0 {
|
||||
l.displayMode = l.props.getString(DisplayMode, DisplayModeFiles)
|
||||
if !enabled || !l.props.getOneOfBool(FetchVersion, DisplayVersion, true) {
|
||||
return enabled
|
||||
}
|
||||
l.loadLanguageContext()
|
||||
switch l.displayMode {
|
||||
case DisplayModeAlways:
|
||||
return true
|
||||
case DisplayModeEnvironment:
|
||||
return l.inLanguageContext()
|
||||
case DisplayModeFiles:
|
||||
return l.hasLanguageFiles()
|
||||
case DisplayModeContext:
|
||||
fallthrough
|
||||
default:
|
||||
return l.hasLanguageFiles() || l.inLanguageContext()
|
||||
err := l.setVersion()
|
||||
if err != nil {
|
||||
l.Error = err.Error()
|
||||
}
|
||||
return enabled
|
||||
}
|
||||
|
||||
// hasLanguageFiles will return true at least one file matching the extensions is found
|
||||
|
|
|
@ -1,14 +1,10 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
)
|
||||
|
||||
type osInfo struct {
|
||||
props Properties
|
||||
env Environment
|
||||
|
||||
os string
|
||||
Icon string
|
||||
}
|
||||
|
||||
const (
|
||||
|
@ -18,10 +14,6 @@ const (
|
|||
Linux Property = "linux"
|
||||
// Windows the string/icon to use for windows
|
||||
Windows Property = "windows"
|
||||
// WSL the string/icon to use for WSL
|
||||
WSL Property = "wsl"
|
||||
// WSLSeparator shows between WSL and Linux properties when WSL is detected
|
||||
WSLSeparator Property = "wsl_separator"
|
||||
// Alpine the string/icon to use for Alpine
|
||||
Alpine Property = "alpine"
|
||||
// Aosc the string/icon to use for Aosc
|
||||
|
@ -65,41 +57,41 @@ const (
|
|||
)
|
||||
|
||||
func (n *osInfo) enabled() bool {
|
||||
goos := n.env.getRuntimeGOOS()
|
||||
switch goos {
|
||||
case windowsPlatform:
|
||||
n.Icon = n.props.getString(Windows, "\uE62A")
|
||||
case darwinPlatform:
|
||||
n.Icon = n.props.getString(MacOS, "\uF179")
|
||||
case linuxPlatform:
|
||||
platform := n.env.getPlatform()
|
||||
displayDistroName := n.props.getBool(DisplayDistroName, false)
|
||||
if displayDistroName {
|
||||
n.Icon = platform
|
||||
break
|
||||
}
|
||||
n.Icon = n.getDistroIcon(platform)
|
||||
default:
|
||||
n.Icon = goos
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
func (n *osInfo) string() string {
|
||||
goos := n.env.getRuntimeGOOS()
|
||||
switch goos {
|
||||
case windowsPlatform:
|
||||
n.os = windowsPlatform
|
||||
return n.props.getString(Windows, "\uE62A")
|
||||
case darwinPlatform:
|
||||
n.os = darwinPlatform
|
||||
return n.props.getString(MacOS, "\uF179")
|
||||
case linuxPlatform:
|
||||
n.os = n.env.getPlatform()
|
||||
if !n.env.isWsl() {
|
||||
return n.getDistroName(n.os, "")
|
||||
}
|
||||
return fmt.Sprintf("%s%s%s",
|
||||
n.props.getString(WSL, "WSL"),
|
||||
n.props.getString(WSLSeparator, " - "),
|
||||
n.getDistroName(n.os, n.os))
|
||||
default:
|
||||
n.os = goos
|
||||
return goos
|
||||
segmentTemplate := n.props.getString(SegmentTemplate, "{{ if .WSL }}WSL at {{ end }}{{.Icon}}")
|
||||
template := &textTemplate{
|
||||
Template: segmentTemplate,
|
||||
Context: n,
|
||||
Env: n.env,
|
||||
}
|
||||
text, err := template.render()
|
||||
if err != nil {
|
||||
return err.Error()
|
||||
}
|
||||
return text
|
||||
}
|
||||
|
||||
func (n *osInfo) getDistroName(distro, defaultName string) string {
|
||||
displayDistroName := n.props.getBool(DisplayDistroName, false)
|
||||
if displayDistroName && len(defaultName) > 0 {
|
||||
return defaultName
|
||||
}
|
||||
if displayDistroName {
|
||||
return distro
|
||||
}
|
||||
func (n *osInfo) getDistroIcon(distro string) string {
|
||||
switch distro {
|
||||
case "alpine":
|
||||
return n.props.getString(Alpine, "\uF300")
|
||||
|
|
|
@ -62,23 +62,20 @@ func TestOSInfo(t *testing.T) {
|
|||
for _, tc := range cases {
|
||||
env := new(MockedEnvironment)
|
||||
env.On("getRuntimeGOOS").Return(tc.GOOS)
|
||||
env.On("isWsl").Return(tc.IsWSL)
|
||||
env.On("getPlatform").Return(tc.Platform)
|
||||
env.On("templateCache").Return(&templateCache{
|
||||
Env: make(map[string]string),
|
||||
WSL: tc.IsWSL,
|
||||
})
|
||||
osInfo := &osInfo{
|
||||
env: env,
|
||||
props: properties{
|
||||
WSL: "WSL",
|
||||
WSLSeparator: " at ",
|
||||
DisplayDistroName: tc.DisplayDistroName,
|
||||
Windows: "windows",
|
||||
MacOS: "darwin",
|
||||
},
|
||||
}
|
||||
_ = osInfo.enabled()
|
||||
assert.Equal(t, tc.ExpectedString, osInfo.string(), tc.Case)
|
||||
if tc.Platform != "" {
|
||||
assert.Equal(t, tc.Platform, osInfo.os, tc.Case)
|
||||
} else {
|
||||
assert.Equal(t, tc.GOOS, osInfo.os, tc.Case)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -51,17 +51,6 @@ func (d *owm) enabled() bool {
|
|||
}
|
||||
|
||||
func (d *owm) string() string {
|
||||
d.UnitIcon = "\ue33e"
|
||||
switch d.units {
|
||||
case "imperial":
|
||||
d.UnitIcon = "°F" // \ue341"
|
||||
case "metric":
|
||||
d.UnitIcon = "°C" // \ue339"
|
||||
case "":
|
||||
fallthrough
|
||||
case "standard":
|
||||
d.UnitIcon = "°K" // \ufa05"
|
||||
}
|
||||
segmentTemplate := d.props.getString(SegmentTemplate, "{{.Weather}} ({{.Temperature}}{{.UnitIcon}})")
|
||||
template := &textTemplate{
|
||||
Template: segmentTemplate,
|
||||
|
@ -72,7 +61,6 @@ func (d *owm) string() string {
|
|||
if err != nil {
|
||||
return err.Error()
|
||||
}
|
||||
|
||||
return text
|
||||
}
|
||||
|
||||
|
@ -118,7 +106,6 @@ func (d *owm) getResult() (*owmDataResponse, error) {
|
|||
|
||||
func (d *owm) setStatus() error {
|
||||
units := d.props.getString(Units, "standard")
|
||||
|
||||
q, err := d.getResult()
|
||||
if err != nil {
|
||||
return err
|
||||
|
@ -170,6 +157,17 @@ func (d *owm) setStatus() error {
|
|||
}
|
||||
d.Weather = icon
|
||||
d.units = units
|
||||
d.UnitIcon = "\ue33e"
|
||||
switch d.units {
|
||||
case "imperial":
|
||||
d.UnitIcon = "°F" // \ue341"
|
||||
case "metric":
|
||||
d.UnitIcon = "°C" // \ue339"
|
||||
case "":
|
||||
fallthrough
|
||||
case "standard":
|
||||
d.UnitIcon = "°K" // \ufa05"
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
|
|
|
@ -54,10 +54,6 @@ const (
|
|||
)
|
||||
|
||||
func (pt *path) enabled() bool {
|
||||
return true
|
||||
}
|
||||
|
||||
func (pt *path) string() string {
|
||||
pt.pwd = pt.env.pwd()
|
||||
switch style := pt.props.getString(Style, Agnoster); style {
|
||||
case Agnoster:
|
||||
|
@ -80,7 +76,7 @@ func (pt *path) string() string {
|
|||
case Folder:
|
||||
pt.Path = pt.getFolderPath()
|
||||
default:
|
||||
return fmt.Sprintf("Path style: %s is not available", style)
|
||||
pt.Path = fmt.Sprintf("Path style: %s is not available", style)
|
||||
}
|
||||
pt.Path = pt.formatWindowsDrive(pt.Path)
|
||||
if pt.props.getBool(EnableHyperlink, false) {
|
||||
|
@ -92,6 +88,10 @@ func (pt *path) string() string {
|
|||
}
|
||||
|
||||
pt.StackCount = pt.env.stackCount()
|
||||
return true
|
||||
}
|
||||
|
||||
func (pt *path) string() string {
|
||||
segmentTemplate := pt.props.getString(SegmentTemplate, "{{ .Path }}")
|
||||
template := &textTemplate{
|
||||
Template: segmentTemplate,
|
||||
|
|
|
@ -443,6 +443,7 @@ func TestAgnosterPathStyles(t *testing.T) {
|
|||
SegmentTemplate: "{{ .Path }}",
|
||||
},
|
||||
}
|
||||
_ = path.enabled()
|
||||
got := path.string()
|
||||
assert.Equal(t, tc.Expected, got)
|
||||
}
|
||||
|
@ -572,6 +573,7 @@ func TestGetFullPath(t *testing.T) {
|
|||
env: env,
|
||||
props: props,
|
||||
}
|
||||
_ = path.enabled()
|
||||
got := path.string()
|
||||
assert.Equal(t, tc.Expected, got)
|
||||
}
|
||||
|
|
|
@ -4,12 +4,16 @@ type php struct {
|
|||
language
|
||||
}
|
||||
|
||||
func (n *php) string() string {
|
||||
return n.language.string()
|
||||
func (p *php) string() string {
|
||||
segmentTemplate := p.language.props.getString(SegmentTemplate, "")
|
||||
if len(segmentTemplate) == 0 {
|
||||
return p.language.string()
|
||||
}
|
||||
return p.language.renderTemplate(segmentTemplate, p)
|
||||
}
|
||||
|
||||
func (n *php) init(props Properties, env Environment) {
|
||||
n.language = language{
|
||||
func (p *php) init(props Properties, env Environment) {
|
||||
p.language = language{
|
||||
env: env,
|
||||
props: props,
|
||||
extensions: []string{"*.php", "composer.json", "composer.lock", ".php-version"},
|
||||
|
@ -24,6 +28,6 @@ func (n *php) init(props Properties, env Environment) {
|
|||
}
|
||||
}
|
||||
|
||||
func (n *php) enabled() bool {
|
||||
return n.language.enabled()
|
||||
func (p *php) enabled() bool {
|
||||
return p.language.enabled()
|
||||
}
|
||||
|
|
|
@ -50,34 +50,20 @@ func (p *plastic) enabled() bool {
|
|||
if p.shouldIgnoreRootRepository(wkdir.parentFolder) {
|
||||
return false
|
||||
}
|
||||
|
||||
if wkdir.isDir {
|
||||
p.plasticWorkspaceFolder = wkdir.parentFolder
|
||||
return true
|
||||
if !wkdir.isDir {
|
||||
return false
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
func (p *plastic) string() string {
|
||||
p.plasticWorkspaceFolder = wkdir.parentFolder
|
||||
displayStatus := p.props.getOneOfBool(FetchStatus, DisplayStatus, false)
|
||||
|
||||
p.setSelector()
|
||||
if displayStatus {
|
||||
p.setPlasticStatus()
|
||||
}
|
||||
|
||||
// use template if available
|
||||
segmentTemplate := p.props.getString(SegmentTemplate, "")
|
||||
if len(segmentTemplate) > 0 {
|
||||
return p.templateString(segmentTemplate)
|
||||
}
|
||||
|
||||
// default: only selector is returned
|
||||
return p.Selector
|
||||
return true
|
||||
}
|
||||
|
||||
func (p *plastic) templateString(segmentTemplate string) string {
|
||||
func (p *plastic) string() string {
|
||||
segmentTemplate := p.props.getString(SegmentTemplate, "{{ .Selector }}")
|
||||
template := &textTemplate{
|
||||
Template: segmentTemplate,
|
||||
Context: p,
|
||||
|
|
|
@ -25,6 +25,7 @@ func TestPlasticEnabledInWorkspaceDirectory(t *testing.T) {
|
|||
env.On("hasCommand", "cm").Return(true)
|
||||
env.On("getRuntimeGOOS").Return("")
|
||||
env.On("isWsl").Return(false)
|
||||
env.On("getFileContent", "/dir/.plastic//plastic.selector").Return("")
|
||||
fileInfo := &fileInfo{
|
||||
path: "/dir/hello",
|
||||
parentFolder: "/dir",
|
||||
|
@ -288,7 +289,7 @@ func TestPlasticTemplateString(t *testing.T) {
|
|||
Plastic *plastic
|
||||
}{
|
||||
{
|
||||
Case: "Only Selector name",
|
||||
Case: "Default template",
|
||||
Expected: "/main",
|
||||
Template: "{{ .Selector }}",
|
||||
Plastic: &plastic{
|
||||
|
@ -325,12 +326,13 @@ func TestPlasticTemplateString(t *testing.T) {
|
|||
|
||||
for _, tc := range cases {
|
||||
props := properties{
|
||||
FetchStatus: true,
|
||||
FetchStatus: true,
|
||||
SegmentTemplate: tc.Template,
|
||||
}
|
||||
tc.Plastic.props = props
|
||||
env := new(MockedEnvironment)
|
||||
env.onTemplate()
|
||||
tc.Plastic.env = env
|
||||
assert.Equal(t, tc.Expected, tc.Plastic.templateString(tc.Template), tc.Case)
|
||||
assert.Equal(t, tc.Expected, tc.Plastic.string(), tc.Case)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -3,9 +3,10 @@ package main
|
|||
import "strings"
|
||||
|
||||
type poshgit struct {
|
||||
props Properties
|
||||
env Environment
|
||||
gitStatus string
|
||||
props Properties
|
||||
env Environment
|
||||
|
||||
Status string
|
||||
}
|
||||
|
||||
const (
|
||||
|
@ -14,12 +15,22 @@ const (
|
|||
|
||||
func (p *poshgit) enabled() bool {
|
||||
status := p.env.getenv(poshGitEnv)
|
||||
p.gitStatus = strings.TrimSpace(status)
|
||||
return p.gitStatus != ""
|
||||
p.Status = strings.TrimSpace(status)
|
||||
return p.Status != ""
|
||||
}
|
||||
|
||||
func (p *poshgit) string() string {
|
||||
return p.gitStatus
|
||||
segmentTemplate := p.props.getString(SegmentTemplate, "{{ .Status }}")
|
||||
template := &textTemplate{
|
||||
Template: segmentTemplate,
|
||||
Context: p,
|
||||
Env: p.env,
|
||||
}
|
||||
text, err := template.render()
|
||||
if err != nil {
|
||||
return err.Error()
|
||||
}
|
||||
return text
|
||||
}
|
||||
|
||||
func (p *poshgit) init(props Properties, env Environment) {
|
||||
|
|
|
@ -20,9 +20,11 @@ func TestPoshGitSegment(t *testing.T) {
|
|||
|
||||
for _, tc := range cases {
|
||||
env := new(MockedEnvironment)
|
||||
env.onTemplate()
|
||||
env.On("getenv", poshGitEnv).Return(tc.PoshGitPrompt)
|
||||
p := &poshgit{
|
||||
env: env,
|
||||
env: env,
|
||||
props: &properties{},
|
||||
}
|
||||
assert.Equal(t, tc.Enabled, p.enabled())
|
||||
if tc.Enabled {
|
||||
|
|
|
@ -5,17 +5,22 @@ type root struct {
|
|||
env Environment
|
||||
}
|
||||
|
||||
const (
|
||||
// RootIcon indicates the root user
|
||||
RootIcon Property = "root_icon"
|
||||
)
|
||||
|
||||
func (rt *root) enabled() bool {
|
||||
return rt.env.isRunningAsRoot()
|
||||
}
|
||||
|
||||
func (rt *root) string() string {
|
||||
return rt.props.getString(RootIcon, "\uF0E7")
|
||||
segmentTemplate := rt.props.getString(SegmentTemplate, "\uF0E7")
|
||||
template := &textTemplate{
|
||||
Template: segmentTemplate,
|
||||
Context: rt,
|
||||
Env: rt.env,
|
||||
}
|
||||
text, err := template.render()
|
||||
if err != nil {
|
||||
return err.Error()
|
||||
}
|
||||
return text
|
||||
}
|
||||
|
||||
func (rt *root) init(props Properties, env Environment) {
|
||||
|
|
|
@ -5,12 +5,16 @@ type ruby struct {
|
|||
}
|
||||
|
||||
func (r *ruby) string() string {
|
||||
version := r.language.string()
|
||||
// asdf default non-set version
|
||||
if version == "______" {
|
||||
return ""
|
||||
segmentTemplate := r.language.props.getString(SegmentTemplate, "")
|
||||
if len(segmentTemplate) == 0 {
|
||||
version := r.language.string()
|
||||
// asdf default non-set version
|
||||
if version == "______" {
|
||||
return ""
|
||||
}
|
||||
return version
|
||||
}
|
||||
return version
|
||||
return r.language.renderTemplate(segmentTemplate, r)
|
||||
}
|
||||
|
||||
func (r *ruby) init(props Properties, env Environment) {
|
||||
|
|
|
@ -5,7 +5,11 @@ type rust struct {
|
|||
}
|
||||
|
||||
func (r *rust) string() string {
|
||||
return r.language.string()
|
||||
segmentTemplate := r.language.props.getString(SegmentTemplate, "")
|
||||
if len(segmentTemplate) == 0 {
|
||||
return r.language.string()
|
||||
}
|
||||
return r.language.renderTemplate(segmentTemplate, r)
|
||||
}
|
||||
|
||||
func (r *rust) init(props Properties, env Environment) {
|
||||
|
|
|
@ -5,7 +5,7 @@ import "strings"
|
|||
type session struct {
|
||||
props Properties
|
||||
env Environment
|
||||
text string
|
||||
// text string
|
||||
|
||||
userName string
|
||||
hostName string
|
||||
|
@ -21,24 +21,24 @@ func (s *session) enabled() bool {
|
|||
if segmentTemplate == "" {
|
||||
return s.legacyEnabled()
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
func (s *session) string() string {
|
||||
segmentTemplate := s.props.getString(SegmentTemplate, "")
|
||||
if segmentTemplate == "" {
|
||||
return s.legacyString()
|
||||
}
|
||||
template := &textTemplate{
|
||||
Template: segmentTemplate,
|
||||
Context: s,
|
||||
Env: s.env,
|
||||
}
|
||||
var err error
|
||||
s.text, err = template.render()
|
||||
text, err := template.render()
|
||||
if err != nil {
|
||||
s.text = err.Error()
|
||||
text = err.Error()
|
||||
}
|
||||
return len(s.text) > 0
|
||||
}
|
||||
|
||||
func (s *session) string() string {
|
||||
if len(s.text) != 0 {
|
||||
return s.text
|
||||
}
|
||||
return s.getFormattedText()
|
||||
return text
|
||||
}
|
||||
|
||||
func (s *session) init(props Properties, env Environment) {
|
||||
|
|
|
@ -9,7 +9,6 @@ import (
|
|||
func TestSessionSegmentTemplate(t *testing.T) {
|
||||
cases := []struct {
|
||||
Case string
|
||||
ExpectedEnabled bool
|
||||
ExpectedString string
|
||||
UserName string
|
||||
DefaultUserName string
|
||||
|
@ -19,56 +18,50 @@ func TestSessionSegmentTemplate(t *testing.T) {
|
|||
Template string
|
||||
}{
|
||||
{
|
||||
Case: "user and computer",
|
||||
ExpectedString: "john@company-laptop",
|
||||
ComputerName: "company-laptop",
|
||||
UserName: "john",
|
||||
Template: "{{.UserName}}@{{.HostName}}",
|
||||
ExpectedEnabled: true,
|
||||
Case: "user and computer",
|
||||
ExpectedString: "john@company-laptop",
|
||||
ComputerName: "company-laptop",
|
||||
UserName: "john",
|
||||
Template: "{{.UserName}}@{{.HostName}}",
|
||||
},
|
||||
{
|
||||
Case: "user only",
|
||||
ExpectedString: "john",
|
||||
UserName: "john",
|
||||
Template: "{{.UserName}}",
|
||||
ExpectedEnabled: true,
|
||||
Case: "user only",
|
||||
ExpectedString: "john",
|
||||
UserName: "john",
|
||||
Template: "{{.UserName}}",
|
||||
},
|
||||
{
|
||||
Case: "user with ssh",
|
||||
ExpectedString: "john on remote",
|
||||
UserName: "john",
|
||||
SSHSession: true,
|
||||
ComputerName: "remote",
|
||||
Template: "{{.UserName}}{{if .SSHSession}} on {{.HostName}}{{end}}",
|
||||
ExpectedEnabled: true,
|
||||
Case: "user with ssh",
|
||||
ExpectedString: "john on remote",
|
||||
UserName: "john",
|
||||
SSHSession: true,
|
||||
ComputerName: "remote",
|
||||
Template: "{{.UserName}}{{if .SSHSession}} on {{.HostName}}{{end}}",
|
||||
},
|
||||
{
|
||||
Case: "user without ssh",
|
||||
ExpectedString: "john",
|
||||
UserName: "john",
|
||||
SSHSession: false,
|
||||
ComputerName: "remote",
|
||||
Template: "{{.UserName}}{{if .SSHSession}} on {{.HostName}}{{end}}",
|
||||
ExpectedEnabled: true,
|
||||
Case: "user without ssh",
|
||||
ExpectedString: "john",
|
||||
UserName: "john",
|
||||
SSHSession: false,
|
||||
ComputerName: "remote",
|
||||
Template: "{{.UserName}}{{if .SSHSession}} on {{.HostName}}{{end}}",
|
||||
},
|
||||
{
|
||||
Case: "user with root and ssh",
|
||||
ExpectedString: "super john on remote",
|
||||
UserName: "john",
|
||||
SSHSession: true,
|
||||
ComputerName: "remote",
|
||||
Root: true,
|
||||
Template: "{{if .Root}}super {{end}}{{.UserName}}{{if .SSHSession}} on {{.HostName}}{{end}}",
|
||||
ExpectedEnabled: true,
|
||||
Case: "user with root and ssh",
|
||||
ExpectedString: "super john on remote",
|
||||
UserName: "john",
|
||||
SSHSession: true,
|
||||
ComputerName: "remote",
|
||||
Root: true,
|
||||
Template: "{{if .Root}}super {{end}}{{.UserName}}{{if .SSHSession}} on {{.HostName}}{{end}}",
|
||||
},
|
||||
{
|
||||
Case: "no template",
|
||||
ExpectedString: "\uf817 john@remote",
|
||||
UserName: "john",
|
||||
SSHSession: true,
|
||||
ComputerName: "remote",
|
||||
Root: true,
|
||||
ExpectedEnabled: true,
|
||||
Case: "no template",
|
||||
ExpectedString: "\uf817 john@remote",
|
||||
UserName: "john",
|
||||
SSHSession: true,
|
||||
ComputerName: "remote",
|
||||
Root: true,
|
||||
},
|
||||
{
|
||||
Case: "default user not equal",
|
||||
|
@ -79,7 +72,6 @@ func TestSessionSegmentTemplate(t *testing.T) {
|
|||
ComputerName: "remote",
|
||||
Root: true,
|
||||
Template: "{{if ne .Env.POSH_SESSION_DEFAULT_USER .UserName}}{{.UserName}}{{end}}",
|
||||
ExpectedEnabled: true,
|
||||
},
|
||||
{
|
||||
Case: "default user equal",
|
||||
|
@ -90,7 +82,6 @@ func TestSessionSegmentTemplate(t *testing.T) {
|
|||
ComputerName: "remote",
|
||||
Root: true,
|
||||
Template: "{{if ne .Env.POSH_SESSION_DEFAULT_USER .UserName}}{{.UserName}}{{end}}",
|
||||
ExpectedEnabled: false,
|
||||
},
|
||||
}
|
||||
|
||||
|
@ -122,9 +113,7 @@ func TestSessionSegmentTemplate(t *testing.T) {
|
|||
SegmentTemplate: tc.Template,
|
||||
},
|
||||
}
|
||||
assert.Equal(t, tc.ExpectedEnabled, session.enabled(), tc.Case)
|
||||
if tc.ExpectedEnabled {
|
||||
assert.Equal(t, tc.ExpectedString, session.string(), tc.Case)
|
||||
}
|
||||
_ = session.enabled()
|
||||
assert.Equal(t, tc.ExpectedString, session.string(), tc.Case)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -5,6 +5,8 @@ import "strings"
|
|||
type shell struct {
|
||||
props Properties
|
||||
env Environment
|
||||
|
||||
Name string
|
||||
}
|
||||
|
||||
const (
|
||||
|
@ -13,19 +15,29 @@ const (
|
|||
)
|
||||
|
||||
func (s *shell) enabled() bool {
|
||||
mappedNames := s.props.getKeyValueMap(MappedShellNames, make(map[string]string))
|
||||
s.Name = s.env.getShellName()
|
||||
for key, val := range mappedNames {
|
||||
if strings.EqualFold(s.Name, key) {
|
||||
s.Name = val
|
||||
break
|
||||
}
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
func (s *shell) string() string {
|
||||
mappedNames := s.props.getKeyValueMap(MappedShellNames, make(map[string]string))
|
||||
shellName := s.env.getShellName()
|
||||
for key, val := range mappedNames {
|
||||
if strings.EqualFold(shellName, key) {
|
||||
shellName = val
|
||||
break
|
||||
}
|
||||
segmentTemplate := s.props.getString(SegmentTemplate, "{{.Name}}")
|
||||
template := &textTemplate{
|
||||
Template: segmentTemplate,
|
||||
Context: s,
|
||||
Env: s.env,
|
||||
}
|
||||
return shellName
|
||||
text, err := template.render()
|
||||
if err != nil {
|
||||
return err.Error()
|
||||
}
|
||||
return text
|
||||
}
|
||||
|
||||
func (s *shell) init(props Properties, env Environment) {
|
||||
|
|
|
@ -10,10 +10,12 @@ func TestWriteCurrentShell(t *testing.T) {
|
|||
expected := "zsh"
|
||||
env := new(MockedEnvironment)
|
||||
env.On("getShellName").Return(expected, nil)
|
||||
env.onTemplate()
|
||||
s := &shell{
|
||||
env: env,
|
||||
props: properties{},
|
||||
}
|
||||
_ = s.enabled()
|
||||
assert.Equal(t, expected, s.string())
|
||||
}
|
||||
|
||||
|
@ -29,12 +31,14 @@ func TestUseMappedShellNames(t *testing.T) {
|
|||
for _, tc := range cases {
|
||||
env := new(MockedEnvironment)
|
||||
env.On("getShellName").Return(tc.Expected, nil)
|
||||
env.onTemplate()
|
||||
s := &shell{
|
||||
env: env,
|
||||
props: properties{
|
||||
MappedShellNames: map[string]string{"pwsh": "PS"},
|
||||
},
|
||||
}
|
||||
_ = s.enabled()
|
||||
got := s.string()
|
||||
assert.Equal(t, tc.Expected, got)
|
||||
}
|
||||
|
|
|
@ -1,15 +1,17 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
)
|
||||
|
||||
type spotify struct {
|
||||
props Properties
|
||||
env Environment
|
||||
status string
|
||||
artist string
|
||||
track string
|
||||
props Properties
|
||||
env Environment
|
||||
|
||||
MusicPlayer
|
||||
}
|
||||
|
||||
type MusicPlayer struct {
|
||||
Status string
|
||||
Artist string
|
||||
Track string
|
||||
Icon string
|
||||
}
|
||||
|
||||
const (
|
||||
|
@ -19,24 +21,35 @@ const (
|
|||
PausedIcon Property = "paused_icon"
|
||||
// StoppedIcon indicates a song is stopped
|
||||
StoppedIcon Property = "stopped_icon"
|
||||
// TrackSeparator is put between the artist and the track
|
||||
TrackSeparator Property = "track_separator"
|
||||
|
||||
playing = "playing"
|
||||
stopped = "stopped"
|
||||
paused = "paused"
|
||||
)
|
||||
|
||||
func (s *spotify) string() string {
|
||||
icon := ""
|
||||
switch s.status {
|
||||
case "stopped":
|
||||
// in this case, no artist or track info
|
||||
icon = s.props.getString(StoppedIcon, "\uF04D ")
|
||||
return icon
|
||||
case "paused":
|
||||
icon = s.props.getString(PausedIcon, "\uF8E3 ")
|
||||
case "playing":
|
||||
icon = s.props.getString(PlayingIcon, "\uE602 ")
|
||||
segmentTemplate := s.props.getString(SegmentTemplate, "{{.Icon}}{{ if ne .Status \"stopped\"}}{{.Artist}} - {{.Track}}{{ end }}")
|
||||
template := &textTemplate{
|
||||
Template: segmentTemplate,
|
||||
Context: s,
|
||||
Env: s.env,
|
||||
}
|
||||
text, err := template.render()
|
||||
if err != nil {
|
||||
return err.Error()
|
||||
}
|
||||
return text
|
||||
}
|
||||
func (s *spotify) resolveIcon() {
|
||||
switch s.Status {
|
||||
case stopped:
|
||||
// in this case, no artist or track info
|
||||
s.Icon = s.props.getString(StoppedIcon, "\uF04D ")
|
||||
case paused:
|
||||
s.Icon = s.props.getString(PausedIcon, "\uF8E3 ")
|
||||
case playing:
|
||||
s.Icon = s.props.getString(PlayingIcon, "\uE602 ")
|
||||
}
|
||||
separator := s.props.getString(TrackSeparator, " - ")
|
||||
return fmt.Sprintf("%s%s%s%s", icon, s.artist, separator, s.track)
|
||||
}
|
||||
|
||||
func (s *spotify) init(props Properties, env Environment) {
|
||||
|
|
|
@ -9,15 +9,16 @@ func (s *spotify) enabled() bool {
|
|||
if running == "false" || running == "" {
|
||||
return false
|
||||
}
|
||||
s.status = s.runAppleScriptCommand("tell application \"Spotify\" to player state as string")
|
||||
s.Status = s.runAppleScriptCommand("tell application \"Spotify\" to player state as string")
|
||||
if err != nil {
|
||||
return false
|
||||
}
|
||||
if s.status == "stopped" {
|
||||
if s.Status == stopped {
|
||||
return false
|
||||
}
|
||||
s.artist = s.runAppleScriptCommand("tell application \"Spotify\" to artist of current track as string")
|
||||
s.track = s.runAppleScriptCommand("tell application \"Spotify\" to name of current track as string")
|
||||
s.Artist = s.runAppleScriptCommand("tell application \"Spotify\" to artist of current track as string")
|
||||
s.Track = s.runAppleScriptCommand("tell application \"Spotify\" to name of current track as string")
|
||||
s.resolveIcon()
|
||||
return true
|
||||
}
|
||||
|
||||
|
|
|
@ -22,6 +22,7 @@ func bootStrapSpotifyDarwinTest(args *spotifyArgs) *spotify {
|
|||
env.On("runCommand", "osascript", []string{"-e", "tell application \"Spotify\" to player state as string"}).Return(args.status, nil)
|
||||
env.On("runCommand", "osascript", []string{"-e", "tell application \"Spotify\" to artist of current track as string"}).Return(args.artist, nil)
|
||||
env.On("runCommand", "osascript", []string{"-e", "tell application \"Spotify\" to name of current track as string"}).Return(args.track, nil)
|
||||
env.onTemplate()
|
||||
s := &spotify{
|
||||
env: env,
|
||||
props: properties{},
|
||||
|
|
|
@ -8,33 +8,34 @@ import (
|
|||
|
||||
func TestSpotifyStringPlayingSong(t *testing.T) {
|
||||
expected := "\ue602 Candlemass - Spellbreaker"
|
||||
env := new(MockedEnvironment)
|
||||
env.onTemplate()
|
||||
s := &spotify{
|
||||
artist: "Candlemass",
|
||||
track: "Spellbreaker",
|
||||
status: "playing",
|
||||
props: properties{},
|
||||
}
|
||||
assert.Equal(t, expected, s.string())
|
||||
}
|
||||
|
||||
func TestSpotifyStringPausedSong(t *testing.T) {
|
||||
expected := "\uF8E3 Candlemass - Spellbreaker"
|
||||
s := &spotify{
|
||||
artist: "Candlemass",
|
||||
track: "Spellbreaker",
|
||||
status: "paused",
|
||||
props: properties{},
|
||||
MusicPlayer: MusicPlayer{
|
||||
Artist: "Candlemass",
|
||||
Track: "Spellbreaker",
|
||||
Status: "playing",
|
||||
Icon: "\ue602 ",
|
||||
},
|
||||
props: properties{},
|
||||
env: env,
|
||||
}
|
||||
assert.Equal(t, expected, s.string())
|
||||
}
|
||||
|
||||
func TestSpotifyStringStoppedSong(t *testing.T) {
|
||||
expected := "\uf04d "
|
||||
env := new(MockedEnvironment)
|
||||
env.onTemplate()
|
||||
s := &spotify{
|
||||
artist: "Candlemass",
|
||||
track: "Spellbreaker",
|
||||
status: "stopped",
|
||||
props: properties{},
|
||||
MusicPlayer: MusicPlayer{
|
||||
Artist: "Candlemass",
|
||||
Track: "Spellbreaker",
|
||||
Status: "stopped",
|
||||
Icon: "\uf04d ",
|
||||
},
|
||||
props: properties{},
|
||||
env: env,
|
||||
}
|
||||
assert.Equal(t, expected, s.string())
|
||||
}
|
||||
|
|
|
@ -15,14 +15,15 @@ func (s *spotify) enabled() bool {
|
|||
}
|
||||
|
||||
if !strings.Contains(spotifyWindowTitle, " - ") {
|
||||
s.status = "stopped"
|
||||
s.Status = stopped
|
||||
return false
|
||||
}
|
||||
|
||||
infos := strings.Split(spotifyWindowTitle, " - ")
|
||||
s.artist = infos[0]
|
||||
s.Artist = infos[0]
|
||||
// remove first element and concat others(a song can contains also a " - ")
|
||||
s.track = strings.Join(infos[1:], " - ")
|
||||
s.status = "playing"
|
||||
s.Track = strings.Join(infos[1:], " - ")
|
||||
s.Status = playing
|
||||
s.resolveIcon()
|
||||
return true
|
||||
}
|
||||
|
|
|
@ -17,6 +17,7 @@ type spotifyArgs struct {
|
|||
func bootStrapSpotifyWindowsTest(args *spotifyArgs) *spotify {
|
||||
env := new(MockedEnvironment)
|
||||
env.On("getWindowTitle", "spotify.exe").Return(args.title, args.runError)
|
||||
env.onTemplate()
|
||||
s := &spotify{
|
||||
env: env,
|
||||
props: properties{},
|
||||
|
|
|
@ -23,9 +23,10 @@ func (s *spotify) enabled() bool {
|
|||
title := record[len(record)-1]
|
||||
if strings.Contains(title, " - ") {
|
||||
infos := strings.Split(title, " - ")
|
||||
s.artist = infos[0]
|
||||
s.track = strings.Join(infos[1:], " - ")
|
||||
s.status = "playing"
|
||||
s.Artist = infos[0]
|
||||
s.Track = strings.Join(infos[1:], " - ")
|
||||
s.Status = playing
|
||||
s.resolveIcon()
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
|
|
@ -54,6 +54,7 @@ func TestSpotifyWsl(t *testing.T) {
|
|||
env := new(MockedEnvironment)
|
||||
env.On("isWsl").Return(true)
|
||||
env.On("runCommand", "tasklist.exe", []string{"/V", "/FI", "Imagename eq Spotify.exe", "/FO", "CSV", "/NH"}).Return(tc.ExecOutput, nil)
|
||||
env.onTemplate()
|
||||
s := &spotify{
|
||||
env: env,
|
||||
props: properties{},
|
||||
|
|
|
@ -1,9 +1,10 @@
|
|||
package main
|
||||
|
||||
type text struct {
|
||||
props Properties
|
||||
env Environment
|
||||
content string
|
||||
props Properties
|
||||
env Environment
|
||||
|
||||
Text string
|
||||
}
|
||||
|
||||
const (
|
||||
|
@ -19,14 +20,24 @@ func (t *text) enabled() bool {
|
|||
Env: t.env,
|
||||
}
|
||||
if text, err := template.render(); err == nil {
|
||||
t.content = text
|
||||
return len(t.content) > 0
|
||||
t.Text = text
|
||||
return len(t.Text) > 0
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func (t *text) string() string {
|
||||
return t.content
|
||||
segmentTemplate := t.props.getString(SegmentTemplate, "{{.Text}}")
|
||||
template := &textTemplate{
|
||||
Template: segmentTemplate,
|
||||
Context: t,
|
||||
Env: t.env,
|
||||
}
|
||||
text, err := template.render()
|
||||
if err != nil {
|
||||
return err.Error()
|
||||
}
|
||||
return text
|
||||
}
|
||||
|
||||
func (t *text) init(props Properties, env Environment) {
|
||||
|
|
|
@ -19,6 +19,11 @@ func (t *tempus) enabled() bool {
|
|||
if t.CurrentDate.IsZero() {
|
||||
t.CurrentDate = time.Now()
|
||||
}
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
func (t *tempus) string() string {
|
||||
segmentTemplate := t.props.getString(SegmentTemplate, "")
|
||||
if segmentTemplate != "" {
|
||||
template := &textTemplate{
|
||||
|
@ -31,25 +36,16 @@ func (t *tempus) enabled() bool {
|
|||
if err != nil {
|
||||
t.templateText = err.Error()
|
||||
}
|
||||
return len(t.templateText) > 0
|
||||
if len(t.templateText) > 0 {
|
||||
return t.templateText
|
||||
}
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
func (t *tempus) string() string {
|
||||
return t.getFormattedText()
|
||||
// keep old behaviour if no template for now
|
||||
timeFormatProperty := t.props.getString(TimeFormat, "15:04:05")
|
||||
return t.CurrentDate.Format(timeFormatProperty)
|
||||
}
|
||||
|
||||
func (t *tempus) init(props Properties, env Environment) {
|
||||
t.props = props
|
||||
t.env = env
|
||||
}
|
||||
|
||||
func (t *tempus) getFormattedText() string {
|
||||
if len(t.templateText) > 0 {
|
||||
return t.templateText
|
||||
}
|
||||
// keep old behaviour if no template
|
||||
timeFormatProperty := t.props.getString(TimeFormat, "15:04:05")
|
||||
return t.CurrentDate.Format(timeFormatProperty)
|
||||
}
|
||||
|
|
|
@ -2,15 +2,13 @@ package main
|
|||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
)
|
||||
|
||||
type ytm struct {
|
||||
props Properties
|
||||
env Environment
|
||||
status playStatus
|
||||
artist string
|
||||
track string
|
||||
props Properties
|
||||
env Environment
|
||||
|
||||
MusicPlayer
|
||||
}
|
||||
|
||||
const (
|
||||
|
@ -19,17 +17,17 @@ const (
|
|||
)
|
||||
|
||||
func (y *ytm) string() string {
|
||||
icon := ""
|
||||
separator := y.props.getString(TrackSeparator, " - ")
|
||||
switch y.status {
|
||||
case paused:
|
||||
icon = y.props.getString(PausedIcon, "\uF8E3 ")
|
||||
case playing:
|
||||
icon = y.props.getString(PlayingIcon, "\uE602 ")
|
||||
case stopped:
|
||||
return y.props.getString(StoppedIcon, "\uF04D ")
|
||||
segmentTemplate := y.props.getString(SegmentTemplate, "{{.Icon}}{{ if ne .Status \"stopped\"}}{{.Artist}} - {{.Track}}{{ end }}")
|
||||
template := &textTemplate{
|
||||
Template: segmentTemplate,
|
||||
Context: y,
|
||||
Env: y.env,
|
||||
}
|
||||
return fmt.Sprintf("%s%s%s%s", icon, y.artist, separator, y.track)
|
||||
text, err := template.render()
|
||||
if err != nil {
|
||||
return err.Error()
|
||||
}
|
||||
return text
|
||||
}
|
||||
|
||||
func (y *ytm) enabled() bool {
|
||||
|
@ -44,14 +42,6 @@ func (y *ytm) init(props Properties, env Environment) {
|
|||
y.env = env
|
||||
}
|
||||
|
||||
type playStatus int
|
||||
|
||||
const (
|
||||
playing playStatus = iota
|
||||
paused
|
||||
stopped
|
||||
)
|
||||
|
||||
type ytmdaStatusResponse struct {
|
||||
player `json:"player"`
|
||||
track `json:"track"`
|
||||
|
@ -95,13 +85,16 @@ func (y *ytm) setStatus() error {
|
|||
if err != nil {
|
||||
return err
|
||||
}
|
||||
y.status = playing
|
||||
y.Status = playing
|
||||
y.Icon = y.props.getString(PlayingIcon, "\uE602 ")
|
||||
if !q.player.HasSong {
|
||||
y.status = stopped
|
||||
y.Status = stopped
|
||||
y.Icon = y.props.getString(StoppedIcon, "\uF04D ")
|
||||
} else if q.player.IsPaused {
|
||||
y.status = paused
|
||||
y.Status = paused
|
||||
y.Icon = y.props.getString(PausedIcon, "\uF8E3 ")
|
||||
}
|
||||
y.artist = q.track.Author
|
||||
y.track = q.track.Title
|
||||
y.Artist = q.track.Author
|
||||
y.Track = q.track.Title
|
||||
return nil
|
||||
}
|
||||
|
|
|
@ -7,39 +7,6 @@ import (
|
|||
"github.com/stretchr/testify/assert"
|
||||
)
|
||||
|
||||
func TestYTMStringPlayingSong(t *testing.T) {
|
||||
expected := "\ue602 Candlemass - Spellbreaker"
|
||||
y := &ytm{
|
||||
artist: "Candlemass",
|
||||
track: "Spellbreaker",
|
||||
status: playing,
|
||||
props: properties{},
|
||||
}
|
||||
assert.Equal(t, expected, y.string())
|
||||
}
|
||||
|
||||
func TestYTMStringPausedSong(t *testing.T) {
|
||||
expected := "\uF8E3 Candlemass - Spellbreaker"
|
||||
y := &ytm{
|
||||
artist: "Candlemass",
|
||||
track: "Spellbreaker",
|
||||
status: paused,
|
||||
props: properties{},
|
||||
}
|
||||
assert.Equal(t, expected, y.string())
|
||||
}
|
||||
|
||||
func TestYTMStringStoppedSong(t *testing.T) {
|
||||
expected := "\uf04d "
|
||||
y := &ytm{
|
||||
artist: "Candlemass",
|
||||
track: "Spellbreaker",
|
||||
status: stopped,
|
||||
props: properties{},
|
||||
}
|
||||
assert.Equal(t, expected, y.string())
|
||||
}
|
||||
|
||||
func bootstrapYTMDATest(json string, err error) *ytm {
|
||||
url := "http://127.0.0.1:9863"
|
||||
env := new(MockedEnvironment)
|
||||
|
@ -58,9 +25,9 @@ func TestYTMDAPlaying(t *testing.T) {
|
|||
ytm := bootstrapYTMDATest(json, nil)
|
||||
err := ytm.setStatus()
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, playing, ytm.status)
|
||||
assert.Equal(t, "Candlemass", ytm.artist)
|
||||
assert.Equal(t, "Spellbreaker", ytm.track)
|
||||
assert.Equal(t, "playing", ytm.Status)
|
||||
assert.Equal(t, "Candlemass", ytm.Artist)
|
||||
assert.Equal(t, "Spellbreaker", ytm.Track)
|
||||
}
|
||||
|
||||
func TestYTMDAPaused(t *testing.T) {
|
||||
|
@ -68,9 +35,9 @@ func TestYTMDAPaused(t *testing.T) {
|
|||
ytm := bootstrapYTMDATest(json, nil)
|
||||
err := ytm.setStatus()
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, paused, ytm.status)
|
||||
assert.Equal(t, "Candlemass", ytm.artist)
|
||||
assert.Equal(t, "Spellbreaker", ytm.track)
|
||||
assert.Equal(t, "paused", ytm.Status)
|
||||
assert.Equal(t, "Candlemass", ytm.Artist)
|
||||
assert.Equal(t, "Spellbreaker", ytm.Track)
|
||||
}
|
||||
|
||||
func TestYTMDAStopped(t *testing.T) {
|
||||
|
@ -78,9 +45,9 @@ func TestYTMDAStopped(t *testing.T) {
|
|||
ytm := bootstrapYTMDATest(json, nil)
|
||||
err := ytm.setStatus()
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, stopped, ytm.status)
|
||||
assert.Equal(t, "", ytm.artist)
|
||||
assert.Equal(t, "", ytm.track)
|
||||
assert.Equal(t, "stopped", ytm.Status)
|
||||
assert.Equal(t, "", ytm.Artist)
|
||||
assert.Equal(t, "", ytm.Track)
|
||||
}
|
||||
|
||||
func TestYTMDAError(t *testing.T) {
|
||||
|
|
|
@ -39,6 +39,7 @@ type templateCache struct {
|
|||
Code int
|
||||
Env map[string]string
|
||||
OS string
|
||||
WSL bool
|
||||
}
|
||||
|
||||
func (c *Context) init(t *textTemplate) {
|
||||
|
@ -85,7 +86,7 @@ func (t *textTemplate) cleanTemplate() {
|
|||
*knownVariables = append(*knownVariables, splitted[0])
|
||||
return splitted[0], true
|
||||
}
|
||||
knownVariables := []string{"Root", "PWD", "Folder", "Shell", "UserName", "HostName", "Env", "Data", "Code", "OS"}
|
||||
knownVariables := []string{"Root", "PWD", "Folder", "Shell", "UserName", "HostName", "Env", "Data", "Code", "OS", "WSL"}
|
||||
matches := findAllNamedRegexMatch(`(?: |{|\()(?P<var>(\.[a-zA-Z_][a-zA-Z0-9]*)+)`, t.Template)
|
||||
for _, match := range matches {
|
||||
if variable, OK := unknownVariable(match["var"], &knownVariables); OK {
|
||||
|
|
|
@ -89,7 +89,7 @@
|
|||
"background": "p:node",
|
||||
"properties": {
|
||||
"prefix": " \uF898 ",
|
||||
"display_version": true
|
||||
"fetch_version": true
|
||||
}
|
||||
},
|
||||
{
|
||||
|
@ -100,7 +100,7 @@
|
|||
"background": "p:go",
|
||||
"properties": {
|
||||
"prefix": " \uE626 ",
|
||||
"display_version": true
|
||||
"fetch_version": true
|
||||
}
|
||||
},
|
||||
{
|
||||
|
@ -111,7 +111,7 @@
|
|||
"background": "p:julia",
|
||||
"properties": {
|
||||
"prefix": " \uE624 ",
|
||||
"display_version": true
|
||||
"fetch_version": true
|
||||
}
|
||||
},
|
||||
{
|
||||
|
@ -135,7 +135,7 @@
|
|||
"background": "p:ruby",
|
||||
"properties": {
|
||||
"prefix": " \uE791 ",
|
||||
"display_version": true,
|
||||
"fetch_version": true,
|
||||
"display_mode": "files"
|
||||
}
|
||||
},
|
||||
|
@ -147,7 +147,7 @@
|
|||
"background": "p:azfunc",
|
||||
"properties": {
|
||||
"prefix": " \uf0e7",
|
||||
"display_version": false,
|
||||
"fetch_version": false,
|
||||
"display_mode": "files"
|
||||
}
|
||||
},
|
||||
|
@ -172,7 +172,7 @@
|
|||
"foreground": "p:black",
|
||||
"background": "p:root",
|
||||
"properties": {
|
||||
"root_icon": ""
|
||||
"template": ""
|
||||
}
|
||||
},
|
||||
{
|
||||
|
|
|
@ -58,7 +58,7 @@
|
|||
"background": "#6CA35E",
|
||||
"properties": {
|
||||
"prefix": " \uF898 ",
|
||||
"display_version": true
|
||||
"fetch_version": true
|
||||
}
|
||||
},
|
||||
{
|
||||
|
@ -69,7 +69,7 @@
|
|||
"background": "#8ED1F7",
|
||||
"properties": {
|
||||
"prefix": " \uE626 ",
|
||||
"display_version": true
|
||||
"fetch_version": true
|
||||
}
|
||||
},
|
||||
{
|
||||
|
@ -80,7 +80,7 @@
|
|||
"background": "#4063D8",
|
||||
"properties": {
|
||||
"prefix": " \uE624 ",
|
||||
"display_version": true
|
||||
"fetch_version": true
|
||||
}
|
||||
},
|
||||
{
|
||||
|
@ -104,7 +104,7 @@
|
|||
"background": "#AE1401",
|
||||
"properties": {
|
||||
"prefix": " \uE791 ",
|
||||
"display_version": true,
|
||||
"fetch_version": true,
|
||||
"display_mode": "files"
|
||||
}
|
||||
},
|
||||
|
@ -116,7 +116,7 @@
|
|||
"background": "#FEAC19",
|
||||
"properties": {
|
||||
"prefix": " \uf0e7",
|
||||
"display_version": false,
|
||||
"fetch_version": false,
|
||||
"display_mode": "files"
|
||||
}
|
||||
},
|
||||
|
@ -141,7 +141,7 @@
|
|||
"foreground": "#111111",
|
||||
"background": "#ffff66",
|
||||
"properties": {
|
||||
"root_icon": ""
|
||||
"template": ""
|
||||
}
|
||||
},
|
||||
{
|
||||
|
|
|
@ -50,7 +50,7 @@
|
|||
"foreground": "#cd5e42",
|
||||
"properties": {
|
||||
"prefix": "",
|
||||
"root_icon": "\ue3bf"
|
||||
"template": "\ue3bf"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue