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