-
Notifications
You must be signed in to change notification settings - Fork 0
/
main.go
128 lines (124 loc) · 3.48 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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
package main
import (
"os"
"github.com/urfave/cli"
)
//TODO adicionar suporte a outra extensao de projetdos do vscode
//TODO pensar em como lidar com projetos desabilitados.
//ele não é listado, mas é necessário um lugar para remover, ou habilitar novamente
//o que está acontecendo agora, é que se o parametro existir no json ele é utilizado
//talvez permitir de editar o arquivo json já seria suficiente.
//pra isso a opção edit talvez
func main() {
app := cli.NewApp()
app.EnableBashCompletion = true
app.Flags = []cli.Flag{
&cli.BoolFlag{Name: "debug", Usage: "debug commands"},
}
app.Commands = []cli.Command{
{
Name: "create",
Aliases: []string{"c", "add"},
Flags: []cli.Flag{
&cli.BoolFlag{Name: "e, editor", Usage: "use default editor to add"},
&cli.BoolFlag{Name: "n, no-validate", Usage: "this option ignore path validation"},
},
Usage: "create new project",
UsageText: "project create <name> <path>",
ArgsUsage: "name path",
Action: create,
},
{
Name: "update",
Aliases: []string{"u", "edit", "e"},
Flags: []cli.Flag{
&cli.BoolFlag{Name: "n, no-validate", Usage: "this option ignore path validation"},
},
Usage: "update project",
UsageText: "project update <name>",
ArgsUsage: "name",
Action: update,
},
{
Name: "delete",
Aliases: []string{"d", "rm"},
Usage: "delete project",
UsageText: "project delete <name>",
ArgsUsage: "name",
Action: delete,
},
{
Name: "list",
Aliases: []string{"l", "ls"},
Flags: []cli.Flag{
&cli.BoolFlag{Name: "s, simple", Usage: "show only name of project"},
&cli.BoolFlag{Name: "p, path", Usage: "show path of project"},
},
Usage: "list projects",
UsageText: "project list <options>",
ArgsUsage: "<options>",
Action: list,
},
{
Name: "open",
Aliases: []string{"o", "attach"},
Flags: []cli.Flag{
&cli.BoolFlag{Name: "d, duplicate", Usage: "duplicate running session"},
// &cli.BoolFlag{Name: "vim", Usage: "open tmux with vim opened"},
},
Usage: "open project using tmux",
UsageText: "project open <name>",
ArgsUsage: "name",
Action: open,
},
{
Name: "code",
Aliases: []string{"vscode"},
Usage: "open project using code",
UsageText: "project code <name>",
ArgsUsage: "name",
Action: code,
},
{
Name: "close",
Aliases: []string{"x", "deattach"},
Flags: []cli.Flag{
&cli.BoolFlag{Name: "a, all", Usage: "all opened projects"},
&cli.BoolFlag{Name: "k, kill", Usage: "kill running project"},
},
Usage: "close project",
UsageText: "close project <?name>",
ArgsUsage: "name",
Action: close,
},
{
Name: "export",
Flags: []cli.Flag{
&cli.StringFlag{Name: "format", Usage: "export projects to (nerdtree|vimcommand|vim-project|aliases)"},
&cli.BoolFlag{Name: "override", Usage: "Override default configuration file"},
},
Usage: "export projects to use in another locations",
UsageText: "project -f <format>",
Action: export,
},
{
Name: "path",
Aliases: []string{"pt"},
Usage: "show path of project",
UsageText: "project path <name>",
ArgsUsage: "name",
Action: path,
},
}
app.Name = "Projects"
app.Usage = "Simple manager for your projects"
app.Description = "Manage local projects"
app.HideVersion = true
app.ExitErrHandler = func(c *cli.Context, err error) {
if err != nil {
log("%v", err)
}
return
}
app.Run(os.Args)
}