aboutsummaryrefslogtreecommitdiff
path: root/config.lua
blob: 9466a204e99df1566ccd0a1ea1e0d74cdac380c8 (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
124
125
126
127
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

web.set('new_view_url', 'https://lite.duckduckgo.com')
-- web.set('close_window_when_no_views', false)

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()
  print(web.get('new_view_url'))
  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...')