-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.go
88 lines (75 loc) · 1.8 KB
/
main.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
package main
import (
"flag"
"fmt"
"log"
"log/syslog"
"os"
"strings"
"github.com/gen2brain/beeep"
)
type Manager struct {
Workspaces []Workspace
SetupCommand string
ListCommand string
WksNameCommand string
}
type Workspace struct {
Command string
Display string
}
func parseWorkspaces(flags arrayFlags) []Workspace {
res := []Workspace{}
for _, f := range flags {
i := strings.IndexByte(f, ':')
if i < 0 {
log.Fatalf("bad workspace flag %s", f)
}
res = append(res, Workspace{
Display: f[:i],
Command: f[i+1:],
})
}
return res
}
func main() {
logwriter, e := syslog.New(syslog.LOG_NOTICE, os.Args[0])
if e == nil {
log.SetOutput(logwriter)
}
setupCommand := flag.String("setup-cmd", "", "Setup command for project")
listCommand := flag.String("list-cmd", "", "Setup command for listing project")
wkNameCommand := flag.String("wksname-cmd", "", "Command to set the names of each workspace")
var workspaces arrayFlags
flag.Var(&workspaces, "wk", "Workspace: `display_name:command`")
modeOpen := flag.Bool("open", false, "")
modeSelect := flag.Bool("select", false, "")
modePrev := flag.Bool("prev", false, "")
modeNext := flag.Bool("next", false, "")
modeClose := flag.Bool("close", false, "")
flag.Parse()
m := &Manager{
SetupCommand: *setupCommand,
ListCommand: *listCommand,
WksNameCommand: *wkNameCommand,
Workspaces: parseWorkspaces(workspaces),
}
var err error
switch {
case *modeOpen:
err = m.ActionOpen()
case *modeSelect:
err = m.ActionSelect()
case *modePrev:
err = m.ActionHistoryGo(1)
case *modeNext:
err = m.ActionHistoryGo(-1)
case *modeClose:
err = m.ActionClose()
default:
err = fmt.Errorf("specify one of -open, -select, -prev, -next, -close")
}
if err != nil {
beeep.Notify("i3wks error", err.Error(), "")
}
}