mirror of
https://github.com/JanDeDobbeleer/oh-my-posh.git
synced 2024-12-29 04:49:39 -08:00
parent
403bf12401
commit
d52f917782
|
@ -76,6 +76,7 @@ Style sets the way the path is displayed. Based on previous experience and popul
|
||||||
- agnoster
|
- agnoster
|
||||||
- agnoster_full
|
- agnoster_full
|
||||||
- agnoster_short
|
- agnoster_short
|
||||||
|
- agnoster_left
|
||||||
- full
|
- full
|
||||||
- folder
|
- folder
|
||||||
- mixed
|
- mixed
|
||||||
|
@ -84,8 +85,7 @@ Style sets the way the path is displayed. Based on previous experience and popul
|
||||||
### Agnoster
|
### Agnoster
|
||||||
|
|
||||||
Renders each folder as the `folder_icon` separated by the `folder_separator_icon`.
|
Renders each folder as the `folder_icon` separated by the `folder_separator_icon`.
|
||||||
Only the current folder name is displayed at the end, `$HOME` is replaced by the `home_icon` if you're
|
Only the current folder name is displayed at the end.
|
||||||
inside the `$HOME` location or one of its children.
|
|
||||||
|
|
||||||
### Agnoster Full
|
### Agnoster Full
|
||||||
|
|
||||||
|
@ -96,6 +96,11 @@ Renders each folder name separated by the `folder_separator_icon`.
|
||||||
When more than `max_depth` levels deep, it renders one `folder_icon` followed by the names of the last `max_depth` folders,
|
When more than `max_depth` levels deep, it renders one `folder_icon` followed by the names of the last `max_depth` folders,
|
||||||
separated by the `folder_separator_icon`.
|
separated by the `folder_separator_icon`.
|
||||||
|
|
||||||
|
### Agnoster Left
|
||||||
|
|
||||||
|
Renders each folder as the `folder_icon` separated by the `folder_separator_icon`.
|
||||||
|
Only the root folder name and it's child are displayed in full.
|
||||||
|
|
||||||
### Full
|
### Full
|
||||||
|
|
||||||
Display `$PWD` as a string.
|
Display `$PWD` as a string.
|
||||||
|
|
|
@ -37,6 +37,8 @@ const (
|
||||||
Mixed string = "mixed"
|
Mixed string = "mixed"
|
||||||
// Letter like agnoster, but with the first letter of each folder name
|
// Letter like agnoster, but with the first letter of each folder name
|
||||||
Letter string = "letter"
|
Letter string = "letter"
|
||||||
|
// AgnosterLeft like agnoster, but keeps the left side of the path
|
||||||
|
AgnosterLeft string = "agnoster_left"
|
||||||
// MixedThreshold the threshold of the length of the path Mixed will display
|
// MixedThreshold the threshold of the length of the path Mixed will display
|
||||||
MixedThreshold Property = "mixed_threshold"
|
MixedThreshold Property = "mixed_threshold"
|
||||||
// MappedLocations allows overriding certain location with an icon
|
// MappedLocations allows overriding certain location with an icon
|
||||||
|
@ -67,6 +69,8 @@ func (pt *path) string() string {
|
||||||
formattedPath = pt.getMixedPath()
|
formattedPath = pt.getMixedPath()
|
||||||
case Letter:
|
case Letter:
|
||||||
formattedPath = pt.getLetterPath()
|
formattedPath = pt.getLetterPath()
|
||||||
|
case AgnosterLeft:
|
||||||
|
formattedPath = pt.getAgnosterLeftPath()
|
||||||
case Short:
|
case Short:
|
||||||
// "short" is a duplicate of "full", just here for backwards compatibility
|
// "short" is a duplicate of "full", just here for backwards compatibility
|
||||||
fallthrough
|
fallthrough
|
||||||
|
@ -145,6 +149,29 @@ func (pt *path) getAgnosterPath() string {
|
||||||
return buffer.String()
|
return buffer.String()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (pt *path) getAgnosterLeftPath() string {
|
||||||
|
pwd := pt.getPwd()
|
||||||
|
separator := pt.env.getPathSeperator()
|
||||||
|
pwd = strings.Trim(pwd, separator)
|
||||||
|
splitted := strings.Split(pwd, separator)
|
||||||
|
folderIcon := pt.props.getString(FolderIcon, "..")
|
||||||
|
separator = pt.props.getString(FolderSeparatorIcon, separator)
|
||||||
|
switch len(splitted) {
|
||||||
|
case 0:
|
||||||
|
return ""
|
||||||
|
case 1:
|
||||||
|
return splitted[0]
|
||||||
|
case 2:
|
||||||
|
return fmt.Sprintf("%s%s%s", splitted[0], separator, splitted[1])
|
||||||
|
}
|
||||||
|
var buffer strings.Builder
|
||||||
|
buffer.WriteString(fmt.Sprintf("%s%s%s", splitted[0], separator, splitted[1]))
|
||||||
|
for i := 2; i < len(splitted); i++ {
|
||||||
|
buffer.WriteString(fmt.Sprintf("%s%s", separator, folderIcon))
|
||||||
|
}
|
||||||
|
return buffer.String()
|
||||||
|
}
|
||||||
|
|
||||||
func (pt *path) getLetterPath() string {
|
func (pt *path) getLetterPath() string {
|
||||||
var buffer strings.Builder
|
var buffer strings.Builder
|
||||||
pwd := pt.getPwd()
|
pwd := pt.getPwd()
|
||||||
|
|
|
@ -617,7 +617,7 @@ func TestGetFolderPathCustomMappedLocations(t *testing.T) {
|
||||||
assert.Equal(t, "#", got)
|
assert.Equal(t, "#", got)
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestAgnosterPath(t *testing.T) {
|
func TestAgnosterPath(t *testing.T) { // nolint:dupl
|
||||||
cases := []struct {
|
cases := []struct {
|
||||||
Case string
|
Case string
|
||||||
Expected string
|
Expected string
|
||||||
|
@ -665,6 +665,54 @@ func TestAgnosterPath(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestAgnosterLeftPath(t *testing.T) { // nolint:dupl
|
||||||
|
cases := []struct {
|
||||||
|
Case string
|
||||||
|
Expected string
|
||||||
|
Home string
|
||||||
|
PWD string
|
||||||
|
PathSeparator string
|
||||||
|
}{
|
||||||
|
{Case: "Windows outside home", Expected: "C: > Program Files > f > f", Home: homeBillWindows, PWD: "C:\\Program Files\\Go\\location", PathSeparator: "\\"},
|
||||||
|
{Case: "Windows inside home", Expected: "~ > Documents > f > f", Home: homeBillWindows, PWD: homeBillWindows + "\\Documents\\Bill\\location", PathSeparator: "\\"},
|
||||||
|
{Case: "Windows inside home zero levels", Expected: "C: > location", Home: homeBillWindows, PWD: "C:\\location", PathSeparator: "\\"},
|
||||||
|
{Case: "Windows inside home one level", Expected: "C: > Program Files > f", Home: homeBillWindows, PWD: "C:\\Program Files\\location", PathSeparator: "\\"},
|
||||||
|
{Case: "Windows lower case drive letter", Expected: "C: > Windows", Home: homeBillWindows, PWD: "C:\\Windows\\", PathSeparator: "\\"},
|
||||||
|
{Case: "Windows lower case drive letter (other)", Expected: "P: > Other", Home: homeBillWindows, PWD: "P:\\Other\\", PathSeparator: "\\"},
|
||||||
|
{Case: "Windows lower word drive", Expected: "some: > some", Home: homeBillWindows, PWD: "some:\\some\\", PathSeparator: "\\"},
|
||||||
|
{Case: "Windows lower word drive (ending with c)", Expected: "src: > source", Home: homeBillWindows, PWD: "src:\\source\\", PathSeparator: "\\"},
|
||||||
|
{Case: "Windows lower word drive (arbitrary cases)", Expected: "sRc: > source", Home: homeBillWindows, PWD: "sRc:\\source\\", PathSeparator: "\\"},
|
||||||
|
{Case: "Windows registry drive", Expected: "\uf013 > SOFTWARE > f", Home: homeBillWindows, PWD: "HKLM:\\SOFTWARE\\magnetic:test\\", PathSeparator: "\\"},
|
||||||
|
{Case: "Windows registry drive case sensitive", Expected: "\uf013 > SOFTWARE > f", Home: homeBillWindows, PWD: "HKLM:\\SOFTWARE\\magnetic:TOAST\\", PathSeparator: "\\"},
|
||||||
|
{Case: "Unix outside home", Expected: "mnt > go > f > f", Home: homeJan, PWD: "/mnt/go/test/location", PathSeparator: "/"},
|
||||||
|
{Case: "Unix inside home", Expected: "~ > docs > f > f", Home: homeJan, PWD: homeJan + "/docs/jan/location", PathSeparator: "/"},
|
||||||
|
{Case: "Unix outside home zero levels", Expected: "mnt > location", Home: homeJan, PWD: "/mnt/location", PathSeparator: "/"},
|
||||||
|
{Case: "Unix outside home one level", Expected: "mnt > folder > f", Home: homeJan, PWD: "/mnt/folder/location", PathSeparator: "/"},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, tc := range cases {
|
||||||
|
env := new(MockedEnvironment)
|
||||||
|
env.On("homeDir", nil).Return(tc.Home)
|
||||||
|
env.On("getPathSeperator", nil).Return(tc.PathSeparator)
|
||||||
|
env.On("getcwd", nil).Return(tc.PWD)
|
||||||
|
env.On("getRuntimeGOOS", nil).Return("")
|
||||||
|
args := &args{
|
||||||
|
PSWD: &tc.PWD,
|
||||||
|
}
|
||||||
|
env.On("getArgs", nil).Return(args)
|
||||||
|
path := &path{
|
||||||
|
env: env,
|
||||||
|
props: map[Property]interface{}{
|
||||||
|
FolderSeparatorIcon: " > ",
|
||||||
|
FolderIcon: "f",
|
||||||
|
HomeIcon: "~",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
got := path.getAgnosterLeftPath()
|
||||||
|
assert.Equal(t, tc.Expected, got, tc.Case)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestGetPwd(t *testing.T) {
|
func TestGetPwd(t *testing.T) {
|
||||||
cases := []struct {
|
cases := []struct {
|
||||||
MappedLocationsEnabled bool
|
MappedLocationsEnabled bool
|
||||||
|
|
|
@ -1191,6 +1191,7 @@
|
||||||
"agnoster",
|
"agnoster",
|
||||||
"agnoster_full",
|
"agnoster_full",
|
||||||
"agnoster_short",
|
"agnoster_short",
|
||||||
|
"agnoster_left",
|
||||||
"short",
|
"short",
|
||||||
"full",
|
"full",
|
||||||
"folder",
|
"folder",
|
||||||
|
|
Loading…
Reference in a new issue