* 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-2012 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
* mode).
*
*/
-
-#ifndef _CONFIG_H
-#define _CONFIG_H
+#ifndef I3_CONFIG_H
+#define I3_CONFIG_H
#include <stdbool.h>
#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;
+/* defined in src/cfgparse.y */
+extern bool force_old_config_parser;
/**
* Used during the config file lexing/parsing to keep the state of the lexer
*/
struct context {
bool has_errors;
+ bool has_warnings;
int line_number;
char *line_copy;
uint32_t border;
uint32_t background;
uint32_t text;
+ uint32_t indicator;
};
/**
int default_layout;
int container_stack_limit;
int container_stack_limit_value;
+ int default_border_width;
/** Default orientation for new containers */
int default_orientation;
* It is not planned to add any different focus models. */
bool disable_focus_follows_mouse;
+ /** Remove borders if they are adjacent to the screen edge.
+ * This is useful if you are reaching scrollbar on the edge of the
+ * screen or do not want to waste a single pixel of displayspace.
+ * By default, this is disabled. */
+ adjacent_t hide_edge_borders;
+
/** 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
* is fetched once and never updated. */
bool force_xinerama;
+ /** Overwrites output detection (for testing), see src/fake_outputs.c */
+ char *fake_outputs;
+
/** 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;
+ /** By default, urgency is cleared immediately when switching to another
+ * workspace leads to focusing the con with the urgency hint. When having
+ * multiple windows on that workspace, the user needs to guess which
+ * application raised the event. To prevent this, the reset of the urgency
+ * flag can be delayed using an urgency timer. */
+ float workspace_urgency_timer;
+
/** The default border style for new windows. */
border_style_t default_border;
* buttons to do things with floating windows (move, resize) */
uint32_t floating_modifier;
+ /** Maximum and minimum dimensions of a floating window */
+ int32_t floating_maximum_width;
+ int32_t floating_maximum_height;
+ int32_t floating_minimum_width;
+ int32_t floating_minimum_height;
+
/* Color codes are stored here */
struct config_client {
uint32_t background;
/** What should happen when a new popup is opened during fullscreen mode */
enum {
- PDF_LEAVE_FULLSCREEN = 0,
- PDF_IGNORE = 1
+ /* display (and focus) the popup when it belongs to the fullscreen
+ * window only. */
+ PDF_SMART = 0,
+
+ /* leave fullscreen mode unconditionally */
+ PDF_LEAVE_FULLSCREEN = 1,
+
+ /* just ignore the popup, that is, don’t map it */
+ PDF_IGNORE = 2,
} 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_border;
+ char *focused_workspace_bg;
+ char *focused_workspace_text;
+
+ char *active_workspace_border;
+ char *active_workspace_bg;
+ char *active_workspace_text;
+
+ char *inactive_workspace_border;
+ char *inactive_workspace_bg;
+ char *inactive_workspace_text;
+
+ char *urgent_workspace_border;
+ char *urgent_workspace_bg;
+ char *urgent_workspace_text;
+ } colors;
+
+ TAILQ_ENTRY(Barconfig) configs;
+};
+
/**
* Reads the configuration from ~/.i3/config or /etc/i3/config if not found.
*
* Translates keysymbols to keycodes for all bindings which use keysyms.
*
*/
-void translate_keysyms();
+void translate_keysyms(void);
/**
* Ungrabs all keys, to be called before re-grabbing the keys because of a
* or NULL if no such binding exists.
*
*/
-Binding *get_binding(uint16_t modifiers, xcb_keycode_t keycode);
+Binding *get_binding(uint16_t modifiers, bool key_release, xcb_keycode_t keycode);
/**
* Kills the configerror i3-nagbar process, if any.