X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=include%2Fconfig.h;h=3144263dccb0bf37ee918727f62e4c5363b95e04;hb=f32cc6f4ae3f92c63d2f738b69d84269be8549ab;hp=3234b91e5d5f658cae51ed548d047b5df05116e4;hpb=057e0e9794c498be97b27cc6f0f9eb9ff6d0a3ee;p=i3%2Fi3 diff --git a/include/config.h b/include/config.h index 3234b91e..3144263d 100644 --- a/include/config.h +++ b/include/config.h @@ -1,11 +1,8 @@ /* - * vim:ts=8:expandtab + * vim:ts=4:sw=4:expandtab * * i3 - an improved dynamic tiling window manager - * - * © 2009-2010 Michael Stapelberg and contributors - * - * See file LICENSE for license information. + * © 2009-2011 Michael Stapelberg and contributors (see also: LICENSE) * * include/config.h: Contains all structs/variables for the configurable * part of i3 as well as functions handling the configuration file (calling @@ -13,18 +10,20 @@ * mode). * */ - #ifndef _CONFIG_H #define _CONFIG_H #include #include "queue.h" #include "i3.h" +#include "libi3.h" typedef struct Config Config; +typedef struct Barconfig Barconfig; extern char *current_configpath; extern Config config; extern SLIST_HEAD(modes_head, Mode) modes; +extern TAILQ_HEAD(barconfig_head, Barconfig) barconfigs; /** * Used during the config file lexing/parsing to keep the state of the lexer @@ -32,17 +31,18 @@ extern SLIST_HEAD(modes_head, Mode) modes; * */ struct context { - bool has_errors; + bool has_errors; + bool has_warnings; - int line_number; - char *line_copy; - const char *filename; + int line_number; + char *line_copy; + const char *filename; - char *compact_error; + char *compact_error; - /* These are the same as in YYLTYPE */ - int first_column; - int last_column; + /* These are the same as in YYLTYPE */ + int first_column; + int last_column; }; /** @@ -51,9 +51,9 @@ struct context { * */ struct Colortriple { - uint32_t border; - uint32_t background; - uint32_t text; + uint32_t border; + uint32_t background; + uint32_t text; }; /** @@ -62,11 +62,11 @@ struct Colortriple { * */ struct Variable { - char *key; - char *value; - char *next_match; + char *key; + char *value; + char *next_match; - SLIST_ENTRY(Variable) variables; + SLIST_ENTRY(Variable) variables; }; /** @@ -76,10 +76,10 @@ struct Variable { * */ struct Mode { - char *name; - struct bindings_head *bindings; + char *name; + struct bindings_head *bindings; - SLIST_ENTRY(Mode) modes; + SLIST_ENTRY(Mode) modes; }; /** @@ -88,70 +88,169 @@ struct Mode { * */ struct Config { - const char *terminal; - i3Font font; - - char *ipc_socket_path; - const char *restart_state_path; - - int default_layout; - int container_stack_limit; - int container_stack_limit_value; - - /** Default orientation for new containers */ - int default_orientation; - - /** By default, focus follows mouse. If the user explicitly wants to - * turn this off (and instead rely only on the keyboard for changing - * focus), we allow him to do this with this relatively special option. - * It is not planned to add any different focus models. */ - bool disable_focus_follows_mouse; - - /** By default, a workspace bar is drawn at the bottom of the screen. - * If you want to have a more fancy bar, it is recommended to replace - * the whole bar by dzen2, for example using the i3-wsbar script which - * comes with i3. Thus, you can turn it off entirely. */ - bool disable_workspace_bar; - - /** Think of the following layout: Horizontal workspace with a tabbed - * con on the left of the screen and a terminal on the right of the - * screen. You are in the second container in the tabbed container and - * focus to the right. By default, i3 will set focus to the terminal on - * the right. If you are in the first container in the tabbed container - * however, focusing to the left will wrap. This option forces i3 to - * always wrap, which will result in you having to use "focus parent" - * more often. */ - bool force_focus_wrapping; - - /** The default border style for new windows. */ - border_style_t default_border; - - /** The default border style for new floating windows. */ - border_style_t default_floating_border; - - /** The modifier which needs to be pressed in combination with your mouse - * buttons to do things with floating windows (move, resize) */ - uint32_t floating_modifier; - - /* Color codes are stored here */ - struct config_client { - uint32_t background; - struct Colortriple focused; - struct Colortriple focused_inactive; - struct Colortriple unfocused; - struct Colortriple urgent; - } client; - struct config_bar { - struct Colortriple focused; - struct Colortriple unfocused; - struct Colortriple urgent; - } bar; - - /** What should happen when a new popup is opened during fullscreen mode */ - enum { - PDF_LEAVE_FULLSCREEN = 0, - PDF_IGNORE = 1 - } popup_during_fullscreen; + const char *terminal; + i3Font font; + + char *ipc_socket_path; + const char *restart_state_path; + + int default_layout; + int container_stack_limit; + int container_stack_limit_value; + + /** Default orientation for new containers */ + int default_orientation; + + /** By default, focus follows mouse. If the user explicitly wants to + * turn this off (and instead rely only on the keyboard for changing + * focus), we allow him to do this with this relatively special option. + * It is not planned to add any different focus models. */ + bool disable_focus_follows_mouse; + + /** By default, a workspace bar is drawn at the bottom of the screen. + * If you want to have a more fancy bar, it is recommended to replace + * the whole bar by dzen2, for example using the i3-wsbar script which + * comes with i3. Thus, you can turn it off entirely. */ + bool disable_workspace_bar; + + /** Think of the following layout: Horizontal workspace with a tabbed + * con on the left of the screen and a terminal on the right of the + * screen. You are in the second container in the tabbed container and + * focus to the right. By default, i3 will set focus to the terminal on + * the right. If you are in the first container in the tabbed container + * however, focusing to the left will wrap. This option forces i3 to + * always wrap, which will result in you having to use "focus parent" + * more often. */ + bool force_focus_wrapping; + + /** By default, use the RandR API for multi-monitor setups. + * Unfortunately, the nVidia binary graphics driver doesn't support + * this API. Instead, it only support the less powerful Xinerama API, + * which can be enabled by this option. + * + * Note: this option takes only effect on the initial startup (eg. + * reconfiguration is not possible). On startup, the list of screens + * is fetched once and never updated. */ + bool force_xinerama; + + /** Automatic workspace back and forth switching. If this is set, a + * switch to the currently active workspace will switch to the + * previously focused one instead, making it possible to fast toggle + * between two workspaces. */ + bool workspace_auto_back_and_forth; + + /** The default border style for new windows. */ + border_style_t default_border; + + /** The default border style for new floating windows. */ + border_style_t default_floating_border; + + /** The modifier which needs to be pressed in combination with your mouse + * buttons to do things with floating windows (move, resize) */ + uint32_t floating_modifier; + + /* Color codes are stored here */ + struct config_client { + uint32_t background; + struct Colortriple focused; + struct Colortriple focused_inactive; + struct Colortriple unfocused; + struct Colortriple urgent; + } client; + struct config_bar { + struct Colortriple focused; + struct Colortriple unfocused; + struct Colortriple urgent; + } bar; + + /** What should happen when a new popup is opened during fullscreen mode */ + enum { + PDF_LEAVE_FULLSCREEN = 0, + PDF_IGNORE = 1 + } popup_during_fullscreen; +}; + +/** + * Holds the status bar configuration (i3bar). One of these structures is + * created for each 'bar' block in the config. + * + */ +struct Barconfig { + /** Automatically generated ID for this bar config. Used by the bar process + * to request a specific configuration. */ + char *id; + + /** Number of outputs in the outputs array */ + int num_outputs; + /** Outputs on which this bar should show up on. We use an array for + * simplicity (since we store just strings). */ + char **outputs; + + /** Output on which the tray should be shown. The special value of 'no' + * disables the tray (it’s enabled by default). */ + char *tray_output; + + /** Path to the i3 IPC socket. This option is discouraged since programs + * can find out the path by looking for the I3_SOCKET_PATH property on the + * root window! */ + char *socket_path; + + /** Bar display mode (hide unless modifier is pressed or show in dock mode) */ + enum { M_DOCK = 0, M_HIDE = 1 } mode; + + /** Bar modifier (to show bar when in hide mode). */ + enum { + M_NONE = 0, + M_CONTROL = 1, + M_SHIFT = 2, + M_MOD1 = 3, + M_MOD2 = 4, + M_MOD3 = 5, + M_MOD4 = 6, + M_MOD5 = 7 + } modifier; + + /** 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; + + /** Font specification for all text rendered on the bar. */ + char *font; + + /** Hide workspace buttons? Configuration option is 'workspace_buttons no' + * but we invert the bool to get the correct default when initializing with + * zero. */ + bool hide_workspace_buttons; + + /** Enable verbose mode? Useful for debugging purposes. */ + bool verbose; + + struct bar_colors { + char *background; + char *statusline; + + char *focused_workspace_text; + char *focused_workspace_bg; + + char *active_workspace_text; + char *active_workspace_bg; + + char *inactive_workspace_text; + char *inactive_workspace_bg; + + char *urgent_workspace_text; + char *urgent_workspace_bg; + } colors; + + TAILQ_ENTRY(Barconfig) configs; }; /**