summaryrefslogtreecommitdiffstats
path: root/source/keyb.c
blob: 6d3dbec46ca3af70a133ae5422fa347298fb0883 (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
#include <config.h>
#include <string.h>
#include "rofi.h"
#include "x11-helper.h"
#include "xrmoptions.h"

typedef struct _KeyBinding
{
    unsigned int modmask;
    xkb_keysym_t keysym;
} KeyBinding;

typedef struct _ActionBindingEntry
{
    const char *name;
    char       *keystr;
    int        num_bindings;
    KeyBinding *kb;
} ActionBindingEntry;

typedef struct _DefaultBinding
{
    KeyBindingAction id;
    char             *name;
    char             *keybinding;
} DefaultBinding;

ActionBindingEntry abe[NUM_ABE];

/**
 * LIST OF DEFAULT SETTINGS
 */
DefaultBinding bindings[NUM_ABE] =
{
    { .id = PASTE_PRIMARY,           .name = "kb-primary-paste",           .keybinding = "Control+Shift+v,Shift+Insert",        },
    { .id = PASTE_SECONDARY,         .name = "kb-secondary-paste",         .keybinding = "Control+v,Insert",                    },
    { .id = CLEAR_LINE,              .name = "kb-clear-line",              .keybinding = "Control+u",                           },
    { .id = MOVE_FRONT,              .name = "kb-move-front",              .keybinding = "Control+a",                           },
    { .id = MOVE_END,                .name = "kb-move-end",                .keybinding = "Control+e",                           },
    { .id = MOVE_WORD_BACK,          .name = "kb-move-word-back",          .keybinding = "Alt+b",                               },
    { .id = MOVE_WORD_FORWARD,       .name = "kb-move-word-forward",       .keybinding = "Alt+f",                               },
    { .id = MOVE_CHAR_BACK,          .name = "kb-move-char-back",          .keybinding = "Left,Control+b"                             },
    { .id = MOVE_CHAR_FORWARD,       .name = "kb-move-char-forward",       .keybinding = "Right,Control+f"                            },
    { .id = REMOVE_WORD_BACK,        .name = "kb-remove-word-back",        .keybinding = "Control+Alt+h",                       },
    { .id = REMOVE_WORD_FORWARD,     .name = "kb-remove-word-forward",     .keybinding = "Control+Alt+d",                       },
    { .id = REMOVE_CHAR_FORWARD,     .name = "kb-remove-char-forward",     .keybinding = "Delete,Control+d",                    },
    { .id = REMOVE_CHAR_BACK,        .name = "kb-remove-char-back",        .keybinding = "BackSpace,Control+h",                 },
    { .id = ACCEPT_ENTRY,            .name = "kb-accept-entry",            .keybinding = "Control+j,Control+m,Return,KP_Enter", },
    { .id = ACCEPT_CUSTOM,           .name = "kb-accept-custom",           .keybinding = "Control+Return",                      },
    { .id = ACCEPT_ENTRY_CONTINUE,   .name = "kb-accept-entry-continue",   .keybinding = "Shift+Return",                        },
    { .id = MODE_NEXT,               .name = "kb-mode-next",               .keybinding = "Shift+Right,Control+Tab"                    },
    { .id = MODE_PREVIOUS,           .name = "kb-mode-previous",           .keybinding = "Shift+Left,Control+Shift+Tab"               },
    { .id = TOGGLE_CASE_SENSITIVITY, .name = "kb-toggle-case-sensitivity", .keybinding = "grave,dead_grave"                           },
    { .id = DELETE_ENTRY,            .name = "kb-delete-entry",            .keybinding = "Shift+Delete"                               },
    { .id = ROW_LEFT,                .name = "kb-row-left",                .keybinding = "Control+Page_Up"                            },
    { .id = ROW_RIGHT,               .name = "kb-row-right",               .keybinding = "Control+Page_Down"                          },
    { .id = ROW_UP,                  .name = "kb-row-up",                  .keybinding = "Up,Control+p,Shift+Tab,Shift+ISO_Left_Tab"  },
    { .id = ROW_DOWN,                .name = "kb-row-down",                .keybinding = "Down,Control+n"                             },
    { .id = ROW_TAB,                 .name = "kb-row-tab",                 .keybinding = "Tab"                                        },
    { .id = PAGE_PREV,               .name = "kb-page-prev",               .keybinding = "Page_Up"                                    },
    { .id = PAGE_NEXT,               .name = "kb-page-next",               .keybinding = "Page_Down"                                  },
    { .id = ROW_FIRST,               .name = "kb-row-first",               .keybinding = "Home,KP_Home"                               },
    { .id = ROW_LAST,                .name = "kb-row-last",                .keybinding = "End,KP_End"                                 },
    { .id = ROW_SELECT,              .name = "kb-row-select",              .keybinding = "Control+space"                              },
    { .id = CANCEL,                  .name = "kb-cancel",                  .keybinding = "Escape,Control+bracketleft"                 },
    { .id = CUSTOM_1,                .name = "kb-custom-1",                .keybinding = "Alt+1"                                      },
    { .id = CUSTOM_2,                .name = "kb-custom-2",                .keybinding = "Alt+2"                                      },
    { .id = CUSTOM_3,                .name = "kb-custom-3",                .keybinding = "Alt+3"                                      },
    { .id = CUSTOM_4,                .name = "kb-custom-4",                .keybinding = "Alt+4"                                      },
    { .id = CUSTOM_5,                .name = "kb-custom-5",                .keybinding = "Alt+5"                                      },
    { .id = CUSTOM_6,                .name = "kb-custom-6",                .keybinding = "Alt+6"                                      },
    { .id = CUSTOM_7,                .name = "kb-custom-7",                .keybinding = "Alt+7"                                      },
    { .id = CUSTOM_8,                .name = "kb-custom-8",                .keybinding = "Alt+8"                                      },
    { .id = CUSTOM_9,                .name = "kb-custom-9",                .keybinding = "Alt+9"                                      },
    { .id = CUSTOM_10,               .name = "kb-custom-10",               .keybinding = "Alt+0"                                      },
    { .id = CUSTOM_11,               .name = "kb-custom-11",               .keybinding = "Alt+Shift+1"                                },
    { .id = CUSTOM_12,               .name = "kb-custom-12",               .keybinding = "Alt+Shift+2"                                },
    { .id = CUSTOM_13,               .name = "kb-custom-13",               .keybinding = "Alt+Shift+3"                                },
    { .id = CUSTOM_14,               .name = "kb-custom-14",               .keybinding = "Alt+Shift+4"                                },
    { .id = CUSTOM_15,               .name = "kb-custom-15",               .keybinding = "Alt+Shift+5"                                },
    { .id = CUSTOM_16,               .name = "kb-custom-16",               .keybinding = "Alt+Shift+6"                                },
    { .id = CUSTOM_18,               .name = "kb-custom-18",               .keybinding = "Alt+Shift+8"                                },
    { .id = CUSTOM_17,               .name = "kb-custom-17",               .keybinding = "Alt+Shift+7"                                },
    { .id = CUSTOM_19,               .name = "kb-custom-19",               .keybinding = "Alt+Shift+9"                                },
    { .id = SCREENSHOT,              .name = "kb-screenshot",              .keybinding = "Alt+Shift+S"                                },
    { .id = TOGGLE_SORT,             .name = "kb-toggle-sort",             .keybinding = "Alt+grave"                                  },
};

void setup_abe ( void )
{
    for ( int iter = 0; iter < NUM_ABE; iter++ ) {
        int id = bindings[iter].id;
        // set pointer to name.
        abe[id].name         = bindings[iter].name;
        abe[id].keystr       = g_strdup ( bindings[iter].keybinding );
        abe[id].num_bindings = 0;
        abe[id].kb           = NULL;

        config_parser_add_option ( xrm_String, abe[id].name, (void * *) &( abe[id].keystr ), "Keybinding" );
    }
}

gboolean parse_keys_abe ( void )
{
    for ( int iter = 0; iter < NUM_ABE; iter++ ) {
        char *keystr = g_strdup ( abe[iter].keystr );
        char *