-- -- Ion bindings configuration file. Global bindings and bindings common -- to screens and all types of frames only. See modules' configuration -- files for other bindings. -- -- WScreen context bindings -- -- The bindings in this context are available all the time. -- -- The variable MOD1 should contain a string of the form 'Mod1+' -- where Mod1 maybe replaced with the modifier you want to use for most -- of the bindings. Similarly MOD2 may be redefined to add a -- modifier to some of the F-key bindings. defbindings("WScreen", { bdoc("Switch to n:th object (workspace, full screen client window) ".. "within current screen."), kpress("KP_Insert", "WScreen.switch_nth(_, 0)"), kpress("KP_End", "WScreen.switch_nth(_, 1)"), kpress("KP_Down", "WScreen.switch_nth(_, 2)"), kpress("KP_Next", "WScreen.switch_nth(_, 3)"), kpress("KP_Left", "WScreen.switch_nth(_, 4)"), kpress("KP_Begin", "WScreen.switch_nth(_, 5)"), kpress("KP_Right", "WScreen.switch_nth(_, 6)"), kpress("KP_Home", "WScreen.switch_nth(_, 7)"), kpress("KP_Up", "WScreen.switch_nth(_, 8)"), kpress("KP_Prior", "WScreen.switch_nth(_, 9)"), -- These are shortcuts to programs. kpress("Pause", "ioncore.exec('sylpheed-claws')"), kpress("Control+Mod1+Delete", "ioncore.exec('sudo shutdown now -h')"), submap("KP_Delete", { kpress("KP_0", "ioncore.exec('dillo')"), kpress("KP_1", "ioncore.exec('aterm -e irssi')"), kpress("KP_2", "ioncore.exec('gftp')"), kpress("KP_3", "ioncore.exec('links2 -g')"), kpress("KP_4", "ioncore.exec('abiword')"), kpress("KP_5", "ioncore.exec('aterm -e bash')"), kpress("KP_6", "ioncore.exec('nedit')"), kpress("KP_7", "ioncore.exec('emelfm')"), kpress("KP_8", "ioncore.exec('xzgv')"), kpress("KP_9", "ioncore.exec('xpdf')"), }), bdoc("Switch to next/previous object within current screen."), kpress(MOD1.."comma", "WScreen.switch_prev(_)"), kpress(MOD1.."period", "WScreen.switch_next(_)"), bdoc("Switch to next/previous object within current screen."), kpress("Control+Up", "WScreen.switch_next(_)"), kpress("Control+Down", "WScreen.switch_prev(_)"), submap(MOD1.."K", { bdoc("Go to previous active object."), kpress("K", "ioncore.goto_previous()"), bdoc("Clear all tags."), kpress("T", "ioncore.clear_tags()"), }), bdoc("Go to n:th screen on multihead setup."), kpress(MOD1.."Shift+1", "ioncore.goto_nth_screen(0)"), kpress(MOD1.."Shift+2", "ioncore.goto_nth_screen(1)"), bdoc("Go to next/previous screen on multihead setup."), kpress(MOD1.."Shift+comma", "ioncore.goto_prev_screen()"), kpress(MOD1.."Shift+period", "ioncore.goto_next_screen()"), bdoc("Create a new workspace of chosen default type."), kpress(MOD1.."F9", "ioncore.create_ws(_)"), bdoc("Display the main menu."), kpress(MOD2.."F12", "mod_menu.menu(_, _sub, 'mainmenu', {big=true})"), mpress("Button3", "mod_menu.pmenu(_, _sub, 'mainmenu')"), bdoc("Display the window list menu."), mpress("Button2", "mod_menu.pmenu(_, _sub, 'windowlist')"), -- create a floating frame kpress("Control+F9", "WFloatFrame.attach_new(_, {type='WFloatWS'})"), }) -- WMPlex context bindings -- -- These bindings work in frames and on screens. The innermost of such -- contexts/objects always gets to handle the key press. Most of these -- bindings define actions on client windows. (Remember that client windows -- can be put in fullscreen mode and therefore may not have a frame.) -- -- The "_sub:WClientWin" guards are used to ensure that _sub is a client -- window in order to stop Ion from executing the callback with an invalid -- parameter if it is not and then complaining. defbindings("WMPlex", { bdoc("Close current object."), kpress_wait(MOD1.."Control+C", "WRegion.rqclose_propagate(_, _sub)"), bdoc("Nudge current client window. This might help with some ".. "programs' resizing problems."), kpress_wait(MOD1.."L", "WClientWin.nudge(_sub)", "_sub:WClientWin"), bdoc("Toggle fullscreen mode of current client window."), kpress_wait(MOD1.."Return", "WClientWin.set_fullscreen(_sub, 'toggle')", "_sub:WClientWin"), submap(MOD1.."K", { bdoc("Kill client owning current client window."), kpress("C", "WClientWin.kill(_sub)", "_sub:WClientWin"), bdoc("Send next key press to current client window. ".. "Some programs may not allow this by default."), kpress("Q", "WClientWin.quote_next(_sub)", "_sub:WClientWin"), }), bdoc("Query for manual page to be displayed."), kpress(MOD2.."F1", "mod_query.query_man(_, ':man')"), bdoc("Show the Ion manual page."), kpress(MOD1.."F1", "ioncore.exec_on(_, ':man ion3')"), bdoc("Run a terminal emulator."), kpress(MOD2.."F2", "ioncore.exec_on(_, 'aterm -e bash')"), bdoc("Query for command line to execute."), kpress(MOD2.."F3", "mod_query.query_exec(_)"), bdoc("Query for Lua code to execute."), kpress(MOD1.."F3", "mod_query.query_lua(_)"), bdoc("Query for host to connect to with SSH."), kpress(MOD2.."F4", "mod_query.query_ssh(_, ':ssh')"), bdoc("Query for file to edit."), kpress(MOD2.."F5", "mod_query.query_editfile(_, 'run-mailcap --action=edit')"), bdoc("Query for file to view."), kpress(MOD2.."F6", "mod_query.query_runfile(_, 'run-mailcap --action=view')"), bdoc("Query for workspace to go to or create a new one."), kpress(MOD2.."F9", "mod_query.query_workspace(_)"), bdoc("Query for a client window to go to."), kpress(MOD1.."G", "mod_query.query_gotoclient(_)"), }) -- WFrame context bindings -- -- These bindings are common to all types of frames. The rest of frame -- bindings that differ between frame types are defined in the modules' -- configuration files. defbindings("WFrame", { bdoc("Tag current object within the frame."), kpress(MOD1.."T", "WRegion.set_tagged(_sub, 'toggle')", "_sub:non-nil"), bdoc("Switch to next/previous object within the frame."), kpress("KP_Divide", "WFrame.switch_prev(_)"), kpress("KP_Multiply", "WFrame.switch_next(_)"), bdoc("Switch to next/previous object within the frame."), kpress("Mod1+Tab", "WFrame.switch_next(_)"), kpress("Mod1+Shift+Tab", "WFrame.switch_prev(_)"), bdoc("Switch to next/previous object within the frame."), kpress("Control+Left", "WFrame.switch_prev(_)"), kpress("Control+Right", "WFrame.switch_next(_)"), submap(MOD1.."K", { bdoc("Switch to n:th object within the frame."), kpress("1", "WFrame.switch_nth(_, 0)"), kpress("2", "WFrame.switch_nth(_, 1)"), kpress("3", "WFrame.switch_nth(_, 2)"), kpress("4", "WFrame.switch_nth(_, 3)"), kpress("5", "WFrame.switch_nth(_, 4)"), kpress("6", "WFrame.switch_nth(_, 5)"), kpress("7", "WFrame.switch_nth(_, 6)"), kpress("8", "WFrame.switch_nth(_, 7)"), kpress("9", "WFrame.switch_nth(_, 8)"), kpress("0", "WFrame.switch_nth(_, 9)"), bdoc("Switch to next/previous object within the frame."), kpress("Control+Left", "WFrame.switch_prev(_)"), kpress("Control+Right", "WFrame.switch_next(_)"), bdoc("Switch to next/previous object within the frame."), kpress("N", "WFrame.switch_next(_)"), kpress("P", "WFrame.switch_prev(_)"), bdoc("Move current object within the frame left/right."), kpress("comma", "WFrame.dec_index(_, _sub)", "_sub:non-nil"), kpress("period", "WFrame.inc_index(_, _sub)", "_sub:non-nil"), bdoc("Maximize the frame horizontally/vertically."), kpress("H", "WFrame.maximize_horiz(_)"), kpress("V", "WFrame.maximize_vert(_)"), bdoc("Attach tagged objects to this frame."), kpress("A", "WFrame.attach_tagged(_)"), }), bdoc("Query for a client window to attach to active frame."), kpress(MOD1.."A", "mod_query.query_attachclient(_)"), bdoc("Display frame context menu."), kpress(MOD1.."M", "mod_menu.menu(_, _sub, 'ctxmenu')"), mpress("Button3", "mod_menu.pmenu(_, _sub, 'ctxmenu')"), bdoc("Begin move/resize mode."), kpress(MOD1.."R", "WFrame.begin_kbresize(_)"), bdoc("Switch the frame to display the object indicated by the tab."), mclick("Button1@tab", "WFrame.p_switch_tab(_)"), mclick("Button2@tab", "WFrame.p_switch_tab(_)"), bdoc("Resize the frame."), mdrag("Button1@border", "WFrame.p_resize(_)"), mdrag(MOD1.."Button3", "WFrame.p_resize(_)"), bdoc("Move the frame."), mdrag(MOD1.."Button1", "WFrame.p_move(_)"), bdoc("Move objects between frames by dragging and dropping the tab."), mdrag("Button1@tab", "WFrame.p_tabdrag(_)"), mdrag("Button2@tab", "WFrame.p_tabdrag(_)"), }) -- WMoveresMode context bindings -- -- These bindings are available keyboard move/resize mode. The mode -- is activated on frames with the command begin_kbresize (bound to -- MOD1.."R" above by default). defbindings("WMoveresMode", { bdoc("Cancel the resize mode."), kpress("AnyModifier+Escape","WMoveresMode.cancel(_)"), bdoc("End the resize mode."), kpress("AnyModifier+Return","WMoveresMode.finish(_)"), bdoc("Grow in specified direction."), kpress("Left", "WMoveresMode.resize(_, 1, 0, 0, 0)"), kpress("Right", "WMoveresMode.resize(_, 0, 1, 0, 0)"), kpress("Up", "WMoveresMode.resize(_, 0, 0, 1, 0)"), kpress("Down", "WMoveresMode.resize(_, 0, 0, 0, 1)"), kpress("F", "WMoveresMode.resize(_, 1, 0, 0, 0)"), kpress("B", "WMoveresMode.resize(_, 0, 1, 0, 0)"), kpress("P", "WMoveresMode.resize(_, 0, 0, 1, 0)"), kpress("N", "WMoveresMode.resize(_, 0, 0, 0, 1)"), bdoc("Shrink in specified direction."), kpress("Shift+Left", "WMoveresMode.resize(_,-1, 0, 0, 0)"), kpress("Shift+Right", "WMoveresMode.resize(_, 0,-1, 0, 0)"), kpress("Shift+Up", "WMoveresMode.resize(_, 0, 0,-1, 0)"), kpress("Shift+Down", "WMoveresMode.resize(_, 0, 0, 0,-1)"), kpress("Shift+F", "WMoveresMode.resize(_,-1, 0, 0, 0)"), kpress("Shift+B", "WMoveresMode.resize(_, 0,-1, 0, 0)"), kpress("Shift+P", "WMoveresMode.resize(_, 0, 0,-1, 0)"), kpress("Shift+N", "WMoveresMode.resize(_, 0, 0, 0,-1)"), bdoc("Move in specified direction."), kpress(MOD1.."Left", "WMoveresMode.move(_,-1, 0)"), kpress(MOD1.."Right", "WMoveresMode.move(_, 1, 0)"), kpress(MOD1.."Up", "WMoveresMode.move(_, 0,-1)"), kpress(MOD1.."Down", "WMoveresMode.move(_, 0, 1)"), kpress(MOD1.."F", "WMoveresMode.move(_,-1, 0)"), kpress(MOD1.."B", "WMoveresMode.move(_, 1, 0)"), kpress(MOD1.."P", "WMoveresMode.move(_, 0,-1)"), kpress(MOD1.."N", "WMoveresMode.move(_, 0, 1)"), })