rofi 1.7.7
keyb.c
Go to the documentation of this file.
1/*
2 * rofi
3 *
4 * MIT/X11 License
5 * Copyright © 2013-2023 Qball Cow <qball@gmpclient.org>
6 *
7 * Permission is hereby granted, free of charge, to any person obtaining
8 * a copy of this software and associated documentation files (the
9 * "Software"), to deal in the Software without restriction, including
10 * without limitation the rights to use, copy, modify, merge, publish,
11 * distribute, sublicense, and/or sell copies of the Software, and to
12 * permit persons to whom the Software is furnished to do so, subject to
13 * the following conditions:
14 *
15 * The above copyright notice and this permission notice shall be
16 * included in all copies or substantial portions of the Software.
17 *
18 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
19 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
20 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
21 * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
22 * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
23 * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
24 * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
25 *
26 */
27#include "config.h"
28#include "rofi.h"
29#include "xrmoptions.h"
30#include <glib.h>
31#include <nkutils-bindings.h>
32#include <string.h>
33
34typedef struct {
35 guint id;
36 guint scope;
37 char *name;
38 char *binding;
39 char *comment;
41
46 {.id = PASTE_PRIMARY,
47 .name = "kb-primary-paste",
48 .binding = "Control+V,Shift+Insert",
49 .comment = "Paste primary selection"},
50 {.id = PASTE_SECONDARY,
51 .name = "kb-secondary-paste",
52 .binding = "Control+v,Insert",
53 .comment = "Paste clipboard"},
54 {.id = COPY_SECONDARY,
55 .name = "kb-secondary-copy",
56 .binding = "Control+c",
57 .comment = "Copy to clipboard"},
58 {.id = CLEAR_LINE,
59 .name = "kb-clear-line",
60 .binding = "Control+w",
61 .comment = "Clear input line"},
62 {.id = MOVE_FRONT,
63 .name = "kb-move-front",
64 .binding = "Control+a",
65 .comment = "Beginning of line"},
66 {.id = MOVE_END,
67 .name = "kb-move-end",
68 .binding = "Control+e",
69 .comment = "End of line"},
70 {.id = MOVE_WORD_BACK,
71 .name = "kb-move-word-back",
72 .binding = "Alt+b,Control+Left",
73 .comment = "Move back one word"},
74 {.id = MOVE_WORD_FORWARD,
75 .name = "kb-move-word-forward",
76 .binding = "Alt+f,Control+Right",
77 .comment = "Move forward one word"},
78 {.id = MOVE_CHAR_BACK,
79 .name = "kb-move-char-back",
80 .binding = "Left,Control+b",
81 .comment = "Move back one char"},
82 {.id = MOVE_CHAR_FORWARD,
83 .name = "kb-move-char-forward",
84 .binding = "Right,Control+f",
85 .comment = "Move forward one char"},
86 {.id = REMOVE_WORD_BACK,
87 .name = "kb-remove-word-back",
88 .binding = "Control+Alt+h,Control+BackSpace",
89 .comment = "Delete previous word"},
91 .name = "kb-remove-word-forward",
92 .binding = "Control+Alt+d",
93 .comment = "Delete next word"},
95 .name = "kb-remove-char-forward",
96 .binding = "Delete,Control+d",
97 .comment = "Delete next char"},
98 {.id = REMOVE_CHAR_BACK,
99 .name = "kb-remove-char-back",
100 .binding = "BackSpace,Shift+BackSpace,Control+h",
101 .comment = "Delete previous char"},
102 {.id = REMOVE_TO_EOL,
103 .name = "kb-remove-to-eol",
104 .binding = "Control+k",
105 .comment = "Delete till the end of line"},
106 {.id = REMOVE_TO_SOL,
107 .name = "kb-remove-to-sol",
108 .binding = "Control+u",
109 .comment = "Delete till the start of line"},
110 {.id = ACCEPT_ENTRY,
111 .name = "kb-accept-entry",
112 .binding = "Control+j,Control+m,Return,KP_Enter",
113 .comment = "Accept entry"},
114 {.id = ACCEPT_CUSTOM,
115 .name = "kb-accept-custom",
116 .binding = "Control+Return",
117 .comment = "Use entered text as command (in ssh/run modes)"},
118 {.id = ACCEPT_CUSTOM_ALT,
119 .name = "kb-accept-custom-alt",
120 .binding = "Control+Shift+Return",
121 .comment = "Use entered text as command (in ssh/run modes)"},
122 {.id = ACCEPT_ALT,
123 .name = "kb-accept-alt",
124 .binding = "Shift+Return",
125 .comment = "Use alternate accept command."},
126 {.id = DELETE_ENTRY,
127 .name = "kb-delete-entry",
128 .binding = "Shift+Delete",
129 .comment = "Delete entry from history"},
130 {.id = MODE_NEXT,
131 .name = "kb-mode-next",
132 .binding = "Shift+Right,Control+Tab",
133 .comment = "Switch to the next mode."},
134 {.id = MODE_PREVIOUS,
135 .name = "kb-mode-previous",
136 .binding = "Shift+Left,Control+ISO_Left_Tab",
137 .comment = "Switch to the previous mode."},
138 {.id = MODE_COMPLETE,
139 .name = "kb-mode-complete",
140 .binding = "Control+l",
141 .comment = "Start completion for mode."},
142 {.id = ROW_LEFT,
143 .name = "kb-row-left",
144 .binding = "Control+Page_Up",
145 .comment = "Go to the previous column"},
146 {.id = ROW_RIGHT,
147 .name = "kb-row-right",
148 .binding = "Control+Page_Down",
149 .comment = "Go to the next column"},
150 {.id = ROW_UP,
151 .name = "kb-row-up",
152 .binding = "Up,Control+p",
153 .comment = "Select previous entry"},
154 {.id = ROW_DOWN,
155 .name = "kb-row-down",
156 .binding = "Down,Control+n",
157 .comment = "Select next entry"},
158 {.id = ROW_TAB,
159 .name = "kb-row-tab",
160 .binding = "",
161 .comment =
162 "Go to next row, if one left, accept it, if no left next mode."},
163 {.id = ELEMENT_NEXT,
164 .name = "kb-element-next",
165 .binding = "Tab",
166 .comment = "Go to next element (in logical order)."},
167 {.id = ELEMENT_PREV,
168 .name = "kb-element-prev",
169 .binding = "ISO_Left_Tab",
170 .comment = "Go to next previous element (in logical order)."},
171 {.id = PAGE_PREV,
172 .name = "kb-page-prev",
173 .binding = "Page_Up",
174 .comment = "Go to the previous page"},
175 {.id = PAGE_NEXT,
176 .name = "kb-page-next",
177 .binding = "Page_Down",
178 .comment = "Go to the next page"},
179 {.id = ROW_FIRST,
180 .name = "kb-row-first",
181 .binding = "Home,KP_Home",
182 .comment = "Go to the first entry"},
183 {.id = ROW_LAST,
184 .name = "kb-row-last",
185 .binding = "End,KP_End",
186 .comment = "Go to the last entry"},
187 {.id = ROW_SELECT,
188 .name = "kb-row-select",
189 .binding = "Control+space",
190 .comment = "Set selected item as input text"},
191 {.id = SCREENSHOT,
192 .name = "kb-screenshot",
193 .binding = "Alt+S",
194 .comment = "Take a screenshot of the rofi window"},
195 {.id = CHANGE_ELLIPSIZE,
196 .name = "kb-ellipsize",
197 .binding = "Alt+period",
198 .comment = "Toggle between ellipsize modes for displayed data"},
200 .name = "kb-toggle-case-sensitivity",
201 .binding = "grave,dead_grave",
202 .comment = "Toggle case sensitivity"},
203 {.id = TOGGLE_SORT,
204 .name = "kb-toggle-sort",
205 .binding = "Alt+grave",
206 .comment = "Toggle sort"},
207 {.id = CANCEL,
208 .name = "kb-cancel",
209 .binding = "Escape,Control+g,Control+bracketleft",
210 .comment = "Quit rofi"},
211 {.id = CUSTOM_1,
212 .name = "kb-custom-1",
213 .binding = "Alt+1",
214 .comment = "Custom keybinding 1"},
215 {.id = CUSTOM_2,
216 .name = "kb-custom-2",
217 .binding = "Alt+2",
218 .comment = "Custom keybinding 2"},
219 {.id = CUSTOM_3,
220 .name = "kb-custom-3",
221 .binding = "Alt+3",
222 .comment = "Custom keybinding 3"},
223 {.id = CUSTOM_4,
224 .name = "kb-custom-4",
225 .binding = "Alt+4",
226 .comment = "Custom keybinding 4"},
227 {.id = CUSTOM_5,
228 .name = "kb-custom-5",
229 .binding = "Alt+5",
230 .comment = "Custom Keybinding 5"},
231 {.id = CUSTOM_6,
232 .name = "kb-custom-6",
233 .binding = "Alt+6",
234 .comment = "Custom keybinding 6"},
235 {.id = CUSTOM_7,
236 .name = "kb-custom-7",
237 .binding = "Alt+7",
238 .comment = "Custom Keybinding 7"},
239 {.id = CUSTOM_8,
240 .name = "kb-custom-8",
241 .binding = "Alt+8",
242 .comment = "Custom keybinding 8"},
243 {.id = CUSTOM_9,
244 .name = "kb-custom-9",
245 .binding = "Alt+9",
246 .comment = "Custom keybinding 9"},
247 {.id = CUSTOM_10,
248 .name = "kb-custom-10",
249 .binding = "Alt+0",
250 .comment = "Custom keybinding 10"},
251 {.id = CUSTOM_11,
252 .name = "kb-custom-11",
253 .binding = "Alt+exclam",
254 .comment = "Custom keybinding 11"},
255 {.id = CUSTOM_12,
256 .name = "kb-custom-12",
257 .binding = "Alt+at",
258 .comment = "Custom keybinding 12"},
259 {.id = CUSTOM_13,
260 .name = "kb-custom-13",
261 .binding = "Alt+numbersign",
262 .comment = "Custom keybinding 13"},
263 {.id = CUSTOM_14,
264 .name = "kb-custom-14",
265 .binding = "Alt+dollar",
266 .comment = "Custom keybinding 14"},
267 {.id = CUSTOM_15,
268 .name = "kb-custom-15",
269 .binding = "Alt+percent",
270 .comment = "Custom keybinding 15"},
271 {.id = CUSTOM_16,
272 .name = "kb-custom-16",
273 .binding = "Alt+dead_circumflex",
274 .comment = "Custom keybinding 16"},
275 {.id = CUSTOM_17,
276 .name = "kb-custom-17",
277 .binding = "Alt+ampersand",
278 .comment = "Custom keybinding 17"},
279 {.id = CUSTOM_18,
280 .name = "kb-custom-18",
281 .binding = "Alt+asterisk",
282 .comment = "Custom keybinding 18"},
283 {.id = CUSTOM_19,
284 .name = "kb-custom-19",
285 .binding = "Alt+parenleft",
286 .comment = "Custom Keybinding 19"},
287 {.id = SELECT_ELEMENT_1,
288 .name = "kb-select-1",
289 .binding = "Super+1",
290 .comment = "Select row 1"},
291 {.id = SELECT_ELEMENT_2,
292 .name = "kb-select-2",
293 .binding = "Super+2",
294 .comment = "Select row 2"},
295 {.id = SELECT_ELEMENT_3,
296 .name = "kb-select-3",
297 .binding = "Super+3",
298 .comment = "Select row 3"},
299 {.id = SELECT_ELEMENT_4,
300 .name = "kb-select-4",
301 .binding = "Super+4",
302 .comment = "Select row 4"},
303 {.id = SELECT_ELEMENT_5,
304 .name = "kb-select-5",
305 .binding = "Super+5",
306 .comment = "Select row 5"},
307 {.id = SELECT_ELEMENT_6,
308 .name = "kb-select-6",
309 .binding = "Super+6",
310 .comment = "Select row 6"},
311 {.id = SELECT_ELEMENT_7,
312 .name = "kb-select-7",
313 .binding = "Super+7",
314 .comment = "Select row 7"},
315 {.id = SELECT_ELEMENT_8,
316 .name = "kb-select-8",
317 .binding = "Super+8",
318 .comment = "Select row 8"},
319 {.id = SELECT_ELEMENT_9,
320 .name = "kb-select-9",
321 .binding = "Super+9",
322 .comment = "Select row 9"},
323 {.id = SELECT_ELEMENT_10,
324 .name = "kb-select-10",
325 .binding = "Super+0",
326 .comment = "Select row 10"},
327 {.id = ENTRY_HISTORY_UP,
328 .name = "kb-entry-history-up",
329 .binding = "Control+Up",
330 .comment = "Go up in the history of the entry box"},
331 {.id = ENTRY_HISTORY_DOWN,
332 .name = "kb-entry-history-down",
333 .binding = "Control+Down",
334 .comment = "Go down in the history of the entry box"},
335
336 /* Mouse-aware bindings */
337
338 {.id = SCROLL_LEFT,
339 .scope = SCOPE_MOUSE_LISTVIEW,
340 .name = "ml-row-left",
341 .binding = "ScrollLeft",
342 .comment = "Go to the previous column"},
343 {.id = SCROLL_RIGHT,
344 .scope = SCOPE_MOUSE_LISTVIEW,
345 .name = "ml-row-right",
346 .binding = "ScrollRight",
347 .comment = "Go to the next column"},
348 {.id = SCROLL_UP,
349 .scope = SCOPE_MOUSE_LISTVIEW,
350 .name = "ml-row-up",
351 .binding = "ScrollUp",
352 .comment = "Select previous entry"},
353 {.id = SCROLL_DOWN,
354 .scope = SCOPE_MOUSE_LISTVIEW,
355 .name = "ml-row-down",
356 .binding = "ScrollDown",
357 .comment = "Select next entry"},
358
361 .name = "me-select-entry",
362 .binding = "MousePrimary",
363 .comment = "Select hovered row"},
366 .name = "me-accept-entry",
367 .binding = "MouseDPrimary",
368 .comment = "Accept hovered row"},
371 .name = "me-accept-custom",
372 .binding = "Control+MouseDPrimary",
373 .comment = "Accept hovered row with custom action"},
374};
375
377static const gchar *mouse_default_bindings[] = {
378 [MOUSE_CLICK_DOWN] = "MousePrimary",
379 [MOUSE_CLICK_UP] = "!MousePrimary",
380 [MOUSE_DCLICK_DOWN] = "MouseDPrimary",
381 [MOUSE_DCLICK_UP] = "!MouseDPrimary",
382};
383
384void abe_list_all_bindings(gboolean is_term) {
385
386 int length = 0;
387 for (gsize i = 0; i < G_N_ELEMENTS(rofi_bindings); ++i) {
389 int sl = strlen(b->name);
390 length = MAX(length, sl);
391 }
392 for (gsize i = 0; i < G_N_ELEMENTS(rofi_bindings); ++i) {
394 if (is_term) {
395 printf("%s%*s%s - %s\n", color_bold, length, b->name, color_reset,
396 b->binding);
397 } else {
398 printf("%*s - %s\n", length, b->name, b->binding);
399 }
400 }
401}
402
403void setup_abe(void) {
404 for (gsize i = 0; i < G_N_ELEMENTS(rofi_bindings); ++i) {
406 b->binding = g_strdup(b->binding);
408 b->comment);
409 }
410}
411
412static gboolean binding_check_action(guint64 scope,
413 G_GNUC_UNUSED gpointer target,
414 gpointer user_data) {
416 GPOINTER_TO_UINT(user_data))
417 ? NK_BINDINGS_BINDING_TRIGGERED
418 : NK_BINDINGS_BINDING_NOT_TRIGGERED;
419}
420
421static void binding_trigger_action(guint64 scope, G_GNUC_UNUSED gpointer target,
422 gpointer user_data) {
424 GPOINTER_TO_UINT(user_data));
425}
426
427guint key_binding_get_action_from_name(const char *name) {
428 for (gsize i = 0; i < G_N_ELEMENTS(rofi_bindings); ++i) {
430 if (g_strcmp0(b->name, name) == 0) {
431 return b->id;
432 }
433 }
434 return UINT32_MAX;
435}
436
437gboolean parse_keys_abe(NkBindings *bindings) {
438 GError *error = NULL;
439 GString *error_msg = g_string_new("");
440 for (gsize i = 0; i < G_N_ELEMENTS(rofi_bindings); ++i) {
442 char *keystr = g_strdup(b->binding);
443 char *sp = NULL;
444
445 // Iter over bindings.
446 const char *const sep = ",";
447 for (char *entry = strtok_r(keystr, sep, &sp); entry != NULL;
448 entry = strtok_r(NULL, sep, &sp)) {
449 if (!nk_bindings_add_binding(bindings, b->scope, entry,
451 GUINT_TO_POINTER(b->id), NULL,
452 NK_BINDINGS_ADD_FLAG_NONE,
453 &error)) {
454 if (error->code == NK_BINDINGS_ERROR_ALREADY_REGISTERED &&
455 error->domain == NK_BINDINGS_ERROR) {
456 char *str = g_markup_printf_escaped(
457 "Failed to set binding <i>%s</i> for: <i>%s (%s)</i>:\n\t<span "
458 "size=\"smaller\" style=\"italic\">Binding `%s` is already "
459 "bound.\n"
460 "\tExecute <b>rofi -list-keybindings</b> to get the current list "
461 "of configured bindings.</span>\n",
462 b->binding, b->comment, b->name, entry);
463 g_string_append(error_msg, str);
464 g_free(str);
465 } else {
466 char *str = g_markup_printf_escaped(
467 "Failed to set binding <i>%s</i> for: <i>%s (%s)</i>:\n\t<span "
468 "size=\"smaller\" style=\"italic\">%s</span>\n",
469 b->binding, b->comment, b->name, error->message);
470 g_string_append(error_msg, str);
471 g_free(str);
472 }
473 g_clear_error(&error);
474 }
475 }
476
477 g_free(keystr);
478 }
479 if (error_msg->len > 0) {
480 // rofi_view_error_dialog ( error_msg->str, TRUE );
481 rofi_add_error_message(error_msg);
482 // g_string_free ( error_msg, TRUE );
483 return FALSE;
484 }
485
486 for (gsize i = SCOPE_MIN_FIXED; i <= SCOPE_MAX_FIXED; ++i) {
487 for (gsize j = 1; j < G_N_ELEMENTS(mouse_default_bindings); ++j) {
488 nk_bindings_add_binding(bindings, i, mouse_default_bindings[j],
490 GSIZE_TO_POINTER(j), NULL,
491 NK_BINDINGS_ADD_FLAG_NONE,
492 NULL);
493 }
494 }
495
496 g_string_free(error_msg, TRUE);
497 return TRUE;
498}
void config_parser_add_option(XrmOptionType type, const char *key, void **value, const char *comment)
Definition xrmoptions.c:468
@ xrm_String
Definition xrmoptions.h:74
gboolean parse_keys_abe(NkBindings *bindings)
Definition keyb.c:437
guint key_binding_get_action_from_name(const char *name)
Definition keyb.c:427
void setup_abe(void)
Definition keyb.c:403
void abe_list_all_bindings(gboolean is_term)
Definition keyb.c:384
@ SCOPE_MOUSE_LISTVIEW_ELEMENT
Definition keyb.h:46
@ SCOPE_MOUSE_LISTVIEW
Definition keyb.h:45
@ ROW_LAST
Definition keyb.h:111
@ CUSTOM_4
Definition keyb.h:117
@ CUSTOM_17
Definition keyb.h:130
@ CUSTOM_12
Definition keyb.h:125
@ CUSTOM_9
Definition keyb.h:122
@ REMOVE_TO_SOL
Definition keyb.h:90
@ ROW_RIGHT
Definition keyb.h:102
@ ROW_UP
Definition keyb.h:103
@ CUSTOM_8
Definition keyb.h:121
@ ENTRY_HISTORY_DOWN
Definition keyb.h:147
@ SELECT_ELEMENT_9
Definition keyb.h:144
@ MOVE_FRONT
Definition keyb.h:68
@ REMOVE_WORD_FORWARD
Definition keyb.h:82
@ CHANGE_ELLIPSIZE
Definition keyb.h:134
@ ACCEPT_CUSTOM_ALT
Definition keyb.h:95
@ REMOVE_WORD_BACK
Definition keyb.h:80
@ TOGGLE_SORT
Definition keyb.h:135
@ ACCEPT_ENTRY
Definition keyb.h:92
@ ROW_TAB
Definition keyb.h:105
@ PAGE_NEXT
Definition keyb.h:109
@ TOGGLE_CASE_SENSITIVITY
Definition keyb.h:99
@ ELEMENT_NEXT
Definition keyb.h:106
@ MOVE_CHAR_FORWARD
Definition keyb.h:78
@ MOVE_WORD_FORWARD
Definition keyb.h:74
@ MODE_COMPLETE
Definition keyb.h:97
@ CUSTOM_1
Definition keyb.h:114
@ SELECT_ELEMENT_6
Definition keyb.h:141
@ CUSTOM_18
Definition keyb.h:131
@ ENTRY_HISTORY_UP
Definition keyb.h:146
@ CUSTOM_15
Definition keyb.h:128
@ CUSTOM_11
Definition keyb.h:124
@ ACCEPT_CUSTOM
Definition keyb.h:94
@ CUSTOM_5
Definition keyb.h:118
@ CUSTOM_19
Definition keyb.h:132
@ REMOVE_TO_EOL
Definition keyb.h:88
@ SELECT_ELEMENT_3
Definition keyb.h:138
@ ROW_SELECT
Definition keyb.h:112
@ PASTE_PRIMARY
Definition keyb.h:60
@ ROW_DOWN
Definition keyb.h:104
@ CUSTOM_13
Definition keyb.h:126
@ PASTE_SECONDARY
Definition keyb.h:62
@ SELECT_ELEMENT_10
Definition keyb.h:145
@ PAGE_PREV
Definition keyb.h:108
@ CUSTOM_3
Definition keyb.h:116
@ CUSTOM_7
Definition keyb.h:120
@ SELECT_ELEMENT_5
Definition keyb.h:140
@ ROW_FIRST
Definition keyb.h:110
@ CUSTOM_6
Definition keyb.h:119
@ ROW_LEFT
Definition keyb.h:101
@ CUSTOM_14
Definition keyb.h:127
@ SELECT_ELEMENT_4
Definition keyb.h:139
@ MOVE_WORD_BACK
Definition keyb.h:72
@ MOVE_END
Definition keyb.h:70
@ CUSTOM_10
Definition keyb.h:123
@ MODE_NEXT
Definition keyb.h:96
@ COPY_SECONDARY
Definition keyb.h:64
@ REMOVE_CHAR_BACK
Definition keyb.h:86
@ DELETE_ENTRY
Definition keyb.h:100
@ SELECT_ELEMENT_1
Definition keyb.h:136
@ CLEAR_LINE
Definition keyb.h:66
@ CUSTOM_2
Definition keyb.h:115
@ SELECT_ELEMENT_2
Definition keyb.h:137
@ SCREENSHOT
Definition keyb.h:133
@ CANCEL
Definition keyb.h:113
@ ELEMENT_PREV
Definition keyb.h:107
@ MODE_PREVIOUS
Definition keyb.h:98
@ ACCEPT_ALT
Definition keyb.h:93
@ SELECT_ELEMENT_7
Definition keyb.h:142
@ MOVE_CHAR_BACK
Definition keyb.h:76
@ SELECT_ELEMENT_8
Definition keyb.h:143
@ REMOVE_CHAR_FORWARD
Definition keyb.h:84
@ CUSTOM_16
Definition keyb.h:129
@ ACCEPT_HOVERED_ENTRY
Definition keyb.h:165
@ ACCEPT_HOVERED_CUSTOM
Definition keyb.h:166
@ SELECT_HOVERED_ENTRY
Definition keyb.h:164
@ SCROLL_LEFT
Definition keyb.h:154
@ SCROLL_DOWN
Definition keyb.h:156
@ SCROLL_RIGHT
Definition keyb.h:155
@ SCROLL_UP
Definition keyb.h:157
@ MOUSE_CLICK_DOWN
Definition keyb.h:173
@ MOUSE_DCLICK_UP
Definition keyb.h:176
@ MOUSE_CLICK_UP
Definition keyb.h:174
@ MOUSE_DCLICK_DOWN
Definition keyb.h:175
#define color_reset
Definition rofi.h:115
#define color_bold
Definition rofi.h:117
void rofi_add_error_message(GString *str)
Definition rofi.c:95
RofiViewState * rofi_view_get_active(void)
Definition view.c:607
void rofi_view_trigger_action(RofiViewState *state, BindingsScope scope, guint action)
Definition view.c:1978
gboolean rofi_view_check_action(RofiViewState *state, BindingsScope scope, guint action)
Definition view.c:1947
ActionBindingEntry rofi_bindings[]
Definition keyb.c:45
static void binding_trigger_action(guint64 scope, G_GNUC_UNUSED gpointer target, gpointer user_data)
Definition keyb.c:421
static gboolean binding_check_action(guint64 scope, G_GNUC_UNUSED gpointer target, gpointer user_data)
Definition keyb.c:412
static const gchar * mouse_default_bindings[]
Definition keyb.c:377
#define SCOPE_MAX_FIXED
Definition keyb.h:52
#define SCOPE_MIN_FIXED
Definition keyb.h:48
NkBindings * bindings
Definition rofi.c:138
char * name
Definition keyb.c:37
char * comment
Definition keyb.c:39
char * binding
Definition keyb.c:38