defbindings("WScreen", { bdoc("Switch to n:th object (workspace, full screen client window) within current screen."), kpress(META.."1", "WScreen.switch_nth(_, 0)"), kpress(META.."2", "WScreen.switch_nth(_, 1)"), kpress(META.."3", "WScreen.switch_nth(_, 2)"), kpress(META.."4", "WScreen.switch_nth(_, 3)"), kpress(META.."5", "WScreen.switch_nth(_, 4)"), kpress(META.."6", "WScreen.switch_nth(_, 5)"), kpress(META.."7", "WScreen.switch_nth(_, 6)"), kpress(META.."8", "WScreen.switch_nth(_, 7)"), kpress(META.."9", "WScreen.switch_nth(_, 8)"), kpress(META.."0", "WScreen.switch_nth(_, 9)"), bdoc("Switch to next/previous object within current screen."), kpress(META.."comma", "WScreen.switch_prev(_)"), kpress(META.."period", "WScreen.switch_next(_)"), submap(META.."K", { bdoc("Go to first region demanding attention or previously active one."), kpress("K", "mod_menu.grabmenu(_, _sub, 'focuslist')"), bdoc("Go to first object on activity/urgency list."), kpress("I", "ioncore.goto_activity()"), bdoc("Clear all tags."), kpress("T", "ioncore.tagged_clear()"), }), bdoc("Go to n:th screen on multihead setup."), kpress(META.."Shift+1", "ioncore.goto_nth_screen(0)"), kpress(META.."Q", "ioncore.goto_nth_screen(0)"), kpress(META.."Shift+2", "ioncore.goto_nth_screen(1)"), kpress(META.."W", "ioncore.goto_nth_screen(1)"), kpress(META.."Shift+3", "ioncore.goto_nth_screen(2)"), kpress(META.."E", "ioncore.goto_nth_screen(2)"), bdoc("Go to next/previous screen on multihead setup."), kpress(META.."Shift+comma", "ioncore.goto_prev_screen()"), kpress(META.."I", "ioncore.goto_prev_screen()"), kpress(META.."O", "ioncore.goto_next_screen()"), kpress(META.."grave", "ioncore.goto_next_screen()"), bdoc("Create a new workspace of chosen default type."), kpress(META.."F9", "ioncore.create_ws(_)"), bdoc("Display the main menu."), kpress(ALTMETA.."F12", "mod_query.query_menu(_, _sub, 'mainmenu', 'Main menu:')"), mpress("Button3", "mod_menu.pmenu(_, _sub, 'mainmenu')"), bdoc("Display the window list menu."), mpress("Button2", "mod_menu.pmenu(_, _sub, 'windowlist')"), bdoc("Forward-circulate focus."), kpress(META.."Tab", "ioncore.goto_next(_chld, 'right')", "_chld:non-nil"), submap(META.."K", { bdoc("Backward-circulate focus."), kpress("AnyModifier+Tab", "ioncore.goto_next(_chld, 'left')", "_chld:non-nil"), bdoc("Raise focused object, if possible."), kpress("AnyModifier+R", "WRegion.rqorder(_chld, 'front')", "_chld:non-nil"), }), }) defbindings("WClientWin", { submap(META.."K", { bdoc("Nudge the client window. This might help with some programs' resizing problems."), kpress_wait(META.."L", "WClientWin.nudge(_)"), bdoc("Kill client owning the client window."), kpress("C", "WClientWin.kill(_)"), bdoc("Send next key press to the client window. Some programs may not allow this by default."), kpress("Q", "WClientWin.quote_next(_)"), }), }) defbindings("WGroupCW", { bdoc("Toggle client window group full-screen mode"), kpress_wait(META.."Return", "WGroup.set_fullscreen(_, 'toggle')"), }) defbindings("WMPlex", { bdoc("Close current object."), kpress_wait(META.."C", "WRegion.rqclose_propagate(_, _sub)"), }) defbindings("WMPlex.toplevel", { bdoc("Toggle tag of current object."), kpress(META.."T", "WRegion.set_tagged(_sub, 'toggle')", "_sub:non-nil"), bdoc("Lock screen"), kpress(META.."L", "notioncore.exec_on(_, 'notion-lock')"), bdoc("Query for manual page to be displayed."), kpress(ALTMETA.."F1", "mod_query.query_man(_, ':man')"), bdoc("Show the Notion manual page."), kpress(META.."F1", "ioncore.exec_on(_, ':man notion')"), bdoc("Run a terminal emulator."), kpress(ALTMETA.."F2", "mod_query.exec_on_merr(_, XTERM or 'xterm')"), bdoc("Query for command line to execute."), kpress(ALTMETA.."F3", "mod_query.query_exec(_)"), bdoc("Query for Lua code to execute."), kpress(META.."F3", "mod_query.query_lua(_)"), bdoc("Query for host to connect to with SSH."), kpress(ALTMETA.."F4", "mod_query.query_ssh(_, ':ssh')"), bdoc("Query for file to edit."), kpress(ALTMETA.."F5", "mod_query.query_editfile(_, 'run-mailcap --action=edit')"), bdoc("Query for file to view."), kpress(ALTMETA.."F6", "mod_query.query_runfile(_, 'run-mailcap --action=view')"), bdoc("Query for workspace to go to or create a new one."), kpress(ALTMETA.."F9", "mod_query.query_workspace(_)"), bdoc("Query for a client window to go to."), kpress(META.."G", "mod_query.query_gotoclient(_)"), bdoc("Display context menu."), kpress(META.."M", "mod_query.query_menu(_, _sub, 'ctxmenu', 'Context menu:')"), submap(META.."K", { bdoc("Detach (float) or reattach an object to its previous location."), kpress("D", "ioncore.detach(_chld, 'toggle')", "_chld:non-nil"), }), }) defbindings("WFrame", { submap(META.."K", { bdoc("Maximize the frame horizontally/vertically."), kpress("H", "WFrame.maximize_horiz(_)"), kpress("V", "WFrame.maximize_vert(_)"), }), bdoc("Display context menu."), mpress("Button3", "mod_menu.pmenu(_, _sub, 'ctxmenu')"), bdoc("Begin move/resize mode."), kpress(META.."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(META.."Button3", "WFrame.p_resize(_)"), bdoc("Move the frame."), mdrag(META.."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(_)"), bdoc("Switch to next/previous object within the frame."), mclick(META.."Button4", "WFrame.switch_next(_)"), mclick(META.."Button5", "WFrame.switch_prev(_)"), }) defbindings("WFrame.toplevel", { bdoc("Query for a client window to attach."), kpress(META.."A", "mod_query.query_attachclient(_)"), submap(META.."K", { submap_wait("ioncore.tabnum.show(_)"), 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("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", "ioncore.tagged_attach(_)"), }), }) defbindings("WFrame.floating", { bdoc("Toggle shade mode"), mdblclick("Button1@tab", "WFrame.set_shaded(_, 'toggle')"), bdoc("Raise the frame."), mpress("Button1@tab", "WRegion.rqorder(_, 'front')"), mpress("Button1@border", "WRegion.rqorder(_, 'front')"), mclick(META.."Button1", "WRegion.rqorder(_, 'front')"), bdoc("Lower the frame."), mclick(META.."Button3", "WRegion.rqorder(_, 'back')"), bdoc("Move the frame."), mdrag("Button1@tab", "WFrame.p_move(_)"), }) 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(META.."Left", "WMoveresMode.move(_, -1, 0)"), kpress(META.."Right", "WMoveresMode.move(_, 1, 0)"), kpress(META.."Up", "WMoveresMode.move(_, 0, -1)"), kpress(META.."Down", "WMoveresMode.move(_, 0, 1)"), kpress(META.."F", "WMoveresMode.move(_, -1, 0)"), kpress(META.."B", "WMoveresMode.move(_, 1, 0)"), kpress(META.."P", "WMoveresMode.move(_, 0, -1)"), kpress(META.."N", "WMoveresMode.move(_, 0, 1)"), }) defmenu("mainmenu", { menuentry("Run...", "mod_query.query_exec(_)"), menuentry("Terminal", "mod_query.exec_on_merr(_, XTERM or 'xterm')"), menuentry("Lock screen", "notioncore.exec_on(_, notioncore.lookup_script('notion-lock'))"), menuentry("Help", "mod_query.query_man(_)"), menuentry("About Notion", "mod_query.show_about_ion(_)"), submenu("Styles", "stylemenu"), submenu("Session", "sessionmenu"), }) defmenu("sessionmenu", { menuentry("Save", "ioncore.snapshot()"), menuentry("Restart", "ioncore.restart()"), menuentry("Restart TWM", "ioncore.restart_other('twm')"), menuentry("Exit", "ioncore.shutdown()"), }) defctxmenu("WFrame", "Frame", { menuentry("Close", "WRegion.rqclose_propagate(_, _sub)"), menuentry("Attach tagged", "ioncore.tagged_attach(_)", { priority = 0 }), menuentry("Clear tags", "ioncore.tagged_clear()", { priority = 0 }), menuentry("Window info", "mod_query.show_tree(_, _sub)", { priority = 0 }), menuentry("Show/hide dock", "mod_dock.set_floating_shown_on(_:screen_of(), 'toggle')", { priority = 0 }), menuentry("Show/hide scratchpad", "mod_sp.set_shown_on(_:screen_of(), 'toggle')", { priority = 0 }), }) defctxmenu("WGroup", "Group", { menuentry("Toggle tag", "WRegion.set_tagged(_, 'toggle')"), menuentry("De/reattach", "ioncore.detach(_, 'toggle')"), }) defctxmenu("WGroupWS", "Workspace", { menuentry("Close", "WRegion.rqclose(_)"), menuentry("Rename", "mod_query.query_renameworkspace(nil, _)"), menuentry("Attach tagged", "ioncore.tagged_attach(_)"), }) defctxmenu("WClientWin", "Client window", { menuentry("Kill", "WClientWin.kill(_)"), })