]> git.sur5r.net Git - i3/i3/blobdiff - src/cfgparse.l
Merge branch 'master' into next
[i3/i3] / src / cfgparse.l
index cd936ac53e8035d36ef42700ed71258155c19bf7..13ea2636a828a60dcafd06ebcb3b52a5f7727def 100644 (file)
@@ -13,9 +13,9 @@
 #include <stdint.h>
 #include <xcb/xcb.h>
 
+#include "log.h"
 #include "data.h"
 #include "config.h"
-#include "log.h"
 #include "util.h"
 #include "libi3.h"
 
@@ -59,10 +59,13 @@ EOL     (\r?\n)
 %x BUFFER_LINE
 %x BAR
 %x BAR_MODE
+%x BAR_MODIFIER
 %x BAR_POSITION
 %x BAR_COLORS
 %x BAR_COLOR
 
+%x EXEC
+
 %%
 
     {
@@ -86,7 +89,7 @@ EOL     (\r?\n)
 }
 
  /* This part of the lexer handles the bar {} blocks */
-<BAR,BAR_MODE,BAR_POSITION,BAR_COLORS,BAR_COLOR>[ \t]+ { /* ignore whitespace */ ; }
+<BAR,BAR_MODE,BAR_MODIFIER,BAR_POSITION,BAR_COLORS,BAR_COLOR>[ \t]+ { /* ignore whitespace */ ; }
 <BAR>"{"                        { return '{'; }
 <BAR>"}"                        { yy_pop_state(); return '}'; }
 <BAR>^[ \t]*#[^\n]*             { return TOKCOMMENT; }
@@ -96,24 +99,35 @@ EOL     (\r?\n)
 <BAR>mode                       { yy_push_state(BAR_MODE); return TOK_BAR_MODE; }
 <BAR_MODE>hide                  { yy_pop_state(); return TOK_BAR_HIDE; }
 <BAR_MODE>dock                  { yy_pop_state(); return TOK_BAR_DOCK; }
+<BAR>modifier                   { yy_push_state(BAR_MODIFIER); return TOK_BAR_MODIFIER; }
+<BAR_MODIFIER>control           { yy_pop_state(); return TOK_BAR_CONTROL; }
+<BAR_MODIFIER>ctrl              { yy_pop_state(); return TOK_BAR_CONTROL; }
+<BAR_MODIFIER>shift             { yy_pop_state(); return TOK_BAR_SHIFT; }
+<BAR_MODIFIER>Mod1              { yy_pop_state(); return TOK_BAR_MOD1; }
+<BAR_MODIFIER>Mod2              { yy_pop_state(); return TOK_BAR_MOD2; }
+<BAR_MODIFIER>Mod3              { yy_pop_state(); return TOK_BAR_MOD3; }
+<BAR_MODIFIER>Mod4              { yy_pop_state(); return TOK_BAR_MOD4; }
+<BAR_MODIFIER>Mod5              { yy_pop_state(); return TOK_BAR_MOD5; }
 <BAR>position                   { yy_push_state(BAR_POSITION); return TOK_BAR_POSITION; }
 <BAR_POSITION>bottom            { yy_pop_state(); return TOK_BAR_BOTTOM; }
 <BAR_POSITION>top               { yy_pop_state(); return TOK_BAR_TOP; }
 <BAR>status_command             { WS_STRING; return TOK_BAR_STATUS_COMMAND; }
+<BAR>i3bar_command              { WS_STRING; return TOK_BAR_I3BAR_COMMAND; }
 <BAR>font                       { WS_STRING; return TOK_BAR_FONT; }
 <BAR>workspace_buttons          { return TOK_BAR_WORKSPACE_BUTTONS; }
 <BAR>verbose                    { return TOK_BAR_VERBOSE; }
 <BAR>colors                     { yy_push_state(BAR_COLORS); return TOK_BAR_COLORS; }
 <BAR_COLORS>"{"                 { return '{'; }
 <BAR_COLORS>"}"                 { yy_pop_state(); return '}'; }
