12 Commits

Author SHA1 Message Date
Diogo Duarte
9ef1254d8a Merge pull request #52 from segur7g/patch-1
Update README.md
2025-07-09 22:24:49 +01:00
Diogo Duarte
fcf947a3e5 Merge pull request #50 from KaiExec/main
Add the support of higher version.
2025-07-09 22:23:08 +01:00
Diogo Duarte
320ac801ea Merge pull request #48 from nisemono0/show_saved_keys
Show keys when saving bookmark
2025-07-09 22:21:26 +01:00
Cristhian Betancur
e3b69263e1 Update README.md
A small update to the installation command on line 21
2025-06-21 04:47:45 -05:00
KaiExecutor
c6ea5aece0 Update README.md
Add the support of higher version.
2025-06-10 17:02:17 +08:00
nisemono0
c841641bfa Update README.md 2025-06-04 17:25:26 +03:00
nisemono0
0f27237688 Add option to show available keys when saving a bookmark
Useful to not accidentally overwrite a saved bookmark
2025-06-04 17:10:59 +03:00
Diogo Duarte
fbb7c00b6f Merge pull request #46 from kirpy0x/description-format
Make desk_format apply when creating new bookmarks
2025-05-06 11:22:24 +01:00
Richard Potter
3b6932eea6 Make desk_format apply when creating new bookmarks
fixes: https://github.com/dedukun/bookmarks.yazi/issues/45

If a user may choose to set multiple marks in the same parent dir for
various hovered items, this won't look good. They would be better off
setting desc_format = "full".

This is however closer to Ranger marks and will look clean for those who
only set one mark per directory.
2025-04-24 20:34:31 -06:00
Diogo Duarte
a70648a22b Merge branch 'main' of github.com:dedukun/bookmarks.yazi 2025-04-16 10:54:22 +01:00
Diogo Duarte
41536aac59 Removed deprecated functions + minimal yazi version is now v25.4.8 2025-04-16 10:54:10 +01:00
Diogo Duarte
95b2c586f4 Merge pull request #41 from dedukun/last_dir_mode
Add different behaviours for `last` jump
2025-02-26 10:25:55 +00:00
2 changed files with 58 additions and 24 deletions

View File

