mirror of
https://github.com/JanDeDobbeleer/oh-my-posh.git
synced 2025-01-12 11:47:25 -08:00
Merge branch 'main' into main
This commit is contained in:
commit
32c939f343
|
@ -2898,6 +2898,15 @@
|
||||||
"code",
|
"code",
|
||||||
"design"
|
"design"
|
||||||
]
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"login": "pashagolub",
|
||||||
|
"name": "Pavlo Golub",
|
||||||
|
"avatar_url": "https://avatars.githubusercontent.com/u/9463113?v=4",
|
||||||
|
"profile": "https://pashagolub.github.io/blog",
|
||||||
|
"contributions": [
|
||||||
|
"doc"
|
||||||
|
]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"contributorsPerLine": 7,
|
"contributorsPerLine": 7,
|
||||||
|
|
6
.github/workflows/codeql.yml
vendored
6
.github/workflows/codeql.yml
vendored
|
@ -24,10 +24,10 @@ jobs:
|
||||||
- name: Install Go 🗳
|
- name: Install Go 🗳
|
||||||
uses: ./.github/workflows/composite/bootstrap-go
|
uses: ./.github/workflows/composite/bootstrap-go
|
||||||
- name: Initialize CodeQL
|
- name: Initialize CodeQL
|
||||||
uses: github/codeql-action/init@aa578102511db1f4524ed59b8cc2bae4f6e88195
|
uses: github/codeql-action/init@df409f7d9260372bd5f19e5b04e83cb3c43714ae
|
||||||
with:
|
with:
|
||||||
languages: go
|
languages: go
|
||||||
- name: Autobuild
|
- name: Autobuild
|
||||||
uses: github/codeql-action/autobuild@aa578102511db1f4524ed59b8cc2bae4f6e88195
|
uses: github/codeql-action/autobuild@df409f7d9260372bd5f19e5b04e83cb3c43714ae
|
||||||
- name: Perform CodeQL Analysis
|
- name: Perform CodeQL Analysis
|
||||||
uses: github/codeql-action/analyze@aa578102511db1f4524ed59b8cc2bae4f6e88195
|
uses: github/codeql-action/analyze@df409f7d9260372bd5f19e5b04e83cb3c43714ae
|
||||||
|
|
2
.github/workflows/release.yml
vendored
2
.github/workflows/release.yml
vendored
|
@ -124,7 +124,7 @@ jobs:
|
||||||
az storage blob upload-batch --destination v${{ needs.changelog.outputs.version }} --source .
|
az storage blob upload-batch --destination v${{ needs.changelog.outputs.version }} --source .
|
||||||
az storage blob upload-batch --destination latest --overwrite true --source .
|
az storage blob upload-batch --destination latest --overwrite true --source .
|
||||||
- name: Release 🎓
|
- name: Release 🎓
|
||||||
uses: softprops/action-gh-release@01570a1f39cb168c169c802c3bceb9e93fb10974
|
uses: softprops/action-gh-release@7b4da11513bf3f43f9999e90eabced41ab8bb048
|
||||||
with:
|
with:
|
||||||
tag_name: ${{ needs.changelog.outputs.tag }}
|
tag_name: ${{ needs.changelog.outputs.tag }}
|
||||||
body: ${{ needs.changelog.outputs.body }}
|
body: ${{ needs.changelog.outputs.body }}
|
||||||
|
|
|
@ -11,7 +11,8 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
// fontCmd can work with fonts
|
ttf bool
|
||||||
|
|
||||||
fontCmd = &cobra.Command{
|
fontCmd = &cobra.Command{
|
||||||
Use: "font [install|configure]",
|
Use: "font [install|configure]",
|
||||||
Short: "Manage fonts",
|
Short: "Manage fonts",
|
||||||
|
@ -46,7 +47,7 @@ This command is used to install fonts and configure the font in your terminal.
|
||||||
|
|
||||||
terminal.Init(env.Shell())
|
terminal.Init(env.Shell())
|
||||||
|
|
||||||
font.Run(fontName, env)
|
font.Run(fontName, env.Cache(), env.Root(), ttf)
|
||||||
|
|
||||||
return
|
return
|
||||||
case "configure":
|
case "configure":
|
||||||
|
@ -59,5 +60,6 @@ This command is used to install fonts and configure the font in your terminal.
|
||||||
)
|
)
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
|
fontCmd.Flags().BoolVar(&ttf, "ttf", false, "fetch the TTF version of the font")
|
||||||
RootCmd.AddCommand(fontCmd)
|
RootCmd.AddCommand(fontCmd)
|
||||||
}
|
}
|
||||||
|
|
|
@ -36,4 +36,5 @@ type Block struct {
|
||||||
MaxWidth int `json:"max_width,omitempty" toml:"max_width,omitempty"`
|
MaxWidth int `json:"max_width,omitempty" toml:"max_width,omitempty"`
|
||||||
MinWidth int `json:"min_width,omitempty" toml:"min_width,omitempty"`
|
MinWidth int `json:"min_width,omitempty" toml:"min_width,omitempty"`
|
||||||
Newline bool `json:"newline,omitempty" toml:"newline,omitempty"`
|
Newline bool `json:"newline,omitempty" toml:"newline,omitempty"`
|
||||||
|
Force bool `json:"force,omitempty" toml:"force,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
|
@ -72,6 +72,7 @@ type Segment struct {
|
||||||
Enabled bool `json:"-" toml:"-"`
|
Enabled bool `json:"-" toml:"-"`
|
||||||
Newline bool `json:"newline,omitempty" toml:"newline,omitempty"`
|
Newline bool `json:"newline,omitempty" toml:"newline,omitempty"`
|
||||||
InvertPowerline bool `json:"invert_powerline,omitempty" toml:"invert_powerline,omitempty"`
|
InvertPowerline bool `json:"invert_powerline,omitempty" toml:"invert_powerline,omitempty"`
|
||||||
|
restored bool `json:"-" toml:"-"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (segment *Segment) Name() string {
|
func (segment *Segment) Name() string {
|
||||||
|
@ -238,11 +239,13 @@ func (segment *Segment) restoreCache() bool {
|
||||||
|
|
||||||
log.Debug("restored segment from cache: ", segment.Name())
|
log.Debug("restored segment from cache: ", segment.Name())
|
||||||
|
|
||||||
|
segment.restored = true
|
||||||
|
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
func (segment *Segment) setCache() {
|
func (segment *Segment) setCache() {
|
||||||
if !segment.hasCache() {
|
if segment.restored || !segment.hasCache() {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -10,13 +10,13 @@ import (
|
||||||
"github.com/charmbracelet/bubbles/spinner"
|
"github.com/charmbracelet/bubbles/spinner"
|
||||||
tea "github.com/charmbracelet/bubbletea"
|
tea "github.com/charmbracelet/bubbletea"
|
||||||
"github.com/charmbracelet/lipgloss"
|
"github.com/charmbracelet/lipgloss"
|
||||||
"github.com/jandedobbeleer/oh-my-posh/src/runtime"
|
cache_ "github.com/jandedobbeleer/oh-my-posh/src/cache"
|
||||||
"github.com/jandedobbeleer/oh-my-posh/src/terminal"
|
"github.com/jandedobbeleer/oh-my-posh/src/terminal"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
program *tea.Program
|
program *tea.Program
|
||||||
environment runtime.Environment
|
cache cache_.Cache
|
||||||
)
|
)
|
||||||
|
|
||||||
const listHeight = 14
|
const listHeight = 14
|
||||||
|
@ -79,6 +79,7 @@ type main struct {
|
||||||
spinner spinner.Model
|
spinner spinner.Model
|
||||||
state state
|
state state
|
||||||
system bool
|
system bool
|
||||||
|
ttf bool
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *main) buildFontList(nerdFonts []*Asset) {
|
func (m *main) buildFontList(nerdFonts []*Asset) {
|
||||||
|
@ -120,18 +121,18 @@ func downloadFontZip(location string) {
|
||||||
program.Send(zipMsg(zipFile))
|
program.Send(zipMsg(zipFile))
|
||||||
}
|
}
|
||||||
|
|
||||||
func installLocalFontZIP(zipFile string, user bool) {
|
func installLocalFontZIP(zipFile string, user, ttf bool) {
|
||||||
data, err := os.ReadFile(zipFile)
|
data, err := os.ReadFile(zipFile)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
program.Send(errMsg(err))
|
program.Send(errMsg(err))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
installFontZIP(data, user)
|
installFontZIP(data, user, ttf)
|
||||||
}
|
}
|
||||||
|
|
||||||
func installFontZIP(zipFile []byte, user bool) {
|
func installFontZIP(zipFile []byte, user, ttf bool) {
|
||||||
families, err := InstallZIP(zipFile, user)
|
families, err := InstallZIP(zipFile, user, ttf)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
program.Send(errMsg(err))
|
program.Send(errMsg(err))
|
||||||
return
|
return
|
||||||
|
@ -159,7 +160,7 @@ func (m *main) Init() tea.Cmd {
|
||||||
|
|
||||||
defer func() {
|
defer func() {
|
||||||
if isLocalZipFile() {
|
if isLocalZipFile() {
|
||||||
go installLocalFontZIP(m.font, m.system)
|
go installLocalFontZIP(m.font, m.system, m.ttf)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
go getFontsList()
|
go getFontsList()
|
||||||
|
@ -239,7 +240,7 @@ func (m *main) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
|
||||||
case zipMsg:
|
case zipMsg:
|
||||||
m.state = installFont
|
m.state = installFont
|
||||||
defer func() {
|
defer func() {
|
||||||
go installFontZIP(msg, m.system)
|
go installFontZIP(msg, m.system, m.ttf)
|
||||||
}()
|
}()
|
||||||
m.spinner.Spinner = spinner.Dot
|
m.spinner.Spinner = spinner.Dot
|
||||||
return m, m.spinner.Tick
|
return m, m.spinner.Tick
|
||||||
|
@ -290,7 +291,7 @@ func (m *main) View() string {
|
||||||
var builder strings.Builder
|
var builder strings.Builder
|
||||||
|
|
||||||
builder.WriteString(fmt.Sprintf("Successfully installed %s 🚀\n\n%s", m.font, terminal.StopProgress()))
|
builder.WriteString(fmt.Sprintf("Successfully installed %s 🚀\n\n%s", m.font, terminal.StopProgress()))
|
||||||
builder.WriteString("The following font families are now available for configuration:\n")
|
builder.WriteString("The following font families are now available for configuration:\n\n")
|
||||||
|
|
||||||
for i, family := range m.families {
|
for i, family := range m.families {
|
||||||
builder.WriteString(fmt.Sprintf(" • %s", family))
|
builder.WriteString(fmt.Sprintf(" • %s", family))
|
||||||
|
@ -306,13 +307,14 @@ func (m *main) View() string {
|
||||||
return ""
|
return ""
|
||||||
}
|
}
|
||||||
|
|
||||||
func Run(font string, env runtime.Environment) {
|
func Run(font string, ch cache_.Cache, root, ttf bool) {
|
||||||
main := &main{
|
main := &main{
|
||||||
font: font,
|
font: font,
|
||||||
system: env.Root(),
|
system: root,
|
||||||
|
ttf: ttf,
|
||||||
}
|
}
|
||||||
|
|
||||||
environment = env
|
cache = ch
|
||||||
|
|
||||||
program = tea.NewProgram(main)
|
program = tea.NewProgram(main)
|
||||||
if _, err := program.Run(); err != nil {
|
if _, err := program.Run(); err != nil {
|
||||||
|
|
|
@ -10,7 +10,7 @@ import (
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/jandedobbeleer/oh-my-posh/src/cache"
|
cache_ "github.com/jandedobbeleer/oh-my-posh/src/cache"
|
||||||
"github.com/jandedobbeleer/oh-my-posh/src/runtime/http"
|
"github.com/jandedobbeleer/oh-my-posh/src/runtime/http"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -50,11 +50,11 @@ func Fonts() ([]*Asset, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func getCachedFontData() ([]*Asset, error) {
|
func getCachedFontData() ([]*Asset, error) {
|
||||||
if environment == nil {
|
if cache == nil {
|
||||||
return nil, errors.New("environment not set")
|
return nil, errors.New("environment not set")
|
||||||
}
|
}
|
||||||
|
|
||||||
list, OK := environment.Cache().Get(cache.FONTLISTCACHE)
|
list, OK := cache.Get(cache_.FONTLISTCACHE)
|
||||||
if !OK {
|
if !OK {
|
||||||
return nil, errors.New("cache not found")
|
return nil, errors.New("cache not found")
|
||||||
}
|
}
|
||||||
|
@ -69,7 +69,7 @@ func getCachedFontData() ([]*Asset, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func setCachedFontData(assets []*Asset) {
|
func setCachedFontData(assets []*Asset) {
|
||||||
if environment == nil {
|
if cache == nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -78,7 +78,7 @@ func setCachedFontData(assets []*Asset) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
environment.Cache().Set(cache.FONTLISTCACHE, string(data), cache.ONEDAY)
|
cache.Set(cache_.FONTLISTCACHE, string(data), cache_.ONEDAY)
|
||||||
}
|
}
|
||||||
|
|
||||||
func CascadiaCode() ([]*Asset, error) {
|
func CascadiaCode() ([]*Asset, error) {
|
||||||
|
|
|
@ -8,6 +8,7 @@ import (
|
||||||
"io"
|
"io"
|
||||||
"path"
|
"path"
|
||||||
stdruntime "runtime"
|
stdruntime "runtime"
|
||||||
|
"slices"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/jandedobbeleer/oh-my-posh/src/runtime"
|
"github.com/jandedobbeleer/oh-my-posh/src/runtime"
|
||||||
|
@ -20,10 +21,17 @@ func contains[S ~[]E, E comparable](s S, e E) bool {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
func InstallZIP(data []byte, user bool) ([]string, error) {
|
func InstallZIP(data []byte, user, ttf bool) ([]string, error) {
|
||||||
|
// prefer OTF over TTF; otherwise prefer the first font we find
|
||||||
|
extension := ".otf"
|
||||||
|
if ttf {
|
||||||
|
extension = ".ttf"
|
||||||
|
}
|
||||||
|
|
||||||
var families []string
|
var families []string
|
||||||
bytesReader := bytes.NewReader(data)
|
bytesReader := bytes.NewReader(data)
|
||||||
|
|
||||||
|
@ -45,6 +53,7 @@ func InstallZIP(data []byte, user bool) ([]string, error) {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return families, err
|
return families, err
|
||||||
}
|
}
|
||||||
|
|
||||||
defer rc.Close()
|
defer rc.Close()
|
||||||
|
|
||||||
data, err := io.ReadAll(rc)
|
data, err := io.ReadAll(rc)
|
||||||
|
@ -59,13 +68,14 @@ func InstallZIP(data []byte, user bool) ([]string, error) {
|
||||||
|
|
||||||
if _, found := fonts[fontData.Name]; !found {
|
if _, found := fonts[fontData.Name]; !found {
|
||||||
fonts[fontData.Name] = fontData
|
fonts[fontData.Name] = fontData
|
||||||
} else {
|
continue
|
||||||
// prefer OTF over TTF; otherwise prefer the first font we find
|
}
|
||||||
first := strings.ToLower(path.Ext(fonts[fontData.Name].FileName))
|
|
||||||
second := strings.ToLower(path.Ext(fontData.FileName))
|
// respect the user's preference for TTF or OTF
|
||||||
if first != second && second == ".otf" {
|
first := strings.ToLower(path.Ext(fonts[fontData.Name].FileName))
|
||||||
fonts[fontData.Name] = fontData
|
second := strings.ToLower(path.Ext(fontData.FileName))
|
||||||
}
|
if first != second && second == extension {
|
||||||
|
fonts[fontData.Name] = fontData
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -74,7 +84,7 @@ func InstallZIP(data []byte, user bool) ([]string, error) {
|
||||||
return families, err
|
return families, err
|
||||||
}
|
}
|
||||||
|
|
||||||
if !contains(families, font.Family) {
|
if found := contains(families, font.Family); !found {
|
||||||
families = append(families, font.Family)
|
families = append(families, font.Family)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -84,5 +94,7 @@ func InstallZIP(data []byte, user bool) ([]string, error) {
|
||||||
_, _ = cmd.Run("fc-cache", "-f")
|
_, _ = cmd.Run("fc-cache", "-f")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
slices.Sort(families)
|
||||||
|
|
||||||
return families, nil
|
return families, nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,7 +19,7 @@ require (
|
||||||
github.com/stretchr/objx v0.5.2 // indirect
|
github.com/stretchr/objx v0.5.2 // indirect
|
||||||
github.com/stretchr/testify v1.10.0
|
github.com/stretchr/testify v1.10.0
|
||||||
github.com/wayneashleyberry/terminal-dimensions v1.1.0
|
github.com/wayneashleyberry/terminal-dimensions v1.1.0
|
||||||
golang.org/x/crypto v0.26.0 // indirect
|
golang.org/x/crypto v0.31.0 // indirect
|
||||||
golang.org/x/image v0.23.0
|
golang.org/x/image v0.23.0
|
||||||
golang.org/x/sys v0.28.0
|
golang.org/x/sys v0.28.0
|
||||||
golang.org/x/text v0.21.0
|
golang.org/x/text v0.21.0
|
||||||
|
@ -31,9 +31,9 @@ require (
|
||||||
github.com/charmbracelet/bubbles v0.20.0
|
github.com/charmbracelet/bubbles v0.20.0
|
||||||
github.com/charmbracelet/bubbletea v1.2.4
|
github.com/charmbracelet/bubbletea v1.2.4
|
||||||
github.com/charmbracelet/lipgloss v1.0.0
|
github.com/charmbracelet/lipgloss v1.0.0
|
||||||
github.com/goccy/go-json v0.10.3
|
github.com/goccy/go-json v0.10.4
|
||||||
github.com/goccy/go-yaml v1.11.3
|
github.com/goccy/go-yaml v1.11.3
|
||||||
github.com/gookit/goutil v0.6.17
|
github.com/gookit/goutil v0.6.18
|
||||||
github.com/hashicorp/hcl/v2 v2.23.0
|
github.com/hashicorp/hcl/v2 v2.23.0
|
||||||
github.com/mattn/go-runewidth v0.0.16
|
github.com/mattn/go-runewidth v0.0.16
|
||||||
github.com/pelletier/go-toml/v2 v2.2.3
|
github.com/pelletier/go-toml/v2 v2.2.3
|
||||||
|
|
12
src/go.sum
12
src/go.sum
|
@ -62,8 +62,8 @@ github.com/go-playground/validator/v10 v10.4.1 h1:pH2c5ADXtd66mxoE0Zm9SUhxE20r7a
|
||||||
github.com/go-playground/validator/v10 v10.4.1/go.mod h1:nlOn6nFhuKACm19sB/8EGNn9GlaMV7XkbRSipzJ0Ii4=
|
github.com/go-playground/validator/v10 v10.4.1/go.mod h1:nlOn6nFhuKACm19sB/8EGNn9GlaMV7XkbRSipzJ0Ii4=
|
||||||
github.com/go-test/deep v1.0.3 h1:ZrJSEWsXzPOxaZnFteGEfooLba+ju3FYIbOrS+rQd68=
|
github.com/go-test/deep v1.0.3 h1:ZrJSEWsXzPOxaZnFteGEfooLba+ju3FYIbOrS+rQd68=
|
||||||
github.com/go-test/deep v1.0.3/go.mod h1:wGDj63lr65AM2AQyKZd/NYHGb0R+1RLqB8NKt3aSFNA=
|
github.com/go-test/deep v1.0.3/go.mod h1:wGDj63lr65AM2AQyKZd/NYHGb0R+1RLqB8NKt3aSFNA=
|
||||||
github.com/goccy/go-json v0.10.3 h1:KZ5WoDbxAIgm2HNbYckL0se1fHD6rz5j4ywS6ebzDqA=
|
github.com/goccy/go-json v0.10.4 h1:JSwxQzIqKfmFX1swYPpUThQZp/Ka4wzJdK0LWVytLPM=
|
||||||
github.com/goccy/go-json v0.10.3/go.mod h1:oq7eo15ShAhp70Anwd5lgX2pLfOS3QCiwU/PULtXL6M=
|
github.com/goccy/go-json v0.10.4/go.mod h1:oq7eo15ShAhp70Anwd5lgX2pLfOS3QCiwU/PULtXL6M=
|
||||||
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 h1:DACJavvAHhabrF08vX0COfcOBJRhZ8lUbR+ZWIs0Y5g=
|
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 h1:DACJavvAHhabrF08vX0COfcOBJRhZ8lUbR+ZWIs0Y5g=
|
||||||
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k=
|
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k=
|
||||||
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
|
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
|
||||||
|
@ -72,8 +72,8 @@ github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
|
||||||
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
||||||
github.com/gookit/color v1.5.4 h1:FZmqs7XOyGgCAxmWyPslpiok1k05wmY3SJTytgvYFs0=
|
github.com/gookit/color v1.5.4 h1:FZmqs7XOyGgCAxmWyPslpiok1k05wmY3SJTytgvYFs0=
|
||||||
github.com/gookit/color v1.5.4/go.mod h1:pZJOeOS8DM43rXbp4AZo1n9zCU2qjpcRko0b6/QJi9w=
|
github.com/gookit/color v1.5.4/go.mod h1:pZJOeOS8DM43rXbp4AZo1n9zCU2qjpcRko0b6/QJi9w=
|
||||||
github.com/gookit/goutil v0.6.17 h1:SxmbDz2sn2V+O+xJjJhJT/sq1/kQh6rCJ7vLBiRPZjI=
|
github.com/gookit/goutil v0.6.18 h1:MUVj0G16flubWT8zYVicIuisUiHdgirPAkmnfD2kKgw=
|
||||||
github.com/gookit/goutil v0.6.17/go.mod h1:rSw1LchE1I3TDWITZvefoAC9tS09SFu3lHXLCV7EaEY=
|
github.com/gookit/goutil v0.6.18/go.mod h1:AY/5sAwKe7Xck+mEbuxj0n/bc3qwrGNe3Oeulln7zBA=
|
||||||
github.com/hashicorp/hcl/v2 v2.23.0 h1:Fphj1/gCylPxHutVSEOf2fBOh1VE4AuLV7+kbJf3qos=
|
github.com/hashicorp/hcl/v2 v2.23.0 h1:Fphj1/gCylPxHutVSEOf2fBOh1VE4AuLV7+kbJf3qos=
|
||||||
github.com/hashicorp/hcl/v2 v2.23.0/go.mod h1:62ZYHrXgPoX8xBnzl8QzbWq4dyDsDtfCRgIq1rbJEvA=
|
github.com/hashicorp/hcl/v2 v2.23.0/go.mod h1:62ZYHrXgPoX8xBnzl8QzbWq4dyDsDtfCRgIq1rbJEvA=
|
||||||
github.com/huandu/xstrings v1.5.0 h1:2ag3IFq9ZDANvthTwTiqSSZLjDc+BedvHPAp5tJy2TI=
|
github.com/huandu/xstrings v1.5.0 h1:2ag3IFq9ZDANvthTwTiqSSZLjDc+BedvHPAp5tJy2TI=
|
||||||
|
@ -175,8 +175,8 @@ github.com/zclconf/go-cty v1.14.4 h1:uXXczd9QDGsgu0i/QFR/hzI5NYCHLf6NQw/atrbnhq8
|
||||||
github.com/zclconf/go-cty v1.14.4/go.mod h1:VvMs5i0vgZdhYawQNq5kePSpLAoz8u1xvZgrPIxfnZE=
|
github.com/zclconf/go-cty v1.14.4/go.mod h1:VvMs5i0vgZdhYawQNq5kePSpLAoz8u1xvZgrPIxfnZE=
|
||||||
github.com/zclconf/go-cty-debug v0.0.0-20240509010212-0d6042c53940 h1:4r45xpDWB6ZMSMNJFMOjqrGHynW3DIBuR2H9j0ug+Mo=
|
github.com/zclconf/go-cty-debug v0.0.0-20240509010212-0d6042c53940 h1:4r45xpDWB6ZMSMNJFMOjqrGHynW3DIBuR2H9j0ug+Mo=
|
||||||
github.com/zclconf/go-cty-debug v0.0.0-20240509010212-0d6042c53940/go.mod h1:CmBdvvj3nqzfzJ6nTCIwDTPZ56aVGvDrmztiO5g3qrM=
|
github.com/zclconf/go-cty-debug v0.0.0-20240509010212-0d6042c53940/go.mod h1:CmBdvvj3nqzfzJ6nTCIwDTPZ56aVGvDrmztiO5g3qrM=
|
||||||
golang.org/x/crypto v0.26.0 h1:RrRspgV4mU+YwB4FYnuBoKsUapNIL5cohGAmSH3azsw=
|
golang.org/x/crypto v0.31.0 h1:ihbySMvVjLAeSH1IbfcRTkD/iNscyz8rGzjF/E5hV6U=
|
||||||
golang.org/x/crypto v0.26.0/go.mod h1:GY7jblb9wI+FOo5y8/S2oY4zWP07AkOJ4+jxCqdqn54=
|
golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk=
|
||||||
golang.org/x/exp v0.0.0-20240613232115-7f521ea00fb8 h1:yixxcjnhBmY0nkL253HFVIm0JsFHwrHdT3Yh6szTnfY=
|
golang.org/x/exp v0.0.0-20240613232115-7f521ea00fb8 h1:yixxcjnhBmY0nkL253HFVIm0JsFHwrHdT3Yh6szTnfY=
|
||||||
golang.org/x/exp v0.0.0-20240613232115-7f521ea00fb8/go.mod h1:jj3sYF3dwk5D+ghuXyeI3r5MFf+NT2An6/9dOA95KSI=
|
golang.org/x/exp v0.0.0-20240613232115-7f521ea00fb8/go.mod h1:jj3sYF3dwk5D+ghuXyeI3r5MFf+NT2An6/9dOA95KSI=
|
||||||
golang.org/x/image v0.23.0 h1:HseQ7c2OpPKTPVzNjG5fwJsOTCiiwS4QdsYi5XU6H68=
|
golang.org/x/image v0.23.0 h1:HseQ7c2OpPKTPVzNjG5fwJsOTCiiwS4QdsYi5XU6H68=
|
||||||
|
|
|
@ -196,8 +196,8 @@ func (e *Engine) getTitleTemplateText() string {
|
||||||
func (e *Engine) renderBlock(block *config.Block, cancelNewline bool) bool {
|
func (e *Engine) renderBlock(block *config.Block, cancelNewline bool) bool {
|
||||||
text, length := e.writeBlockSegments(block)
|
text, length := e.writeBlockSegments(block)
|
||||||
|
|
||||||
// do not print anything when we don't have any text
|
// do not print anything when we don't have any text unless forced
|
||||||
if length == 0 {
|
if !block.Force && length == 0 {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -7,6 +7,7 @@ import (
|
||||||
"slices"
|
"slices"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
|
"github.com/jandedobbeleer/oh-my-posh/src/log"
|
||||||
"github.com/jandedobbeleer/oh-my-posh/src/properties"
|
"github.com/jandedobbeleer/oh-my-posh/src/properties"
|
||||||
"github.com/jandedobbeleer/oh-my-posh/src/runtime/path"
|
"github.com/jandedobbeleer/oh-my-posh/src/runtime/path"
|
||||||
)
|
)
|
||||||
|
@ -68,6 +69,7 @@ func (p *Python) loadContext() {
|
||||||
p.Venv = prompt
|
p.Venv = prompt
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
venvVars := []string{
|
venvVars := []string{
|
||||||
"VIRTUAL_ENV",
|
"VIRTUAL_ENV",
|
||||||
"CONDA_ENV_PATH",
|
"CONDA_ENV_PATH",
|
||||||
|
@ -88,9 +90,11 @@ func (p *Python) loadContext() {
|
||||||
}
|
}
|
||||||
|
|
||||||
name := path.Base(venv)
|
name := path.Base(venv)
|
||||||
|
log.Debugf("virtual env name: %s", name)
|
||||||
if folderNameFallback && slices.Contains(defaultVenvNames, name) {
|
if folderNameFallback && slices.Contains(defaultVenvNames, name) {
|
||||||
venv = strings.TrimSuffix(venv, name)
|
venv = strings.TrimSuffix(venv, name)
|
||||||
name = path.Base(venv)
|
name = path.Base(venv)
|
||||||
|
log.Debugf("virtual env name (fallback): %s", name)
|
||||||
}
|
}
|
||||||
|
|
||||||
if p.canUseVenvName(name) {
|
if p.canUseVenvName(name) {
|
||||||
|
@ -108,12 +112,15 @@ func (p *Python) canUseVenvName(name string) bool {
|
||||||
if p.language.props.GetBool(properties.DisplayDefault, true) {
|
if p.language.props.GetBool(properties.DisplayDefault, true) {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
invalidNames := [2]string{"system", "base"}
|
invalidNames := [2]string{"system", "base"}
|
||||||
for _, a := range invalidNames {
|
for _, a := range invalidNames {
|
||||||
if a == name {
|
if a == name {
|
||||||
|
log.Debugf("virtual env name %s is invalid", name)
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -193,6 +200,7 @@ func (p *Python) pyvenvCfgPrompt() string {
|
||||||
if len(lineSplit) != 2 {
|
if len(lineSplit) != 2 {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
key := strings.TrimSpace(lineSplit[0])
|
key := strings.TrimSpace(lineSplit[0])
|
||||||
if key == "prompt" {
|
if key == "prompt" {
|
||||||
value := strings.TrimSpace(lineSplit[1])
|
value := strings.TrimSpace(lineSplit[1])
|
||||||
|
|
|
@ -32,6 +32,7 @@ import Config from "@site/src/components/Config.js";
|
||||||
| `leading_diamond` | `string` |
|
| `leading_diamond` | `string` |
|
||||||
| `trailing_diamond` | `string` |
|
| `trailing_diamond` | `string` |
|
||||||
| `segments` | `array` |
|
| `segments` | `array` |
|
||||||
|
| `force` | `boolean` |
|
||||||
|
|
||||||
### Type
|
### Type
|
||||||
|
|
||||||
|
@ -114,5 +115,9 @@ with the same trailing diamond, regardless of which segment is enabled or not.
|
||||||
|
|
||||||
Array of one or more [segments][segment].
|
Array of one or more [segments][segment].
|
||||||
|
|
||||||
|
### Force
|
||||||
|
|
||||||
|
When set to `true`, the block will always be rendered, even if all segments are empty. Defaults to `false`.
|
||||||
|
|
||||||
[color-overrides]: /docs/configuration/colors#color-overrides
|
[color-overrides]: /docs/configuration/colors#color-overrides
|
||||||
[segment]: segment.mdx
|
[segment]: segment.mdx
|
||||||
|
|
|
@ -407,6 +407,9 @@ Thanks goes to these wonderful people ([emoji key][acek]):
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/dusktreader"><img src="https://avatars.githubusercontent.com/u/713676?v=4?s=100" width="100px;" alt="Tucker Beck"/><br /><sub><b>Tucker Beck</b></sub></a><br /><a href="https://github.com/JanDeDobbeleer/oh-my-posh/commits?author=dusktreader" title="Code">💻</a> <a href="https://github.com/JanDeDobbeleer/oh-my-posh/commits?author=dusktreader" title="Documentation">📖</a></td>
|
<td align="center" valign="top" width="14.28%"><a href="https://github.com/dusktreader"><img src="https://avatars.githubusercontent.com/u/713676?v=4?s=100" width="100px;" alt="Tucker Beck"/><br /><sub><b>Tucker Beck</b></sub></a><br /><a href="https://github.com/JanDeDobbeleer/oh-my-posh/commits?author=dusktreader" title="Code">💻</a> <a href="https://github.com/JanDeDobbeleer/oh-my-posh/commits?author=dusktreader" title="Documentation">📖</a></td>
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://mpb-dev.fr/"><img src="https://avatars.githubusercontent.com/u/38607067?v=4?s=100" width="100px;" alt="Sunshio"/><br /><sub><b>Sunshio</b></sub></a><br /><a href="https://github.com/JanDeDobbeleer/oh-my-posh/commits?author=Pietrucci-Blacher" title="Code">💻</a> <a href="#design-Pietrucci-Blacher" title="Design">🎨</a></td>
|
<td align="center" valign="top" width="14.28%"><a href="https://mpb-dev.fr/"><img src="https://avatars.githubusercontent.com/u/38607067?v=4?s=100" width="100px;" alt="Sunshio"/><br /><sub><b>Sunshio</b></sub></a><br /><a href="https://github.com/JanDeDobbeleer/oh-my-posh/commits?author=Pietrucci-Blacher" title="Code">💻</a> <a href="#design-Pietrucci-Blacher" title="Design">🎨</a></td>
|
||||||
</tr>
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td align="center" valign="top" width="14.28%"><a href="https://pashagolub.github.io/blog"><img src="https://avatars.githubusercontent.com/u/9463113?v=4?s=100" width="100px;" alt="Pavlo Golub"/><br /><sub><b>Pavlo Golub</b></sub></a><br /><a href="https://github.com/JanDeDobbeleer/oh-my-posh/commits?author=pashagolub" title="Documentation">📖</a></td>
|
||||||
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
|
|
|
@ -46,6 +46,12 @@ This will present a list of Nerd Font libraries, from which you can select `Mes
|
||||||
oh-my-posh font install meslo
|
oh-my-posh font install meslo
|
||||||
```
|
```
|
||||||
|
|
||||||
|
By default, Oh My Posh installs the `.otf` version of the font. If you prefer the `.ttf` version, you can specify it with the `--ttf` flag:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
oh-my-posh font install meslo --ttf
|
||||||
|
```
|
||||||
|
|
||||||
</TabItem>
|
</TabItem>
|
||||||
<TabItem value="homebrew">
|
<TabItem value="homebrew">
|
||||||
|
|
||||||
|
|
|
@ -19,7 +19,7 @@ import Config from "@site/src/components/Config.js";
|
||||||
powerline_symbol: "\uE0B0",
|
powerline_symbol: "\uE0B0",
|
||||||
foreground: "#ffffff",
|
foreground: "#ffffff",
|
||||||
background: "#7FD5EA",
|
background: "#7FD5EA",
|
||||||
template: " \u202D\uFCD1 {{ .Full }} ",
|
template: " \ue627 {{ .Full }} ",
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue