aboutsummaryrefslogtreecommitdiff
path: root/lua
diff options
context:
space:
mode:
authorAkshay Nair <phenax5@gmail.com>2025-07-23 11:23:28 +0530
committerAkshay Nair <phenax5@gmail.com>2025-07-23 11:23:28 +0530
commit345320bb705d776afefdc9602b7d9dc05863403f (patch)
tree9deecbae7f9bd6f60f84332d3ffad12ea9e03850 /lua
parent9a634f133d920da0dfc9dd7e8e5a675fd7c7af26 (diff)
downloadnull-browser-345320bb705d776afefdc9602b7d9dc05863403f.tar.gz
null-browser-345320bb705d776afefdc9602b7d9dc05863403f.zip
Update dmenu to use input text instead of selection
Diffstat (limited to '')
-rw-r--r--lua/null-browser/defaults/vi.lua14
-rw-r--r--lua/null-browser/extras/dmenu.lua32
2 files changed, 33 insertions, 13 deletions
diff --git a/lua/null-browser/defaults/vi.lua b/lua/null-browser/defaults/vi.lua
index 86302ee..2213fc5 100644
--- a/lua/null-browser/defaults/vi.lua
+++ b/lua/null-browser/defaults/vi.lua
@@ -42,10 +42,11 @@ function M.initialize()
end)
-- Delete from history
web.keymap.set('n', 'dh', function()
- config.menu:select(config.history.list(), { prompt = 'Delete history:' }, function(err, result)
- if err or not result then return end
- config.history.delete(web.utils.string_trim(result))
- end)
+ config.menu:select(config.history.list(), { prompt = 'Delete history:', select_last_line = true },
+ function(err, result)
+ if err or not result then return end
+ config.history.delete(web.utils.string_trim(result))
+ end)
end)
-- Search
@@ -85,7 +86,7 @@ function M.initialize()
table.insert(views_list, index .. ': ' .. view.title .. ' (' .. view.url .. ')')
end
- config.menu:select(views_list, { prompt = 'Views:' }, function(err, result)
+ config.menu:select(views_list, { prompt = 'Views:', select_last_line = true }, function(err, result)
if err or not result then return end
local index_str, _ = string.gsub(result, '%s*:.*$', '')
local index = tonumber(index_str)
@@ -140,7 +141,8 @@ function M.initialize()
web.event.add_listener('PermissionRequested', {
callback = function(event)
- config.menu:select({ 'Allow', 'Deny' }, { prompt = 'Requesting permission for ' .. event.permission_type },
+ config.menu:select({ 'Allow', 'Deny' },
+ { prompt = 'Requesting permission for ' .. event.permission_type, select_last_line = true },
function(err, choice)
if err then return end
if web.utils.string_trim(choice) == 'Allow' then
diff --git a/lua/null-browser/extras/dmenu.lua b/lua/null-browser/extras/dmenu.lua
index f817294..5d660bb 100644
--- a/lua/null-browser/extras/dmenu.lua
+++ b/lua/null-browser/extras/dmenu.lua
@@ -10,6 +10,8 @@ function Dmenu:new(opts)
query_arg = '-it',
prompt = nil,
query = nil,
+ select_last_line = true,
+ transform_output = nil,
}
local obj = {}
setmetatable(obj, self)
@@ -18,7 +20,7 @@ function Dmenu:new(opts)
return obj
end
-function Dmenu:prepare_command(opts)
+function Dmenu:prepare_options(opts)
opts = opts or {}
local args = web.utils.table_merge({}, self.options.args or {})
for _, arg in ipairs(opts.args or {}) do
@@ -37,29 +39,45 @@ function Dmenu:prepare_command(opts)
table.insert(args, options.query)
end
- return { command = options.command, args = args }
+ return {
+ command = options.command,
+ args = args,
+ select_last_line = options.select_last_line,
+ transform_output = options.transform_output or function(s) return s end,
+ }
end
function Dmenu:select(list, opts, callback)
- local cmd = self:prepare_command(opts)
+ local options = self:prepare_options(opts)
local stdin = web.uv.new_pipe();
local stdout = web.uv.new_pipe();
local selection = nil
- web.uv.spawn(cmd.command, { args = cmd.args, stdio = { stdin, stdout, nil } }, function(code)
+ if not options.select_last_line then
+ selection = {}
+ end
+ web.uv.spawn(options.command, { args = options.args, stdio = { stdin, stdout, nil } }, function(code)
web.uv.close(stdout)
web.uv.close(stdin)
+ local result = options.transform_output(selection)
if code == 0 then
- callback(nil, selection)
+ callback(nil, result)
else
- callback('[dmenu] Exit with status code: ' .. code, selection)
+ callback('[dmenu] Exit with status code: ' .. code, result)
end
end)
web.uv.read_start(stdout, function(_, data)
- if data then selection = data end
+ if data then
+ if options.select_last_line then
+ selection = data
+ else
+ selection = selection or {}
+ table.insert(selection, data)
+ end
+ end
end)
for _, value in ipairs(list) do