# HG changeset patch # User Matthew Wild # Date 1283309963 -3600 # Node ID 4d7540af851838bd438313c6582e0a9dca14f5a2 # Parent 98e4b0c9fcac0a8c4fceebca48a5f18449a47249 Initial set of changes to make 'insert' mode 'normal', eradicate 'command' mode and adjust key bindings appropriately (following common binding patterns from other browsers, and in places the nano text editor) diff -r 98e4b0c9fcac -r 4d7540af8518 binds.lua --- a/binds.lua Wed Sep 01 03:53:30 2010 +0100 +++ b/binds.lua Wed Sep 01 03:59:23 2010 +0100 @@ -10,7 +10,7 @@ -- Globals or defaults that are used in binds local scroll_step = globals.scroll_step or 20 local zoom_step = globals.zoom_step or 0.1 -local homepage = globals.homepage or "http://luakit.org" +local homepage = globals.homepage or "http://google.co.uk/" -- Add key bindings to be used across all windows in the given modes. binds.mode_binds = { @@ -18,101 +18,58 @@ -- key({Modifiers}, Key name, function (w, opts) .. end, opts), -- but({Modifiers}, Button num, function (w, opts) .. end, opts), all = { - key({}, "Escape", function (w) w:set_mode() end), - key({"Control"}, "[", function (w) w:set_mode() end), + key({}, "Escape", function (w) w:set_mode("normal") end), + key({"Control"}, "e", function (w) w:set_mode("command") end), + key({"Control"}, "n", function (w) w:set_mode("normal") end), + + key({"Control"}, "x", function (w) w:close_tab() end), - but({}, 8, function (w) w:back() end), - but({}, 9, function (w) w:forward() end), - }, - normal = { - key({}, "i", function (w) w:set_mode("insert") end), - key({}, ":", function (w) w:set_mode("command") end), + key({"Control"}, "c", function (w) if w:get_mode() ~= "normal" then w:set_mode("normal"); end end), + + -- Location + key({"Control"}, "t", function (w) w:new_tab(homepage); end), - -- Scrolling - key({}, "j", function (w) w:scroll_vert("+"..scroll_step.."px") end), - key({}, "k", function (w) w:scroll_vert("-"..scroll_step.."px") end), - key({}, "h", function (w) w:scroll_horiz("-"..scroll_step.."px") end), - key({}, "l", function (w) w:scroll_horiz("+"..scroll_step.."px") end), - key({"Control"}, "d", function (w) w:scroll_page(0.5) end), - key({"Control"}, "u", function (w) w:scroll_page(-0.5) end), - key({"Control"}, "f", function (w) w:scroll_page(1.0) end), - key({"Control"}, "b", function (w) w:scroll_page(-1.0) end), - buf("^gg$", function (w) w:scroll_vert("0%") end), - buf("^G$", function (w) w:scroll_vert("100%") end), - buf("^[\-\+]?[0-9]+[%%G]$", function (w, b) w:scroll_vert(string.match(b, "^([\-\+]?%d+)[%%G]$") .. "%") end), + -- Location + key({"Control"}, "l", function (w) w:set_mode("url-entry"); end), + + -- Web search + key({"Control"}, "k", function (w) w:enter_cmd(":websearch google ") end); + + -- Back and forth + key({"Mod1"}, "Left", function (w) w:back() end); + key({"Mod1"}, "Right", function (w) w:forward() end); + + -- Tab/buffer switching + key({"Mod1"}, ".", function (w) w:next_tab(1) end); + key({"Mod1"}, ",", function (w) w:prev_tab(1) end); + key({"Control"}, "Page_Up", function (w) w:prev_tab() end), + key({"Control"}, "Page_Down", function (w) w:next_tab() end), + + key({"Control"}, "p", function (w) w:navigate(luakit.get_selection("c")) end), + key({"Control"}, "P", function (w) w:new_tab(luakit.get_selection("c")) end), + key({"Control"}, "y", function (w) luakit.set_selection((w:get_current() or {}).uri or "", "c") end), + key({"Control"}, "Y", function (w) luakit.set_selection(w.win.title, "c") end), - -- Traditional scrolling commands - key({}, "Down", function (w) w:scroll_vert("+"..scroll_step.."px") end), - key({}, "Up", function (w) w:scroll_vert("-"..scroll_step.."px") end), - key({}, "Left", function (w) w:scroll_horiz("-"..scroll_step.."px") end), - key({}, "Right", function (w) w:scroll_horiz("+"..scroll_step.."px") end), - key({}, "Page_Down", function (w) w:scroll_page(1.0) end), - key({}, "Page_Up", function (w) w:scroll_page(-1.0) end), - key({}, "Home", function (w) w:scroll_vert("0%") end), - key({}, "End", function (w) w:scroll_vert("100%") end), + key({"Control"}, "r", function (w) w:reload() end), - -- Zooming - buf("^z0$", function (w) w:zoom_reset() end), - buf("^zI$", function (w) w:zoom_in(zoom_step) end), - buf("^zO$", function (w) w:zoom_out(zoom_step) end), + key({"Mod1"}, "Home", function (w) w:navigate(homepage) end); + key({"Control"}, "+", function (w) w:zoom_in(zoom_step) end), key({"Control"}, "-", function (w) w:zoom_out(zoom_step) end), - -- Clipboard - key({}, "p", function (w) w:navigate(luakit.get_selection()) end), - key({}, "P", function (w) w:new_tab(luakit.get_selection()) end), - buf("^yy$", function (w) luakit.set_selection((w:get_current() or {}).uri or "") end), - buf("^yt$", function (w) luakit.set_selection(w.win.title) end), - - -- Commands - buf("^o$", function (w, c) w:enter_cmd(":open ") end), - buf("^t$", function (w, c) w:enter_cmd(":tabopen ") end), - buf("^w$", function (w, c) w:enter_cmd(":winopen ") end), - buf("^O$", function (w, c) w:enter_cmd(":open " .. ((w:get_current() or {}).uri or "")) end), - buf("^T$", function (w, c) w:enter_cmd(":tabopen " .. ((w:get_current() or {}).uri or "")) end), - buf("^W$", function (w, c) w:enter_cmd(":winopen " .. ((w:get_current() or {}).uri or "")) end), - buf("^,g$", function (w, c) w:enter_cmd(":websearch google ") end), + but({}, 8, function (w) w:back() end), + but({}, 9, function (w) w:forward() end), - -- Debian search shorcut access - buf("^\\dbug$", function (w, c) w:enter_cmd(":websearch debbugs ") end), - buf("^\\dpts$", function (w, c) w:enter_cmd(":websearch dpts ") end), - buf("^\\dpkg$", function (w, c) w:enter_cmd(":websearch dpkg ") end), - - -- Searching - key({}, "/", function (w) w:start_search("/") end), - key({}, "?", function (w) w:start_search("?") end), - key({}, "n", function (w) w:search(nil, true) end), - key({}, "N", function (w) w:search(nil, false) end), - - -- History - buf("^[0-9]*H$", function (w, b) w:back (tonumber(string.match(b, "^(%d*)H$") or 1)) end), - buf("^[0-9]*L$", function (w, b) w:forward(tonumber(string.match(b, "^(%d*)L$") or 1)) end), - key({}, "b", function (w) w:back() end), key({}, "XF86Back", function (w) w:back() end), key({}, "XF86Forward", function (w) w:forward() end), - - -- Tab - key({"Control"}, "Page_Up", function (w) w:prev_tab() end), - key({"Control"}, "Page_Down", function (w) w:next_tab() end), - buf("^[0-9]*gT$", function (w, b) w:prev_tab(tonumber(string.match(b, "^(%d*)gT$") or 1)) end), - buf("^[0-9]*gt$", function (w, b) w:next_tab(tonumber(string.match(b, "^(%d*)gt$") or 1)) end), - buf("^gH$", function (w) w:new_tab(homepage) end), - buf("^d$", function (w) w:close_tab() end), - - key({}, "r", function (w) w:reload() end), - buf("^gh$", function (w) w:navigate(homepage) end), - - -- Window - buf("^ZZ$", function (w) w:close_win() end), - buf("^D$", function (w) w:close_win() end), - + -- Link following - key({}, "f", function (w) w:set_mode("follow") end), + key({"Mod1"}, "f", function (w) w:set_mode("follow") end), -- Bookmarking - key({}, "B", function (w) w:enter_cmd(":bookmark " .. ((w:get_current() or {}).uri or "http://") .. " ") end), - buf("^gb$", function (w) w:navigate(bookmarks.dump_html()) end), - buf("^gB$", function (w) w:new_tab (bookmarks.dump_html()) end), + key({"Control"}, "d", function (w) end), + key({"Control"}, "b", function (w) w:navigate(bookmarks.dump_html()) end), + key({"Control"}, "B", function (w) w:new_tab(bookmarks.dump_html()) end), -- Mouse bindings but({}, 2, function (w) @@ -125,6 +82,10 @@ end end), }, + + normal = { + }, + command = { key({"Shift"}, "Insert", function (w) w:insert_cmd(luakit.get_selection()) end), key({}, "Up", function (w) w:cmd_hist_prev() end), @@ -137,6 +98,9 @@ key({}, "Up", function (w) w:srch_hist_prev() end), key({}, "Down", function (w) w:srch_hist_next() end), }, + ["url-entry"] = { + key({"Control"}, "l", function (w) w.ibar.input:set_position(-1); end), + }, insert = { }, } diff -r 98e4b0c9fcac -r 4d7540af8518 globals.lua --- a/globals.lua Wed Sep 01 03:53:30 2010 +0100 +++ b/globals.lua Wed Sep 01 03:59:23 2010 +0100 @@ -1,13 +1,12 @@ -- Global variables for luakit globals = { - homepage = "http://luakit.org/", - -- homepage = "http://github.com/mason-larobina/luakit", + homepage = "http://google.co.uk/", scroll_step = 20, zoom_step = 0.1, max_cmd_history = 100, max_srch_history = 100, -- http_proxy = "http://example.com:3128", - download_dir = luakit.get_special_dir("DOWNLOAD") or (os.getenv("HOME") .. "/downloads"), + download_dir = luakit.get_special_dir("DOWNLOAD") or (os.getenv("HOME") .. "/Downloads"), } -- Make useragent diff -r 98e4b0c9fcac -r 4d7540af8518 modes.lua --- a/modes.lua Wed Sep 01 03:53:30 2010 +0100 +++ b/modes.lua Wed Sep 01 03:59:23 2010 +0100 @@ -60,7 +60,7 @@ }) do window.methods[name] = func end -- Setup normal mode -new_mode("normal", { +new_mode("key", { enter = function (w) local i, p = w.ibar.input, w.ibar.prompt i:hide() @@ -69,16 +69,48 @@ }) -- Setup insert mode -new_mode("insert", { +new_mode("normal", { enter = function (w) local i, p = w.ibar.input, w.ibar.prompt - i:hide() + i:hide(); i.text = "" - p.text = "-- INSERT --" - p:show() + p:hide(); + p.text = "" end, }) +new_mode("url-entry", { + enter = function (w) + local i, p = w.ibar.input, w.ibar.prompt; + p.text = "Open:"; + p:show(); + i.text = (w:get_current() or {}).uri or ""; + i:show(); + i:focus(); + i:select_region(0); + end; + activate = function (w, url) + w:navigate(url); + w:set_mode(); + end; +}); + +new_mode("web-search", { + enter = function (w) + local i, p = w.ibar.input, w.ibar.prompt; + p.text = "Open:"; + p:show(); + i.text = (w:get_current() or {}).uri or ""; + i:show(); + i:focus(); + i:set_position(-1); + end; + activate = function (w, url) + w:navigate(url); + w:set_mode(); + end; +}); + -- Setup command mode new_mode("command", { enter = function (w) diff -r 98e4b0c9fcac -r 4d7540af8518 webview.lua --- a/webview.lua Wed Sep 01 03:53:30 2010 +0100 +++ b/webview.lua Wed Sep 01 03:59:23 2010 +0100 @@ -85,7 +85,7 @@ form_insert_mode = function (view, w) view:add_signal("form-active", function () (w.search_state or {}).marker = nil - w:set_mode("insert") + w:set_mode("normal") end) view:add_signal("root-active", function () (w.search_state or {}).marker = nil @@ -96,7 +96,7 @@ -- Stop key events hitting the webview if the user isn't in insert mode mode_key_filter = function (view, w) view:add_signal("key-press", function () - if not w:is_mode("insert") then return true end + if not w:is_mode("normal") then return true end end) end, diff -r 98e4b0c9fcac -r 4d7540af8518 window.lua --- a/window.lua Wed Sep 01 03:53:30 2010 +0100 +++ b/window.lua Wed Sep 01 03:59:23 2010 +0100 @@ -212,7 +212,7 @@ -- Wrapper around the bind plugin's hit method hit = function (w, mods, key) - local caught, newbuf = lousy.bind.hit(w.binds or {}, mods, key, w.buffer, w:is_mode("normal"), w) + local caught, newbuf = lousy.bind.hit(w.binds or {}, mods, key, w.buffer, false, w) if w.win then w.buffer = newbuf w:update_buf()