aboutsummaryrefslogtreecommitdiff
path: root/config.lua
blob: a1f49c664980a0d1c6bb663cc2c371d86e5e5aec (plain) (blame)
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
print('hello starting up...')

--- @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

local dmenu = require 'null-browser.extras.dmenu'
local history = require 'null-browser.extras.history'

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)
  if string.match(url, "^https?://") then
    return trim(url)
  end
  return "https://" .. trim(url)
end

-- Open in new view
web.keymap.set('n', 'o', function()
  dmenu.select(history.list(), { prompt = 'Open view:' }, function(err, result)
    if err or not result then return end
    web.view.new(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)

-- 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)

print('ending...')