]> git.sur5r.net Git - i3/i3/blob - parser-specs/commands.spec
12737a22838a010021a99cf67ffaae5b415ab352
[i3/i3] / parser-specs / commands.spec
1 # vim:ts=2:sw=2:expandtab
2 #
3 # i3 - an improved dynamic tiling window manager
4 # © 2009-2012 Michael Stapelberg and contributors (see also: LICENSE)
5 #
6 # parser-specs/commands.spec: Specification file for generate-command-parser.pl
7 # which will generate the appropriate header files for our C parser.
8 #
9 # Use :source highlighting.vim in vim to get syntax highlighting
10 # for this file.
11
12 state INITIAL:
13   # We have an end token here for all the commands which just call some
14   # function without using an explicit 'end' token.
15   end ->
16   '[' -> call cmd_criteria_init(); CRITERIA
17   'move' -> MOVE
18   'exec' -> EXEC
19   'exit' -> call cmd_exit()
20   'restart' -> call cmd_restart()
21   'reload' -> call cmd_reload()
22   'border' -> BORDER
23   'layout' -> LAYOUT
24   'append_layout' -> APPEND_LAYOUT
25   'workspace' -> WORKSPACE
26   'focus' -> FOCUS
27   'kill' -> KILL
28   'open' -> call cmd_open()
29   'fullscreen' -> FULLSCREEN
30   'split' -> SPLIT
31   'floating' -> FLOATING
32   'mark' -> MARK
33   'resize' -> RESIZE
34   'rename' -> RENAME
35   'nop' -> NOP
36   'scratchpad' -> SCRATCHPAD
37   'mode' -> MODE
38   'bar' -> BAR
39
40 state CRITERIA:
41   ctype = 'class' -> CRITERION
42   ctype = 'instance' -> CRITERION
43   ctype = 'window_role' -> CRITERION
44   ctype = 'con_id' -> CRITERION
45   ctype = 'id' -> CRITERION
46   ctype = 'con_mark' -> CRITERION
47   ctype = 'title' -> CRITERION
48   ctype = 'urgent' -> CRITERION
49   ']' -> call cmd_criteria_match_windows(); INITIAL
50
51 state CRITERION:
52   '=' -> CRITERION_STR
53
54 state CRITERION_STR:
55   cvalue = word
56       -> call cmd_criteria_add($ctype, $cvalue); CRITERIA
57
58 # exec [--no-startup-id] <command>
59 state EXEC:
60   nosn = '--no-startup-id'
61       ->
62   command = string
63       -> call cmd_exec($nosn, $command)
64
65 # border normal|none|1pixel|toggle|1pixel
66 state BORDER:
67   border_style = 'normal', 'pixel'
68     -> BORDER_WIDTH
69   border_style = 'none', 'toggle'
70     -> call cmd_border($border_style, "0")
71   border_style = '1pixel'
72     -> call cmd_border($border_style, "1")
73
74 state BORDER_WIDTH:
75   end
76     -> call cmd_border($border_style, "2")
77   border_width = word
78     -> call cmd_border($border_style, $border_width)
79
80 # layout default|stacked|stacking|tabbed|splitv|splith
81 # layout toggle [split|all]
82 state LAYOUT:
83   layout_mode = 'default', 'stacked', 'stacking', 'tabbed', 'splitv', 'splith'
84       -> call cmd_layout($layout_mode)
85   'toggle'
86       -> LAYOUT_TOGGLE
87
88 # layout toggle [split|all]
89 state LAYOUT_TOGGLE:
90   end
91       -> call cmd_layout_toggle($toggle_mode)
92   toggle_mode = 'split', 'all'
93       -> call cmd_layout_toggle($toggle_mode)
94
95 # append_layout <path>
96 state APPEND_LAYOUT:
97   path = string -> call cmd_append_layout($path)
98
99 # workspace next|prev|next_on_output|prev_on_output
100 # workspace back_and_forth
101 # workspace <name>
102 # workspace number <number>
103 state WORKSPACE:
104   direction = 'next_on_output', 'prev_on_output', 'next', 'prev'
105       -> call cmd_workspace($direction)
106   'back_and_forth'
107       -> call cmd_workspace_back_and_forth()
108   'number'
109       -> WORKSPACE_NUMBER
110   workspace = string 
111       -> call cmd_workspace_name($workspace)
112
113 state WORKSPACE_NUMBER:
114   workspace = string
115       -> call cmd_workspace_number($workspace)
116
117 # focus left|right|up|down
118 # focus output <output>
119 # focus tiling|floating|mode_toggle
120 # focus parent|child
121 # focus
122 state FOCUS:
123   direction = 'left', 'right', 'up', 'down'
124       -> call cmd_focus_direction($direction)
125   'output'
126       -> FOCUS_OUTPUT
127   window_mode = 'tiling', 'floating', 'mode_toggle'
128       -> call cmd_focus_window_mode($window_mode)
129   level = 'parent', 'child'
130       -> call cmd_focus_level($level)
131   end
132       -> call cmd_focus()
133
134 state FOCUS_OUTPUT:
135   output = string
136       -> call cmd_focus_output($output)
137
138 # kill [window|client]
139 state KILL:
140   kill_mode = 'window', 'client'
141       -> call cmd_kill($kill_mode)
142   end
143       -> call cmd_kill($kill_mode)
144
145 # fullscreen [global]
146 state FULLSCREEN:
147   fullscreen_mode = 'global'
148       -> call cmd_fullscreen($fullscreen_mode)
149   end
150       -> call cmd_fullscreen($fullscreen_mode)
151
152 # split v|h|vertical|horizontal
153 state SPLIT:
154   direction = 'horizontal', 'vertical', 'v', 'h'
155       -> call cmd_split($direction)
156
157 # floating enable|disable|toggle
158 state FLOATING:
159   floating = 'enable', 'disable', 'toggle'
160       -> call cmd_floating($floating)
161
162 # mark <mark>
163 state MARK:
164   mark = string
165       -> call cmd_mark($mark)
166
167 # resize
168 state RESIZE:
169   way = 'grow', 'shrink'
170       -> RESIZE_DIRECTION
171
172 state RESIZE_DIRECTION:
173   direction = 'up', 'down', 'left', 'right', 'width', 'height'
174       -> RESIZE_PX
175
176 state RESIZE_PX:
177   resize_px = word
178       -> RESIZE_TILING
179   end
180       -> call cmd_resize($way, $direction, "10", "10")
181
182 state RESIZE_TILING:
183   'px'
184       ->
185   'or'
186       -> RESIZE_TILING_OR
187   end
188       -> call cmd_resize($way, $direction, $resize_px, "10")
189
190 state RESIZE_TILING_OR:
191   'ppt'
192       ->
193   resize_ppt = word
194       ->
195   end
196       -> call cmd_resize($way, $direction, $resize_px, $resize_ppt)
197
198 # rename workspace <name> to <name>
199 # rename workspace to <name>
200 state RENAME:
201   'workspace'
202       -> RENAME_WORKSPACE
203
204 state RENAME_WORKSPACE:
205   old_name = 'to'
206       -> RENAME_WORKSPACE_LIKELY_TO
207   old_name = word
208       -> RENAME_WORKSPACE_TO
209
210 state RENAME_WORKSPACE_LIKELY_TO:
211   'to'
212       -> RENAME_WORKSPACE_NEW_NAME
213   new_name = word
214       -> call cmd_rename_workspace(NULL, $new_name)
215
216 state RENAME_WORKSPACE_TO:
217   'to'
218       -> RENAME_WORKSPACE_NEW_NAME
219
220 state RENAME_WORKSPACE_NEW_NAME:
221   end
222       -> call cmd_rename_workspace(NULL, "to")
223   new_name = string
224       -> call cmd_rename_workspace($old_name, $new_name)
225
226 # move <direction> [<pixels> [px]]
227 # move [window|container] [to] workspace [<str>|next|prev|next_on_output|prev_on_output|current]
228 # move [window|container] [to] output <str>
229 # move [window|container] [to] scratchpad
230 # move workspace to [output] <str>
231 # move scratchpad
232 # move [window|container] [to] [absolute] position [ [<pixels> [px] <pixels> [px]] | center ]
233 state MOVE:
234   'window'
235       ->
236   'container'
237       ->
238   'to'
239       ->
240   'workspace'
241       -> MOVE_WORKSPACE
242   'output'
243       -> MOVE_TO_OUTPUT
244   'scratchpad'
245       -> call cmd_move_scratchpad()
246   direction = 'left', 'right', 'up', 'down'
247       -> MOVE_DIRECTION
248   method = 'position'
249       -> MOVE_TO_POSITION
250   method = 'absolute'
251       -> MOVE_TO_ABSOLUTE_POSITION
252
253 state MOVE_DIRECTION:
254   pixels = word
255       -> MOVE_DIRECTION_PX
256   end
257       -> call cmd_move_direction($direction, "10")
258
259 state MOVE_DIRECTION_PX:
260   'px'
261       -> call cmd_move_direction($direction, $pixels)
262   end
263       -> call cmd_move_direction($direction, $pixels)
264
265 state MOVE_WORKSPACE:
266   'to '
267       -> MOVE_WORKSPACE_TO_OUTPUT
268   workspace = 'next_on_output', 'prev_on_output', 'next', 'prev', 'current'
269       -> call cmd_move_con_to_workspace($workspace)
270   'back_and_forth'
271       -> call cmd_move_con_to_workspace_back_and_forth()
272   'number'
273       -> MOVE_WORKSPACE_NUMBER
274   workspace = string
275       -> call cmd_move_con_to_workspace_name($workspace)
276
277 state MOVE_WORKSPACE_NUMBER:
278   number = string
279       -> call cmd_move_con_to_workspace_number($number)
280
281 state MOVE_TO_OUTPUT:
282   output = string
283       -> call cmd_move_con_to_output($output)
284
285 state MOVE_WORKSPACE_TO_OUTPUT:
286   'output'
287       ->
288   output = string
289       -> call cmd_move_workspace_to_output($output)
290
291 state MOVE_TO_ABSOLUTE_POSITION:
292   'position'
293       -> MOVE_TO_POSITION
294
295 state MOVE_TO_POSITION:
296   'center'
297       -> call cmd_move_window_to_center($method)
298   coord_x = word
299       -> MOVE_TO_POSITION_X
300
301 state MOVE_TO_POSITION_X:
302   'px'
303       ->
304   coord_y = word
305       -> MOVE_TO_POSITION_Y
306
307 state MOVE_TO_POSITION_Y:
308   'px', end
309       -> call cmd_move_window_to_position($method, $coord_x, $coord_y)
310
311 # mode <string>
312 state MODE:
313   mode = string
314       -> call cmd_mode($mode)
315
316 state NOP:
317   comment = string
318       -> call cmd_nop($comment)
319
320 state SCRATCHPAD:
321   'show'
322       -> call cmd_scratchpad_show()
323
324 # bar (hidden_state hide|show|toggle)|(mode dock|hide|invisible|toggle) [<bar_id>]
325 state BAR:
326   bar_type = 'hidden_state'
327       -> BAR_HIDDEN_STATE
328   bar_type = 'mode'
329       -> BAR_MODE
330
331 state BAR_HIDDEN_STATE:
332   bar_value = 'hide', 'show', 'toggle'
333       -> BAR_W_ID
334
335 state BAR_MODE:
336   bar_value = 'dock', 'hide', 'invisible', 'toggle'
337       -> BAR_W_ID
338
339 state BAR_W_ID:
340   bar_id = word
341       ->
342   end
343       -> call cmd_bar($bar_type, $bar_value, $bar_id)