diff options
| author | Akshay Nair <phenax5@gmail.com> | 2025-08-02 21:54:15 +0530 |
|---|---|---|
| committer | Akshay Nair <phenax5@gmail.com> | 2025-08-02 21:58:49 +0530 |
| commit | d37020870600d6c842f9a75ebd3986df6010c25c (patch) | |
| tree | 471e4ebac8661dcc299df61fb01436071e88f4b5 /lua | |
| parent | 052f043274e122cf4e8f4589e1256d5dfd526252 (diff) | |
| download | null-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.lua | 65 |
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 |
