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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
|
print('hello starting up...')
local dmenu = require 'null-browser.extras.dmenu'
local history = require 'null-browser.extras.history'
--- @type table
web = web
--- @type table
uv = uv
local function get_current_view_index()
local currentView = web.view.current();
for index, view in ipairs(web.view.list()) do
if view.id == currentView then
return index
end
end
end
web.set('new_view_url', 'https://lite.duckduckgo.com')
web.set('close_window_when_no_views', true)
web.set('user_agent', 'MacOS | Safari - $500 edition')
web.set('downloads_dir', os.getenv('HOME') .. '/Downloads/firefox')
-- Switch modes
web.keymap.set_mode('n') -- Start in normal mode
web.keymap.set('n', 'i', function() web.keymap.set_mode('i') end)
web.keymap.set('i', '<esc>', function() web.keymap.set_mode('n') end)
web.event.add_listener('UrlChanged', {
callback = function(opts)
print('url change', web.inspect(opts));
history.add(opts.url)
end
})
local function trim(s)
local res, _ = string.gsub(s, '^%s*(.-)%s*$', '%1')
return res
end
local function to_url(url)
url = trim(url)
if string.match(url, "^https?://") then
return url
end
return "https://" .. url
end
-- Search
web.keymap.set('n', '<esc>', function() web.search.reset() end)
web.keymap.set('n', 'n', function() web.search.next() end)
web.keymap.set('n', '<s-n>', function() web.search.previous() end)
web.keymap.set('n', '<c-f>', function()
dmenu.input({ prompt = 'Search:', input = web.search.get_text() }, function(err, input)
if err then return end
web.search.set_text(input)
end)
end)
-- Open in new view
web.keymap.set('n', 'o', function()
print(web.get('new_view_url'), web.get('user_agent'))
dmenu.select(history.list(), { prompt = 'Open view:' }, function(err, result)
if err or not result then return end
web.view.create(to_url(result))
end)
end)
-- Open in current view
web.keymap.set('n', '<s-o>', function()
dmenu.select(history.list(), { prompt = 'Open:' }, function(err, result)
if err or not result then return end
web.view.set_url(to_url(result))
end)
end)
-- Delete from history
web.keymap.set('n', '<c-h>d', function()
dmenu.select(history.list(), { prompt = 'Delete history:' }, function(err, result)
if err or not result then return end
history.delete(trim(result))
end)
end)
-- Update current url
web.keymap.set('n', '<c-l>', function()
local views = web.view.list()
local view = views[get_current_view_index()];
if view == nil then return end
dmenu.select(history.list(), { prompt = 'Set url:', input = view.url }, function(err, result)
if err or not result then return end
web.view.set_url(trim(result))
end)
end)
-- Run lua code
web.keymap.set('n', 'q', function()
dmenu.input({ prompt = 'Lua:' }, function(err, result)
if err or not result then return end
local run, run_err = load(result)
if run_err then print(run_err) end
if run then run() end
end)
end)
-- History back/forward
web.keymap.set('n', '<s-h>', function() web.history.back(); end)
web.keymap.set('n', '<s-l>', function() web.history.forward(); end)
-- Close view
web.keymap.set('n', '<c-w>', function() web.view.close(); end)
-- view select
web.keymap.set('n', 'b', function()
local views_list = {}
local views = web.view.list()
for index, view in ipairs(web.view.list()) do
table.insert(views_list, index .. ': ' .. view.title .. ' (' .. view.url .. ')')
end
dmenu.select(views_list, { prompt = 'Views:' }, function(err, result)
if err or not result then return end
local index_str, _ = trim(result):gsub('%s*:.*$', '')
local index = tonumber(index_str)
if views[index] then
web.view.select(views[index].id)
end
end)
end)
-- 1-0 for tab indexes 1-10
for index = 1, 10 do
local key = index
if index >= 10 then key = 0 end
web.keymap.set('n', '<space>' .. key, function()
local views = web.view.list()
if index > #views then return end
web.view.select(views[index].id)
end)
end
-- Next view
web.keymap.set('n', 'tn', function()
local views = web.view.list()
if #views <= 1 then return end
local index = get_current_view_index() + 1;
if index > #views then index = 1 end
web.view.select(views[index].id)
end)
-- Prev view
web.keymap.set('n', 'tp', function()
local views = web.views.list()
if #views <= 1 then return end
local index = get_current_view_index() - 1;
if index <= 0 then index = #views end
web.views.select(views[index].id)
end)
web.keymap.set('n', '<c-i>', function() web.view.open_devtools() end)
print('ending...')
|