#ifndef ROFI_MAIN_H #define ROFI_MAIN_H #include #include #include #include #include #include #include #include "timings.h" #include "keyb.h" /** * @defgroup Widgets Widgets */ /** * Pointer to xdg cache directory. */ extern const char *cache_dir; typedef struct _Mode Mode; /** * Enum used to sum the possible states of ROFI. */ typedef enum { /** Exit. */ MODE_EXIT = 1000, /** Skip to the next cycle-able dialog. */ NEXT_DIALOG = 1001, /** Reload current DIALOG */ RELOAD_DIALOG = 1002, /** Previous dialog */ PREVIOUS_DIALOG = 1003 } ModeMode; /** * State returned by the rofi window. */ typedef enum { /** Entry is selected. */ MENU_OK = 0x00010000, /** User canceled the operation. (e.g. pressed escape) */ MENU_CANCEL = 0x00020000, /** User requested a mode switch */ MENU_NEXT = 0x00040000, /** Custom (non-matched) input was entered. */ MENU_CUSTOM_INPUT = 0x00080000, /** User wanted to delete entry from history. */ MENU_ENTRY_DELETE = 0x00100000, /** User wants to jump to another switcher. */ MENU_QUICK_SWITCH = 0x00200000, /** Go to the previous menu. */ MENU_PREVIOUS = 0x00400000, /** Modifiers */ MENU_SHIFT = 0x10000000, /** Mask */ MENU_LOWER_MASK = 0x0000FFFF } MenuReturn; /** * @param sig The caught signal * * Catch the exit signal generated by X. */ void catch_exit ( __attribute__( ( unused ) ) int sig ); /** * Enumeration indicating location or gravity of window. * * WL_NORTH_WEST WL_NORTH WL_NORTH_EAST * * WL_EAST WL_CENTER WL_EAST * * WL_SOUTH_WEST WL_SOUTH WL_SOUTH_EAST * */ typedef enum _WindowLocation { /** Center */ WL_CENTER = 0, /** Left top corner. */ WL_NORTH_WEST = 1, /** Top middle */ WL_NORTH = 2, /** Top right */ WL_NORTH_EAST = 3, /** Middle right */ WL_EAST = 4, /** Bottom right */ WL_EAST_SOUTH = 5, /** Bottom middle */ WL_SOUTH = 6, /** Bottom left */ WL_SOUTH_WEST = 7, /** Middle left */ WL_WEST = 8 } WindowLocation; /** * @param sw the Mode to show. * @param lines An array of strings to display. * @param num_lines Length of the array with strings to display. * @param input A pointer to a string where the inputted data is placed. * @param prompt The prompt to show. * @param shift pointer to integer that is set to the state of the shift key. * @param mmc Menu menu match callback, used for matching user input. * @param mmc_data data to pass to mmc. * @param selected_line pointer to integer holding the selected line. * @param message Extra message to display. * * Main menu callback. * * @returns The command issued (see MenuReturn) */ MenuReturn menu ( Mode *sw, char **input, char *prompt, unsigned int *selected_line, unsigned int *next_pos, const char *message ) __attribute__ ( ( nonnull ( 1, 2, 3, 4 ) ) ); /** * Settings */ typedef struct _Settings { /** List of enabled modi */ char *modi; /** Window settings */ unsigned int window_opacity; /** Border width */ unsigned int menu_bw; /** Width (0-100 in %, > 100 in pixels, < 0 in char width.) */ int menu_width; /** # lines */ unsigned int menu_lines; /** # Columns */ unsigned int menu_columns; /** Font string (pango format) */ char * menu_font; /** New row colors */ unsigned int color_enabled; char * color_normal; char * color_active; char * color_urgent; char * color_window; /** Foreground color */ char * menu_fg; char * menu_fg_urgent; char * menu_fg_active; /** Background color */ char * menu_bg; char * menu_bg_urgent; char * menu_bg_active; /** Background color alt */ char * menu_bg_alt; /** Highlight foreground color */ char * menu_hlfg; char * menu_hlfg_urgent; char * menu_hlfg_active; /** Highlight background color */ char * menu_hlbg; char * menu_hlbg_urgent; char * menu_hlbg_active; /** Border color */ char * menu_bc; /** Terminal to use */ char * terminal_emulator; /** SSH client to use */ char * ssh_client; /** Command to execute when ssh session is selected */ char * ssh_command; /** Command for executing an application */ char * run_command; /** Command for executing an application in a terminal */ char * run_shell_command; /** Command for listing executables */ char * run_list_command; /** Windows location/gravity */ WindowLocation location; /** Padding between elements */ unsigned int padding; /** Y offset */ int y_offset; /** X offset */ int x_offset; /** Always should config.menu_lines lines, even if less lines are available */ unsigned int fixed_num_lines; /** Do not use history */ unsigned int disable_history; /** Use levenshtein sorting when matching */ unsigned int levenshtein_sort; /** Search case sensitivity */ unsigned int case_sensitive; /** Separator to use for dmenu mode */ char separator; /** Height of an element in number of rows */ int element_height; /** Sidebar mode, show the modi */ unsigned int sidebar_mode; /** Lazy filter limit. */ unsigned int lazy_filter_limit; /** Auto select. */ unsigned int auto_select; /** Hosts file parsing */ unsigned int parse_hosts; /** Knonw_hosts file parsing */ unsigned int parse_known_hosts; /** Combi Modes */ char *combi_modi; /** Fuzzy match */ unsigned int fuzzy; unsigned int glob; unsigned int tokenize; unsigned int regex; /** Monitors */ int monitor; /** Line margin */ unsigned int line_margin; /** filter */ char *filter; /** style */ char *separator_style; /** hide scrollbar */ unsigned int hide_scrollbar; /** show markup in elements. */ unsigned int markup_rows; /** fullscreen */ unsigned int fullscreen; /** bg image */ unsigned int fake_transparency; /** dpi */ int dpi; /** Number threads (1 to disable) */ unsigned int threads; unsigned int scrollbar_width; } Settings; /** Global Settings structure. */ extern Settings config; /** * @param msg The error message to show. * @param markup The error message uses pango markup. * * The error message to show. */ void error_dialog ( const char *msg, int markup ); typedef void ( *switcher_free )( Mode *data ); typedef char * ( *switcher_get_display_value )( const Mode *sw, unsigned int selected_line, int *state, int get_entry ); typedef char * ( *switcher_get_completion )( const Mode *sw, unsigned int selected_line ); /** * @param tokens List of (input) tokens to match. * @param input The entry to match against. * @param case_sensitive Whether case is significant. * @param index The current selected index. * @param data User data. * * Function prototype for the matching algorithm. * * @returns 1 when it matches, 0 if not. */ typedef int ( *switcher_token_match )( const Mode *data, char **tokens, int not_ascii, int case_sensitive, unsigned int index ); typedef void ( *switcher_init )( Mode *sw ); typedef unsigned int ( *switcher_get_num_entries )( const Mode *sw ); typedef void ( *switcher_destroy )( Mode *sw ); typedef ModeMode ( *switcher_result )( Mode *sw, int menu_retv, char **input, unsigned int selected_line ); typedef int ( *switcher_is_not_ascii )( const Mode *sw, unsigned int index ); /** * Structure defining a switcher. * It consists of a name, callback and if enabled * a textbox for the sidebar-mode. */ struct _Mode { // Name (max 31 char long) char name[32]; // Keybindings (keysym and modmask) char * keycfg; char * keystr; KeySym keysym; unsigned int modmask; /** * A switcher normally consists of the following parts: */ // Initialize the Mode switcher_init init; // Destroy the switcher, e.g. free all its memory. switcher_destroy destroy; // Get number of entries to display. (unfiltered). switcher_get_num_entries get_num_entries; // Check if the element is ascii. switcher_is_not_ascii is_not_ascii; // Process the result of the user selection. switcher_result result; // Token match. switcher_token_match token_match; // Get the string to display for the entry. switcher_get_display_value mgrv; // Get the 'completed' entry. switcher_get_completion get_completion; // Pointer to private data. void *private_data; // Free SWitcher // Only to be used when the switcher object itself is dynamic. // And has data in `ed` switcher_free free; // Extra fields for script void *ed; }; #define color_reset "\033[0m" #define color_bold "\033[1m" #define color_italic "\033[2m" #define color_underline "\033[4m" #define color_black "\033[0;30m" #define color_red "\033[0;31m" #define color_green "\033[0;32m" #define color_yellow "\033[0;33m" #define color_blue "\033[0;34m" #define color_magenta "\033[0;35m" #define color_cyan "\033[0;36m" #define color_white "\033[0;37m" #define color_white_bold "\033[1;37m" #define color_black_bold "\033[1;30m" #define color_red_bold "\033[1;31m" #define color_green_bold "\033[1;32m" #define color_yellow_bold "\033[1;33m" #define color_blue_bold "\033[1;34m" #define color_magenta_bold "\033[1;35m" #define color_cyan_bold "\033[1;36m" int show_error_message ( const char *msg, int markup ); #endif