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). */
207  FOWA_NONE
209 
213 
215  enum {
220 
223 
226 
230 
236 
237  /* Color codes are stored here */
238  struct config_client {
240  struct Colortriple focused;
243  struct Colortriple unfocused;
244  struct Colortriple urgent;
245  struct Colortriple placeholder;
248  struct config_bar {
249  struct Colortriple focused;
250  struct Colortriple unfocused;
251  struct Colortriple urgent;
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 
341 
343  char *font;
344 
347 
352 
355 
359 
363 
367 
369  bool verbose;
370 
372  uint32_t bar_height;
373 
374  struct Rect padding;
375 
376  struct bar_colors {
377  char *background;
378  char *statusline;
379  char *separator;
380 
384 
388 
392 
396 
400 
405 
407 };
408 
414 struct Barbinding {
417 
419  char *command;
420 
422  bool release;
423 
425 };
426 
428  char *output;
429 
430  TAILQ_ENTRY(tray_output_t) tray_outputs;
431 };
432 
433 typedef enum {
437 } config_load_t;
438 
450 bool load_configuration(const char *override_configfile, config_load_t load_type);
451 
457 void ungrab_all_keys(xcb_connection_t *conn);
Barconfig::position
enum Barconfig::@9 position
Bar position (bottom by default).
Config::FOWA_FOCUS
@ FOWA_FOCUS
Definition: configuration.h:205
Mode::bindings
struct bindings_head * bindings
Definition: configuration.h:96
Barconfig::num_outputs
int num_outputs
Number of outputs in the outputs array.
Definition: configuration.h:293
Colortriple::child_border
color_t child_border
Definition: configuration.h:59
Config::config_client::urgent
struct Colortriple urgent
Definition: configuration.h:244
Config::config_bar::focused
struct Colortriple focused
Definition: configuration.h:249
Barconfig::strip_workspace_numbers
bool strip_workspace_numbers
Strip workspace numbers? Configuration option is 'strip_workspace_numbers yes'.
Definition: configuration.h:358
TAILQ_HEAD
TAILQ_HEAD(barconfig_head, Barconfig) barconfigs
Config::workspace_auto_back_and_forth
bool workspace_auto_back_and_forth
Automatic workspace back and forth switching.
Definition: configuration.h:189
Config::container_stack_limit
int container_stack_limit
Definition: configuration.h:114
Barbinding::TAILQ_ENTRY
TAILQ_ENTRY(Barbinding) bindings
context::compact_error
char * compact_error
Definition: configuration.h:42
Barconfig::M_INVISIBLE
@ M_INVISIBLE
Definition: configuration.h:314
Config::config_client::placeholder
struct Colortriple placeholder
Definition: configuration.h:245
Config::number_barconfigs
int number_barconfigs
Definition: configuration.h:268
Config::smart_borders
smart_borders_t smart_borders
Definition: configuration.h:276
queue.h
hide_edge_borders_mode_t
hide_edge_borders_mode_t
Definition: data.h:92
Barconfig::padding
struct Rect padding
Definition: configuration.h:374
Config::disable_focus_follows_mouse
bool disable_focus_follows_mouse
By default, focus follows mouse.
Definition: configuration.h:126
Barconfig::bar_colors::focused_workspace_text
char * focused_workspace_text
Definition: configuration.h:387
Barconfig::bar_colors::urgent_workspace_border
char * urgent_workspace_border
Definition: configuration.h:397
SLIST_HEAD
SLIST_HEAD(modes_head, Mode) modes
Colortriple::indicator
color_t indicator
Definition: configuration.h:58
tiling_drag.h
Barconfig::socket_path
char * socket_path
Path to the i3 IPC socket.
Definition: configuration.h:309
Mode::name
char * name
Definition: configuration.h:94
smart_borders_t
smart_borders_t
Definition: data.h:84
Barconfig::TAILQ_ENTRY
TAILQ_ENTRY(Barconfig) configs
Config::config_client::focused
struct Colortriple focused
Definition: configuration.h:240
Mode::pango_markup
bool pango_markup
Definition: configuration.h:95
Barconfig::bar_colors::focused_statusline
char * focused_statusline
Definition: configuration.h:382
included_files
struct includedfiles_head included_files
Definition: config.c:22
Barconfig::i3bar_command
char * i3bar_command
Command that should be run to execute i3bar, give a full path if i3bar is not in your $PATH.
Definition: configuration.h:332
Config::config_client::focused_inactive
struct Colortriple focused_inactive
Definition: configuration.h:241
Barconfig::bar_colors::focused_workspace_bg
char * focused_workspace_bg
Definition: configuration.h:386
Barconfig::colors
struct Barconfig::bar_colors colors
Barconfig::separator_symbol
char * separator_symbol
A custom separator to use instead of a vertical line.
Definition: configuration.h:346
Barconfig::workspace_min_width
int workspace_min_width
The minimal width for workspace buttons.
Definition: configuration.h:354
Barconfig::bar_colors::active_workspace_bg
char * active_workspace_bg
Definition: configuration.h:390
Rect
Stores a rectangle, for example the size of a window, the child window etc.
Definition: data.h:207
Barconfig::bar_colors::inactive_workspace_text
char * inactive_workspace_text
Definition: configuration.h:395
Config::config_client::focused_tab_title
struct Colortriple focused_tab_title
Definition: configuration.h:242
Variable::next_match
char * next_match
Definition: configuration.h:70
Config::FOWA_NONE
@ FOWA_NONE
Definition: configuration.h:207
Config::config_client
Definition: configuration.h:238
Variable::value
char * value
Definition: configuration.h:69
Colortriple::border
color_t border
Definition: configuration.h:55
Config::fake_outputs
char * fake_outputs
Overwrites output detection (for testing), see src/fake_outputs.c.
Definition: configuration.h:183
Barconfig::TAILQ_HEAD
TAILQ_HEAD(tray_outputs_head, tray_output_t) tray_outputs
current_config
char * current_config
Config::PDF_IGNORE
@ PDF_IGNORE
Definition: configuration.h:264
Barconfig::bar_colors::active_workspace_border
char * active_workspace_border
Definition: configuration.h:389
Barconfig::hidden_state
enum Barconfig::@8 hidden_state
bindings
struct bindings_head * bindings
Definition: main.c:87
Barconfig::hide_binding_mode_indicator
bool hide_binding_mode_indicator
Hide mode button? Configuration option is 'binding_mode_indicator no' but we invert the bool for the ...
Definition: configuration.h:366
Config::show_marks
bool show_marks
Specifies whether or not marks should be displayed in the window decoration.
Definition: configuration.h:212
Colortriple::text
color_t text
Definition: configuration.h:57
Mode::SLIST_ENTRY
SLIST_ENTRY(Mode) modes
Config::workspace_urgency_timer
float workspace_urgency_timer
By default, urgency is cleared immediately when switching to another workspace leads to focusing the ...
Definition: configuration.h:196
Config::default_orientation
int default_orientation
Default orientation for new containers.
Definition: configuration.h:120
Config::smart_gaps
smart_gaps_t smart_gaps
Definition: configuration.h:279
Config::disable_workspace_bar
bool disable_workspace_bar
By default, a workspace bar is drawn at the bottom of the screen.
Definition: configuration.h:148
Config::FOWA_URGENT
@ FOWA_URGENT
Definition: configuration.h:203
context::filename
const char * filename
Definition: configuration.h:40
Config::ALIGN_RIGHT
@ ALIGN_RIGHT
Definition: configuration.h:218
context::has_warnings
bool has_warnings
Definition: configuration.h:36
Barconfig::workspace_command
char * workspace_command
Command that should be run to get the workspace buttons.
Definition: configuration.h:340
Config::floating_minimum_height
int32_t floating_minimum_height
Definition: configuration.h:235
smart_gaps_t
smart_gaps_t
Definition: data.h:88
gaps_t
Definition: data.h:150
border_style_t
border_style_t
Definition: data.h:65
Config::config_bar::unfocused
struct Colortriple unfocused
Definition: configuration.h:250
Barconfig::P_TOP
@ P_TOP
Definition: configuration.h:327
Config::font
i3Font font
Definition: configuration.h:108
Colortriple
Part of the struct Config.
Definition: configuration.h:54
Barconfig::strip_workspace_name
bool strip_workspace_name
Strip workspace name? Configuration option is 'strip_workspace_name yes'.
Definition: configuration.h:362
Barconfig::modifier
uint32_t modifier
Bar modifier (to show bar when in hide mode).
Definition: configuration.h:321
Barconfig::font
char * font
Font specification for all text rendered on the bar.
Definition: configuration.h:343
C_LOAD
@ C_LOAD
Definition: configuration.h:435
Barconfig::id
char * id
Automatically generated ID for this bar config.
Definition: configuration.h:290
Barconfig::S_SHOW
@ S_SHOW
Definition: configuration.h:318
ungrab_all_keys
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
Config::config_client::unfocused
struct Colortriple unfocused
Definition: configuration.h:243
context::line_number
int line_number
Definition: configuration.h:38
Barconfig::bar_colors::binding_mode_bg
char * binding_mode_bg
Definition: configuration.h:402
Barconfig::P_BOTTOM
@ P_BOTTOM
Definition: configuration.h:326
Barconfig::bar_colors::active_workspace_text
char * active_workspace_text
Definition: configuration.h:391
Config::container_stack_limit_value
int container_stack_limit_value
Definition: configuration.h:115
context::first_column
int first_column
Definition: configuration.h:45
Barconfig::tray_padding
int tray_padding
Definition: configuration.h:304
Config::default_floating_border_width
int default_floating_border_width
Definition: configuration.h:117
tray_output_t::TAILQ_ENTRY
TAILQ_ENTRY(tray_output_t) tray_outputs
Barconfig::status_command
char * status_command
Command that should be run to get a statusline, for example 'i3status'.
Definition: configuration.h:336
config
Config config
Definition: config.c:19
Config::restart_state_path
char * restart_state_path
Definition: configuration.h:111
Barconfig::bar_colors::focused_workspace_border
char * focused_workspace_border
Definition: configuration.h:385
IncludedFile::raw_contents
char * raw_contents
Definition: configuration.h:81
Config::tiling_drag
tiling_drag_t tiling_drag
Definition: configuration.h:270
Barconfig::bar_colors::inactive_workspace_bg
char * inactive_workspace_bg
Definition: configuration.h:394
Barconfig::bar_colors::binding_mode_text
char * binding_mode_text
Definition: configuration.h:403
Colortriple::background
color_t background
Definition: configuration.h:56
Config::config_bar::urgent
struct Colortriple urgent
Definition: configuration.h:251
Config::PDF_LEAVE_FULLSCREEN
@ PDF_LEAVE_FULLSCREEN
Definition: configuration.h:261
focus_wrapping_t
focus_wrapping_t
Focus wrapping modes.
Definition: data.h:172
Barconfig::S_HIDE
@ S_HIDE
Definition: configuration.h:317
Config::force_xinerama
bool force_xinerama
By default, use the RandR API for multi-monitor setups.
Definition: configuration.h:177
Barconfig
Holds the status bar configuration (i3bar).
Definition: configuration.h:287
tray_output_t::output
char * output
Definition: configuration.h:428
Font
Data structure for cached font information:
Definition: libi3.h:59
Barconfig::bar_colors::separator
char * separator
Definition: configuration.h:379
Config::default_layout
layout_t default_layout
Definition: configuration.h:113
Config::terminal
const char * terminal
Definition: configuration.h:107
Variable::SLIST_ENTRY
SLIST_ENTRY(Variable) variables
i3.h
Barconfig::bar_colors::urgent_workspace_bg
char * urgent_workspace_bg
Definition: configuration.h:398
Barbinding::command
char * command
The command which is to be executed for this button.
Definition: configuration.h:419
Barbinding::release
bool release
If true, the command will be executed after the button is released.
Definition: configuration.h:422
context::has_errors
bool has_errors
Definition: configuration.h:35
context::last_column
int last_column
Definition: configuration.h:46
Barconfig::mode
enum Barconfig::@7 mode
Bar display mode (hide unless modifier is pressed or show in dock mode or always hide in invisible mo...
Barconfig::bar_colors::background
char * background
Definition: configuration.h:377
layout_t
layout_t
Container layouts.
Definition: data.h:105
Config::ipc_socket_path
char * ipc_socket_path
Definition: configuration.h:110
Config::mouse_warping
warping_t mouse_warping
By default, when switching focus to a window on a different output (e.g.
Definition: configuration.h:136
Barconfig::bar_colors::binding_mode_border
char * binding_mode_border
Definition: configuration.h:401
IncludedFile
List entry struct for an included file.
Definition: configuration.h:79
Barbinding
Defines a mouse command to be executed instead of the default behavior when clicking on the non-statu...
Definition: configuration.h:414
Config::config_bar
Definition: configuration.h:248
Config::ALIGN_CENTER
@ ALIGN_CENTER
Definition: configuration.h:217
Config::default_border_width
int default_border_width
Definition: configuration.h:116
Barbinding::input_code
int input_code
The button to be used (e.g., 1 for "button1").
Definition: configuration.h:416
Config::default_floating_border
border_style_t default_floating_border
The default border style for new floating windows.
Definition: configuration.h:225
IncludedFile::TAILQ_ENTRY
TAILQ_ENTRY(IncludedFile) files
Config::floating_minimum_width
int32_t floating_minimum_width
Definition: configuration.h:234
Config::bar
struct Config::config_bar bar
warping_t
warping_t
Mouse pointer warping modes.
Definition: data.h:145
config_load_t
config_load_t
Definition: configuration.h:433
Config::floating_maximum_width
int32_t floating_maximum_width
Maximum and minimum dimensions of a floating window.
Definition: configuration.h:232
Config
Holds part of the configuration (the part which is not already in dedicated structures in include/dat...
Definition: configuration.h:106
Config::floating_modifier
uint32_t floating_modifier
The modifier which needs to be pressed in combination with your mouse buttons to do things with float...
Definition: configuration.h:229
Config::default_border
border_style_t default_border
The default border style for new windows.
Definition: configuration.h:222
Variable
Holds a user-assigned variable for parsing the configuration file.
Definition: configuration.h:67
Config::hide_edge_borders
hide_edge_borders_mode_t hide_edge_borders
Remove borders if they are adjacent to the screen edge.
Definition: configuration.h:142
Config::client
struct Config::config_client client[QUBE_NUM_LABELS]
Barconfig::bar_colors
Definition: configuration.h:376
Config::focus_on_window_activation
enum Config::@4 focus_on_window_activation
Behavior when a window sends a NET_ACTIVE_WINDOW message.
Barconfig::bar_colors::focused_separator
char * focused_separator
Definition: configuration.h:383
Config::PDF_SMART
@ PDF_SMART
Definition: configuration.h:258
modes
struct modes_head modes
Definition: config.c:20
context::line_copy
char * line_copy
Definition: configuration.h:39
Config::floating_maximum_height
int32_t floating_maximum_height
Definition: configuration.h:233
barconfigs
struct barconfig_head barconfigs
Definition: config.c:21
Barconfig::verbose
bool verbose
Enable verbose mode? Useful for debugging purposes.
Definition: configuration.h:369
C_RELOAD
@ C_RELOAD
Definition: configuration.h:436
Config::ALIGN_LEFT
@ ALIGN_LEFT
Definition: configuration.h:216
Barconfig::bar_colors::urgent_workspace_text
char * urgent_workspace_text
Definition: configuration.h:399
Config::popup_during_fullscreen
enum Config::@6 popup_during_fullscreen
What should happen when a new popup is opened during fullscreen mode.
Config::gaps
gaps_t gaps
Definition: configuration.h:273
current_configpath
char * current_configpath
Definition: config.c:18
context
Used during the config file lexing/parsing to keep the state of the lexer in order to provide useful ...
Definition: configuration.h:34
Barconfig::bar_height
uint32_t bar_height
Defines the height of the bar in pixels.
Definition: configuration.h:372
Config::focus_wrapping
focus_wrapping_t focus_wrapping
When focus wrapping is enabled (the default), attempting to move focus past the edge of the screen (i...
Definition: configuration.h:167
IncludedFile::path
char * path
Definition: configuration.h:80
Barconfig::hide_workspace_buttons
bool hide_workspace_buttons
Hide workspace buttons? Configuration option is 'workspace_buttons no' but we invert the bool to get ...
Definition: configuration.h:351
Mode
The configuration file can contain multiple sets of bindings.
Definition: configuration.h:93
C_VALIDATE
@ C_VALIDATE
Definition: configuration.h:434
tiling_drag_t
tiling_drag_t
Tiling drag initiation modes.
Definition: tiling_drag.h:17
Config::config_client::got_focused_tab_title
bool got_focused_tab_title
Definition: configuration.h:246
Barconfig::bar_colors::inactive_workspace_border
char * inactive_workspace_border
Definition: configuration.h:393
Barconfig::TAILQ_HEAD
TAILQ_HEAD(bar_bindings_head, Barbinding) bar_bindings
load_configuration
bool load_configuration(const char *override_configfile, config_load_t load_type)
(Re-)loads the configuration file (sets useful defaults before).
Definition: config.c:167
Barconfig::outputs
char ** outputs
Outputs on which this bar should show up on.
Definition: configuration.h:296
Config::FOWA_SMART
@ FOWA_SMART
Definition: configuration.h:201
Barconfig::M_HIDE
@ M_HIDE
Definition: configuration.h:313
Config::disable_randr15
bool disable_randr15
Don’t use RandR 1.5 for querying outputs.
Definition: configuration.h:180
IncludedFile::variable_replaced_contents
char * variable_replaced_contents
Definition: configuration.h:82
tray_output_t
Definition: configuration.h:427
Barconfig::bar_colors::statusline
char * statusline
Definition: configuration.h:378
Config::config_client::background
color_t background
Definition: configuration.h:239
color_t
Definition: libi3.h:426
conn
xcb_connection_t * conn
XCB connection and root screen.
Definition: main.c:54
Barconfig::bar_colors::focused_background
char * focused_background
Definition: configuration.h:381
Config::title_align
enum Config::@5 title_align
Title alignment options.
Barconfig::M_DOCK
@ M_DOCK
Definition: configuration.h:312
Variable::key
char * key
Definition: configuration.h:68
QUBE_NUM_LABELS
#define QUBE_NUM_LABELS
Definition: data.h:194