@@ -6,7 +6,7 @@ https://github.com/dedukun/bookmarks.yazi/assets/25795432/9a9fe345-dd06-442e-99f
## Requirements ## Requirements
- [Yazi](https://github.com/sxyazi/yazi) v25.2.7+ - [Yazi](https://github.com/sxyazi/yazi) v25.4.8+
## Features ## Features
@@ -18,7 +18,7 @@ https://github.com/dedukun/bookmarks.yazi/assets/25795432/9a9fe345-dd06-442e-99f
## Installation ## Installation
```sh ```sh
ya pack -a dedukun/bookmarks ya pkg add dedukun/bookmarks
``` ```
## Import/Export bookmarks ## Import/Export bookmarks
@@ -33,22 +33,23 @@ the bookmarks are saved in DDS's state file (`~/.local/state/yazi/.dds` on Linux
Add this to your `keymap.toml`: Add this to your `keymap.toml`:
```toml ```toml
[[manager.prepend_keymap]] # If your yazi version is lower than v25.5.28, repleace "mgr" by "manager".
[[mgr.prepend_keymap]]
on = [ "m" ] on = [ "m" ]
run = "plugin bookmarks save" run = "plugin bookmarks save"
desc = "Save current position as a bookmark" desc = "Save current position as a bookmark"
[[manager.prepend_keymap]] [[mgr.prepend_keymap]]
on = [ "'" ] on = [ "'" ]
run = "plugin bookmarks jump" run = "plugin bookmarks jump"
desc = "Jump to a bookmark" desc = "Jump to a bookmark"
[[manager.prepend_keymap]] [[mgr.prepend_keymap]]
on = [ "b", "d" ] on = [ "b", "d" ]
run = "plugin bookmarks delete" run = "plugin bookmarks delete"
desc = "Delete a bookmark" desc = "Delete a bookmark"
[[manager.prepend_keymap]] [[mgr.prepend_keymap]]
on = [ "b", "D" ] on = [ "b", "D" ]
run = "plugin bookmarks delete_all" run = "plugin bookmarks delete_all"
desc = "Delete all bookmarks" desc = "Delete all bookmarks"
@@ -67,6 +68,7 @@ require("bookmarks"):setup({
desc_format = "full", desc_format = "full",
file_pick_mode = "hover", file_pick_mode = "hover",
custom_desc_input = false, custom_desc_input = false,
show_keys = false,
notify = { notify = {
enable = false, enable = false,
timeout = 1, timeout = 1,
@@ -144,3 +146,13 @@ For the `new` and `delete` messages, the `<key>` and `<folder>` keywords can be
When enabled, user can change description for new bookmark before it is saved. When enabled, user can change description for new bookmark before it is saved.
By default the custom description input is filled with path. By default the custom description input is filled with path.
### `show_keys`
When enabled, saving a new bookmark will display a list of all available keys.
If a key already has a saved bookmark, its description will be shown.
This helps prevent accidental overwriting of existing bookmarks.
By default no information is shown.

View File

@@ -1,18 +1,18 @@
--- @since 25.2.7 --- @since 25.4.8
-- stylua: ignore -- stylua: ignore
local SUPPORTED_KEYS = { local SUPPORTED_KEYS = {
{ on = "0"}, { on = "1"}, { on = "2"}, { on = "3"}, { on = "4"}, { on = "0", desc = "Free" }, { on = "1", desc = "Free" }, { on = "2", desc = "Free" }, { on = "3", desc = "Free" }, { on = "4", desc = "Free"},
{ on = "5"}, { on = "6"}, { on = "7"}, { on = "8"}, { on = "9"}, { on = "5", desc = "Free" }, { on = "6", desc = "Free" }, { on = "7", desc = "Free" }, { on = "8", desc = "Free" }, { on = "9", desc = "Free"},
{ on = "A"}, { on = "B"}, { on = "C"}, { on = "D"}, { on = "E"}, { on = "A", desc = "Free" }, { on = "B", desc = "Free" }, { on = "C", desc = "Free" }, { on = "D", desc = "Free" }, { on = "E", desc = "Free"},
{ on = "F"}, { on = "G"}, { on = "H"}, { on = "I"}, { on = "J"}, { on = "F", desc = "Free" }, { on = "G", desc = "Free" }, { on = "H", desc = "Free" }, { on = "I", desc = "Free" }, { on = "J", desc = "Free"},
{ on = "K"}, { on = "L"}, { on = "M"}, { on = "N"}, { on = "O"}, { on = "K", desc = "Free" }, { on = "L", desc = "Free" }, { on = "M", desc = "Free" }, { on = "N", desc = "Free" }, { on = "O", desc = "Free"},
{ on = "P"}, { on = "Q"}, { on = "R"}, { on = "S"}, { on = "T"}, { on = "P", desc = "Free" }, { on = "Q", desc = "Free" }, { on = "R", desc = "Free" }, { on = "S", desc = "Free" }, { on = "T", desc = "Free"},
{ on = "U"}, { on = "V"}, { on = "W"}, { on = "X"}, { on = "Y"}, { on = "Z"}, { on = "U", desc = "Free" }, { on = "V", desc = "Free" }, { on = "W", desc = "Free" }, { on = "X", desc = "Free" }, { on = "Y", desc = "Free"}, { on = "Z", desc = "Free" },
{ on = "a"}, { on = "b"}, { on = "c"}, { on = "d"}, { on = "e"}, { on = "a", desc = "Free" }, { on = "b", desc = "Free" }, { on = "c", desc = "Free" }, { on = "d", desc = "Free" }, { on = "e", desc = "Free"},
{ on = "f"}, { on = "g"}, { on = "h"}, { on = "i"}, { on = "j"}, { on = "f", desc = "Free" }, { on = "g", desc = "Free" }, { on = "h", desc = "Free" }, { on = "i", desc = "Free" }, { on = "j", desc = "Free"},
{ on = "k"}, { on = "l"}, { on = "m"}, { on = "n"}, { on = "o"}, { on = "k", desc = "Free" }, { on = "l", desc = "Free" }, { on = "m", desc = "Free" }, { on = "n", desc = "Free" }, { on = "o", desc = "Free"},
{ on = "p"}, { on = "q"}, { on = "r"}, { on = "s"}, { on = "t"}, { on = "p", desc = "Free" }, { on = "q", desc = "Free" }, { on = "r", desc = "Free" }, { on = "s", desc = "Free" }, { on = "t", desc = "Free"},
{ on = "u"}, { on = "v"}, { on = "w"}, { on = "x"}, { on = "y"}, { on = "z"}, { on = "u", desc = "Free" }, { on = "v", desc = "Free" }, { on = "w", desc = "Free" }, { on = "x", desc = "Free" }, { on = "y", desc = "Free"}, { on = "z", desc = "Free" },
} }
local _send_notification = ya.sync( local _send_notification = ya.sync(
@@ -50,7 +50,7 @@ local _generate_description = ya.sync(function(state, file)
end end
if state.desc_format == "parent" then if state.desc_format == "parent" then
return tostring(file.url:parent()) return tostring(file.url.parent)
end end
-- full description -- full description
return tostring(file.url) return tostring(file.url)
@@ -139,12 +139,27 @@ local save_last_jump = ya.sync(function(state) _save_last(state.last_persist, tr
local save_last_mark = ya.sync(function(state) _save_last(state.last_persist, true) end) local save_last_mark = ya.sync(function(state) _save_last(state.last_persist, true) end)
local _is_show_keys_enabled = ya.sync(function(state) return state.show_keys end)
local _is_custom_desc_input_enabled = ya.sync(function(state) return state.custom_desc_input end) local _is_custom_desc_input_enabled = ya.sync(function(state) return state.custom_desc_input end)
-- *********************************************** -- ***********************************************
-- **============= C O M M A N D S =============** -- **============= C O M M A N D S =============**
-- *********************************************** -- ***********************************************
local get_updated_keys = ya.sync(function(state, keys)
if state.bookmarks then
for _, bookmarks_value in pairs(state.bookmarks) do
for _, keys_value in pairs(keys) do
if keys_value.on == bookmarks_value.on then
keys_value.desc = bookmarks_value.desc
end
end
end
end
return keys
end)
local save_bookmark = ya.sync(function(state, idx, custom_desc) local save_bookmark = ya.sync(function(state, idx, custom_desc)
local file = _get_bookmark_file() local file = _get_bookmark_file()
@@ -155,7 +170,7 @@ local save_bookmark = ya.sync(function(state, idx, custom_desc)
_idx = #state.bookmarks + 1 _idx = #state.bookmarks + 1
end end
local bookmark_desc = tostring(file.url) local bookmark_desc = tostring(_generate_description(file))
if custom_desc then if custom_desc then
bookmark_desc = tostring(custom_desc) bookmark_desc = tostring(custom_desc)
end end
@@ -256,7 +271,10 @@ return {
end end
if action == "save" then if action == "save" then
local key = ya.which { cands = SUPPORTED_KEYS, silent = true } if _is_show_keys_enabled() then
SUPPORTED_KEYS = get_updated_keys(SUPPORTED_KEYS)
end
local key = ya.which { cands = SUPPORTED_KEYS, silent = not _is_show_keys_enabled() }
if key then if key then
if _is_custom_desc_input_enabled() then if _is_custom_desc_input_enabled() then
local value, event = ya.input { local value, event = ya.input {
@@ -292,9 +310,9 @@ return {
end end
if bookmarks[selected].is_parent then if bookmarks[selected].is_parent then
ya.manager_emit("cd", { bookmarks[selected].path }) ya.mgr_emit("cd", { bookmarks[selected].path })
else else
ya.manager_emit("reveal", { bookmarks[selected].path }) ya.mgr_emit("reveal", { bookmarks[selected].path })
end end
elseif action == "delete" then elseif action == "delete" then
delete_bookmark(selected) delete_bookmark(selected)
@@ -351,6 +369,10 @@ return {
state.custom_desc_input = args.custom_desc_input state.custom_desc_input = args.custom_desc_input
end end
if type(args.show_keys) == "boolean" then
state.show_keys = args.show_keys
end
state.notify = { state.notify = {
enable = false, enable = false,
timeout = 1, timeout = 1,