4
4
"fmt"
5
5
"math"
6
6
"os"
7
- "path/filepath"
8
7
"strings"
9
8
"syscall"
10
9
"unsafe"
@@ -55,6 +54,19 @@ func getNameAndItsPpid(pid uint32) (exefile string, parentid uint32, err error)
55
54
return name , pe .ParentProcessID , nil
56
55
}
57
56
57
+ func shellType (shell string , defaultShell string ) string {
58
+ switch {
59
+ case strings .Contains (strings .ToLower (shell ), "powershell" ):
60
+ return "powershell"
61
+ case strings .Contains (strings .ToLower (shell ), "pwsh" ):
62
+ return "powershell"
63
+ case strings .Contains (strings .ToLower (shell ), "cmd" ):
64
+ return "cmd"
65
+ default :
66
+ return defaultShell
67
+ }
68
+ }
69
+
58
70
func detect () (string , error ) {
59
71
shell := os .Getenv ("SHELL" )
60
72
@@ -67,32 +79,20 @@ func detect() (string, error) {
67
79
if err != nil {
68
80
return "cmd" , err // defaulting to cmd
69
81
}
70
- switch {
71
- case strings .Contains (strings .ToLower (shell ), "powershell" ):
72
- return "powershell" , nil
73
- case strings .Contains (strings .ToLower (shell ), "pwsh" ):
74
- return "powershell" , nil
75
- case strings .Contains (strings .ToLower (shell ), "cmd" ):
76
- return "cmd" , nil
77
- default :
82
+ shell = shellType (shell , "" )
83
+ if shell == "" {
78
84
shell , _ , err := getNameAndItsPpid (shellppid )
79
85
if err != nil {
80
86
return "cmd" , err // defaulting to cmd
81
87
}
82
- switch {
83
- case strings .Contains (strings .ToLower (shell ), "powershell" ):
84
- return "powershell" , nil
85
- case strings .Contains (strings .ToLower (shell ), "cmd" ):
86
- return "cmd" , nil
87
- default :
88
- return "cmd" , nil // this could be either powershell or cmd, defaulting to cmd
89
- }
88
+ return shellType (shell , "cmd" ), nil
90
89
}
90
+ return shell , nil
91
91
}
92
92
93
93
if os .Getenv ("__fish_bin_dir" ) != "" {
94
94
return "fish" , nil
95
95
}
96
96
97
- return filepath . Base (shell ), nil
97
+ return shellType (shell , "cmd" ), nil
98
98
}
0 commit comments