# vim:ts=2:sw=2:expandtab # # i3 - an improved dynamic tiling window manager # © 2009-2012 Michael Stapelberg and contributors (see also: LICENSE) # # parser-specs/commands.spec: Specification file for generate-command-parser.pl # which will generate the appropriate header files for our C parser. # # Use :source highlighting.vim in vim to get syntax highlighting # for this file. state INITIAL: # We have an end token here for all the commands which just call some # function without using an explicit 'end' token. end -> '[' -> call cmd_criteria_init(); CRITERIA 'move' -> MOVE 'exec' -> EXEC 'exit' -> call cmd_exit() 'restart' -> call cmd_restart() 'reload' -> call cmd_reload() 'border' -> BORDER 'layout' -> LAYOUT 'append_layout' -> APPEND_LAYOUT 'workspace' -> WORKSPACE 'focus' -> FOCUS 'kill' -> KILL 'open' -> call cmd_open() 'fullscreen' -> FULLSCREEN 'split' -> SPLIT 'floating' -> FLOATING 'mark' -> MARK 'resize' -> RESIZE 'nop' -> NOP 'scratchpad' -> SCRATCHPAD 'mode' -> MODE state CRITERIA: ctype = 'class' -> CRITERION ctype = 'instance' -> CRITERION ctype = 'window_role' -> CRITERION ctype = 'con_id' -> CRITERION ctype = 'id' -> CRITERION ctype = 'con_mark' -> CRITERION ctype = 'title' -> CRITERION ctype = 'urgent' -> CRITERION ']' -> call cmd_criteria_match_windows(); INITIAL state CRITERION: '=' -> CRITERION_STR state CRITERION_STR: cvalue = word -> call cmd_criteria_add($ctype, $cvalue); CRITERIA # exec [--no-startup-id] state EXEC: nosn = '--no-startup-id' -> command = string -> call cmd_exec($nosn, $command) # border normal|none|1pixel|toggle state BORDER: border_style = 'normal', 'none', '1pixel', 'toggle' -> call cmd_border($border_style) # layout default|stacked|stacking|tabbed state LAYOUT: layout_mode = 'default', 'stacked', 'stacking', 'tabbed' -> call cmd_layout($layout_mode) # append_layout state APPEND_LAYOUT: path = string -> call cmd_append_layout($path) # workspace next|prev|next_on_output|prev_on_output # workspace back_and_forth # workspace state WORKSPACE: direction = 'next_on_output', 'prev_on_output', 'next', 'prev' -> call cmd_workspace($direction) 'back_and_forth' -> call cmd_workspace_back_and_forth() workspace = string -> call cmd_workspace_name($workspace) # focus left|right|up|down # focus output # focus tiling|floating|mode_toggle # focus parent|child # focus state FOCUS: direction = 'left', 'right', 'up', 'down' -> call cmd_focus_direction($direction) 'output' -> FOCUS_OUTPUT window_mode = 'tiling', 'floating', 'mode_toggle' -> call cmd_focus_window_mode($window_mode) level = 'parent', 'child' -> call cmd_focus_level($level) end -> call cmd_focus() state FOCUS_OUTPUT: output = string -> call cmd_focus_output($output) # kill [window|client] state KILL: kill_mode = 'window', 'client' -> call cmd_kill($kill_mode) end -> call cmd_kill($kill_mode) # fullscreen [global] state FULLSCREEN: fullscreen_mode = 'global' -> call cmd_fullscreen($fullscreen_mode) end -> call cmd_fullscreen($fullscreen_mode) # split v|h|vertical|horizontal state SPLIT: direction = 'v', 'h', 'vertical', 'horizontal' -> call cmd_split($direction) # floating enable|disable|toggle state FLOATING: floating = 'enable', 'disable', 'toggle' -> call cmd_floating($floating) # mark state MARK: mark = string -> call cmd_mark($mark) # resize state RESIZE: way = 'grow', 'shrink' -> RESIZE_DIRECTION state RESIZE_DIRECTION: direction = 'up', 'down', 'left', 'right' -> RESIZE_PX state RESIZE_PX: resize_px = word -> RESIZE_TILING end -> call cmd_resize($way, $direction, "10", "10") state RESIZE_TILING: 'px' -> 'or' -> RESIZE_TILING_OR end -> call cmd_resize($way, $direction, $resize_px, "10") state RESIZE_TILING_OR: 'ppt' -> resize_ppt = word -> end -> call cmd_resize($way, $direction, $resize_px, $resize_ppt) # move [ [px]] # move [window|container] [to] workspace # move [window|container] [to] output # move [window|container] [to] scratchpad # move workspace to [output] # move scratchpad # move [window|container] [to] [absolute] position [ [ [px] [px]] | center ] state MOVE: 'window' -> 'container' -> 'to' -> 'workspace' -> MOVE_WORKSPACE 'output' -> MOVE_TO_OUTPUT 'scratchpad' -> call cmd_move_scratchpad() direction = 'left', 'right', 'up', 'down' -> MOVE_DIRECTION method = 'position' -> MOVE_TO_POSITION method = 'absolute' -> MOVE_TO_ABSOLUTE_POSITION state MOVE_DIRECTION: pixels = word -> MOVE_DIRECTION_PX end -> call cmd_move_direction($direction, "10") state MOVE_DIRECTION_PX: 'px' -> call cmd_move_direction($direction, $pixels) end -> call cmd_move_direction($direction, $pixels) state MOVE_WORKSPACE: 'to' -> MOVE_WORKSPACE_TO_OUTPUT workspace = 'next', 'prev', 'next_on_output', 'prev_on_output' -> call cmd_move_con_to_workspace($workspace) workspace = string -> call cmd_move_con_to_workspace_name($workspace) state MOVE_TO_OUTPUT: output = string -> call cmd_move_con_to_output($output) state MOVE_WORKSPACE_TO_OUTPUT: 'output' -> output = string -> call cmd_move_workspace_to_output($output) state MOVE_TO_ABSOLUTE_POSITION: 'position' -> MOVE_TO_POSITION state MOVE_TO_POSITION: 'center' -> call cmd_move_window_to_center($method) coord_x = word -> MOVE_TO_POSITION_X state MOVE_TO_POSITION_X: 'px' -> coord_y = word -> MOVE_TO_POSITION_Y state MOVE_TO_POSITION_Y: 'px', end -> call cmd_move_window_to_position($method, $coord_x, $coord_y) # mode state MODE: mode = string -> call cmd_mode($mode) state NOP: comment = string -> call cmd_nop($comment) state SCRATCHPAD: 'show' -> call cmd_scratchpad_show()