Luakit: config update to conform latest version.
Homeinit: added symlink to Luakit's bookmark.master
parent
899dbb21a5
commit
a3aa515ab0
|
@ -12,7 +12,6 @@ local strip, split = lousy.util.string.strip, lousy.util.string.split
|
|||
|
||||
-- Globals or defaults that are used in binds
|
||||
local scroll_step = globals.scroll_step or 20
|
||||
local more, less = "+"..scroll_step.."px", "-"..scroll_step.."px"
|
||||
local zoom_step = globals.zoom_step or 0.1
|
||||
|
||||
-- Add binds to a mode
|
||||
|
@ -50,289 +49,544 @@ menu_binds = {
|
|||
|
||||
-- Add binds to special mode "all" which adds its binds to all modes.
|
||||
add_binds("all", {
|
||||
key({}, "Escape", function (w) w:set_mode() end),
|
||||
key({"Control"}, "[", function (w) w:set_mode() end),
|
||||
key({}, "Escape", "Return to `normal` mode.",
|
||||
function (w) w:set_mode() end),
|
||||
|
||||
key({"Control"}, "[", "Return to `normal` mode.",
|
||||
function (w) w:set_mode() end),
|
||||
|
||||
-- Mouse bindings
|
||||
but({}, 8, function (w) w:back() end),
|
||||
but({}, 9, function (w) w:forward() end),
|
||||
but({}, 8, "Go back.",
|
||||
function (w) w:back() end),
|
||||
|
||||
but({}, 9, "Go forward.",
|
||||
function (w) w:forward() end),
|
||||
|
||||
-- Open link in new tab or navigate to selection
|
||||
but({}, 2, function (w, m)
|
||||
-- Ignore button 2 clicks in form fields
|
||||
if not m.context.editable then
|
||||
-- Open hovered uri in new tab
|
||||
but({}, 2, [[Open link under mouse cursor in new tab or navigate to the
|
||||
contents of `luakit.selection.primary`.]],
|
||||
function (w, m)
|
||||
-- Ignore button 2 clicks in form fields
|
||||
if not m.context.editable then
|
||||
-- Open hovered uri in new tab
|
||||
local uri = w.view.hovered_uri
|
||||
if uri then
|
||||
w:new_tab(uri, false)
|
||||
else -- Open selection in current tab
|
||||
uri = luakit.selection.primary
|
||||
if uri then w:navigate(w:search_open(uri)) end
|
||||
end
|
||||
end
|
||||
end),
|
||||
|
||||
-- Open link in new tab when Ctrl-clicked.
|
||||
but({"Control"}, 1, "Open link under mouse cursor in new tab.",
|
||||
function (w, m)
|
||||
local uri = w.view.hovered_uri
|
||||
if uri then
|
||||
w:new_tab(uri, false)
|
||||
else -- Open selection in current tab
|
||||
uri = luakit.selection.primary
|
||||
if uri then w:navigate(w:search_open(uri)) end
|
||||
end
|
||||
end
|
||||
end),
|
||||
|
||||
-- Open link in new tab when Ctrl-clicked.
|
||||
but({"Control"}, 1, function (w, m)
|
||||
local uri = w.view.hovered_uri
|
||||
if uri then
|
||||
w:new_tab(uri, false)
|
||||
end
|
||||
end),
|
||||
end),
|
||||
|
||||
-- Zoom binds
|
||||
but({"Control"}, 4, function (w, m) w:zoom_in() end),
|
||||
but({"Control"}, 5, function (w, m) w:zoom_out() end),
|
||||
but({"Control"}, 4, "Increase text zoom level.",
|
||||
function (w, m) w:zoom_in() end),
|
||||
|
||||
but({"Control"}, 5, "Reduce text zoom level.",
|
||||
function (w, m) w:zoom_out() end),
|
||||
|
||||
-- Horizontal mouse scroll binds
|
||||
but({"Shift"}, 4, function (w, m) w:scroll{ x = less } end),
|
||||
but({"Shift"}, 5, function (w, m) w:scroll{ x = more } end),
|
||||
but({"Shift"}, 4, "Scroll left.",
|
||||
function (w, m) w:scroll{ xrel = -scroll_step } end),
|
||||
|
||||
but({"Shift"}, 5, "Scroll right.",
|
||||
function (w, m) w:scroll{ xrel = scroll_step } end),
|
||||
})
|
||||
|
||||
add_binds("normal", {
|
||||
-- Autoparse the `[count]` before a binding and re-call the hit function
|
||||
-- with the count removed and added to the opts table.
|
||||
any(function (w, m)
|
||||
local count, buf
|
||||
if m.buffer then
|
||||
count = string.match(m.buffer, "^(%d+)")
|
||||
end
|
||||
if count then
|
||||
buf = string.sub(m.buffer, #count + 1, (m.updated_buf and -2) or -1)
|
||||
local opts = join(m, {count = tonumber(count)})
|
||||
opts.buffer = (#buf > 0 and buf) or nil
|
||||
if lousy.bind.hit(w, m.binds, m.mods, m.key, opts) then
|
||||
return true
|
||||
end
|
||||
end
|
||||
return false
|
||||
end),
|
||||
any([[Meta-binding to detect the `^[count]` syntax. The `[count]` is parsed
|
||||
and stripped from the internal buffer string and the value assigned to
|
||||
`state.count`. Then `lousy.bind.hit()` is re-called with the modified
|
||||
buffer string & original modifier state.
|
||||
|
||||
key({}, "i", function (w) w:set_mode("insert") end),
|
||||
key({}, ":", function (w) w:set_mode("command") end),
|
||||
#### Example binding
|
||||
|
||||
lousy.bind.key({}, "%", function (w, state)
|
||||
w:scroll{ ypct = state.count }
|
||||
end, { count = 0 })
|
||||
|
||||
This binding demonstrates several concepts. Firstly that you are able to
|
||||
specify per-binding default values of `count`. In this case if the user
|
||||
types `"%"` the document will be scrolled vertically to `0%` (the top).
|
||||
|
||||
If the user types `"100%"` then the document will be scrolled to `100%`
|
||||
(the bottom). All without the need to use `lousy.bind.buf` bindings
|
||||
everywhere and or using a `^(%d*)` pattern prefix on every binding which
|
||||
would like to make use of the `[count]` syntax.]],
|
||||
function (w, m)
|
||||
local count, buf
|
||||
if m.buffer then
|
||||
count = string.match(m.buffer, "^(%d+)")
|
||||
end
|
||||
if count then
|
||||
buf = string.sub(m.buffer, #count + 1, (m.updated_buf and -2) or -1)
|
||||
local opts = join(m, {count = tonumber(count)})
|
||||
opts.buffer = (#buf > 0 and buf) or nil
|
||||
if lousy.bind.hit(w, m.binds, m.mods, m.key, opts) then
|
||||
return true
|
||||
end
|
||||
end
|
||||
return false
|
||||
end),
|
||||
|
||||
key({}, "i", "Enter `insert` mode.",
|
||||
function (w) w:set_mode("insert") end),
|
||||
|
||||
key({}, ":", "Enter `command` mode.",
|
||||
function (w) w:set_mode("command") end),
|
||||
|
||||
-- Scrolling
|
||||
key({}, "j", function (w) w:scroll{ y = more } end),
|
||||
key({}, "k", function (w) w:scroll{ y = less } end),
|
||||
key({}, "h", function (w) w:scroll{ x = less } end),
|
||||
key({}, "l", function (w) w:scroll{ x = more } end),
|
||||
-- key({}, "^", function (w) w:scroll{ x = "0%" } end),
|
||||
-- key({}, "$", function (w) w:scroll{ x = "100%" } end),
|
||||
-- key({"Control"}, "e", function (w) w:scroll{ y = more } end),
|
||||
-- key({"Control"}, "y", function (w) w:scroll{ y = less } end),
|
||||
key({}, "J", function (w) w:scroll{ y = "+0.5p" } end),
|
||||
key({}, "K", function (w) w:scroll{ y = "-0.5p" } end),
|
||||
-- key({"Control"}, "f", function (w) w:scroll{ y = "+1.0p" } end),
|
||||
-- key({"Control"}, "b", function (w) w:scroll{ y = "-1.0p" } end),
|
||||
key({}, "space", function (w) w:scroll{ y = "+0.5p" } end),
|
||||
key({"Shift"}, "space", function (w) w:scroll{ y = "-0.5p" } end),
|
||||
key({}, "j", "Scroll document down.",
|
||||
function (w) w:scroll{ yrel = scroll_step } end),
|
||||
|
||||
key({}, "k", "Scroll document up.",
|
||||
function (w) w:scroll{ yrel = -scroll_step } end),
|
||||
|
||||
key({}, "h", "Scroll document left.",
|
||||
function (w) w:scroll{ xrel = -scroll_step } end),
|
||||
|
||||
key({}, "l", "Scroll document right.",
|
||||
function (w) w:scroll{ xrel = scroll_step } end),
|
||||
|
||||
key({}, "Down", "Scroll document down.",
|
||||
function (w) w:scroll{ yrel = scroll_step } end),
|
||||
|
||||
key({}, "Up", "Scroll document up.",
|
||||
function (w) w:scroll{ yrel = -scroll_step } end),
|
||||
|
||||
key({}, "Left", "Scroll document left.",
|
||||
function (w) w:scroll{ xrel = -scroll_step } end),
|
||||
|
||||
key({}, "Right", "Scroll document right.",
|
||||
function (w) w:scroll{ xrel = scroll_step } end),
|
||||
|
||||
key({}, "^", "Scroll to the absolute left of the document.",
|
||||
function (w) w:scroll{ x = 0 } end),
|
||||
|
||||
key({}, "$", "Scroll to the absolute right of the document.",
|
||||
function (w) w:scroll{ x = -1 } end),
|
||||
|
||||
key({}, "0", "Scroll to the absolute left of the document.",
|
||||
function (w, m)
|
||||
if not m.count then w:scroll{ y = 0 } else return false end
|
||||
end),
|
||||
|
||||
key({"Control"}, "e", "Scroll document down.",
|
||||
function (w) w:scroll{ yrel = scroll_step } end),
|
||||
|
||||
key({"Control"}, "y", "Scroll document up.",
|
||||
function (w) w:scroll{ yrel = -scroll_step } end),
|
||||
|
||||
key({"Control"}, "d", "Scroll half page down.",
|
||||
function (w) w:scroll{ ypagerel = 0.5 } end),
|
||||
|
||||
key({"Control"}, "u", "Scroll half page up.",
|
||||
function (w) w:scroll{ ypagerel = -0.5 } end),
|
||||
|
||||
key({"Control"}, "f", "Scroll page down.",
|
||||
function (w) w:scroll{ ypagerel = 1.0 } end),
|
||||
|
||||
key({"Control"}, "b", "Scroll page up.",
|
||||
function (w) w:scroll{ ypagerel = -1.0 } end),
|
||||
|
||||
key({}, "space", "Scroll page down.",
|
||||
function (w) w:scroll{ ypagerel = 1.0 } end),
|
||||
|
||||
key({"Shift"}, "space", "Scroll page up.",
|
||||
function (w) w:scroll{ ypagerel = -1.0 } end),
|
||||
|
||||
key({}, "BackSpace", "Scroll page up.",
|
||||
function (w) w:scroll{ ypagerel = -1.0 } end),
|
||||
|
||||
key({}, "Page_Down", "Scroll page down.",
|
||||
function (w) w:scroll{ ypagerel = 1.0 } end),
|
||||
|
||||
key({}, "Page_Up", "Scroll page up.",
|
||||
function (w) w:scroll{ ypagerel = -1.0 } end),
|
||||
|
||||
key({}, "Home", "Go to the end of the document.",
|
||||
function (w) w:scroll{ y = 0 } end),
|
||||
|
||||
key({}, "End", "Go to the top of the document.",
|
||||
function (w) w:scroll{ y = -1 } end),
|
||||
|
||||
-- Specific scroll
|
||||
buf("^gg$", function (w, b, m) w:scroll{ y = m.count.."%" } end, {count = 0}),
|
||||
buf("^G$", function (w, b, m) w:scroll{ y = m.count.."%" } end, {count = 100}),
|
||||
buf("^gg$", "Go to the top of the document.",
|
||||
function (w, b, m) w:scroll{ ypct = m.count } end, {count=0}),
|
||||
|
||||
-- Traditional scrolling commands
|
||||
key({}, "Down", function (w) w:scroll{ y = more } end),
|
||||
key({}, "Up", function (w) w:scroll{ y = less } end),
|
||||
key({}, "Left", function (w) w:scroll{ x = less } end),
|
||||
key({}, "Right", function (w) w:scroll{ x = more } end),
|
||||
key({}, "Page_Down", function (w) w:scroll{ y = "+1.0p" } end),
|
||||
key({}, "Page_Up", function (w) w:scroll{ y = "-1.0p" } end),
|
||||
key({}, "Home", function (w) w:scroll{ y = "0%" } end),
|
||||
key({}, "End", function (w) w:scroll{ y = "100%" } end),
|
||||
-- key({}, "$", function (w) w:scroll{ x = "100%" } end),
|
||||
-- key({}, "0", function (w, m)
|
||||
-- if not m.count then w:scroll{ y = "0%" } else return false end
|
||||
-- end),
|
||||
buf("^G$", "Go to the bottom of the document.",
|
||||
function (w, b, m) w:scroll{ ypct = m.count } end, {count=100}),
|
||||
|
||||
buf("^%%$", "Go to `[count]` percent of the document.",
|
||||
function (w, b, m) w:scroll{ ypct = m.count } end),
|
||||
|
||||
-- Zooming
|
||||
key({}, "+", function (w, m) w:zoom_in(zoom_step * m.count) end, {count=1}),
|
||||
key({}, "-", function (w, m) w:zoom_out(zoom_step * m.count) end, {count=1}),
|
||||
key({}, "=", function (w, m) w:zoom_set() end),
|
||||
buf("^z[iI]$", function (w, b, m) w:zoom_in(zoom_step * m.count, b == "zI") end, {count=1}),
|
||||
buf("^z[oO]$", function (w, b, m) w:zoom_out(zoom_step * m.count, b == "zO") end, {count=1}),
|
||||
key({}, "+", "Enlarge text zoom of the current page.",
|
||||
function (w, m) w:zoom_in(zoom_step * m.count) end, {count=1}),
|
||||
|
||||
key({}, "-", "Reduce text zom of the current page.",
|
||||
function (w, m) w:zoom_out(zoom_step * m.count) end, {count=1}),
|
||||
|
||||
key({}, "=", "Reset zoom level.",
|
||||
function (w, m) w:zoom_set() end),
|
||||
|
||||
buf("^z[iI]$", [[Enlarge text zoom of current page with `zi` or `zI` to
|
||||
reduce full zoom.]],
|
||||
function (w, b, m)
|
||||
w:zoom_in(zoom_step * m.count, b == "zI")
|
||||
end, {count=1}),
|
||||
|
||||
buf("^z[oO]$", [[Reduce text zoom of current page with `zo` or `zO` to
|
||||
reduce full zoom.]],
|
||||
function (w, b, m)
|
||||
w:zoom_out(zoom_step * m.count, b == "zO")
|
||||
end, {count=1}),
|
||||
|
||||
-- Zoom reset or specific zoom ([count]zZ for full content zoom)
|
||||
buf("^z[zZ]$", function (w, b, m) w:zoom_set(m.count/100, b == "zZ") end, {count=100}),
|
||||
buf("^z[zZ]$", [[Set current page zoom to `[count]` percent with
|
||||
`[count]zz`, use `[count]zZ` to set full zoom percent.]],
|
||||
function (w, b, m)
|
||||
w:zoom_set(m.count/100, b == "zZ")
|
||||
end, {count=100}),
|
||||
|
||||
-- Fullscreen
|
||||
key({}, "F11", function (w)
|
||||
w.win.fullscreen = not w.win.fullscreen
|
||||
end),
|
||||
key({}, "F11", "Toggle fullscreen mode.",
|
||||
function (w) w.win.fullscreen = not w.win.fullscreen end),
|
||||
|
||||
-- Clipboard
|
||||
key({}, "p", function (w)
|
||||
local uri = luakit.selection.primary
|
||||
if uri then w:navigate(w:search_open(uri)) else w:error("Empty selection.") end
|
||||
end),
|
||||
key({}, "P", function (w, m)
|
||||
local uri = luakit.selection.primary
|
||||
if not uri then w:error("Empty selection.") return end
|
||||
for i = 1, m.count do w:new_tab(w:search_open(uri)) end
|
||||
end, {count = 1}),
|
||||
key({}, "p", [[Open a URL based on the current primary selection contents
|
||||
in the current tab.]],
|
||||
function (w)
|
||||
local uri = luakit.selection.primary
|
||||
if not uri then w:notify("No primary selection...") return end
|
||||
w:navigate(w:search_open(uri))
|
||||
end),
|
||||
|
||||
key({}, "P", [[Open a URL based on the current primary selection contents
|
||||
in `[count=1]` new tab(s).]],
|
||||
function (w, m)
|
||||
local uri = luakit.selection.primary
|
||||
if not uri then w:notify("No primary selection...") return end
|
||||
for i = 1, m.count do w:new_tab(w:search_open(uri)) end
|
||||
end, {count = 1}),
|
||||
|
||||
-- Yanking
|
||||
buf("^yy$", function (w)
|
||||
local uri = string.gsub(w.view.uri or "", " ", "%%20")
|
||||
luakit.selection.primary = uri
|
||||
luakit.selection.clipboard = uri
|
||||
w:notify("Yanked uri: " .. uri)
|
||||
end),
|
||||
|
||||
buf("^yt$", function (w)
|
||||
local title = w.view.title
|
||||
luakit.selection.primary = title
|
||||
luakit.selection.clipboard = uri
|
||||
w:notify("Yanked title: " .. title)
|
||||
end),
|
||||
key({}, "y", "Yank current URI to primary selection.",
|
||||
function (w)
|
||||
local uri = string.gsub(w.view.uri or "", " ", "%%20")
|
||||
luakit.selection.primary = uri
|
||||
w:notify("Yanked uri: " .. uri)
|
||||
end),
|
||||
|
||||
-- Commands
|
||||
key({"Control"}, "a", function (w) w:navigate(w:inc_uri(1)) end),
|
||||
key({"Control"}, "x", function (w) w:navigate(w:inc_uri(-1)) end),
|
||||
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.view.uri or "")) end),
|
||||
buf("^T$", function (w, c) w:enter_cmd(":tabopen " .. (w.view.uri or "")) end),
|
||||
buf("^W$", function (w, c) w:enter_cmd(":winopen " .. (w.view.uri or "")) end),
|
||||
buf("^,g$", function (w, c) w:enter_cmd(":open google ") end),
|
||||
key({"Control"}, "a", "Increment last number in URL.",
|
||||
function (w) w:navigate(w:inc_uri(1)) end),
|
||||
|
||||
key({"Control"}, "x", "Decrement last number in URL.",
|
||||
function (w) w:navigate(w:inc_uri(-1)) end),
|
||||
|
||||
key({}, "o", "Open one or more URLs.",
|
||||
function (w) w:enter_cmd(":open ") end),
|
||||
|
||||
key({}, "t", "Open one or more URLs in a new tab.",
|
||||
function (w) w:enter_cmd(":tabopen ") end),
|
||||
|
||||
key({}, "w", "Open one or more URLs in a new window.",
|
||||
function (w) w:enter_cmd(":winopen ") end),
|
||||
|
||||
key({}, "O", "Open one or more URLs based on current location.",
|
||||
function (w) w:enter_cmd(":open " .. (w.view.uri or "")) end),
|
||||
|
||||
key({}, "T",
|
||||
"Open one or more URLs based on current location in a new tab.",
|
||||
function (w) w:enter_cmd(":tabopen " .. (w.view.uri or "")) end),
|
||||
|
||||
key({}, "W",
|
||||
"Open one or more URLs based on current locaton in a new window.",
|
||||
function (w) w:enter_cmd(":winopen " .. (w.view.uri or "")) end),
|
||||
|
||||
-- History
|
||||
key({}, "BackSpace", function (w, m) w:back(m.count) end),
|
||||
key({"Mod1"}, "Left", function (w, m) w:back(m.count) end),
|
||||
key({"Mod1"}, "Right", function (w, m) w:forward(m.count) end),
|
||||
key({}, "H", function (w, m) w:back(m.count) end),
|
||||
key({}, "L", function (w, m) w:forward(m.count) end),
|
||||
key({}, "XF86Back", function (w, m) w:back(m.count) end),
|
||||
key({}, "XF86Forward", function (w, m) w:forward(m.count) end),
|
||||
-- key({"Control"}, "o", function (w, m) w:back(m.count) end),
|
||||
-- key({"Control"}, "i", function (w, m) w:forward(m.count) end),
|
||||
-- key({}, "b", function (w, m) w:back(m.count) end),
|
||||
key({}, "H", "Go back in the browser history `[count=1]` items.",
|
||||
function (w, m) w:back(m.count) end),
|
||||
|
||||
key({}, "L", "Go forward in the browser history `[count=1]` times.",
|
||||
function (w, m) w:forward(m.count) end),
|
||||
|
||||
key({}, "XF86Back", "Go back in the browser history.",
|
||||
function (w, m) w:back(m.count) end),
|
||||
|
||||
key({}, "XF86Forward", "Go forward in the browser history.",
|
||||
function (w, m) w:forward(m.count) end),
|
||||
|
||||
key({"Control"}, "o", "Go back in the browser history.",
|
||||
function (w, m) w:back(m.count) end),
|
||||
|
||||
key({"Control"}, "i", "Go forward in the browser history.",
|
||||
function (w, m) w:forward(m.count) end),
|
||||
|
||||
-- Tab
|
||||
key({"Control"}, "k", function (w) w:prev_tab() end),
|
||||
key({"Control"}, "j", function (w) w:next_tab() end),
|
||||
key({"Control"}, "Page_Up", function (w) w:prev_tab() end),
|
||||
key({"Control"}, "Page_Down", function (w) w:next_tab() end),
|
||||
key({"Control"}, "Tab", function (w) w:next_tab() end),
|
||||
key({"Shift","Control"}, "Tab", function (w) w:prev_tab() end),
|
||||
buf("^gT$", function (w, b, m) w:prev_tab(m.count) end, {count=1}),
|
||||
buf("^gt$", function (w, b, m) if not w:goto_tab(m.count) then w:next_tab() end end, {count=0}),
|
||||
key({"Control"}, "Page_Up", "Go to previous tab.",
|
||||
function (w) w:prev_tab() end),
|
||||
|
||||
key({"Control"}, "t", function (w) w:new_tab(globals.homepage) end),
|
||||
key({"Control"}, "w", function (w) w:close_tab() end),
|
||||
key({}, "d", function (w, m) for i=1,m.count do w:close_tab() end end, {count=1}),
|
||||
key({"Control"}, "Page_Down", "Go to next tab.",
|
||||
function (w) w:next_tab() end),
|
||||
|
||||
key({}, "<", function (w, m) w.tabs:reorder(w.view, w.tabs:current() - m.count) end, {count=1}),
|
||||
key({}, ">", function (w, m) w.tabs:reorder(w.view, (w.tabs:current() + m.count) % w.tabs:count()) end, {count=1}),
|
||||
key({"Mod1"}, "Page_Up", function (w, m) w.tabs:reorder(w.view, w.tabs:current() - m.count) end, {count=1}),
|
||||
key({"Mod1"}, "Page_Down", function (w, m) w.tabs:reorder(w.view, (w.tabs:current() + m.count) % w.tabs:count()) end, {count=1}),
|
||||
key({"Control"}, "Tab", "Go to next tab.",
|
||||
function (w) w:next_tab() end),
|
||||
|
||||
buf("^gH$", function (w, b, m) for i=1,m.count do w:new_tab(globals.homepage) end end, {count=1}),
|
||||
buf("^gh$", function (w) w:navigate(globals.homepage) end),
|
||||
key({"Shift","Control"}, "Tab", "Go to previous tab.",
|
||||
function (w) w:prev_tab() end),
|
||||
|
||||
-- Open tab from current tab history
|
||||
buf("^gy$", function (w) w:new_tab(w.view.history or "") end),
|
||||
buf("^gT$", "Go to previous tab.",
|
||||
function (w) w:prev_tab() end),
|
||||
|
||||
key({}, "r", function (w) w:reload() end),
|
||||
key({}, "R", function (w) w:reload(true) end),
|
||||
key({"Control"}, "c", function (w) w:stop() end),
|
||||
buf("^gt$", "Go to next tab (or `[count]` nth tab).",
|
||||
function (w, b, m)
|
||||
if not w:goto_tab(m.count) then w:next_tab() end
|
||||
end, {count=0}),
|
||||
|
||||
-- Config reloading
|
||||
key({"Control", "Shift"}, "R", function (w) w:restart() end),
|
||||
buf("^g0$", "Go to first tab.",
|
||||
function (w) w:goto_tab(1) end),
|
||||
|
||||
buf("^g$$", "Go to last tab.",
|
||||
function (w) w:goto_tab(-1) end),
|
||||
|
||||
key({"Control"}, "t", "Open a new tab.",
|
||||
function (w) w:new_tab(globals.homepage) end),
|
||||
|
||||
key({"Control"}, "w", "Close current tab.",
|
||||
function (w) w:close_tab() end),
|
||||
|
||||
key({}, "d", "Close current tab (or `[count]` tabs).",
|
||||
function (w, m) for i=1,m.count do w:close_tab() end end, {count=1}),
|
||||
|
||||
key({}, "<", "Reorder tab left `[count=1]` positions.",
|
||||
function (w, m)
|
||||
w.tabs:reorder(w.view, w.tabs:current() - m.count)
|
||||
end, {count=1}),
|
||||
|
||||
key({}, ">", "Reorder tab right `[count=1]` positions.",
|
||||
function (w, m)
|
||||
w.tabs:reorder(w.view,
|
||||
(w.tabs:current() + m.count) % w.tabs:count())
|
||||
end, {count=1}),
|
||||
|
||||
buf("^gH$", "Open homepage in new tab.",
|
||||
function (w) w:new_tab(globals.homepage) end),
|
||||
|
||||
buf("^gh$", "Open homepage.",
|
||||
function (w) w:navigate(globals.homepage) end),
|
||||
|
||||
buf("^gy$", "Duplicate current tab.",
|
||||
function (w) w:new_tab(w.view.history or "") end),
|
||||
|
||||
key({}, "r", "Reload current tab.",
|
||||
function (w) w:reload() end),
|
||||
|
||||
key({}, "R", "Reload current tab (skipping cache).",
|
||||
function (w) w:reload(true) end),
|
||||
|
||||
key({"Control"}, "c", "Stop loading the current tab.",
|
||||
function (w) w.view:stop() end),
|
||||
|
||||
key({"Control", "Shift"}, "R", "Restart luakit (reloading configs).",
|
||||
function (w) w:restart() end),
|
||||
|
||||
-- Window
|
||||
buf("^ZZ$", function (w) w:save_session() w:close_win() end),
|
||||
buf("^ZQ$", function (w) w:close_win() end),
|
||||
-- buf("^D$", function (w) w:close_win() end),
|
||||
buf("^ZZ$", "Quit and save the session.",
|
||||
function (w) w:save_session() w:close_win() end),
|
||||
|
||||
buf("^ZQ$", "Quit and don't save the session.",
|
||||
function (w) w:close_win() end),
|
||||
|
||||
-- buf("^D$", "Quit and don't save the session.",
|
||||
-- function (w) w:close_win() end),
|
||||
|
||||
-- CUSTOM
|
||||
-- Download page.
|
||||
buf("^D$", function (w, c) w:enter_cmd(":download " .. (w.view.uri or "")) end),
|
||||
|
||||
|
||||
-- Enter passthrough mode
|
||||
key({"Control"}, "z", function (w) w:set_mode("passthrough") end),
|
||||
key({"Control"}, "z",
|
||||
"Enter `passthrough` mode, ignores all luakit keybindings.",
|
||||
function (w) w:set_mode("passthrough") end),
|
||||
})
|
||||
|
||||
add_binds("insert", {
|
||||
key({"Control"}, "z", function (w) w:set_mode("passthrough") end),
|
||||
key({"Control"}, "z",
|
||||
"Enter `passthrough` mode, ignores all luakit keybindings.",
|
||||
function (w) w:set_mode("passthrough") end),
|
||||
})
|
||||
|
||||
add_binds({"command", "search"}, {
|
||||
key({"Shift"}, "Insert", function (w) w:insert_cmd(luakit.selection.primary) end),
|
||||
key({"Control"}, "w", function (w) w:del_word() end),
|
||||
key({"Control"}, "u", function (w) w:del_line() end),
|
||||
key({"Control"}, "h", function (w) w:del_backward_char() end),
|
||||
key({"Control"}, "d", function (w) w:del_forward_char() end),
|
||||
key({"Control"}, "a", function (w) w:beg_line() end),
|
||||
key({"Control"}, "e", function (w) w:end_line() end),
|
||||
key({"Control"}, "f", function (w) w:forward_char() end),
|
||||
key({"Control"}, "b", function (w) w:backward_char() end),
|
||||
key({"Mod1"}, "f", function (w) w:forward_word() end),
|
||||
key({"Mod1"}, "b", function (w) w:backward_word() end),
|
||||
})
|
||||
readline_bindings = {
|
||||
key({"Shift"}, "Insert",
|
||||
"Insert contents of primary selection at cursor position.",
|
||||
function (w) w:insert_cmd(luakit.selection.primary) end),
|
||||
|
||||
key({"Control"}, "w", "Delete previous word.",
|
||||
function (w) w:del_word() end),
|
||||
|
||||
key({"Control"}, "u", "Delete until beginning of current line.",
|
||||
function (w) w:del_line() end),
|
||||
|
||||
key({"Control"}, "h", "Delete character to the left.",
|
||||
function (w) w:del_backward_char() end),
|
||||
|
||||
key({"Control"}, "d", "Delete character to the right.",
|
||||
function (w) w:del_forward_char() end),
|
||||
|
||||
key({"Control"}, "a", "Move cursor to beginning of current line.",
|
||||
function (w) w:beg_line() end),
|
||||
|
||||
key({"Control"}, "e", "Move cursor to end of current line.",
|
||||
function (w) w:end_line() end),
|
||||
|
||||
key({"Control"}, "f", "Move cursor forward one character.",
|
||||
function (w) w:forward_char() end),
|
||||
|
||||
key({"Control"}, "b", "Move cursor backward one character.",
|
||||
function (w) w:backward_char() end),
|
||||
|
||||
key({"Mod1"}, "f", "Move cursor forward one word.",
|
||||
function (w) w:forward_word() end),
|
||||
|
||||
key({"Mod1"}, "b", "Move cursor backward one word.",
|
||||
function (w) w:backward_word() end),
|
||||
}
|
||||
|
||||
add_binds({"command", "search"}, readline_bindings)
|
||||
|
||||
-- Switching tabs with Mod1+{1,2,3,...}
|
||||
mod1binds = {}
|
||||
for i=1,10 do
|
||||
table.insert(mod1binds,
|
||||
key({"Mod1"}, tostring(i % 10), function (w) w.tabs:switch(i) end))
|
||||
key({"Mod1"}, tostring(i % 10), "Jump to tab at index "..i..".",
|
||||
function (w) w.tabs:switch(i) end))
|
||||
end
|
||||
add_binds("normal", mod1binds)
|
||||
|
||||
-- Command bindings which are matched in the "command" mode from text
|
||||
-- entered into the input bar.
|
||||
add_cmds({
|
||||
-- Detect bangs (I.e. ":command! <args>")
|
||||
buf("^%S+!", function (w, cmd, opts)
|
||||
local cmd, args = string.match(cmd, "^(%S+)!+(.*)")
|
||||
if cmd then
|
||||
opts = join(opts, { bang = true })
|
||||
return lousy.bind.match_cmd(w, opts.binds, cmd .. args, opts)
|
||||
end
|
||||
end),
|
||||
buf("^%S+!",
|
||||
[[Detect bang syntax in `:command!` and recursively calls
|
||||
`lousy.bind.match_cmd(..)` removing the bang from the command string
|
||||
and setting `bang = true` in the bind opts table.]],
|
||||
function (w, cmd, opts)
|
||||
local cmd, args = string.match(cmd, "^(%S+)!+(.*)")
|
||||
if cmd then
|
||||
opts = join(opts, { bang = true })
|
||||
return lousy.bind.match_cmd(w, opts.binds, cmd .. args, opts)
|
||||
end
|
||||
end),
|
||||
|
||||
-- cmd({command, alias1, ...}, function (w, arg, opts) .. end, opts),
|
||||
-- cmd("co[mmand]", function (w, arg, opts) .. end, opts),
|
||||
cmd("c[lose]", function (w) w:close_tab() end),
|
||||
cmd("print", function (w) w:eval_js("print()", "rc.lua") end),
|
||||
cmd("reload", function (w) w:reload() end),
|
||||
cmd("restart", function (w) w:restart() end),
|
||||
cmd("write", function (w) w:save_session() end),
|
||||
cmd("noh[lsearch]", function (w) w:clear_search() end),
|
||||
cmd("c[lose]", "Close current tab.",
|
||||
function (w) w:close_tab() end),
|
||||
|
||||
cmd("back", function (w, a) w:back(tonumber(a) or 1) end),
|
||||
cmd("f[orward]", function (w, a) w:forward(tonumber(a) or 1) end),
|
||||
cmd("inc[rease]", function (w, a) w:navigate(w:inc_uri(tonumber(a) or 1)) end),
|
||||
cmd("o[pen]", function (w, a) w:navigate(w:search_open(a)) end),
|
||||
cmd("t[abopen]", function (w, a) w:new_tab(w:search_open(a)) end),
|
||||
cmd("w[inopen]", function (w, a) window.new{w:search_open(a)} end),
|
||||
cmd({"javascript", "js"}, function (w, a) w:eval_js(a, "javascript") end),
|
||||
cmd("print", "Print current page.",
|
||||
function (w) w.view:eval_js("print()") end),
|
||||
|
||||
cmd("q[uit]", function (w, a, o) w:close_win(o.bang) end),
|
||||
cmd({"viewsource", "vs" }, function (w, a, o) w:toggle_source(not o.bang and true or nil) end),
|
||||
cmd({"writequit", "wq"}, function (w, a, o) w:save_session() w:close_win(o.bang) end),
|
||||
cmd("stop", "Stop loading.",
|
||||
function (w) w.view:stop() end),
|
||||
|
||||
cmd("lua", function (w, a)
|
||||
cmd("reload", "Reload page",
|
||||
function (w) w:reload() end),
|
||||
|
||||
cmd("restart", "Restart browser (reload config files).",
|
||||
function (w) w:restart() end),
|
||||
|
||||
cmd("write", "Save current session.",
|
||||
function (w) w:save_session() end),
|
||||
|
||||
cmd("noh[lsearch]", "Clear search highlighting.",
|
||||
function (w) w:clear_search() end),
|
||||
|
||||
cmd("back", "Go back in the browser history `[count=1]` items.",
|
||||
function (w, a) w:back(tonumber(a) or 1) end),
|
||||
|
||||
cmd("f[orward]", "Go forward in the browser history `[count=1]` items.",
|
||||
function (w, a) w:forward(tonumber(a) or 1) end),
|
||||
|
||||
cmd("inc[rease]", "Increment last number in URL.",
|
||||
function (w, a) w:navigate(w:inc_uri(tonumber(a) or 1)) end),
|
||||
|
||||
cmd("o[pen]", "Open one or more URLs.",
|
||||
function (w, a) w:navigate(w:search_open(a)) end),
|
||||
|
||||
cmd("t[abopen]", "Open one or more URLs in a new tab.",
|
||||
function (w, a) w:new_tab(w:search_open(a)) end),
|
||||
|
||||
cmd("w[inopen]", "Open one or more URLs in a new window.",
|
||||
function (w, a) window.new{w:search_open(a)} end),
|
||||
|
||||
cmd({"javascript", "js"}, "Evaluate JavaScript snippet.",
|
||||
function (w, a) w.view:eval_js(a) end),
|
||||
|
||||
-- Tab manipulation commands
|
||||
cmd("tab", "Execute command and open result in new tab.",
|
||||
function (w, a) w:new_tab() w:run_cmd(":" .. a) end),
|
||||
|
||||
cmd("tabd[o]", "Execute command in each tab.",
|
||||
function (w, a) w:each_tab(function (v) w:run_cmd(":" .. a) end) end),
|
||||
|
||||
cmd("tabdu[plicate]", "Duplicate current tab.",
|
||||
function (w) w:new_tab(w.view.history) end),
|
||||
|
||||
cmd("tabfir[st]", "Switch to first tab.",
|
||||
function (w) w:goto_tab(1) end),
|
||||
|
||||
cmd("tabl[ast]", "Switch to last tab.",
|
||||
function (w) w:goto_tab(-1) end),
|
||||
|
||||
cmd("tabn[ext]", "Switch to the next tab.",
|
||||
function (w) w:next_tab() end),
|
||||
|
||||
cmd("tabp[revious]", "Switch to the previous tab.",
|
||||
function (w) w:prev_tab() end),
|
||||
|
||||
cmd("q[uit]", "Close the current window.",
|
||||
function (w, a, o) w:close_win(o.bang) end),
|
||||
|
||||
cmd({"viewsource", "vs"}, "View the source code of the current document.",
|
||||
function (w, a, o) w:toggle_source(not o.bang and true or nil) end),
|
||||
|
||||
cmd({"wqall", "wq"}, "Save the session and quit.",
|
||||
function (w, a, o) w:save_session() w:close_win(o.bang) end),
|
||||
|
||||
cmd("lua", "Evaluate Lua snippet.", function (w, a)
|
||||
if a then
|
||||
local ret = assert(loadstring("return function(w) return "..a.." end"))()(w)
|
||||
local ret = assert(
|
||||
loadstring("return function(w) return "..a.." end"))()(w)
|
||||
if ret then print(ret) end
|
||||
else
|
||||
w:set_mode("lua")
|
||||
end
|
||||
end),
|
||||
|
||||
cmd("dump", function (w, a)
|
||||
local fname = string.gsub(w.win.title, '[^%w%.%-]', '_')..'.html' -- sanitize filename
|
||||
local file = a or luakit.save_file("Save file", w.win, xdg.download_dir or '.', fname)
|
||||
if file then
|
||||
local fd = assert(io.open(file, "w"), "failed to open: " .. file)
|
||||
local html = assert(w:eval_js("document.documentElement.outerHTML", "dump"), "Unable to get HTML")
|
||||
assert(fd:write(html), "unable to save html")
|
||||
io.close(fd)
|
||||
w:notify("Dumped HTML to: " .. file)
|
||||
end
|
||||
end),
|
||||
cmd("dump", "Dump current tabs html to file.",
|
||||
function (w, a)
|
||||
local fname = string.gsub(w.win.title, '[^%w%.%-]', '_')..'.html' -- sanitize filename
|
||||
local file = a or luakit.save_file("Save file", w.win, xdg.download_dir or '.', fname)
|
||||
if file then
|
||||
local fd = assert(io.open(file, "w"), "failed to open: " .. file)
|
||||
local html = assert(w.view:eval_js("document.documentElement.outerHTML"), "Unable to get HTML")
|
||||
assert(fd:write(html), "unable to save html")
|
||||
io.close(fd)
|
||||
w:notify("Dumped HTML to: " .. file)
|
||||
end
|
||||
end),
|
||||
})
|
||||
|
||||
-- vim: et:sw=4:ts=8:sts=4:tw=80
|
||||
|
|
|
@ -49,7 +49,6 @@ soup.accept_policy = cookie_policy.always
|
|||
-- character (%) may need to be escaped by placing another % before or after
|
||||
-- it to avoid collisions with lua's string.format characters.
|
||||
-- See: http://www.lua.org/manual/5.1/manual.html#pdf-string.format
|
||||
|
||||
search_engines = {
|
||||
-- duckduckgo = "http://duckduckgo.com/?q=%s",
|
||||
-- luakit = "http://luakit.org/search/index/luakit?q=%s",
|
||||
|
@ -76,22 +75,22 @@ search_engines.default = search_engines.google
|
|||
--search_engines.default = "%s"
|
||||
|
||||
-- Per-domain webview properties
|
||||
-- See http://webkitgtk.org/reference/WebKitWebSettings.html
|
||||
-- See http://webkitgtk.org/reference/webkitgtk/stable/WebKitWebSettings.html
|
||||
domain_props = { --[[
|
||||
["all"] = {
|
||||
enable_scripts = false,
|
||||
enable_plugins = false,
|
||||
enable_private_browsing = false,
|
||||
user_stylesheet_uri = "",
|
||||
},
|
||||
},
|
||||
["youtube.com"] = {
|
||||
enable_scripts = true,
|
||||
enable_plugins = true,
|
||||
},
|
||||
["bbs.archlinux.org"] = {
|
||||
user_stylesheet_uri = "file://" .. luakit.data_dir .. "/styles/ArchLinux.css",
|
||||
},
|
||||
--]]
|
||||
["bbs.archlinux.org"] = {
|
||||
user_stylesheet_uri = "file://" .. luakit.data_dir .. "/styles/dark.css",
|
||||
enable_private_browsing = true,
|
||||
}, ]]
|
||||
}
|
||||
|
||||
-- vim: et:sw=4:ts=8:sts=4:tw=80
|
||||
|
|
|
@ -44,16 +44,6 @@ require "window"
|
|||
-- ("$XDG_CONFIG_HOME/luakit/webview.lua" or "/etc/xdg/luakit/webview.lua")
|
||||
require "webview"
|
||||
|
||||
-- set dark about:blank -- Buggy with some site.
|
||||
-- webview.init_funcs.set_dark = function (view, w)
|
||||
-- view:add_signal("navigation-request", function (_, uri)
|
||||
-- if uri == "about:blank" then
|
||||
-- view:load_string("<html><body bgcolor='#000000'></body></html>", "about:blank") -- change this
|
||||
-- return true
|
||||
-- end
|
||||
-- end)
|
||||
-- end
|
||||
|
||||
-- Load users mode configuration
|
||||
-- ("$XDG_CONFIG_HOME/luakit/modes.lua" or "/etc/xdg/luakit/modes.lua")
|
||||
require "modes"
|
||||
|
@ -104,35 +94,27 @@ require "userscripts"
|
|||
|
||||
-- Add bookmarks support
|
||||
require "bookmarks"
|
||||
require "bookmarks_chrome"
|
||||
|
||||
-- Add download support
|
||||
require "downloads"
|
||||
require "downloads_chrome"
|
||||
|
||||
-- CUSTOM
|
||||
-- Download folder.
|
||||
downloads.default_dir = os.getenv("HOME") .. "/temp"
|
||||
-- if downloads.default_dir == nil then
|
||||
-- downloads.default_dir = os.getenv("HOME")
|
||||
-- end
|
||||
downloads.add_signal("download-location", function (uri, file)
|
||||
if not file or file == "" then
|
||||
file = (string.match(uri, "/([^/]+)$")
|
||||
or string.match(uri, "^%w+://(.+)")
|
||||
or string.gsub(uri, "/", "_")
|
||||
or "untitled")
|
||||
end
|
||||
return downloads.default_dir .. "/" .. file
|
||||
end)
|
||||
-- Example using xdg-open for opening downloads / showing download folders
|
||||
--downloads.add_signal("open-file", function (file, mime)
|
||||
-- luakit.spawn(string.format("xdg-open %q", file))
|
||||
-- return true
|
||||
--end)
|
||||
|
||||
-- Add vimperator-like link hinting & following
|
||||
-- (depends on downloads)
|
||||
require "follow"
|
||||
|
||||
-- To use a custom character set for the follow hint labels un-comment and
|
||||
-- modify the following:
|
||||
--local s = follow.styles
|
||||
--follow.style = s.sort(s.reverse(s.charset("asdfqwerzxcv"))) -- I'm a lefty
|
||||
-- Use a custom charater set for hint labels
|
||||
--local s = follow.label_styles
|
||||
--follow.label_maker = s.sort(s.reverse(s.charset("asdfqwerzxcv")))
|
||||
|
||||
-- Match only hint labels
|
||||
--follow.pattern_maker = follow.pattern_styles.match_label
|
||||
|
||||
-- Add command history
|
||||
require "cmdhist"
|
||||
|
@ -147,6 +129,8 @@ require "taborder"
|
|||
require "history"
|
||||
require "history_chrome"
|
||||
|
||||
require "introspector"
|
||||
|
||||
-- Add command completion
|
||||
require "completion"
|
||||
|
||||
|
@ -212,8 +196,24 @@ webview.init_funcs.window_decision = function (view, w)
|
|||
end)
|
||||
end
|
||||
|
||||
-- Download folder.
|
||||
downloads.default_dir = os.getenv("HOME") .. "/temp"
|
||||
-- if downloads.default_dir == nil then
|
||||
-- downloads.default_dir = os.getenv("HOME")
|
||||
-- end
|
||||
downloads.add_signal("download-location", function (uri, file)
|
||||
if not file or file == "" then
|
||||
file = (string.match(uri, "/([^/]+)$")
|
||||
or string.match(uri, "^%w+://(.+)")
|
||||
or string.gsub(uri, "/", "_")
|
||||
or "untitled")
|
||||
end
|
||||
return downloads.default_dir .. "/" .. file
|
||||
end)
|
||||
|
||||
-- Adblock
|
||||
require("adblock")
|
||||
require("adblock_chrome")
|
||||
|
||||
|
||||
-- vim: et:sw=4:ts=8:sts=4:tw=80
|
||||
|
|
|
@ -64,4 +64,8 @@ wget https://easylist-downloads.adblockplus.org/easylist.txt \
|
|||
# http://stanev.org/abp/adblock_bg.txt # Bulgarian List
|
||||
# https://indonesianadblockrules.googlecode.com/hg/subscriptions/abpindo.txt # AB Pindo (Indonesian)
|
||||
|
||||
## Bookmarks
|
||||
ln -s "${SOURCEDIR}/BOOKMARKS/bookmarks.db" "$XDG_DATA_HOME/luakit/bookmarks.db"
|
||||
|
||||
|
||||
echo
|
||||
|
|
Loading…
Reference in New Issue