i3
Data Structures | Macros | Typedefs | Functions
libi3.h File Reference
#include <stdbool.h>
#include <stdarg.h>
#include <stdio.h>
#include <xcb/xcb.h>
#include <xcb/xproto.h>
#include <xcb/xcb_keysyms.h>
Include dependency graph for libi3.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

struct  Font
 Data structure for cached font information: More...
 

Macros

#define LOG(fmt,...)   verboselog("[libi3] " __FILE__ " " fmt, ##__VA_ARGS__)
 
#define ELOG(fmt,...)   errorlog("[libi3] ERROR: " fmt, ##__VA_ARGS__)
 
#define DLOG(fmt,...)   debuglog("%s:%s:%d - " fmt, I3__FILE__, __FUNCTION__, __LINE__, ##__VA_ARGS__)
 
#define I3STRING_FREE(str)
 Securely i3string_free by setting the pointer to NULL to prevent accidentally using freed memory. More...
 

Typedefs

typedef struct _i3String i3String
 Opaque data structure for storing strings. More...
 
typedef struct Font i3Font
 

Functions

void verboselog (char *fmt,...) __attribute__((format(printf
 
void errorlog (char *fmt,...) __attribute__((format(printf
 
void debuglog (char *fmt,...) __attribute__((format(printf
 
char * root_atom_contents (const char *atomname, xcb_connection_t *provided_conn, int screen)
 Try to get the contents of the given atom (for example I3_SOCKET_PATH) from the X11 root window and return NULL if it doesn’t work. More...
 
void * smalloc (size_t size)
 Safe-wrapper around malloc which exits if malloc returns NULL (meaning that there is no more memory available) More...
 
void * scalloc (size_t size)
 Safe-wrapper around calloc which exits if malloc returns NULL (meaning that there is no more memory available) More...
 
void * srealloc (void *ptr, size_t size)
 Safe-wrapper around realloc which exits if realloc returns NULL (meaning that there is no more memory available). More...
 
char * sstrdup (const char *str)
 Safe-wrapper around strdup which exits if malloc returns NULL (meaning that there is no more memory available) More...
 
int sasprintf (char **strp, const char *fmt,...)
 Safe-wrapper around asprintf which exits if it returns -1 (meaning that there is no more memory available) More...
 
i3Stringi3string_from_utf8 (const char *from_utf8)
 Build an i3String from an UTF-8 encoded string. More...
 
i3Stringi3string_from_utf8_with_length (const char *from_utf8, size_t num_bytes)
 Build an i3String from an UTF-8 encoded string with fixed length. More...
 
i3Stringi3string_from_ucs2 (const xcb_char2b_t *from_ucs2, size_t num_glyphs)
 Build an i3String from an UCS-2 encoded string. More...
 
void i3string_free (i3String *str)
 Free an i3String. More...
 
const char * i3string_as_utf8 (i3String *str)
 Returns the UTF-8 encoded version of the i3String. More...
 
const xcb_char2b_t * i3string_as_ucs2 (i3String *str)
 Returns the UCS-2 encoded version of the i3String. More...
 
size_t i3string_get_num_bytes (i3String *str)
 Returns the number of bytes (UTF-8 encoded) in an i3String. More...
 
size_t i3string_get_num_glyphs (i3String *str)
 Returns the number of glyphs in an i3String. More...
 
int ipc_connect (const char *socket_path)
 Connects to the i3 IPC socket and returns the file descriptor for the socket. More...
 
int ipc_send_message (int sockfd, const uint32_t message_size, const uint32_t message_type, const uint8_t *payload)
 Formats a message (payload) of the given size and type and sends it to i3 via the given socket file descriptor. More...
 
int ipc_recv_message (int sockfd, uint32_t *message_type, uint32_t *reply_length, uint8_t **reply)
 Reads a message from the given socket file descriptor and stores its length (reply_length) as well as a pointer to its contents (reply). More...
 
void fake_configure_notify (xcb_connection_t *conn, xcb_rectangle_t r, xcb_window_t window, int border_width)
 Generates a configure_notify event and sends it to the given window Applications need this to think they’ve configured themselves correctly. More...
 
uint32_t get_colorpixel (const char *hex) __attribute__((const ))
 Returns the colorpixel to use for the given hex color (think of HTML). More...
 
uint32_t aio_get_mod_mask_for (uint32_t keysym, xcb_key_symbols_t *symbols)
 All-in-one function which returns the modifier mask (XCB_MOD_MASK_*) for the given keysymbol, for example for XCB_NUM_LOCK (usually configured to mod2). More...
 
uint32_t get_mod_mask_for (uint32_t keysym, xcb_key_symbols_t *symbols, xcb_get_modifier_mapping_reply_t *modmap_reply)
 Returns the modifier mask (XCB_MOD_MASK_*) for the given keysymbol, for example for XCB_NUM_LOCK (usually configured to mod2). More...
 
i3Font load_font (const char *pattern, const bool fallback)
 Loads a font for usage, also getting its height. More...
 
void set_font (i3Font *font)
 Defines the font to be used for the forthcoming calls. More...
 
void free_font (void)
 Frees the resources taken by the current font. More...
 
char * convert_ucs2_to_utf8 (xcb_char2b_t *text, size_t num_glyphs)
 Converts the given string to UTF-8 from UCS-2 big endian. More...
 
xcb_char2b_t * convert_utf8_to_ucs2 (char *input, size_t *real_strlen)
 Converts the given string to UCS-2 big endian for use with xcb_image_text_16(). More...
 
void set_font_colors (xcb_gcontext_t gc, uint32_t foreground, uint32_t background)
 Defines the colors to be used for the forthcoming draw_text calls. More...
 
void draw_text (i3String *text, xcb_drawable_t drawable, xcb_gcontext_t gc, int x, int y, int max_width)
 Draws text onto the specified X drawable (normally a pixmap) at the specified coordinates (from the top left corner of the leftmost, uppermost glyph) and using the provided gc. More...
 
void draw_text_ascii (const char *text, xcb_drawable_t drawable, xcb_gcontext_t gc, int x, int y, int max_width)
 ASCII version of draw_text to print static strings. More...
 
int predict_text_width (i3String *text)
 Predict the text width in pixels for the given text. More...
 
xcb_visualtype_t * get_visualtype (xcb_screen_t *screen)
 Returns the visual type associated with the given screen. More...
 
bool is_debug_build () __attribute__((const ))
 Returns true if this version of i3 is a debug build (anything which is not a release version), based on the git version number. More...
 
char * get_process_filename (const char *prefix)
 Returns the name of a temporary file with the specified prefix. More...
 
char * get_exe_path (const char *argv0)
 This function returns the absolute path to the executable it is running in. More...
 
int logical_px (const int logical)
 Convert a logical amount of pixels (e.g. More...
 

Macro Definition Documentation

#define DLOG (   fmt,
  ... 
)    debuglog("%s:%s:%d - " fmt, I3__FILE__, __FUNCTION__, __LINE__, ##__VA_ARGS__)

Definition at line 86 of file libi3.h.

Referenced by _create___i3(), _tree_next(), _workspace_apply_default_orientation(), _workspace_show(), add_subscription(), append_argument(), assignment_for(), backtrace(), CFGFUN(), cmd_append_layout(), cmd_bar_hidden_state(), cmd_bar_mode(), cmd_border(), cmd_criteria_add(), cmd_criteria_match_windows(), cmd_exec(), cmd_floating(), cmd_focus(), cmd_focus_direction(), cmd_focus_level(), cmd_focus_output(), cmd_focus_window_mode(), cmd_fullscreen(), cmd_kill(), cmd_layout(), cmd_layout_toggle(), cmd_mark(), cmd_mode(), cmd_move_con_to_output(), cmd_move_con_to_workspace(), cmd_move_con_to_workspace_back_and_forth(), cmd_move_con_to_workspace_name(), cmd_move_con_to_workspace_number(), cmd_move_direction(), cmd_move_scratchpad(), cmd_move_window_to_center(), cmd_move_window_to_position(), cmd_move_workspace_to_output(), cmd_resize(), cmd_scratchpad_show(), cmd_split(), cmd_unmark(), cmd_workspace(), cmd_workspace_name(), con_accepts_window(), con_attach(), con_border_style(), con_border_style_rect(), con_descend_direction(), con_focus(), con_get_next(), con_is_floating(), con_minimum_size(), con_move_to_workspace(), con_new_skeleton(), con_next_focused(), con_on_remove_child(), con_orientation(), con_parent_with_orientation(), con_set_border_style(), con_set_layout(), con_set_urgency(), con_toggle_fullscreen(), con_toggle_layout(), configure_binding(), configure_notify(), contained_by_output(), create_workspace_on_output(), disable_randr(), DRAGGING_CB(), dump_node(), expose_event(), fake_absolute_configure_notify(), fake_outputs_init(), floating_drag_window(), floating_enable(), floating_fix_coordinates(), floating_maybe_reassign_ws(), floating_mod_on_tiled_client(), floating_raise_con(), floating_resize_window(), format_event(), get_binding_from_xcb_event(), get_output_containing(), get_output_next(), get_output_next_wrap(), grab_keycode_for_binding(), handle_button_press(), handle_client_message(), handle_configure_request(), handle_destroy_notify_event(), handle_enter_notify(), handle_expose_event(), handle_focus_in(), handle_hints(), handle_key_press(), handle_map_request(), handle_mapping_notify(), handle_motion_notify(), handle_normal_hints(), handle_output(), handle_screen_change(), handle_signal(), handle_transient_for(), handle_unmap_notify_event(), init_ws_for_output(), insert_con_into(), ipc_create_socket(), ipc_new_client(), ipc_receive_message(), ipc_send_barconfig_update_event(), ipc_send_window_event(), json_end_map(), json_int(), level_down(), main(), main_set_x11_cb(), manage_window(), maybe_auto_back_and_forth_workspace(), maybe_back_and_forth(), move_to_output_directed(), nagbar_exited(), open_placeholder_window(), output_change_mode(), output_init_con(), parse_command(), parse_config(), parse_file(), query_screens(), randr_query_outputs(), render_con(), render_l_output(), resize_find_tiling_participants(), resize_graphical_handler(), restore_geometry(), restore_handle_event(), restore_kill_placeholder(), restore_xcb_check_cb(), route_click(), run_assignments(), scratchpad_fix_resolution(), scratchpad_move(), scratchpad_show(), send_take_focus(), sig_handle_key_press(), start_nagbar(), startup_monitor_event(), startup_sequence_delete(), startup_sequence_get(), startup_workspace_for_window(), store_restart_layout(), switch_mode(), TAILQ_HEAD(), tiling_resize(), tiling_resize_for_border(), translate_keysyms(), tree_close(), tree_close_con(), tree_flatten(), tree_move(), tree_open_con(), tree_render(), tree_restore(), tree_split(), ungrab_all_keys(), window_update_class(), window_update_hints(), window_update_leader(), window_update_name(), window_update_name_legacy(), window_update_role(), window_update_strut_partial(), window_update_transient_for(), workspace_attach_to(), workspace_back_and_forth(), workspace_back_and_forth_get(), workspace_defer_update_urgent_hint_cb(), workspace_encapsulate(), workspace_get(), workspace_prev_on_output(), workspace_update_urgent_flag(), ws_force_orientation(), x_con_init(), x_draw_decoration(), x_move_win(), x_push_changes(), x_push_node(), x_push_node_unmaps(), x_reinit(), xcb_check_cb(), xcb_drag_check_cb(), xinerama_init(), and xkb_got_event().

#define ELOG (   fmt,
  ... 
)    errorlog("[libi3] ERROR: " fmt, ##__VA_ARGS__)
#define I3STRING_FREE (   str)
Value:
do { \
if (str != NULL) { \
str = NULL; \
} \
} while (0)
void i3string_free(i3String *str)
Free an i3String.

Securely i3string_free by setting the pointer to NULL to prevent accidentally using freed memory.

Definition at line 170 of file libi3.h.

#define LOG (   fmt,
  ... 
)    verboselog("[libi3] " __FILE__ " " fmt, ##__VA_ARGS__)

Typedef Documentation

typedef struct Font i3Font

Definition at line 30 of file libi3.h.

typedef struct _i3String i3String

Opaque data structure for storing strings.

Definition at line 28 of file libi3.h.

Function Documentation

uint32_t aio_get_mod_mask_for ( uint32_t  keysym,
xcb_key_symbols_t *  symbols 
)

All-in-one function which returns the modifier mask (XCB_MOD_MASK_*) for the given keysymbol, for example for XCB_NUM_LOCK (usually configured to mod2).

This function initiates one round-trip. Use get_mod_mask_for() directly if you already have the modifier mapping and key symbols.

Referenced by handle_mapping_notify(), main(), and xkb_got_event().

char* convert_ucs2_to_utf8 ( xcb_char2b_t *  text,
size_t  num_glyphs 
)

Converts the given string to UTF-8 from UCS-2 big endian.

The return value must be freed after use.

xcb_char2b_t* convert_utf8_to_ucs2 ( char *  input,
size_t *  real_strlen 
)

Converts the given string to UCS-2 big endian for use with xcb_image_text_16().

The amount of real glyphs is stored in real_strlen, a buffer containing the UCS-2 encoded string (16 bit per glyph) is returned. It has to be freed when done.

void debuglog ( char *  fmt,
  ... 
)
void draw_text ( i3String text,
xcb_drawable_t  drawable,
xcb_gcontext_t  gc,
int  x,
int  y,
int  max_width 
)

Draws text onto the specified X drawable (normally a pixmap) at the specified coordinates (from the top left corner of the leftmost, uppermost glyph) and using the provided gc.

Text must be specified as an i3String.

Referenced by sig_draw_window().

void draw_text_ascii ( const char *  text,
xcb_drawable_t  drawable,
xcb_gcontext_t  gc,
int  x,
int  y,
int  max_width 
)

ASCII version of draw_text to print static strings.

void errorlog ( char *  fmt,
  ... 
)
void fake_configure_notify ( xcb_connection_t *  conn,
xcb_rectangle_t  r,
xcb_window_t  window,
int  border_width 
)

Generates a configure_notify event and sends it to the given window Applications need this to think they’ve configured themselves correctly.

The truth is, however, that we will manage them.

Referenced by fake_absolute_configure_notify().

void free_font ( void  )

Frees the resources taken by the current font.

Referenced by load_configuration().

uint32_t get_colorpixel ( const char *  hex) const

Returns the colorpixel to use for the given hex color (think of HTML).

Only works for true-color (vast majority of cases) at the moment, avoiding a roundtrip to X11.

The hex_color has to start with #, for example #FF00FF.

NOTE that get_colorpixel() does NOT check the given color code for validity. This has to be done by the caller.

NOTE that this function may in the future rely on a global xcb_connection_t variable called 'conn' to be present.

Referenced by CFGFUN(), load_configuration(), and sig_draw_window().

char* get_exe_path ( const char *  argv0)

This function returns the absolute path to the executable it is running in.

The implementation follows http://stackoverflow.com/a/933996/712014

Returned value must be freed by the caller.

uint32_t get_mod_mask_for ( uint32_t  keysym,
xcb_key_symbols_t *  symbols,
xcb_get_modifier_mapping_reply_t *  modmap_reply 
)

Returns the modifier mask (XCB_MOD_MASK_*) for the given keysymbol, for example for XCB_NUM_LOCK (usually configured to mod2).

This function does not initiate any round-trips.

char* get_process_filename ( const char *  prefix)

Returns the name of a temporary file with the specified prefix.

Referenced by init_logging(), main(), and store_restart_layout().

xcb_visualtype_t* get_visualtype ( xcb_screen_t *  screen)

Returns the visual type associated with the given screen.

const xcb_char2b_t* i3string_as_ucs2 ( i3String str)

Returns the UCS-2 encoded version of the i3String.

const char* i3string_as_utf8 ( i3String str)
void i3string_free ( i3String str)

Free an i3String.

Referenced by tree_close(), window_update_name(), and window_update_name_legacy().

i3String* i3string_from_ucs2 ( const xcb_char2b_t *  from_ucs2,
size_t  num_glyphs 
)

Build an i3String from an UCS-2 encoded string.

Returns the newly-allocated i3String.

i3String* i3string_from_utf8 ( const char *  from_utf8)

Build an i3String from an UTF-8 encoded string.

Returns the newly-allocated i3String.

Referenced by open_popups().

i3String* i3string_from_utf8_with_length ( const char *  from_utf8,
size_t  num_bytes 
)

Build an i3String from an UTF-8 encoded string with fixed length.

To be used when no proper NUL-terminaison is available. Returns the newly-allocated i3String.

Referenced by window_update_name(), and window_update_name_legacy().

size_t i3string_get_num_bytes ( i3String str)

Returns the number of bytes (UTF-8 encoded) in an i3String.

size_t i3string_get_num_glyphs ( i3String str)

Returns the number of glyphs in an i3String.

int ipc_connect ( const char *  socket_path)

Connects to the i3 IPC socket and returns the file descriptor for the socket.

die()s if anything goes wrong.

int ipc_recv_message ( int  sockfd,
uint32_t *  message_type,
uint32_t *  reply_length,
uint8_t **  reply 
)

Reads a message from the given socket file descriptor and stores its length (reply_length) as well as a pointer to its contents (reply).

Returns -1 when read() fails, errno will remain. Returns -2 when the IPC protocol is violated (invalid magic, unexpected message type, EOF instead of a message). Additionally, the error will be printed to stderr. Returns 0 on success.

Referenced by display_running_version(), ipc_receive_message(), and main().

int ipc_send_message ( int  sockfd,
const uint32_t  message_size,
const uint32_t  message_type,
const uint8_t *  payload 
)

Formats a message (payload) of the given size and type and sends it to i3 via the given socket file descriptor.

Returns -1 when write() fails, errno will remain. Returns 0 on success.

Referenced by display_running_version(), IPC_HANDLER(), ipc_send_event(), and main().

bool is_debug_build ( ) const

Returns true if this version of i3 is a debug build (anything which is not a release version), based on the git version number.

Referenced by main().

i3Font load_font ( const char *  pattern,
const bool  fallback 
)

Loads a font for usage, also getting its height.

If fallback is true, the fonts 'fixed' or '-misc-*' will be loaded instead of exiting.

Referenced by CFGFUN(), create_window(), load_configuration(), and xcb_set_root_cursor().

int logical_px ( const int  logical)

Convert a logical amount of pixels (e.g.

2 pixels on a “standard” 96 DPI screen) to a corresponding amount of physical pixels on a standard or retina screen, e.g. 5 pixels on a 227 DPI MacBook Pro 13" Retina screen.

Referenced by load_configuration(), and resize_graphical_handler().

int predict_text_width ( i3String text)

Predict the text width in pixels for the given text.

Text must be specified as an i3String.

Referenced by load_configuration(), and open_popups().

char* root_atom_contents ( const char *  atomname,
xcb_connection_t *  provided_conn,
int  screen 
)

Try to get the contents of the given atom (for example I3_SOCKET_PATH) from the X11 root window and return NULL if it doesn’t work.

If the provided XCB connection is NULL, a new connection will be established.

The memory for the contents is dynamically allocated and has to be free()d by the caller.

Referenced by display_running_version(), and main().

int sasprintf ( char **  strp,
const char *  fmt,
  ... 
)
void* scalloc ( size_t  size)
void set_font ( i3Font font)

Defines the font to be used for the forthcoming calls.

Referenced by CFGFUN(), and load_configuration().

void set_font_colors ( xcb_gcontext_t  gc,
uint32_t  foreground,
uint32_t  background 
)

Defines the colors to be used for the forthcoming draw_text calls.

Referenced by sig_draw_window().

void* smalloc ( size_t  size)

Safe-wrapper around malloc which exits if malloc returns NULL (meaning that there is no more memory available)

Referenced by append_argument(), CFGFUN(), con_get_fullscreen_con(), display_running_version(), main(), manage_existing_windows(), open_popups(), parse_command(), parse_config(), parse_file(), SLIST_HEAD(), start_nagbar(), TAILQ_HEAD(), and tree_append_json().

void* srealloc ( void *  ptr,
size_t  size 
)

Safe-wrapper around realloc which exits if realloc returns NULL (meaning that there is no more memory available).

Referenced by CFGFUN(), display_running_version(), main(), run_assignments(), translate_keysyms(), and x_push_changes().

char* sstrdup ( const char *  str)
void verboselog ( char *  fmt,
  ... 
)