diff options
author | Pavel Labath <pavelo@centrum.sk> | 2011-07-29 16:10:29 (GMT) |
---|---|---|
committer | Pavel Labath <pavelo@centrum.sk> | 2013-02-18 21:04:25 (GMT) |
commit | fe7a9bf5b0d59d25ef87ca6ccf47e40055596b84 (patch) | |
tree | 62c42f1c1ff701d83da2b8a9a4fe576c5cdf318d | |
parent | ca0c30a9dc3dcb0aa06fbffd900da7836762f7ed (diff) | |
download | fluxbox_pavel-fe7a9bf5b0d59d25ef87ca6ccf47e40055596b84.zip fluxbox_pavel-fe7a9bf5b0d59d25ef87ca6ccf47e40055596b84.tar.bz2 |
Simplify syntax of keys.lua
keybindings are now added like this
some_keymode['Ctrl F1'] = 'RootMenu'
This should be more intuitive and it allows things like this
foo['Ctrl F1'] = bar['Mod1 F2']
-rw-r--r-- | data/keys.lua | 172 | ||||
-rw-r--r-- | src/Keys.cc | 122 |
2 files changed, 170 insertions, 124 deletions
diff --git a/data/keys.lua b/data/keys.lua index aa21145..2c526be 100644 --- a/data/keys.lua +++ b/data/keys.lua | |||
@@ -1,137 +1,137 @@ | |||
1 | -- click on the desktop to get menus | 1 | -- click on the desktop to get menus |
2 | default_keymode:addBinding('OnDesktop Mouse1', 'HideMenus') | 2 | default_keymode['OnDesktop Mouse1'] = 'HideMenus' |
3 | default_keymode:addBinding('OnDesktop Mouse2', 'WorkspaceMenu') | 3 | default_keymode['OnDesktop Mouse2'] = 'WorkspaceMenu' |
4 | default_keymode:addBinding('OnDesktop Mouse3', 'RootMenu') | 4 | default_keymode['OnDesktop Mouse3'] = 'RootMenu' |
5 | 5 | ||
6 | -- scroll on the desktop to change workspaces | 6 | -- scroll on the desktop to change workspaces |
7 | default_keymode:addBinding('OnDesktop Mouse4', 'PrevWorkspace') | 7 | default_keymode['OnDesktop Mouse4'] = 'PrevWorkspace' |
8 | default_keymode:addBinding('OnDesktop Mouse5', 'NextWorkspace') | 8 | default_keymode['OnDesktop Mouse5'] = 'NextWorkspace' |
9 | 9 | ||
10 | -- scroll on the toolbar to change current window | 10 | -- scroll on the toolbar to change current window |
11 | default_keymode:addBinding('OnToolbar Mouse4', 'PrevWindow {static groups} (iconhidden=no)') | 11 | default_keymode['OnToolbar Mouse4'] = 'PrevWindow {static groups} (iconhidden=no)' |
12 | default_keymode:addBinding('OnToolbar Mouse5', 'NextWindow {static groups} (iconhidden=no)') | 12 | default_keymode['OnToolbar Mouse5'] = 'NextWindow {static groups} (iconhidden=no)' |
13 | 13 | ||
14 | -- alt + left/right click to move/resize a window | 14 | -- alt + left/right click to move/resize a window |
15 | default_keymode:addBinding('OnWindow Mod1 Mouse1', 'MacroCmd {Raise} {Focus} {StartMoving}') | 15 | default_keymode['OnWindow Mod1 Mouse1'] = 'MacroCmd {Raise} {Focus} {StartMoving}' |
16 | default_keymode:addBinding('OnWindowBorder Move1', 'StartMoving') | 16 | default_keymode['OnWindowBorder Move1'] = 'StartMoving' |
17 | 17 | ||
18 | default_keymode:addBinding('OnWindow Mod1 Mouse3', 'MacroCmd {Raise} {Focus} {StartResizing NearestCorner}') | 18 | default_keymode['OnWindow Mod1 Mouse3'] = 'MacroCmd {Raise} {Focus} {StartResizing NearestCorner}' |
19 | default_keymode:addBinding('OnLeftGrip Move1', 'StartResizing bottomleft') | 19 | default_keymode['OnLeftGrip Move1'] = 'StartResizing bottomleft' |
20 | default_keymode:addBinding('OnRightGrip Move1', 'StartResizing bottomright') | 20 | default_keymode['OnRightGrip Move1'] = 'StartResizing bottomright' |
21 | 21 | ||
22 | -- alt + middle click to lower the window | 22 | -- alt + middle click to lower the window |
23 | default_keymode:addBinding('OnWindow Mod1 Mouse2', 'Lower') | 23 | default_keymode['OnWindow Mod1 Mouse2'] = 'Lower' |
24 | 24 | ||
25 | -- control-click a window's titlebar and drag to attach windows | 25 | -- control-click a window's titlebar and drag to attach windows |
26 | default_keymode:addBinding('OnTitlebar Control Mouse1', 'StartTabbing') | 26 | default_keymode['OnTitlebar Control Mouse1'] = 'StartTabbing' |
27 | 27 | ||
28 | -- double click on the titlebar to shade | 28 | -- double click on the titlebar to shade |
29 | default_keymode:addBinding('OnTitlebar Double Mouse1', 'Shade') | 29 | default_keymode['OnTitlebar Double Mouse1'] = 'Shade' |
30 | 30 | ||
31 | -- left click on the titlebar to move the window | 31 | -- left click on the titlebar to move the window |
32 | default_keymode:addBinding('OnTitlebar Mouse1', 'MacroCmd {Raise} {Focus} {ActivateTab}') | 32 | default_keymode['OnTitlebar Mouse1'] = 'MacroCmd {Raise} {Focus} {ActivateTab}' |
33 | default_keymode:addBinding('OnTitlebar Move1 ', 'StartMoving') | 33 | default_keymode['OnTitlebar Move1 '] = 'StartMoving' |
34 | 34 | ||
35 | -- middle click on the titlebar to lower | 35 | -- middle click on the titlebar to lower |
36 | default_keymode:addBinding('OnTitlebar Mouse2', 'Lower') | 36 | default_keymode['OnTitlebar Mouse2'] = 'Lower' |
37 | 37 | ||
38 | -- right click on the titlebar for a menu of options | 38 | -- right click on the titlebar for a menu of options |
39 | default_keymode:addBinding('OnTitlebar Mouse3', 'WindowMenu') | 39 | default_keymode['OnTitlebar Mouse3'] = 'WindowMenu' |
40 | 40 | ||
41 | -- alt-tab | 41 | -- alt-tab |
42 | default_keymode:addBinding('Mod1 Tab', 'NextWindow {groups} (workspace=[current])') | 42 | default_keymode['Mod1 Tab'] = 'NextWindow {groups} (workspace=[current])' |
43 | default_keymode:addBinding('Mod1 Shift Tab', 'PrevWindow {groups} (workspace=[current])') | 43 | default_keymode['Mod1 Shift Tab'] = 'PrevWindow {groups} (workspace=[current])' |
44 | 44 | ||
45 | -- cycle through tabs in the current window | 45 | -- cycle through tabs in the current window |
46 | default_keymode:addBinding('Mod4 Tab', 'NextTab') | 46 | default_keymode['Mod4 Tab'] = 'NextTab' |
47 | default_keymode:addBinding('Mod4 Shift Tab', 'PrevTab') | 47 | default_keymode['Mod4 Shift Tab'] = 'PrevTab' |
48 | 48 | ||
49 | -- go to a specific tab in the current window | 49 | -- go to a specific tab in the current window |
50 | default_keymode:addBinding('Mod4 1', 'Tab 1') | 50 | default_keymode['Mod4 1'] = 'Tab 1' |
51 | default_keymode:addBinding('Mod4 2', 'Tab 2') | 51 | default_keymode['Mod4 2'] = 'Tab 2' |
52 | default_keymode:addBinding('Mod4 3', 'Tab 3') | 52 | default_keymode['Mod4 3'] = 'Tab 3' |
53 | default_keymode:addBinding('Mod4 4', 'Tab 4') | 53 | default_keymode['Mod4 4'] = 'Tab 4' |
54 | default_keymode:addBinding('Mod4 5', 'Tab 5') | 54 | default_keymode['Mod4 5'] = 'Tab 5' |
55 | default_keymode:addBinding('Mod4 6', 'Tab 6') | 55 | default_keymode['Mod4 6'] = 'Tab 6' |
56 | default_keymode:addBinding('Mod4 7', 'Tab 7') | 56 | default_keymode['Mod4 7'] = 'Tab 7' |
57 | default_keymode:addBinding('Mod4 8', 'Tab 8') | 57 | default_keymode['Mod4 8'] = 'Tab 8' |
58 | default_keymode:addBinding('Mod4 9', 'Tab 9') | 58 | default_keymode['Mod4 9'] = 'Tab 9' |
59 | 59 | ||
60 | -- open a terminal | 60 | -- open a terminal |
61 | default_keymode:addBinding('Mod1 F1', 'Exec xterm') | 61 | default_keymode['Mod1 F1'] = 'Exec xterm' |
62 | 62 | ||
63 | -- open a dialog to run programs | 63 | -- open a dialog to run programs |
64 | default_keymode:addBinding('Mod1 F2', 'Exec fbrun') | 64 | default_keymode['Mod1 F2'] = 'Exec fbrun' |
65 | 65 | ||
66 | -- volume settings, using common keycodes | 66 | -- volume settings, using common keycodes |
67 | -- if these don't work, use xev to find out your real keycodes | 67 | -- if these don't work, use xev to find out your real keycodes |
68 | default_keymode:addBinding('176', 'Exec amixer sset Master,0 1+') | 68 | default_keymode['176'] = 'Exec amixer sset Master,0 1+' |
69 | default_keymode:addBinding('174', 'Exec amixer sset Master,0 1-') | 69 | default_keymode['174'] = 'Exec amixer sset Master,0 1-' |
70 | default_keymode:addBinding('160', 'Exec amixer sset Master,0 toggle') | 70 | default_keymode['160'] = 'Exec amixer sset Master,0 toggle' |
71 | 71 | ||
72 | -- current window commands | 72 | -- current window commands |
73 | default_keymode:addBinding('Mod1 F4', 'Close') | 73 | default_keymode['Mod1 F4'] = 'Close' |
74 | default_keymode:addBinding('Mod1 F5', 'Kill') | 74 | default_keymode['Mod1 F5'] = 'Kill' |
75 | default_keymode:addBinding('Mod1 F9', 'Minimize') | 75 | default_keymode['Mod1 F9'] = 'Minimize' |
76 | default_keymode:addBinding('Mod1 F10', 'Maximize') | 76 | default_keymode['Mod1 F10'] = 'Maximize' |
77 | default_keymode:addBinding('Mod1 F11', 'Fullscreen') | 77 | default_keymode['Mod1 F11'] = 'Fullscreen' |
78 | 78 | ||
79 | -- open the window menu | 79 | -- open the window menu |
80 | default_keymode:addBinding('Mod1 space', 'WindowMenu') | 80 | default_keymode['Mod1 space'] = 'WindowMenu' |
81 | 81 | ||
82 | -- exit fluxbox | 82 | -- exit fluxbox |
83 | default_keymode:addBinding('Control Mod1 Delete', 'Exit') | 83 | default_keymode['Control Mod1 Delete'] = 'Exit' |
84 | 84 | ||
85 | -- change to previous/next workspace | 85 | -- change to previous/next workspace |
86 | default_keymode:addBinding('Control Mod1 Left', 'PrevWorkspace') | 86 | default_keymode['Control Mod1 Left'] = 'PrevWorkspace' |
87 | default_keymode:addBinding('Control Mod1 Right', 'NextWorkspace') | 87 | default_keymode['Control Mod1 Right'] = 'NextWorkspace' |
88 | 88 | ||
89 | -- send the current window to previous/next workspace | 89 | -- send the current window to previous/next workspace |
90 | default_keymode:addBinding('Mod4 Left', 'SendToPrevWorkspace') | 90 | default_keymode['Mod4 Left'] = 'SendToPrevWorkspace' |
91 | default_keymode:addBinding('Mod4 Right', 'SendToNextWorkspace') | 91 | default_keymode['Mod4 Right'] = 'SendToNextWorkspace' |
92 | 92 | ||
93 | -- send the current window and follow it to previous/next workspace | 93 | -- send the current window and follow it to previous/next workspace |
94 | default_keymode:addBinding('Control Mod4 Left', 'TakeToPrevWorkspace') | 94 | default_keymode['Control Mod4 Left'] = 'TakeToPrevWorkspace' |
95 | default_keymode:addBinding('Control Mod4 Right', 'TakeToNextWorkspace') | 95 | default_keymode['Control Mod4 Right'] = 'TakeToNextWorkspace' |
96 | 96 | ||
97 | -- change to a specific workspace | 97 | -- change to a specific workspace |
98 | default_keymode:addBinding('Control F1', 'Workspace 1') | 98 | default_keymode['Control F1'] = 'Workspace 1' |
99 | default_keymode:addBinding('Control F2', 'Workspace 2') | 99 | default_keymode['Control F2'] = 'Workspace 2' |
100 | default_keymode:addBinding('Control F3', 'Workspace 3') | 100 | default_keymode['Control F3'] = 'Workspace 3' |
101 | default_keymode:addBinding('Control F4', 'Workspace 4') | 101 | default_keymode['Control F4'] = 'Workspace 4' |
102 | default_keymode:addBinding('Control F5', 'Workspace 5') | 102 | default_keymode['Control F5'] = 'Workspace 5' |
103 | default_keymode:addBinding('Control F6', 'Workspace 6') | 103 | default_keymode['Control F6'] = 'Workspace 6' |
104 | default_keymode:addBinding('Control F7', 'Workspace 7') | 104 | default_keymode['Control F7'] = 'Workspace 7' |
105 | default_keymode:addBinding('Control F8', 'Workspace 8') | 105 | default_keymode['Control F8'] = 'Workspace 8' |
106 | default_keymode:addBinding('Control F9', 'Workspace 9') | 106 | default_keymode['Control F9'] = 'Workspace 9' |
107 | default_keymode:addBinding('Control F10', 'Workspace 10') | 107 | default_keymode['Control F10'] = 'Workspace 10' |
108 | default_keymode:addBinding('Control F11', 'Workspace 11') | 108 | default_keymode['Control F11'] = 'Workspace 11' |
109 | default_keymode:addBinding('Control F12', 'Workspace 12') | 109 | default_keymode['Control F12'] = 'Workspace 12' |
110 | 110 | ||
111 | -- send the current window to a specific workspace | 111 | -- send the current window to a specific workspace |
112 | default_keymode:addBinding('Mod4 F1', 'SendToWorkspace 1') | 112 | default_keymode['Mod4 F1'] = 'SendToWorkspace 1' |
113 | default_keymode:addBinding('Mod4 F2', 'SendToWorkspace 2') | 113 | default_keymode['Mod4 F2'] = 'SendToWorkspace 2' |
114 | default_keymode:addBinding('Mod4 F3', 'SendToWorkspace 3') | 114 | default_keymode['Mod4 F3'] = 'SendToWorkspace 3' |
115 | default_keymode:addBinding('Mod4 F4', 'SendToWorkspace 4') | 115 | default_keymode['Mod4 F4'] = 'SendToWorkspace 4' |
116 | default_keymode:addBinding('Mod4 F5', 'SendToWorkspace 5') | 116 | default_keymode['Mod4 F5'] = 'SendToWorkspace 5' |
117 | default_keymode:addBinding('Mod4 F6', 'SendToWorkspace 6') | 117 | default_keymode['Mod4 F6'] = 'SendToWorkspace 6' |
118 | default_keymode:addBinding('Mod4 F7', 'SendToWorkspace 7') | 118 | default_keymode['Mod4 F7'] = 'SendToWorkspace 7' |
119 | default_keymode:addBinding('Mod4 F8', 'SendToWorkspace 8') | 119 | default_keymode['Mod4 F8'] = 'SendToWorkspace 8' |
120 | default_keymode:addBinding('Mod4 F9', 'SendToWorkspace 9') | 120 | default_keymode['Mod4 F9'] = 'SendToWorkspace 9' |
121 | default_keymode:addBinding('Mod4 F10', 'SendToWorkspace 10') | 121 | default_keymode['Mod4 F10'] = 'SendToWorkspace 10' |
122 | default_keymode:addBinding('Mod4 F11', 'SendToWorkspace 11') | 122 | default_keymode['Mod4 F11'] = 'SendToWorkspace 11' |
123 | default_keymode:addBinding('Mod4 F12', 'SendToWorkspace 12') | 123 | default_keymode['Mod4 F12'] = 'SendToWorkspace 12' |
124 | 124 | ||
125 | -- send the current window and change to a specific workspace | 125 | -- send the current window and change to a specific workspace |
126 | default_keymode:addBinding('Control Mod4 F1', 'TakeToWorkspace 1') | 126 | default_keymode['Control Mod4 F1'] = 'TakeToWorkspace 1' |
127 | default_keymode:addBinding('Control Mod4 F2', 'TakeToWorkspace 2') | 127 | default_keymode['Control Mod4 F2'] = 'TakeToWorkspace 2' |
128 | default_keymode:addBinding('Control Mod4 F3', 'TakeToWorkspace 3') | 128 | default_keymode['Control Mod4 F3'] = 'TakeToWorkspace 3' |
129 | default_keymode:addBinding('Control Mod4 F4', 'TakeToWorkspace 4') | 129 | default_keymode['Control Mod4 F4'] = 'TakeToWorkspace 4' |
130 | default_keymode:addBinding('Control Mod4 F5', 'TakeToWorkspace 5') | 130 | default_keymode['Control Mod4 F5'] = 'TakeToWorkspace 5' |
131 | default_keymode:addBinding('Control Mod4 F6', 'TakeToWorkspace 6') | 131 | default_keymode['Control Mod4 F6'] = 'TakeToWorkspace 6' |
132 | default_keymode:addBinding('Control Mod4 F7', 'TakeToWorkspace 7') | 132 | default_keymode['Control Mod4 F7'] = 'TakeToWorkspace 7' |
133 | default_keymode:addBinding('Control Mod4 F8', 'TakeToWorkspace 8') | 133 | default_keymode['Control Mod4 F8'] = 'TakeToWorkspace 8' |
134 | default_keymode:addBinding('Control Mod4 F9', 'TakeToWorkspace 9') | 134 | default_keymode['Control Mod4 F9'] = 'TakeToWorkspace 9' |
135 | default_keymode:addBinding('Control Mod4 F10', 'TakeToWorkspace 10') | 135 | default_keymode['Control Mod4 F10'] = 'TakeToWorkspace 10' |
136 | default_keymode:addBinding('Control Mod4 F11', 'TakeToWorkspace 11') | 136 | default_keymode['Control Mod4 F11'] = 'TakeToWorkspace 11' |
137 | default_keymode:addBinding('Control Mod4 F12', 'TakeToWorkspace 12') | 137 | default_keymode['Control Mod4 F12'] = 'TakeToWorkspace 12' |
diff --git a/src/Keys.cc b/src/Keys.cc index aa040b2..f741be6 100644 --- a/src/Keys.cc +++ b/src/Keys.cc | |||
@@ -147,6 +147,8 @@ public: | |||
147 | static void initKeys(FbTk::Lua &l); | 147 | static void initKeys(FbTk::Lua &l); |
148 | static int addBinding(lua::state *l); | 148 | static int addBinding(lua::state *l); |
149 | static int newKeyMode(lua::state *l); | 149 | static int newKeyMode(lua::state *l); |
150 | static int index(lua::state *l); | ||
151 | static int newindex(lua::state *l); | ||
150 | 152 | ||
151 | bool equalExact(const RefKey &x) { | 153 | bool equalExact(const RefKey &x) { |
152 | return type == x->type && key == x->key && context == x->context | 154 | return type == x->type && key == x->key && context == x->context |
@@ -194,7 +196,7 @@ public: | |||
194 | static FbTk::Lua::RegisterInitFunction registerInitKeys; | 196 | static FbTk::Lua::RegisterInitFunction registerInitKeys; |
195 | }; | 197 | }; |
196 | 198 | ||
197 | int Keys::t_key::addBinding(lua::state *l) | 199 | int Keys::t_key::newindex(lua::state *l) |
198 | { | 200 | { |
199 | l->checkstack(2); | 201 | l->checkstack(2); |
200 | 202 | ||
@@ -203,33 +205,43 @@ int Keys::t_key::addBinding(lua::state *l) | |||
203 | 205 | ||
204 | RefKey k = *l->checkudata<RefKey>(1, keymode_metatable); | 206 | RefKey k = *l->checkudata<RefKey>(1, keymode_metatable); |
205 | 207 | ||
206 | if(! l->isstring(2)) { | ||
207 | throw KeyError(_FB_CONSOLETEXT(Keys, Bad2ndArg, "2nd argument is not a string.", | ||
208 | "2nd argument is not a string.")); | ||
209 | } | ||
210 | vector<string> val; | 208 | vector<string> val; |
211 | FbTk::StringUtil::stringtok(val, l->tostring(-2).c_str()); | 209 | FbTk::StringUtil::stringtok(val, l->checkstring(2).c_str()); |
212 | 210 | ||
213 | if(! (l->isstring(3) || l->isfunction(3)) ) { | 211 | RefKey k2; |
214 | throw KeyError(_FB_CONSOLETEXT(Keys, Bad3rdArg, "3rd argument is not a command.", | 212 | try { |
215 | "3rd argument is not a command.")); | 213 | k2 = *l->checkudata<RefKey>(3, keymode_metatable); |
216 | } | 214 | } |
217 | FbTk::RefCount<FbTk::Command<void> > cmd; | 215 | catch(lua::check_error &) { |
218 | if(l->isstring(3)) | 216 | k2.reset(new t_key); |
219 | cmd.reset(FbTk::CommandParser<void>::instance().parse(l->tostring(-1))); | 217 | |
220 | else { | 218 | if(l->isstring(3)) |
221 | l->pushvalue(3); | 219 | k2->m_command.reset(FbTk::CommandParser<void>::instance().parse(l->tostring(-1))); |
222 | cmd.reset(new FbCommands::LuaCmd(*l)); | 220 | else if(l->isfunction(3)) { |
221 | l->pushvalue(3); | ||
222 | k2->m_command.reset(new FbCommands::LuaCmd(*l)); | ||
223 | } else if(l->isnil(3)) | ||
224 | k2.reset(); | ||
225 | else { | ||
226 | throw KeyError(_FB_CONSOLETEXT(Keys, Bad3rdArg, "3rd argument is not a command.", | ||
227 | "3rd argument is not a command.")); | ||
228 | } | ||
223 | } | 229 | } |
224 | 230 | ||
225 | FindPair p = k->findBinding(val, true); | 231 | FindPair p = k->findBinding(val, true); |
226 | 232 | if(k2) { | |
227 | k = *p.first; | 233 | RefKey t = *p.first; |
228 | k->m_command = cmd; | 234 | k2->type = t->type; |
229 | k->keylist.clear(); | 235 | k2->mod = t->mod; |
236 | k2->key = t->key; | ||
237 | k2->context = t->context; | ||
238 | k2->isdouble = t->isdouble; | ||
239 | *p.first = k2; | ||
240 | } else | ||
241 | p.second.keylist.erase(p.first); | ||
230 | } | 242 | } |
231 | catch(std::runtime_error &e) { | 243 | catch(std::runtime_error &e) { |
232 | cerr << "addBinding: " << e.what() << endl; | 244 | cerr << "keymode newindex: " << e.what() << endl; |
233 | } | 245 | } |
234 | 246 | ||
235 | return 0; | 247 | return 0; |
@@ -244,6 +256,42 @@ int Keys::t_key::newKeyMode(lua::state *l) { | |||
244 | } return 1; | 256 | } return 1; |
245 | } | 257 | } |
246 | 258 | ||
259 | int Keys::t_key::index(lua::state *l) { | ||
260 | l->checkstack(2); | ||
261 | |||
262 | try { | ||
263 | l->checkargno(2); | ||
264 | |||
265 | RefKey k = *l->checkudata<RefKey>(1, keymode_metatable); | ||
266 | |||
267 | string str = l->checkstring(2); | ||
268 | |||
269 | if(str == "activate") | ||
270 | l->pushfunction(&setKeyModeWrapper); | ||
271 | else { | ||
272 | vector<string> val; | ||
273 | FbTk::StringUtil::stringtok(val, str.c_str()); | ||
274 | |||
275 | FindPair p = k->findBinding(val, false); | ||
276 | if(p.first == p.second.keylist.end()) | ||
277 | l->pushnil(); | ||
278 | else { | ||
279 | l->createuserdata<RefKey>(*p.first); { | ||
280 | l->rawgetfield(lua::REGISTRYINDEX, keymode_metatable); | ||
281 | l->setmetatable(-2); | ||
282 | } | ||
283 | } | ||
284 | |||
285 | } | ||
286 | } | ||
287 | catch(std::runtime_error &e) { | ||
288 | cerr << "keymode index: " << e.what() << endl; | ||
289 | l->pushnil(); | ||
290 | } | ||
291 | |||
292 | return 1; | ||
293 | } | ||
294 | |||
247 | void Keys::t_key::initKeys(FbTk::Lua &l) { | 295 | void Keys::t_key::initKeys(FbTk::Lua &l) { |
248 | l.checkstack(3); | 296 | l.checkstack(3); |
249 | lua::stack_sentry s(l); | 297 | lua::stack_sentry s(l); |
@@ -252,13 +300,11 @@ void Keys::t_key::initKeys(FbTk::Lua &l) { | |||
252 | l.pushdestructor<RefKey>(); | 300 | l.pushdestructor<RefKey>(); |
253 | l.rawsetfield(-2, "__gc"); | 301 | l.rawsetfield(-2, "__gc"); |
254 | 302 | ||
255 | l.newtable(); { | 303 | l.pushfunction(&index); |
256 | l.pushfunction(&addBinding); | 304 | l.rawsetfield(-2, "__index"); |
257 | l.rawsetfield(-2, "addBinding"); | ||
258 | 305 | ||
259 | l.pushfunction(&setKeyModeWrapper); | 306 | l.pushfunction(&newindex); |
260 | l.rawsetfield(-2, "activate"); | 307 | l.rawsetfield(-2, "__newindex"); |
261 | } l.rawsetfield(-2, "__index"); | ||
262 | } l.pop(); | 308 | } l.pop(); |
263 | 309 | ||
264 | newKeyMode(&l); | 310 | newKeyMode(&l); |
@@ -549,18 +595,18 @@ void Keys::loadDefaults(FbTk::Lua &l) { | |||
549 | fbdbg<<"Loading default key bindings"<<endl; | 595 | fbdbg<<"Loading default key bindings"<<endl; |
550 | 596 | ||
551 | l.loadstring( | 597 | l.loadstring( |
552 | "default_keymode:addBinding('OnDesktop Mouse1', 'HideMenus')\n" | 598 | "default_keymode['OnDesktop Mouse1'] = 'HideMenus'\n" |
553 | "default_keymode:addBinding('OnDesktop Mouse2', 'WorkspaceMenu')\n" | 599 | "default_keymode['OnDesktop Mouse2'] = 'WorkspaceMenu'\n" |
554 | "default_keymode:addBinding('OnDesktop Mouse3', 'RootMenu')\n" | 600 | "default_keymode['OnDesktop Mouse3'] = 'RootMenu'\n" |
555 | "default_keymode:addBinding('OnTitlebar Mouse3', 'WindowMenu')\n" | 601 | "default_keymode['OnTitlebar Mouse3'] = 'WindowMenu'\n" |
556 | "default_keymode:addBinding('Mod1 OnWindow Mouse1', 'MacroCmd {Focus} {Raise} {StartMoving}')\n" | 602 | "default_keymode['Mod1 OnWindow Mouse1'] = 'MacroCmd {Focus} {Raise} {StartMoving}'\n" |
557 | "default_keymode:addBinding('OnTitlebar Mouse1', 'MacroCmd {Focus} {Raise} {ActivateTab}')\n" | 603 | "default_keymode['OnTitlebar Mouse1'] = 'MacroCmd {Focus} {Raise} {ActivateTab}'\n" |
558 | "default_keymode:addBinding('OnTitlebar Move1', 'StartMoving')\n" | 604 | "default_keymode['OnTitlebar Move1'] = 'StartMoving'\n" |
559 | "default_keymode:addBinding('OnLeftGrip Move1', 'StartResizing bottomleft')\n" | 605 | "default_keymode['OnLeftGrip Move1'] = 'StartResizing bottomleft'\n" |
560 | "default_keymode:addBinding('OnRightGrip Move1', 'StartResizing bottomright')\n" | 606 | "default_keymode['OnRightGrip Move1'] = 'StartResizing bottomright'\n" |
561 | "default_keymode:addBinding('OnWindowBorder Move1', 'StartMoving')\n" | 607 | "default_keymode['OnWindowBorder Move1'] = 'StartMoving'\n" |
562 | "default_keymode:addBinding('Mod1 Tab', 'NextWindow (workspace=[current])')\n" | 608 | "default_keymode['Mod1 Tab'] = 'NextWindow (workspace=[current])'\n" |
563 | "default_keymode:addBinding('Mod1 Shift Tab', 'PrevWindow (workspace=[current])')\n" | 609 | "default_keymode['Mod1 Shift Tab'] = 'PrevWindow (workspace=[current])'\n" |
564 | ); | 610 | ); |
565 | l.call(0, 0); | 611 | l.call(0, 0); |
566 | } | 612 | } |