aboutsummaryrefslogtreecommitdiff
path: root/init.lua
diff options
context:
space:
mode:
Diffstat (limited to 'init.lua')
-rw-r--r--init.lua159
1 files changed, 159 insertions, 0 deletions
diff --git a/init.lua b/init.lua
new file mode 100644
index 0000000..e1b4308
--- /dev/null
+++ b/init.lua
@@ -0,0 +1,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...')