|
1 | 1 | package main |
2 | 2 |
|
3 | 3 | import ( |
4 | | - "encoding/json" |
5 | 4 | "flag" |
6 | 5 | "fmt" |
7 | | - "log" |
8 | 6 | "os" |
9 | | - "path/filepath" |
10 | 7 | "strings" |
11 | 8 |
|
12 | | - "github.com/RasmusLindroth/i3keys/internal/i3parse" |
13 | | - "github.com/RasmusLindroth/i3keys/internal/keyboard" |
14 | 9 | "github.com/RasmusLindroth/i3keys/internal/svg" |
| 10 | + "github.com/RasmusLindroth/i3keys/internal/text" |
15 | 11 | "github.com/RasmusLindroth/i3keys/internal/web" |
16 | | - "github.com/RasmusLindroth/i3keys/internal/xlib" |
17 | 12 | ) |
18 | 13 |
|
19 | | -const version string = "0.0.5" |
20 | | - |
21 | | -func keysToSymbol(keys []i3parse.Binding) []i3parse.Binding { |
22 | | - for key, item := range keys { |
23 | | - if item.Type == i3parse.CodeBinding { |
24 | | - res, err := i3parse.CodeToSymbol(item) |
25 | | - if err == nil { |
26 | | - keys[key] = res |
27 | | - } |
28 | | - } |
29 | | - } |
30 | | - return keys |
31 | | -} |
32 | | - |
33 | | -func webOutput(port string) { |
34 | | - _, keys, err := i3parse.ParseFromRunning() |
35 | | - |
36 | | - if err != nil { |
37 | | - log.Fatalln(err) |
38 | | - } |
39 | | - |
40 | | - keys = keysToSymbol(keys) |
41 | | - |
42 | | - modifiers := xlib.GetModifiers() |
43 | | - groups := i3parse.GetModifierGroups(keys) |
44 | | - |
45 | | - var isoKeyboards []keyboard.Keyboard |
46 | | - var ansiKeyboards []keyboard.Keyboard |
47 | | - for _, group := range groups { |
48 | | - kbISO, err := keyboard.MapKeyboard("ISO", group, modifiers) |
49 | | - if err != nil { |
50 | | - log.Fatalln(err) |
51 | | - } |
52 | | - isoKeyboards = append(isoKeyboards, kbISO) |
53 | | - |
54 | | - kbANSI, err := keyboard.MapKeyboard("ANSI", group, modifiers) |
55 | | - if err != nil { |
56 | | - log.Fatalln(err) |
57 | | - } |
58 | | - ansiKeyboards = append(ansiKeyboards, kbANSI) |
59 | | - } |
60 | | - |
61 | | - ISOkeyboardJSON, _ := json.Marshal(isoKeyboards) |
62 | | - ANSIkeyboardJSON, _ := json.Marshal(ansiKeyboards) |
63 | | - |
64 | | - js := fmt.Sprintf("let generatedISO = %s;\nlet generatedANSI = %s;", ISOkeyboardJSON, ANSIkeyboardJSON) |
65 | | - |
66 | | - handler := web.New(js) |
67 | | - |
68 | | - fmt.Printf("Starting server at http://localhost:%s\nGo there "+ |
69 | | - "to see all of your available keys.\n\n", port) |
70 | | - err = handler.Start(port) |
71 | | - if err != nil { |
72 | | - log.Fatalln(err) |
73 | | - } |
74 | | -} |
75 | | - |
76 | | -func textOutput(layout string) { |
77 | | - _, keys, err := i3parse.ParseFromRunning() |
78 | | - |
79 | | - if err != nil { |
80 | | - log.Fatalln(err) |
81 | | - } |
82 | | - |
83 | | - layout = strings.ToUpper(layout) |
84 | | - |
85 | | - keys = keysToSymbol(keys) |
86 | | - |
87 | | - groups := i3parse.GetModifierGroups(keys) |
88 | | - modifiers := xlib.GetModifiers() |
89 | | - |
90 | | - var keyboards []keyboard.Keyboard |
91 | | - for _, group := range groups { |
92 | | - kb, err := keyboard.MapKeyboard(layout, group, modifiers) |
93 | | - if err == nil { |
94 | | - keyboards = append(keyboards, kb) |
95 | | - } |
96 | | - } |
97 | | - |
98 | | - fmt.Printf("Available keybindings per modifier group\n\n") |
99 | | - for kbIndex, kb := range keyboards { |
100 | | - dots := "-" |
101 | | - for i := 0; i < len(kb.Name); i++ { |
102 | | - dots = dots + "-" |
103 | | - } |
104 | | - |
105 | | - fmt.Printf("%s:\n%s\n", kb.Name, dots) |
106 | | - |
107 | | - for _, keyRow := range kb.Keys { |
108 | | - var unused []string |
109 | | - for _, key := range keyRow { |
110 | | - if key.InUse == false { |
111 | | - unused = append(unused, key.Symbol) |
112 | | - } |
113 | | - } |
114 | | - unusedStr := strings.Join(unused, ", ") |
115 | | - fmt.Printf("%s\n", unusedStr) |
116 | | - } |
117 | | - if kbIndex+1 < len(groups) { |
118 | | - fmt.Printf("\n\n") |
119 | | - } |
120 | | - } |
121 | | -} |
122 | | - |
123 | | -func svgOutput(layout string, dest string) { |
124 | | - _, keys, err := i3parse.ParseFromRunning() |
125 | | - |
126 | | - if err != nil { |
127 | | - log.Fatalln(err) |
128 | | - } |
129 | | - |
130 | | - keys = keysToSymbol(keys) |
131 | | - |
132 | | - layout = strings.ToUpper(layout) |
133 | | - if dest == "" { |
134 | | - dest = filepath.Join("./") |
135 | | - } |
136 | | - |
137 | | - groups := i3parse.GetModifierGroups(keys) |
138 | | - modifiers := xlib.GetModifiers() |
139 | | - |
140 | | - for _, group := range groups { |
141 | | - kb, err := keyboard.MapKeyboard(layout, group, modifiers) |
142 | | - |
143 | | - if err != nil { |
144 | | - log.Fatalln(err) |
145 | | - } |
146 | | - |
147 | | - data := svg.Generate(layout, kb) |
148 | | - |
149 | | - fname := "no-modifiers" |
150 | | - if len(group.Modifiers) > 0 { |
151 | | - fname = strings.Join(group.Modifiers, "-") |
152 | | - } |
153 | | - fname = fname + "-" + layout + ".svg" |
154 | | - |
155 | | - file, err := os.Create(filepath.Join(dest, fname)) |
156 | | - |
157 | | - if err != nil { |
158 | | - log.Fatalln(err) |
159 | | - } |
160 | | - |
161 | | - file.Write(data) |
162 | | - } |
163 | | -} |
| 14 | +const version string = "0.0.6" |
164 | 15 |
|
165 | 16 | func helpText(exitCode int) { |
166 | 17 | fmt.Printf("Usage:\n\n\ti3keys <command> [arguments]\n\n") |
@@ -202,14 +53,14 @@ func main() { |
202 | 53 |
|
203 | 54 | switch cmd { |
204 | 55 | case "web": |
205 | | - webOutput(os.Args[2]) |
| 56 | + web.Output(os.Args[2]) |
206 | 57 | case "text": |
207 | | - textOutput(os.Args[2]) |
| 58 | + text.Output(os.Args[2]) |
208 | 59 | case "svg": |
209 | 60 | if len(os.Args) < 4 { |
210 | | - svgOutput(os.Args[2], "") |
| 61 | + svg.Output(os.Args[2], "") |
211 | 62 | } else { |
212 | | - svgOutput(os.Args[2], os.Args[3]) |
| 63 | + svg.Output(os.Args[2], os.Args[3]) |
213 | 64 | } |
214 | 65 | case "version": |
215 | 66 | fmt.Printf("i3keys version %s by Rasmus Lindroth\n", version) |
|
0 commit comments