23
main.go
23
main.go
@@ -104,7 +104,7 @@ var (
|
|||||||
pinnedItemsChanged chan interface{} = make(chan interface{}, 1)
|
pinnedItemsChanged chan interface{} = make(chan interface{}, 1)
|
||||||
)
|
)
|
||||||
|
|
||||||
func defaultStringIfBlank(s, fallback string) string {
|
func defaultTermIfBlank(s, fallback string) string {
|
||||||
s = strings.TrimSpace(s)
|
s = strings.TrimSpace(s)
|
||||||
// os.Getenv("TERM") returns "linux" instead of empty string, if program has been started
|
// os.Getenv("TERM") returns "linux" instead of empty string, if program has been started
|
||||||
// from a key binding defined in the config file. See #23.
|
// from a key binding defined in the config file. See #23.
|
||||||
@@ -114,14 +114,19 @@ func defaultStringIfBlank(s, fallback string) string {
|
|||||||
return s
|
return s
|
||||||
}
|
}
|
||||||
|
|
||||||
func defaultBoolIfBlank(s string, fallback bool) bool {
|
func defaultStringIfBlank(s, fallback string) string {
|
||||||
s = strings.TrimSpace(s)
|
s = strings.TrimSpace(s)
|
||||||
// os.Getenv("TERM") returns "linux" instead of empty string, if program has been started
|
if s == "" {
|
||||||
// from a key binding defined in the config file. See #23.
|
|
||||||
if s != "sway" {
|
|
||||||
return fallback
|
return fallback
|
||||||
}
|
}
|
||||||
return true
|
return s
|
||||||
|
}
|
||||||
|
|
||||||
|
func validateWm() {
|
||||||
|
if !(*wm == "sway" || *wm == "hyprland") && *wm != "" {
|
||||||
|
*wm = ""
|
||||||
|
log.Warn("-wm argument supports only sway or hyprland string.")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Flags
|
// Flags
|
||||||
@@ -143,8 +148,8 @@ var columnsNumber = flag.Uint("c", 6, "number of Columns")
|
|||||||
var itemSpacing = flag.Uint("spacing", 20, "icon spacing")
|
var itemSpacing = flag.Uint("spacing", 20, "icon spacing")
|
||||||
var lang = flag.String("lang", "", "force lang, e.g. \"en\", \"pl\"")
|
var lang = flag.String("lang", "", "force lang, e.g. \"en\", \"pl\"")
|
||||||
var fileManager = flag.String("fm", "thunar", "File Manager")
|
var fileManager = flag.String("fm", "thunar", "File Manager")
|
||||||
var term = flag.String("term", defaultStringIfBlank(os.Getenv("TERM"), "foot"), "Terminal emulator")
|
var term = flag.String("term", defaultTermIfBlank(os.Getenv("TERM"), "foot"), "Terminal emulator")
|
||||||
var swaymsg = flag.Bool("swaymsg", defaultBoolIfBlank(os.Getenv("XDG_CURRENT_DESKTOP"), false), "Use swaymsg (sway only)")
|
var wm = flag.String("wm", defaultStringIfBlank(os.Getenv("XDG_CURRENT_DESKTOP"), ""), "Use swaymsg (with `sway` argument) or hyprctl (with `hyprland`)")
|
||||||
var nameLimit = flag.Int("fslen", 80, "File Search name LENgth Limit")
|
var nameLimit = flag.Int("fslen", 80, "File Search name LENgth Limit")
|
||||||
var noCats = flag.Bool("nocats", false, "Disable filtering by category")
|
var noCats = flag.Bool("nocats", false, "Disable filtering by category")
|
||||||
var noFS = flag.Bool("nofs", false, "Disable file search")
|
var noFS = flag.Bool("nofs", false, "Disable file search")
|
||||||
@@ -164,6 +169,8 @@ func main() {
|
|||||||
os.Exit(0)
|
os.Exit(0)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
validateWm()
|
||||||
|
|
||||||
// Gentle SIGTERM handler thanks to reiki4040 https://gist.github.com/reiki4040/be3705f307d3cd136e85
|
// Gentle SIGTERM handler thanks to reiki4040 https://gist.github.com/reiki4040/be3705f307d3cd136e85
|
||||||
// v0.2: we also need to support SIGUSR from now on
|
// v0.2: we also need to support SIGUSR from now on
|
||||||
showWindowChannel := make(chan interface{}, 1)
|
showWindowChannel := make(chan interface{}, 1)
|
||||||
|
|||||||
52
tools.go
52
tools.go
@@ -567,45 +567,51 @@ func launch(command string, terminal bool) {
|
|||||||
|
|
||||||
elements := strings.Split(command, " ")
|
elements := strings.Split(command, " ")
|
||||||
|
|
||||||
// find prepended env variables, if any
|
envVarsNum := 0
|
||||||
envVarsNum := strings.Count(command, "=")
|
if strings.Contains(elements[0], "=") {
|
||||||
var envVars []string
|
for _, element := range elements {
|
||||||
|
if strings.Contains(element, "=") {
|
||||||
cmdIdx := -1
|
envVarsNum++
|
||||||
|
} else {
|
||||||
if envVarsNum > 0 {
|
break
|
||||||
for idx, item := range elements {
|
|
||||||
if strings.Contains(item, "=") {
|
|
||||||
envVars = append(envVars, item)
|
|
||||||
} else if !strings.HasPrefix(item, "-") && cmdIdx == -1 {
|
|
||||||
cmdIdx = idx
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if cmdIdx == -1 {
|
|
||||||
cmdIdx = 0
|
// find prepended env variables, if any
|
||||||
}
|
var envVars []string
|
||||||
|
|
||||||
if themeToPrepend != "" {
|
if themeToPrepend != "" {
|
||||||
envVars = append(envVars, fmt.Sprintf("GTK_THEME=%s", themeToPrepend))
|
envVars = append(envVars, fmt.Sprintf("GTK_THEME=%s", themeToPrepend))
|
||||||
}
|
}
|
||||||
|
|
||||||
cmd := exec.Command(elements[cmdIdx], elements[1+cmdIdx:]...)
|
cmdIdx := envVarsNum
|
||||||
|
firstArgIdx := envVarsNum + 1
|
||||||
|
|
||||||
|
if envVarsNum > 0 {
|
||||||
|
for idx, item := range elements {
|
||||||
|
if envVarsNum > idx && strings.Contains(item, "=") {
|
||||||
|
envVars = append(envVars, item)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
cmd := exec.Command(elements[cmdIdx], elements[firstArgIdx:]...)
|
||||||
|
|
||||||
var prefixCommand string
|
var prefixCommand string
|
||||||
var args []string
|
var args []string
|
||||||
if terminal {
|
if terminal {
|
||||||
prefixCommand = *term
|
prefixCommand = *term
|
||||||
if *term != "foot" {
|
if *term != "foot" {
|
||||||
args = []string{"-e", elements[cmdIdx]}
|
args = []string{"-e", strings.Join(elements, " ")}
|
||||||
} else {
|
} else {
|
||||||
args = []string{elements[cmdIdx]}
|
args = elements[cmdIdx:]
|
||||||
}
|
}
|
||||||
cmd = exec.Command(prefixCommand, args...)
|
cmd = exec.Command(prefixCommand, args...)
|
||||||
} else if *swaymsg {
|
} else if *wm == "sway" {
|
||||||
prefixCommand = "swaymsg"
|
cmd = exec.Command("swaymsg", "exec", strings.Join(elements, " "))
|
||||||
args = []string{"exec", elements[cmdIdx]}
|
} else if *wm == "hyprland" {
|
||||||
cmd = exec.Command(prefixCommand, args...)
|
cmd = exec.Command("hyprctl", "dispatch", "exec", strings.Join(elements, " "))
|
||||||
}
|
}
|
||||||
|
|
||||||
// set env variables
|
// set env variables
|
||||||
@@ -614,7 +620,7 @@ func launch(command string, terminal bool) {
|
|||||||
cmd.Env = append(cmd.Env, envVars...)
|
cmd.Env = append(cmd.Env, envVars...)
|
||||||
}
|
}
|
||||||
|
|
||||||
msg := fmt.Sprintf("env vars: %s; command: '%s'; args: %s\n", envVars, elements[cmdIdx], elements[1+cmdIdx:])
|
msg := fmt.Sprintf("env vars: %s; command: '%s'; args: %s\n", envVars, cmd.Args[0], cmd.Args[1:])
|
||||||
log.Info(msg)
|
log.Info(msg)
|
||||||
|
|
||||||
cmd.SysProcAttr = &syscall.SysProcAttr{
|
cmd.SysProcAttr = &syscall.SysProcAttr{
|
||||||
|
|||||||
Reference in New Issue
Block a user