]> git.sur5r.net Git - i3/i3/blobdiff - src/cfgparse.y
bar config: fall back to the i3 font (Thanks pl)
[i3/i3] / src / cfgparse.y
index 178434d178da1c77243b7adec3aba21bd460f007..7cd0ce9b892230fdd075e2a4f0d5b42778520a68 100644 (file)
@@ -15,6 +15,10 @@ static pid_t configerror_pid = -1;
 
 static Match current_match;
 static Barconfig current_bar;
+/* The pattern which was specified by the user, for example -misc-fixed-*. We
+ * store this in a separate variable because in the i3 config struct we just
+ * store the i3Font. */
+static char *font_pattern;
 
 typedef struct yy_buffer_state *YY_BUFFER_STATE;
 extern int yylex(struct context *context);
@@ -611,6 +615,7 @@ void parse_file(const char *f) {
     yylex_destroy();
     FREE(context->line_copy);
     free(context);
+    FREE(font_pattern);
     free(new);
     free(buf);
 
@@ -693,14 +698,14 @@ void parse_file(const char *f) {
 %token                  TOK_BAR_OUTPUT              "output (bar)"
 %token                  TOK_BAR_TRAY_OUTPUT         "tray_output"
 %token                  TOK_BAR_SOCKET_PATH         "socket_path"
-%token                  TOK_BAR_MODE                "mode"
+%token                  TOK_BAR_MODE                "mode (bar)"
 %token                  TOK_BAR_HIDE                "hide"
 %token                  TOK_BAR_DOCK                "dock"
 %token                  TOK_BAR_POSITION            "position"
 %token                  TOK_BAR_BOTTOM              "bottom"
 %token                  TOK_BAR_TOP                 "top"
 %token                  TOK_BAR_STATUS_COMMAND      "status_command"
-%token                  TOK_BAR_FONT                "font"
+%token                  TOK_BAR_FONT                "font (bar)"
 %token                  TOK_BAR_WORKSPACE_BUTTONS   "workspace_buttons"
 %token                  TOK_BAR_VERBOSE             "verbose"
 %token                  TOK_BAR_COLORS              "colors"
@@ -996,6 +1001,10 @@ bar:
             *(x++) = (rand() % 26) + 'a';
         }
 
+        /* If no font was explicitly set, we use the i3 font as default */
+        if (!current_bar.font)
+            current_bar.font = sstrdup(font_pattern);
+
         /* Copy the current (static) structure into a dynamically allocated
          * one, then cleanup our static one. */
         Barconfig *bar_config = scalloc(sizeof(Barconfig));
@@ -1526,7 +1535,8 @@ font:
     {
         config.font = load_font($2, true);
         printf("font %s\n", $2);
-        free($2);
+        FREE(font_pattern);
+        font_pattern = $2;
     }
     ;