+<BAR_COLORS>^[ \t]*#[^\n]*      { return TOKCOMMENT; }
 <BAR_COLORS>background          { yy_push_state(BAR_COLOR); return TOK_BAR_COLOR_BACKGROUND; }
 <BAR_COLORS>statusline          { yy_push_state(BAR_COLOR); return TOK_BAR_COLOR_STATUSLINE; }
 <BAR_COLORS>focused_workspace   { BAR_DOUBLE_COLOR; return TOK_BAR_COLOR_FOCUSED_WORKSPACE; }
 <BAR_COLORS>active_workspace    { BAR_DOUBLE_COLOR; return TOK_BAR_COLOR_ACTIVE_WORKSPACE; }
 <BAR_COLORS>inactive_workspace  { BAR_DOUBLE_COLOR; return TOK_BAR_COLOR_INACTIVE_WORKSPACE; }
 <BAR_COLORS>urgent_workspace    { BAR_DOUBLE_COLOR; return TOK_BAR_COLOR_URGENT_WORKSPACE; }
-<BAR_COLOR>#[0-9a-fA-F]+        { yy_pop_state(); yylval.string = sstrdup(yytext+1); return HEXCOLOR; }
-<BAR,BAR_COLORS,BAR_MODE,BAR_POSITION>[a-zA-Z]+ { yylval.string = sstrdup(yytext); return WORD; }
+<BAR_COLOR>#[0-9a-fA-F]+        { yy_pop_state(); yylval.string = sstrdup(yytext); return HEXCOLOR; }
+<BAR,BAR_COLORS,BAR_MODE,BAR_MODIFIER,BAR_POSITION>[a-zA-Z]+ { yylval.string = sstrdup(yytext); return WORD; }
 
 
 
@@ -141,6 +155,8 @@ EOL     (\r?\n)
 <COLOR_COND>#[0-9a-fA-F]+       { yy_pop_state(); yylval.string = sstrdup(yytext); return HEXCOLOR; }
 <ASSIGN_TARGET_COND>[ \t]*→[ \t]*     { BEGIN(WANT_STRING); }
 <ASSIGN_TARGET_COND>[ \t]+      { BEGIN(WANT_STRING); }
+<EXEC>--no-startup-id           { printf("no startup id\n"); yy_pop_state(); return TOK_NO_STARTUP_ID; }
+<EXEC>.                         { printf("anything else: *%s*\n", yytext); yyless(0); yy_pop_state(); yy_pop_state(); }
 [0-9]+                          { yylval.number = atoi(yytext); return NUMBER; }
 bar                             { yy_push_state(BAR); return TOK_BAR; }
 mode                            { return TOKMODE; }
@@ -194,8 +210,8 @@ tabbed                          { /* yylval.number = MODE_TABBED; */return TOK_T
 stack-limit                     { return TOKSTACKLIMIT; }
 cols                            { /* yylval.number = STACK_LIMIT_COLS; */return TOKSTACKLIMIT; }
 rows                            { /* yylval.number = STACK_LIMIT_ROWS; */return TOKSTACKLIMIT; }
-exec                            { WS_STRING; return TOKEXEC; }
-exec_always                     { WS_STRING; return TOKEXEC_ALWAYS; }
+exec                            { WS_STRING; yy_push_state(EXEC); yy_push_state(EAT_WHITESPACE); return TOKEXEC; }
+exec_always                     { WS_STRING; yy_push_state(EXEC); yy_push_state(EAT_WHITESPACE); return TOKEXEC_ALWAYS; }
 client.background               { yy_push_state(COLOR_COND); yylval.single_color = &config.client.background; return TOKSINGLECOLOR; }
 client.focused                  { yy_push_state(COLOR_COND); yy_push_state(COLOR_COND); yy_push_state(COLOR_COND); yylval.color = &config.client.focused; return TOKCOLOR; }
 client.focused_inactive         { yy_push_state(COLOR_COND); yy_push_state(COLOR_COND); yy_push_state(COLOR_COND); yylval.color = &config.client.focused_inactive; return TOKCOLOR; }