summaryrefslogtreecommitdiffstats
path: root/include/rofi.h
blob: 45ced5912ade2c511cad0913e2212c1147f94706 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
#ifndef __SIMPLESWITCHER_H__
#define __SIMPLESWITCHER_H__
#include <X11/X.h>
#include <glib.h>

#define OVERLAP( a, b, c, d )                      ( ( ( a ) == ( c ) && ( b ) == ( d ) ) || MIN ( ( a ) + ( b ), ( c ) + ( d ) ) - MAX ( ( a ), ( c ) ) > 0 )
#define INTERSECT( x, y, w, h, x1, y1, w1, h1 )    ( OVERLAP ( ( x ), ( w ), ( x1 ), ( w1 ) ) && OVERLAP ( ( y ), ( h ), ( y1 ), ( h1 ) ) )

/**
 * Pointer to xdg cache directory.
 */
extern const char *cache_dir;


/**
 * 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
} SwitcherMode;

/**
 * @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 );

/**
 * State returned by the rofi window.
 */
typedef enum
{
    /** Entry is selected. */
    MENU_OK           = 0,
    /** User canceled the operation. (e.g. pressed escape) */
    MENU_CANCEL       = -1,
    /** User requested a mode switch */
    MENU_NEXT         = -2,
    /** Custom (non-matched) input was entered. */
    MENU_CUSTOM_INPUT = -3,
    /** User wanted to delete entry from history. */
    MENU_ENTRY_DELETE = -4,
    /** User wants to jump to another switcher. */
    MENU_QUICK_SWITCH = -5,
    /** Go to the previous menu. */
    MENU_PREVIOUS     = -6
} MenuReturn;


/**
 * @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 ( *menu_match_cb )( char **tokens, const char *input, int case_sensitive, int index, void *data );

/**
 * @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 time The current time (used for window interaction.)
 * @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.
 *
 * Main menu callback.
 *
 * @returns The command issued (see MenuReturn)
 */
MenuReturn menu ( char **lines, unsigned int num_lines, char **input, char *prompt,
                  Time *time, int *shift,
                  menu_match_cb mmc, void *mmc_data,
                  int *selected_line, int sorting ) __attribute__ ( ( nonnull ( 1, 3, 4, 9 ) ) );
/**
 * @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;

/**
 * Settings
 */

typedef struct _Settings
{
    /** List of enabled switchers */
    char           *switchers;
    /** 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;
    /** Foreground color */
    char           * menu_fg;
    /** Background color */
    char           * menu_bg;
    /** Background color alt */
    char           * menu_bg_alt;
    /** Highlight foreground color */
    char           * menu_hlfg;
    /** Highlight background color */
    char           * menu_hlbg;
    /** 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;

    /** Key to open window switcher */
    char           * window_key;
    /** Key to open run dialog */
    char           * run_key;
    /** Key to open ssh dialog */
    char           * ssh_key;
    /** Windows location/gravity */
    WindowLocation location;
    /** Horizontal mode. */
    unsigned int   hmode;
    /** 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 #chars */
    int            element_height;
    /** Sidebar mode, show the switchers */
    int            sidebar_mode;
} Settings;

/** Global Settings structure. */
extern Settings config;

/**
 * @param msg The error message to show.
 *
 * The error message to show.
 */
void error_dialog ( char *msg );

#endif