1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85
|
--------------------------------------------------------
-- View and open history items in an interactive menu --
-- © 2010 Fabian Streitel <karottenreibe@gmail.com> --
-- © 2010 Mason Larobina <mason.larobina@gmail.com> --
--------------------------------------------------------
local util = require("lousy.util")
local join = util.table.join
-- View history items in an interactive menu.
new_mode("tabhistory", {
leave = function (w)
w.menu:hide()
end,
enter = function (w)
local h = w.view.history
local rows = {{"Title", "URI", title = true},}
for i, hi in ipairs(h.items) do
local title, uri = util.escape(hi.title), util.escape(hi.uri)
local marker = (i == h.index and "* " or " ")
table.insert(rows, 2, { (marker..title), uri, index=i})
end
w.menu:build(rows)
w:notify("Use j/k to move, w winopen, t tabopen.", false)
end,
})
-- Add history menu binds.
local key = lousy.bind.key
add_binds("tabhistory", join({
-- Open history item in new tab.
key({}, "t", function (w)
local row = w.menu:get()
if row and row.index then
local v = w.view
local uri = v.history.items[row.index].uri
w:new_tab(uri, false)
end
end),
-- Open history item in new window.
key({}, "w", function (w)
local row = w.menu:get()
w:set_mode()
if row and row.index then
local v = w.view
local uri = v.history.items[row.index].uri
window.new({uri})
end
end),
-- Go to history item.
key({}, "Return", function (w)
local row = w.menu:get()
w:set_mode()
if row and row.index then
local v = w.view
local offset = row.index - v.history.index
if offset < 0 then
v:go_back(-offset)
elseif offset > 0 then
v:go_forward(offset)
end
end
end),
}, menu_binds))
-- Additional window methods.
window.methods.tab_history = function (w)
if #(w.view.history.items) < 2 then
w:notify("No history items to display")
else
w:set_mode("tabhistory")
end
end
-- Add `:history` command to view all history items for the current tab in an interactive menu.
local cmd = lousy.bind.cmd
add_cmds({
cmd("tabhistory", "list history for tab", window.methods.tab_history),
})
-- vim: et:sw=4:ts=8:sts=4:tw=80
|