aboutsummaryrefslogtreecommitdiff
path: root/lua
diff options
context:
space:
mode:
authorAkshay Nair <phenax5@gmail.com>2025-08-02 21:54:15 +0530
committerAkshay Nair <phenax5@gmail.com>2025-08-02 21:58:49 +0530
commitd37020870600d6c842f9a75ebd3986df6010c25c (patch)
tree471e4ebac8661dcc299df61fb01436071e88f4b5 /lua
parent052f043274e122cf4e8f4589e1256d5dfd526252 (diff)
downloadnull-browser-d37020870600d6c842f9a75ebd3986df6010c25c.tar.gz
null-browser-d37020870600d6c842f9a75ebd3986df6010c25c.zip
Add hints extra for opening links (number keys only)
Diffstat (limited to 'lua')
-rw-r--r--lua/null-browser/extras/hints.lua65
1 files changed, 65 insertions, 0 deletions
diff --git a/lua/null-browser/extras/hints.lua b/lua/null-browser/extras/hints.lua
new file mode 100644
index 0000000..f2ee21b
--- /dev/null
+++ b/lua/null-browser/extras/hints.lua
@@ -0,0 +1,65 @@
+local hints = {
+ config = {
+ mode = 'f',
+ },
+}
+
+local js_setup_code = ''
+
+function hints.init(on_ready)
+ hints.load_finder_js(function()
+ web.keymap.set(hints.config.mode, '<Esc>', function()
+ hints.stop()
+ end)
+
+ web.event.add_listener('KeyPressed', {
+ callback = function(event)
+ if web.keymap.get_mode() == hints.config.mode then
+ hints.filter_key(event.key)
+ end
+ end,
+ })
+
+ if type(on_ready) == 'function' then on_ready() end
+ end)
+end
+
+function hints.start(selector, new_view)
+ local open_in_new_view = new_view and 'true' or 'false'
+ web.view.run_js(
+ js_setup_code ..
+ ";_nullbrowser.finder.start('" ..
+ selector ..
+ "', " ..
+ open_in_new_view ..
+ ")"
+ )
+ web.schedule(function()
+ -- Trigger f mode after tick to avoid the trigger key (f) to get captured in event
+ web.keymap.set_mode(hints.config.mode)
+ end)
+end
+
+function hints.filter_key(key)
+ web.view.run_js("_nullbrowser.finder.filterOutByKey('" .. key .. "')")
+end
+
+function hints.stop()
+ web.keymap.set_mode('n')
+ web.view.run_js('_nullbrowser.finder.stop()')
+end
+
+function hints.load_finder_js(on_ready)
+ web.uv.fs_open('./assets/javascript/finder.js', 'r', 438, function(err, file)
+ if err then return end
+ if not file then return {} end
+ local stat = assert(web.uv.fs_fstat(file))
+ local js = assert(web.uv.fs_read(file, stat.size))
+ assert(web.uv.fs_close(file))
+ js_setup_code = js
+
+ on_ready()
+ end)
+end
+
+return hints