%}
+%expect 1
+
%union {
int number;
char *string;
%token TOKARROW
%token TOKMODE
%token TOKNEWCONTAINER
+%token TOKNEWWINDOW
%token TOKCONTAINERMODE
%token TOKSTACKLIMIT
| mode
| floating_modifier
| new_container
+ | new_window
| workspace
| assign
| ipcsocket
}
;
+
modelines:
/* empty */
- | modelines WHITESPACE modeline
| modelines modeline
;
modeline:
- comment
+ WHITESPACE
+ | comment
| binding
{
if (current_bindings == NULL) {
}
;
+new_window:
+ TOKNEWWINDOW WHITESPACE WORD
+ {
+ LOG("new windows should start in mode %s\n", $<string>3);
+ config.default_border = strdup($<string>3);
+ }
+ ;
+
workspace:
- TOKWORKSPACE WHITESPACE NUMBER WHITESPACE TOKSCREEN WHITESPACE screen workspace_name
+ TOKWORKSPACE WHITESPACE NUMBER WHITESPACE TOKSCREEN WHITESPACE screen optional_workspace_name
{
int ws_num = $<number>3;
if (ws_num < 1) {
workspace_set_name(ws, $<string>8);
}
}
- | TOKWORKSPACE WHITESPACE NUMBER workspace_name
+ | TOKWORKSPACE WHITESPACE NUMBER WHITESPACE workspace_name
{
int ws_num = $<number>3;
if (ws_num < 1) {
LOG("Invalid workspace assignment, workspace number %d out of range\n", ws_num);
} else {
- if ($<string>4 != NULL)
- workspace_set_name(workspace_get(ws_num - 1), $<string>4);
+ if ($<string>5 != NULL)
+ workspace_set_name(workspace_get(ws_num - 1), $<string>5);
}
}
;
+optional_workspace_name:
+ /* empty */ { $<string>$ = NULL; }
+ | WHITESPACE workspace_name { $<string>$ = $<string>2; }
+ ;
+
workspace_name:
- /* NULL */ { $<string>$ = NULL; }
- | WHITESPACE QUOTEDSTRING { $<string>$ = $<string>2; }
- | WHITESPACE STR { $<string>$ = $<string>2; }
+ QUOTEDSTRING { $<string>$ = $<string>1; }
+ | STR { $<string>$ = $<string>1; }
+ | WORD { $<string>$ = $<string>1; }
;
screen: