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 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,...)
 Logs the given message to stdout while prefixing the current time to it, but only if verbose mode is activated. More...
 
void errorlog (char *fmt,...)
 Logs the given message to stdout while prefixing the current time to it. More...
 
char * root_atom_contents (const char *atomname)
 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...
 
const char * get_exe_path (const char *argv0)
 This function returns the absolute path to the executable it is running in. More...
 

Macro Definition Documentation

#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 161 of file libi3.h.

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

Typedef Documentation

typedef struct Font i3Font

Definition at line 31 of file libi3.h.

typedef struct _i3String i3String

Opaque data structure for storing strings.

Definition at line 29 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 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,
  ... 
)

Logs the given message to stdout while prefixing the current time to it.

Definition at line 289 of file log.c.

References errorfile, and vlog().

Here is the call graph for this function:

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().

const 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

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)

Returns the UTF-8 encoded version of the i3String.

Referenced by dump_node(), match_matches_window(), window_update_name(), and window_update_name_legacy().

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 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)

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.

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(), 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(), run_assignments(), translate_keysyms(), and x_push_changes().

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

Logs the given message to stdout while prefixing the current time to it, but only if verbose mode is activated.

Definition at line 274 of file log.c.

References logbuffer, verbose, and vlog().

Here is the call graph for this function: