]> git.sur5r.net Git - i3/i3/commitdiff
Implement new "i3bar_command" option for bar.
authorJan-Erik Rediger <badboy@archlinux.us>
Thu, 24 Nov 2011 20:53:29 +0000 (21:53 +0100)
committerMichael Stapelberg <michael@stapelberg.de>
Sun, 27 Nov 2011 21:40:57 +0000 (21:40 +0000)
This allows you to specify an alternate path to the i3bar binary.
The userguide docu is included.

docs/userguide
include/config.h
src/cfgparse.l
src/cfgparse.y
src/config.c
src/main.c

index 79c97b1268796e7160dce4efe355a37496fec39e..26c12b77ce62434e753e9b921241f833c2facdd7 100644 (file)
@@ -796,6 +796,28 @@ bar {
 }
 ---------------------------
 
+=== i3bar command
+
+By default i3 will just pass +i3bar+ and let your shell handle the execution,
+searching your +$PATH+ for a correct version.
+If you have a different +i3bar+ somewhere or the binary is not in your +$PATH+ you can
+tell i3 what to execute.
+
+The specified command will be passed to +sh -c+, so you can use globbing and
+have to have correct quoting etc.
+
+*Syntax*:
+----------------------
+i3bar_command command
+----------------------
+
+*Example*:
+-------------------------------------------------
+bar {
+    i3bar_command /home/user/bin/i3bar
+}
+-------------------------------------------------
+
 === Statusline command
 
 i3bar can run a program and display every line of its +stdout+ output on the
index b4128cafc6a1ca4381d9814e9b3e7543ede5114e..ea1885cc9c1dd0dd56502c3f3bf4921e9fb61721 100644 (file)
@@ -201,6 +201,11 @@ struct Barconfig {
     /** Bar position (bottom by default). */
     enum { P_BOTTOM = 0, P_TOP = 1 } position;
 
+    /** Command that should be run to execute i3bar, give a full path if i3bar is not
+     * in your $PATH.
+     * By default just 'i3bar' is executed. */
+    char *i3bar_command;
+
     /** Command that should be run to get a statusline, for example 'i3status'.
      * Will be passed to the shell. */
     char *status_command;
index 1566e24f879fabd4a162500cb28057a8b4461344..673724a85f65973e4ec8ce6306073cfad20b55a2 100644 (file)
@@ -102,6 +102,7 @@ EOL     (\r?\n)
 <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; }
index 0d2c69771814c2ad0ced926efe26d12648e1b6a2..cebd858782bbe052ea2a5e6ae2b3aec8960fd0c9 100644 (file)
@@ -705,6 +705,7 @@ void parse_file(const char *f) {
 %token                  TOK_BAR_BOTTOM              "bottom"
 %token                  TOK_BAR_TOP                 "top"
 %token                  TOK_BAR_STATUS_COMMAND      "status_command"
+%token                  TOK_BAR_I3BAR_COMMAND       "i3bar_command"
 %token                  TOK_BAR_FONT                "font (bar)"
 %token                  TOK_BAR_WORKSPACE_BUTTONS   "workspace_buttons"
 %token                  TOK_BAR_VERBOSE             "verbose"
@@ -1029,6 +1030,7 @@ barlines:
 barline:
     comment
     | bar_status_command
+    | bar_i3bar_command
     | bar_output
     | bar_tray_output
     | bar_position
@@ -1055,6 +1057,15 @@ bar_status_command:
     }
     ;
 
+bar_i3bar_command:
+    TOK_BAR_I3BAR_COMMAND STR
+    {
+        DLOG("should add i3bar_command %s\n", $2);
+        FREE(current_bar.i3bar_command);
+        current_bar.i3bar_command = $2;
+    }
+    ;
+
 bar_output:
     TOK_BAR_OUTPUT STR
     {
index 673f297e36b9fcba3c7dc1fcdd420b29bd05f498..7b0b34e34eea6d1536c58ea3aefd3ed82c12bb6c 100644 (file)
@@ -299,6 +299,7 @@ void load_configuration(xcb_connection_t *conn, const char *override_configpath,
             FREE(barconfig->tray_output);
             FREE(barconfig->socket_path);
             FREE(barconfig->status_command);
+            FREE(barconfig->i3bar_command);
             FREE(barconfig->font);
             FREE(barconfig->colors.background);
             FREE(barconfig->colors.statusline);
index 7a7c20ac437d3415392d93d61ad2b30076307846..38412d53de07d69f0810191d4d59fa5bb6eadf1a 100644 (file)
@@ -689,8 +689,9 @@ int main(int argc, char *argv[]) {
     Barconfig *barconfig;
     TAILQ_FOREACH(barconfig, &barconfigs, configs) {
         char *command = NULL;
-        sasprintf(&command, "i3bar --bar_id=%s --socket=\"%s\"",
-                  barconfig->id, current_socketpath);
+        sasprintf(&command, "%s --bar_id=%s --socket=\"%s\"",
+                barconfig->i3bar_command ? barconfig->i3bar_command : "i3bar",
+                barconfig->id, current_socketpath);
         LOG("Starting bar process: %s\n", command);
         start_application(command, true);
         free(command);