i3
configuration.h
Go to the documentation of this file.
1 /*
2  * vim:ts=4:sw=4:expandtab
3  *
4  * i3 - an improved dynamic tiling window manager
5  * © 2009 Michael Stapelberg and contributors (see also: LICENSE)
6  *
7  * include/configuration.h: Contains all structs/variables for the configurable
8  * part of i3 as well as functions handling the configuration file (calling
9  * the parser (src/config_parse.c) with the correct path, switching key
10  * bindings mode).
11  *
12  */
13 #pragma once
14 
15 #include "queue.h"
16 #include "i3.h"
17 #include "tiling_drag.h"
18 
19 typedef struct IncludedFile IncludedFile;
20 typedef struct Config Config;
21 typedef struct Barconfig Barconfig;
22 extern char *current_configpath;
23 extern char *current_config;
24 extern Config config;
25 extern SLIST_HEAD(modes_head, Mode) modes;
26 extern TAILQ_HEAD(barconfig_head, Barconfig) barconfigs;
27 extern TAILQ_HEAD(includedfiles_head, IncludedFile) included_files;
28 
34 struct context {
35  bool has_errors;
37 
39  char *line_copy;
40  const char *filename;
41 
43 
44  /* These are the same as in YYLTYPE */
47 };
48 
54 struct Colortriple {
60 };
61 
67 struct Variable {
68  char *key;
69  char *value;
70  char *next_match;
71 
72  SLIST_ENTRY(Variable) variables;
73 };
74 
79 struct IncludedFile {
80  char *path;
81  char *raw_contents;
83 
85 };
86 
93 struct Mode {
94  char *name;
96  struct bindings_head *bindings;
97 
99 };
100 
106 struct Config {
107  const char *terminal;
109 
112 
118 
121 
127 
137 
143 
149 
168 
178 
181 
184 
190 
197 
199  enum {
200  /* Focus if the target workspace is visible, set urgency hint otherwise. */
202  /* Always set the urgency hint. */
204  /* Always focus the window. */
206  /* Ignore the request (no focus, no urgency hint). */
209 
213 
215  enum {
219  } title_align;
220 
223 
226 
230 
236 
237  /* Color codes are stored here */
238  struct config_client {
248  struct config_bar {
252  } bar;
253 
255  enum {
256  /* display (and focus) the popup when it belongs to the fullscreen
257  * window only. */
259 
260  /* leave fullscreen mode unconditionally */
262 
263  /* just ignore the popup, that is, don’t map it */
266 
267  /* The number of currently parsed barconfigs */
269 
271 
272  /* Gap sizes */
274 
275  /* Should single containers on a workspace receive a border? */
277 
278  /* Disable gaps if there is only one container on the workspace */
280 };
281 
287 struct Barconfig {
290  char *id;
291 
296  char **outputs;
297 
298  /* List of outputs on which the tray is allowed to be shown, in order.
299  * The special value "none" disables it (per default, it will be shown) and
300  * the special value "primary" enabled it on the primary output. */
301  TAILQ_HEAD(tray_outputs_head, tray_output_t) tray_outputs;
302 
303  /* Padding around the tray icons. */
305 
309  char *socket_path;
310 
312  enum { M_DOCK = 0,
313  M_HIDE = 1,
315 
316  /* The current hidden_state of the bar, which indicates whether it is hidden or shown */
317  enum { S_HIDE = 0,
319 
321  uint32_t modifier;
322 
323  TAILQ_HEAD(bar_bindings_head, Barbinding) bar_bindings;
324 
326  enum { P_BOTTOM = 0,
328 
333 
337 
339  char *font;
340 
343 
348 
351 
355 
359 
363 
365  bool verbose;
366 
368  uint32_t bar_height;
369 
370  struct Rect padding;
371 
372  struct bar_colors {
373  char *background;
374  char *statusline;
375  char *separator;
376 
380 
384 
388 
392 
396 
400  } colors;
401 
402  TAILQ_ENTRY(Barconfig) configs;
403 };
404 
410 struct Barbinding {
413 
415  char *command;
416 
418  bool release;
419 
421 };
422 
424  char *output;
425 
426  TAILQ_ENTRY(tray_output_t) tray_outputs;
427 };
428 
429 typedef enum {
433 } config_load_t;
434 
446 bool load_configuration(const char *override_configfile, config_load_t load_type);
447 
453 void ungrab_all_keys(xcb_connection_t *conn);
TAILQ_HEAD(barconfig_head, Barconfig) barconfigs
smart_borders_t
Definition: data.h:84
char * current_configpath
Definition: config.c:18
struct bindings_head * bindings
Definition: main.c:87
struct Rect padding
struct Colortriple focused
Holds the status bar configuration (i3bar).
enum Barconfig::@7 mode
Bar display mode (hide unless modifier is pressed or show in dock mode or always hide in invisible mo...
Data structure for cached font information:
Definition: libi3.h:59
border_style_t
Definition: data.h:65
bool force_xinerama
By default, use the RandR API for multi-monitor setups.
border_style_t default_floating_border
The default border style for new floating windows.
struct Barconfig::bar_colors colors
enum Barconfig::@8 hidden_state
Holds part of the configuration (the part which is not already in dedicated structures in include/dat...
TAILQ_ENTRY(Barbinding) bindings
Holds a user-assigned variable for parsing the configuration file.
Definition: configuration.h:67
SLIST_ENTRY(Variable) variables
char * compact_error
Definition: configuration.h:42
bool disable_workspace_bar
By default, a workspace bar is drawn at the bottom of the screen.
bool strip_workspace_name
Strip workspace name? Configuration option is 'strip_workspace_name yes'.
char * separator_symbol
A custom separator to use instead of a vertical line.
struct barconfig_head barconfigs
Definition: config.c:21
uint32_t modifier
Bar modifier (to show bar when in hide mode).
char * next_match
Definition: configuration.h:70
bool strip_workspace_numbers
Strip workspace numbers? Configuration option is 'strip_workspace_numbers yes'.
struct includedfiles_head included_files
Definition: config.c:22
Stores a rectangle, for example the size of a window, the child window etc.
Definition: data.h:207
color_t child_border
Definition: configuration.h:59
bool disable_focus_follows_mouse
By default, focus follows mouse.
layout_t
Container layouts.
Definition: data.h:105
Defines a mouse command to be executed instead of the default behavior when clicking on the non-statu...
struct Colortriple focused_tab_title
TAILQ_HEAD(tray_outputs_head, tray_output_t) tray_outputs
char * restart_state_path
float workspace_urgency_timer
By default, urgency is cleared immediately when switching to another workspace leads to focusing the ...
hide_edge_borders_mode_t
Definition: data.h:92
char * status_command
Command that should be run to get a statusline, for example 'i3status'.
struct Config::config_bar bar
The configuration file can contain multiple sets of bindings.
Definition: configuration.h:93
int default_floating_border_width
smart_gaps_t smart_gaps
const char * filename
Definition: configuration.h:40
int input_code
The button to be used (e.g., 1 for "button1").
bool load_configuration(const char *override_configfile, config_load_t load_type)
(Re-)loads the configuration file (sets useful defaults before).
Definition: config.c:166
struct Colortriple unfocused
TAILQ_ENTRY(IncludedFile) files
SLIST_HEAD(modes_head, Mode) modes
enum Barconfig::@9 position
Bar position (bottom by default).
int last_column
Definition: configuration.h:46
char * name
Definition: configuration.h:94
Definition: data.h:150
struct modes_head modes
Definition: config.c:20
int num_outputs
Number of outputs in the outputs array.
int first_column
Definition: configuration.h:45
warping_t mouse_warping
By default, when switching focus to a window on a different output (e.g.
smart_gaps_t
Definition: data.h:88
struct Colortriple placeholder
Config config
Definition: config.c:19
char * raw_contents
Definition: configuration.h:81
smart_borders_t smart_borders
enum Config::@4 focus_on_window_activation
Behavior when a window sends a NET_ACTIVE_WINDOW message.
int default_orientation
Default orientation for new containers.
#define QUBE_NUM_LABELS
Definition: data.h:194
struct Config::config_client client[QUBE_NUM_LABELS]
TAILQ_ENTRY(Barconfig) configs
char * variable_replaced_contents
Definition: configuration.h:82
char ** outputs
Outputs on which this bar should show up on.
char * key
Definition: configuration.h:68
struct Colortriple focused_inactive
struct Colortriple unfocused
int workspace_min_width
The minimal width for workspace buttons.
char * line_copy
Definition: configuration.h:39
char * font
Font specification for all text rendered on the bar.
bool has_warnings
Definition: configuration.h:36
int32_t floating_minimum_width
bool disable_randr15
Don’t use RandR 1.5 for querying outputs.
i3Font font
int32_t floating_maximum_width
Maximum and minimum dimensions of a floating window.
int line_number
Definition: configuration.h:38
bool hide_binding_mode_indicator
Hide mode button? Configuration option is 'binding_mode_indicator no' but we invert the bool for the ...
focus_wrapping_t focus_wrapping
When focus wrapping is enabled (the default), attempting to move focus past the edge of the screen (i...
struct Colortriple urgent
char * value
Definition: configuration.h:69
color_t indicator
Definition: configuration.h:58
bool hide_workspace_buttons
Hide workspace buttons? Configuration option is 'workspace_buttons no' but we invert the bool to get ...
void ungrab_all_keys(xcb_connection_t *conn)
Ungrabs all keys, to be called before re-grabbing the keys because of a mapping_notify event or a con...
Definition: config.c:29
int default_border_width
bool pango_markup
Definition: configuration.h:95
xcb_connection_t * conn
XCB connection and root screen.
Definition: main.c:54
struct bindings_head * bindings
Definition: configuration.h:96
int32_t floating_minimum_height
Part of the struct Config.
Definition: configuration.h:54
int32_t floating_maximum_height
char * id
Automatically generated ID for this bar config.
uint32_t floating_modifier
The modifier which needs to be pressed in combination with your mouse buttons to do things with float...
gaps_t gaps
warping_t
Mouse pointer warping modes.
Definition: data.h:145
hide_edge_borders_mode_t hide_edge_borders
Remove borders if they are adjacent to the screen edge.
char * command
The command which is to be executed for this button.
tiling_drag_t tiling_drag
border_style_t default_border
The default border style for new windows.
bool has_errors
Definition: configuration.h:35
const char * terminal
int number_barconfigs
TAILQ_ENTRY(tray_output_t) tray_outputs
bool show_marks
Specifies whether or not marks should be displayed in the window decoration.
enum Config::@5 title_align
Title alignment options.
struct Colortriple urgent
char * fake_outputs
Overwrites output detection (for testing), see src/fake_outputs.c.
int container_stack_limit_value
char * ipc_socket_path
enum Config::@6 popup_during_fullscreen
What should happen when a new popup is opened during fullscreen mode.
tiling_drag_t
Tiling drag initiation modes.
Definition: tiling_drag.h:17
color_t text
Definition: configuration.h:57
color_t background
Definition: configuration.h:56
SLIST_ENTRY(Mode) modes
focus_wrapping_t
Focus wrapping modes.
Definition: data.h:172
bool workspace_auto_back_and_forth
Automatic workspace back and forth switching.
char * socket_path
Path to the i3 IPC socket.
layout_t default_layout
Definition: libi3.h:426
char * i3bar_command
Command that should be run to execute i3bar, give a full path if i3bar is not in your $PATH...
config_load_t
int container_stack_limit
bool verbose
Enable verbose mode? Useful for debugging purposes.
struct Colortriple focused
bool release
If true, the command will be executed after the button is released.
List entry struct for an included file.
Definition: configuration.h:79
uint32_t bar_height
Defines the height of the bar in pixels.
char * current_config
color_t border
Definition: configuration.h:55
Used during the config file lexing/parsing to keep the state of the lexer in order to provide useful ...
Definition: configuration.h:34
int tray_padding