aboutsummaryrefslogtreecommitdiff
path: root/config.lua
blob: e1b4308d58881b234e97ef2e48943a0496b6f11a (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
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...')