summaryrefslogtreecommitdiff
path: root/debian/.config/yazi/plugins/jump-to-char.yazi
diff options
context:
space:
mode:
Diffstat (limited to 'debian/.config/yazi/plugins/jump-to-char.yazi')
-rw-r--r--debian/.config/yazi/plugins/jump-to-char.yazi/README.md28
-rw-r--r--debian/.config/yazi/plugins/jump-to-char.yazi/main.lua32
2 files changed, 60 insertions, 0 deletions
diff --git a/debian/.config/yazi/plugins/jump-to-char.yazi/README.md b/debian/.config/yazi/plugins/jump-to-char.yazi/README.md
new file mode 100644
index 0000000..d24f2e7
--- /dev/null
+++ b/debian/.config/yazi/plugins/jump-to-char.yazi/README.md
@@ -0,0 +1,28 @@
+# jump-to-char.yazi
+
+Vim-like `f<char>`, jump to the next file whose name starts with `<char>`.
+
+https://github.com/yazi-rs/plugins/assets/17523360/aac9341c-b416-4e0c-aaba-889d48389869
+
+## Installation
+
+```sh
+ya pkg add yazi-rs/plugins:jump-to-char
+```
+
+## Usage
+
+Add this to your `~/.config/yazi/keymap.toml`:
+
+```toml
+[[mgr.prepend_keymap]]
+on = "f"
+run = "plugin jump-to-char"
+desc = "Jump to char"
+```
+
+Make sure the <kbd>f</kbd> key is not used elsewhere.
+
+## License
+
+This plugin is MIT-licensed. For more information check the [LICENSE](LICENSE) file.
diff --git a/debian/.config/yazi/plugins/jump-to-char.yazi/main.lua b/debian/.config/yazi/plugins/jump-to-char.yazi/main.lua
new file mode 100644
index 0000000..8a434f1
--- /dev/null
+++ b/debian/.config/yazi/plugins/jump-to-char.yazi/main.lua
@@ -0,0 +1,32 @@
+--- @since 25.5.31
+
+local AVAILABLE_CHARS = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789."
+
+local changed = ya.sync(function(st, new)
+ local b = st.last ~= new
+ st.last = new
+ return b or not cx.active.finder
+end)
+
+local escape = function(s) return s == "." and "\\." or s end
+
+return {
+ entry = function()
+ local cands = {}
+ for i = 1, #AVAILABLE_CHARS do
+ cands[#cands + 1] = { on = AVAILABLE_CHARS:sub(i, i) }
+ end
+
+ local idx = ya.which { cands = cands, silent = true }
+ if not idx then
+ return
+ end
+
+ local kw = escape(cands[idx].on)
+ if changed(kw) then
+ ya.emit("find_do", { "^" .. kw })
+ else
+ ya.emit("find_arrow", {})
+ end
+ end,
+}