conf: allow escaping single quote with backslash in key bindings
[ncmpc-debian.git] / src / GlobalBindings.cxx
1 /* ncmpc (Ncurses MPD Client)
2  * (c) 2004-2018 The Music Player Daemon Project
3  * Project homepage: http://musicpd.org
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License as published by
7  * the Free Software Foundation; either version 2 of the License, or
8  * (at your option) any later version.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License along
16  * with this program; if not, write to the Free Software Foundation, Inc.,
17  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
18  */
19
20 #include "GlobalBindings.hxx"
21 #include "Bindings.hxx"
22
23 #include <curses.h>
24
25 #define KEY_CTL(x) ((x) & 0x1f) /* KEY_CTL(A) == ^A == \1 */
26
27 #define BS   KEY_BACKSPACE
28 #define DEL  KEY_DC
29 #define UP   KEY_UP
30 #define DWN  KEY_DOWN
31 #define LEFT KEY_LEFT
32 #define RGHT KEY_RIGHT
33 #define HOME KEY_HOME
34 #define END  KEY_END
35 #define PGDN KEY_NPAGE
36 #define PGUP KEY_PPAGE
37 #define TAB  0x09
38 #define STAB 0x161
39 #define ESC  0x1B
40 #define RET  '\r'
41 #define F1   KEY_F(1)
42 #define F2   KEY_F(2)
43 #define F3   KEY_F(3)
44 #define F4   KEY_F(4)
45 #define F5   KEY_F(5)
46 #define F6   KEY_F(6)
47 #define F7   KEY_F(7)
48 #define F8   KEY_F(8)
49 #define F9   KEY_F(9)
50 #define C(x) KEY_CTL(x)
51
52 static KeyBindings global_key_bindings{{{
53 #ifdef ENABLE_KEYDEF_SCREEN
54         {'K'},
55 #endif
56         {'q', 'Q', C('C')},
57
58         /* movement */
59         {UP, 'k'},
60         {DWN, 'j'},
61         {'H'},
62         {'M'},
63         {'L'},
64         {HOME, C('A')},
65         {END, C('E')},
66         {PGUP},
67         {PGDN},
68         {'v',  0},
69         {C('N'),  0},
70         {C('B'),  0},
71         {'N',  0},
72         {'B',  0},
73         {'l'},
74
75         /* basic screens */
76         {'1', F1, 'h'},
77         {'2', F2},
78         {'3', F3},
79
80         /* player commands */
81         {RET},
82         {'P'},
83         {'s', BS},
84         {'o'},
85         {'>'},
86         {'<'},
87         {'f'},
88         {'b'},
89         {'+', RGHT},
90         {'-', LEFT},
91         {' '},
92         {'t'},
93         {DEL, 'd'},
94         {'Z'},
95         {'c'},
96         {'r'},
97         {'z'},
98         {'y'},
99         {'C'},
100         {'x'},
101         {C('U')},
102         {'S'},
103         {'a'},
104
105         {'!'},
106         {'"'},
107
108         {'G'},
109
110         /* lists */
111         {C('K')},
112         {C('J')},
113         {C('L')},
114
115
116         /* ncmpc options */
117         {'w'},
118         {'U'},
119
120         /* change screen */
121         {TAB},
122         {STAB},
123         {'`'},
124
125
126         /* find */
127         {'/'},
128         {'n'},
129         {'?'},
130         {'p'},
131         {'.'},
132
133
134         /* extra screens */
135 #ifdef ENABLE_LIBRARY_PAGE
136         {'4', F4},
137 #endif
138 #ifdef ENABLE_SEARCH_SCREEN
139         {'5', F5},
140         {'m'},
141 #endif
142 #ifdef ENABLE_SONG_SCREEN
143         {'i'},
144 #endif
145 #ifdef ENABLE_LYRICS_SCREEN
146         {'7', F7},
147         {ESC},
148         {'u'},
149         {'e'},
150 #endif
151
152 #ifdef ENABLE_OUTPUTS_SCREEN
153         {'8', F8},
154 #endif
155
156 #ifdef ENABLE_CHAT_SCREEN
157         {'9', F9},
158 #endif
159 }}};
160
161 KeyBindings &
162 GetGlobalKeyBindings()
163 {
164         return global_key_bindings;
165 }