1
0
Fork 0
mirror of https://github.com/davatorium/rofi.git synced 2024-11-11 13:50:48 -05:00
rofi/include/rofi.h

322 lines
9.4 KiB
C
Raw Normal View History

2015-07-27 04:17:12 -04:00
#ifndef ROFI_MAIN_H
#define ROFI_MAIN_H
#include <X11/X.h>
#include <glib.h>
2015-09-26 14:34:34 -04:00
#include <string.h>
#include <stdlib.h>
2015-03-27 15:28:53 -04:00
#include <textbox.h>
2015-09-27 06:57:54 -04:00
#include <cairo.h>
#include <cairo-xlib.h>
#include "keyb.h"
2014-11-25 02:27:08 -05:00
/**
* Pointer to xdg cache directory.
*/
2014-01-25 17:37:37 -05:00
extern const char *cache_dir;
2015-03-27 15:28:53 -04:00
typedef struct _Switcher Switcher;
2014-06-02 06:54:35 -04:00
/**
* Enum used to sum the possible states of ROFI.
*/
2014-03-22 16:04:19 -04:00
typedef enum
{
2014-06-02 06:54:35 -04:00
/** Exit. */
2014-11-11 15:50:16 -05:00
MODE_EXIT = 1000,
2014-06-02 06:54:35 -04:00
/** Skip to the next cycle-able dialog. */
2014-11-11 15:50:16 -05:00
NEXT_DIALOG = 1001,
/** Reload current DIALOG */
2014-11-11 15:50:16 -05:00
RELOAD_DIALOG = 1002,
/** Previous dialog */
PREVIOUS_DIALOG = 1003
} SwitcherMode;
2014-11-25 02:27:08 -05:00
/**
* @param input Pointer to the user input.
* @param data Usr data.
*
* Callback typedef for a switcher
*
* @returns SwitcherMode
*/
typedef SwitcherMode ( *switcher_callback )( char **input, void *data );
2015-03-27 15:28:53 -04:00
typedef void ( *switcher_free )( Switcher *data );
2014-06-02 06:54:35 -04:00
typedef const char * ( *get_display_value )( unsigned int selected_line, void *data, int *state );
2014-06-02 06:54:35 -04:00
/**
* State returned by the rofi window.
*/
2014-03-22 16:04:19 -04:00
typedef enum
{
2014-06-02 06:54:35 -04:00
/** Entry is selected. */
2015-05-10 06:08:08 -04:00
MENU_OK = 0x00010000,
2014-06-02 06:54:35 -04:00
/** User canceled the operation. (e.g. pressed escape) */
2015-05-10 06:08:08 -04:00
MENU_CANCEL = 0x00020000,
2014-06-02 06:54:35 -04:00
/** User requested a mode switch */
2015-05-10 06:08:08 -04:00
MENU_NEXT = 0x00040000,
2014-06-02 06:54:35 -04:00
/** Custom (non-matched) input was entered. */
2015-05-10 06:08:08 -04:00
MENU_CUSTOM_INPUT = 0x00080000,
2014-06-02 06:54:35 -04:00
/** User wanted to delete entry from history. */
MENU_ENTRY_DELETE = 0x00100000,
2014-11-25 02:27:08 -05:00
/** User wants to jump to another switcher. */
MENU_QUICK_SWITCH = 0x00200000,
2014-11-25 02:27:08 -05:00
/** Go to the previous menu. */
MENU_PREVIOUS = 0x00400000,
2015-03-27 15:28:53 -04:00
/** Modifiers */
MENU_SHIFT = 0x10000000,
/** Mask */
MENU_LOWER_MASK = 0x0000FFFF
} MenuReturn;
2014-06-02 06:54:35 -04:00
/**
2014-11-25 02:27:08 -05:00
* @param tokens List of (input) tokens to match.
* @param input The entry to match against.
2015-01-12 08:13:46 -05:00
* @param case_sensitive Whether case is significant.
2014-11-25 02:27:08 -05:00
* @param index The current selected index.
* @param data User data.
*
2014-06-02 06:54:35 -04:00
* Function prototype for the matching algorithm.
2014-11-25 02:27:08 -05:00
*
* @returns 1 when it matches, 0 if not.
2014-06-02 06:54:35 -04:00
*/
typedef int ( *menu_match_cb )( char **tokens, const char *input, int not_ascii, int case_sensitive, unsigned int index, Switcher *data );
2014-06-02 06:54:35 -04:00
/**
* @param sw the Switcher to show.
2014-06-02 06:54:35 -04:00
* @param lines An array of strings to display.
* @param num_lines Length of the array with strings to display.
2014-06-02 06:54:35 -04:00
* @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.
2014-06-02 06:54:35 -04:00
*
* Main menu callback.
*
* @returns The command issued (see MenuReturn)
*/
2015-09-19 06:57:48 -04:00
MenuReturn menu ( Switcher *sw, char **input, char *prompt, unsigned int *selected_line, unsigned int *next_pos, const char *message )
__attribute__ ( ( nonnull ( 1, 2, 3, 4 ) ) );
2014-11-25 02:27:08 -05:00
/**
* @param sig The caught signal
*
* Catch the exit signal generated by X.
*/
2014-03-22 16:04:19 -04:00
void catch_exit ( __attribute__( ( unused ) ) int sig );
2014-11-25 02:27:08 -05:00
/**
* 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
*
*/
2014-03-22 16:04:19 -04:00
typedef enum _WindowLocation
{
2014-11-25 02:27:08 -05:00
/** Center */
2014-03-22 16:04:19 -04:00
WL_CENTER = 0,
2014-11-25 02:27:08 -05:00
/** Left top corner. */
2014-03-22 16:04:19 -04:00
WL_NORTH_WEST = 1,
2014-11-25 02:27:08 -05:00
/** Top middle */
2014-03-22 16:04:19 -04:00
WL_NORTH = 2,
2014-11-25 02:27:08 -05:00
/** Top right */
2014-03-22 16:04:19 -04:00
WL_NORTH_EAST = 3,
2014-11-25 02:27:08 -05:00
/** Middle right */
2014-03-22 16:04:19 -04:00
WL_EAST = 4,
2014-11-25 02:27:08 -05:00
/** Bottom right */
2014-03-22 16:04:19 -04:00
WL_EAST_SOUTH = 5,
2014-11-25 02:27:08 -05:00
/** Bottom middle */
2014-03-22 16:04:19 -04:00
WL_SOUTH = 6,
2014-11-25 02:27:08 -05:00
/** Bottom left */
2014-03-22 16:04:19 -04:00
WL_SOUTH_WEST = 7,
2014-11-25 02:27:08 -05:00
/** Middle left */
2014-03-22 16:04:19 -04:00
WL_WEST = 8
} WindowLocation;
2014-01-23 05:39:12 -05:00
/**
* Settings
*/
2014-03-22 16:04:19 -04:00
typedef struct _Settings
{
2014-11-25 02:27:08 -05:00
/** List of enabled switchers */
char *switchers;
2014-11-25 02:27:08 -05:00
/** Window settings */
2014-03-22 16:04:19 -04:00
unsigned int window_opacity;
2014-11-25 02:27:08 -05:00
/** Border width */
2014-03-22 16:04:19 -04:00
unsigned int menu_bw;
2014-11-25 02:27:08 -05:00
/** Width (0-100 in %, > 100 in pixels, < 0 in char width.) */
int menu_width;
2014-11-25 02:27:08 -05:00
/** # lines */
2014-03-22 16:04:19 -04:00
unsigned int menu_lines;
2014-11-25 02:27:08 -05:00
/** # Columns */
2014-05-19 03:50:09 -04:00
unsigned int menu_columns;
2014-11-25 02:27:08 -05:00
/** Font string (pango format) */
2014-03-22 16:04:19 -04:00
char * menu_font;
2015-04-06 11:13:26 -04:00
/** New row colors */
unsigned int color_enabled;
2015-04-06 11:13:26 -04:00
char * color_normal;
char * color_active;
char * color_urgent;
char * color_window;
2014-11-25 02:27:08 -05:00
/** Foreground color */
2014-03-22 16:04:19 -04:00
char * menu_fg;
2015-04-03 12:40:07 -04:00
char * menu_fg_urgent;
char * menu_fg_active;
2014-11-25 02:27:08 -05:00
/** Background color */
2014-03-22 16:04:19 -04:00
char * menu_bg;
2015-04-06 09:23:58 -04:00
char * menu_bg_urgent;
char * menu_bg_active;
/** Background color alt */
char * menu_bg_alt;
2014-11-25 02:27:08 -05:00
/** Highlight foreground color */
2014-03-22 16:04:19 -04:00
char * menu_hlfg;
2015-04-06 09:23:58 -04:00
char * menu_hlfg_urgent;
char * menu_hlfg_active;
2014-11-25 02:27:08 -05:00
/** Highlight background color */
2014-03-22 16:04:19 -04:00
char * menu_hlbg;
2015-04-06 09:23:58 -04:00
char * menu_hlbg_urgent;
char * menu_hlbg_active;
2014-11-25 02:27:08 -05:00
/** Border color */
2014-03-22 16:04:19 -04:00
char * menu_bc;
2014-11-25 02:27:08 -05:00
/** Terminal to use */
2014-03-22 16:04:19 -04:00
char * terminal_emulator;
2014-11-25 02:27:08 -05:00
/** SSH client to use */
char * ssh_client;
2014-11-25 02:27:08 -05:00
/** Command to execute when ssh session is selected */
char * ssh_command;
2014-11-25 02:27:08 -05:00
/** Command for executing an application */
char * run_command;
2014-11-25 02:27:08 -05:00
/** Command for executing an application in a terminal */
char * run_shell_command;
2015-01-05 15:53:50 -05:00
/** Command for listing executables */
char * run_list_command;
2014-05-20 05:22:03 -04:00
2014-11-25 02:27:08 -05:00
/** Windows location/gravity */
2014-03-22 16:04:19 -04:00
WindowLocation location;
2014-11-25 02:27:08 -05:00
/** Padding between elements */
2014-03-22 16:04:19 -04:00
unsigned int padding;
2014-11-25 02:27:08 -05:00
/** Y offset */
2014-05-15 10:54:35 -04:00
int y_offset;
2014-11-25 02:27:08 -05:00
/** X offset */
2014-05-15 15:55:23 -04:00
int x_offset;
2014-11-25 02:27:08 -05:00
/** Always should config.menu_lines lines, even if less lines are available */
2014-05-17 16:17:07 -04:00
unsigned int fixed_num_lines;
2014-11-25 02:27:08 -05:00
/** Do not use history */
2014-06-05 15:55:47 -04:00
unsigned int disable_history;
/** Use levenshtein sorting when matching */
unsigned int levenshtein_sort;
2015-01-12 08:13:46 -05:00
/** Search case sensitivity */
unsigned int case_sensitive;
2014-11-25 02:27:08 -05:00
/** Separator to use for dmenu mode */
2014-10-19 13:42:02 -04:00
char separator;
2014-11-25 02:27:08 -05:00
/** Height of an element in #chars */
2014-10-30 12:53:22 -04:00
int element_height;
2014-11-25 02:27:08 -05:00
/** Sidebar mode, show the switchers */
2015-02-01 04:43:28 -05:00
unsigned int sidebar_mode;
/** Lazy filter limit. */
unsigned int lazy_filter_limit;
2015-02-24 11:34:25 -05:00
/** Auto select. */
unsigned int auto_select;
2015-03-29 06:27:00 -04:00
/** Hosts file parsing */
unsigned int parse_hosts;
/** Combi Switchers */
char *combi_modi;
/** Fuzzy match */
unsigned int fuzzy;
2015-10-02 14:39:57 -04:00
unsigned int glob;
unsigned int tokenize;
2015-08-02 09:45:52 -04:00
/** Monitors */
int monitor;
/** Line margin */
unsigned int line_margin;
/** filter */
char *filter;
2015-08-26 12:11:53 -04:00
/** style */
char *separator_style;
2015-09-04 15:08:23 -04:00
/** hide scrollbar */
unsigned int hide_scrollbar;
2015-09-22 16:23:52 -04:00
/** show markup in elements. */
unsigned int markup_rows;
/** fullscreen */
unsigned int fullscreen;
2014-01-23 05:39:12 -05:00
} Settings;
2014-11-25 02:27:08 -05:00
/** Global Settings structure. */
2014-01-23 05:39:12 -05:00
extern Settings config;
2014-02-03 16:49:07 -05:00
2014-11-25 02:27:08 -05:00
/**
* @param msg The error message to show.
2015-06-08 17:22:35 -04:00
* @param markup The error message uses pango markup.
2014-11-25 02:27:08 -05:00
*
* The error message to show.
*/
2015-06-08 17:22:35 -04:00
void error_dialog ( const char *msg, int markup );
2014-11-25 02:27:08 -05:00
2015-03-27 15:28:53 -04:00
/**
* Structure defining a switcher.
* It consists of a name, callback and if enabled
* a textbox for the sidebar-mode.
*/
struct _Switcher
{
// 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:
*/
void ( *init )( struct _Switcher *sw );
char ** ( *get_data )( unsigned int *length, struct _Switcher *pd );
2015-09-20 04:32:49 -04:00
int ( *match )( char **tokens, const char *input, int case_sensitive, int index, struct _Switcher *data );
SwitcherMode ( *result )( int menu_retv, char **input, unsigned int selected_line, struct _Switcher *pd );
void ( *destroy )( struct _Switcher *pd );
2015-03-27 15:28:53 -04:00
// Token match.
menu_match_cb token_match;
get_display_value mgrv;
2015-03-27 15:28:53 -04:00
// Pointer to private data.
void *private_data;
2015-03-27 15:28:53 -04:00
// Extra fields for script
void *ed;
2015-03-27 15:28:53 -04:00
// Free SWitcher
switcher_free free;
2015-03-27 15:28:53 -04:00
};
#define color_reset "\033[0m"
#define color_bold "\033[1m"
2015-10-16 02:42:01 -04:00
#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"
2015-07-28 16:22:18 -04:00
int show_error_message ( const char *msg, int markup );
#endif