8 Commits

Author SHA1 Message Date
Diogo Duarte
430592ba57 Update README 2025-02-26 10:25:33 +00:00
Diogo Duarte
7a2f62fbb3 Change default mode to 'dir' 2025-02-26 10:23:59 +00:00
Diogo Duarte
d897f6b0bd Merge branch 'main' into last_dir_mode 2025-02-26 10:21:12 +00:00
Diogo Duarte
a7963b784a Merge pull request #40 from panda7789/feature/allow-custom-bookmark-description
Add custom bookmark description when creating
2025-02-26 10:19:13 +00:00
Diogo Duarte
e2614a18fc Save last_dir before jump 2025-02-23 22:30:33 +00:00
Linhart Lukáš
a0c8299704 formatting 2025-02-19 22:58:19 +01:00
Linhart Lukáš
2fc6a0a938 Add custom bookmark description when creating 2025-02-19 22:58:19 +01:00
Diogo Duarte
023bde5a53 Add last modes 2025-02-18 11:07:42 +00:00
2 changed files with 109 additions and 22 deletions

View File

@@ -23,10 +23,10 @@ ya pack -a dedukun/bookmarks
## Import/Export bookmarks
This plugin uses [Yazi's DDS](https://yazi-rs.github.io/docs/dds/) for bookmark persistence, as such,
This plugin uses [Yazi's DDS](https://yazi-rs.github.io/docs/dds/) for bookmark persistence, as such,
the bookmarks are saved in DDS's state file (`~/.local/state/yazi/.dds` on Linux and `C:\Users\USERNAME\AppData\Roaming\yazi\state\.dds` on Windows)
***NOTE:*** This system may be used by other plugins that you have installed, so this file might have more data than just the bookmarks.
**_NOTE:_** This system may be used by other plugins that you have installed, so this file might have more data than just the bookmarks.
## Configuration
@@ -62,10 +62,11 @@ The following are the default configurations:
```lua
-- ~/.config/yazi/init.lua
require("bookmarks"):setup({
last_directory = { enable = false, persist = false },
last_directory = { enable = false, persist = false, mode="dir" },
persist = "none",
desc_format = "full",
file_pick_mode = "hover",
custom_desc_input = false,
notify = {
enable = false,
timeout = 1,
@@ -85,6 +86,14 @@ the last directory.
There's also the option to enable persistence to this automatic bookmark.
Finally, there's a `mode` option with the following options:
| Value | Description |
| ------ | ------------------------------------------------------------ |
| `jump` | It saves the position before the last used mark |
| `mark` | It saves the last created mark |
| `dir` | Default, it saves the last visited directory (old behaviour) |
### `persist`
When enabled the bookmarks will persist, i.e. if you close and reopen Yazi they will still be
@@ -129,3 +138,9 @@ By default the notification has a 1 second timeout that can be changed with `not
Furthermore, you can customize the notification messages with `notify.message`.
For the `new` and `delete` messages, the `<key>` and `<folder>` keywords can be used, which will be replaced by the respective new/deleted bookmark's associated key and folder.
### `custom_desc_input`
When enabled, user can change description for new bookmark before it is saved.
By default the custom description input is filled with path.

110
main.lua
View File

@@ -90,26 +90,43 @@ local _save_state = ya.sync(function(state, bookmarks)
ps.pub_to(0, "@bookmarks", save_state)
end)
local _save_last_directory = ya.sync(function(state, persist)
if persist then
ps.sub_remote("@bookmarks-lastdir", function(body) state.curr_dir = body end)
local _load_last = ya.sync(function(state)
ps.sub_remote("@bookmarks-last", function(body)
state.last_dir = body
if state.last_mode ~= "dir" then
ps.unsub_remote("@bookmarks-last")
end
end)
end)
local _save_last = ya.sync(function(state, persist, imediate)
local file = _get_bookmark_file()
local curr = {
on = "'",
desc = _generate_description(file),
path = tostring(file.url),
is_parent = file.is_parent,
}
if imediate then
state.curr_dir = nil
state.last_dir = curr
else
state.last_dir = state.curr_dir
state.curr_dir = curr
end
ps.sub("cd", function()
local file = _get_bookmark_file()
state.last_dir = state.curr_dir
if persist and state.last_dir then
ps.pub_to(0, "@bookmarks-last", state.last_dir)
end
end)
if persist and state.last_dir then
ps.pub_to(0, "@bookmarks-lastdir", state.last_dir)
end
local get_last_mode = ya.sync(function(state) return state.last_mode end)
state.curr_dir = {
on = "'",
desc = _generate_description(file),
path = tostring(file.url),
is_parent = file.is_parent,
}
end)
local save_last_dir = ya.sync(function(state)
ps.sub("cd", function() _save_last(state.last_persist, false) end)
ps.sub("hover", function()
local file = _get_bookmark_file()
@@ -118,11 +135,17 @@ local _save_last_directory = ya.sync(function(state, persist)
end)
end)
local save_last_jump = 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_custom_desc_input_enabled = ya.sync(function(state) return state.custom_desc_input end)
-- ***********************************************
-- **============= C O M M A N D S =============**
-- ***********************************************
local save_bookmark = ya.sync(function(state, idx)
local save_bookmark = ya.sync(function(state, idx, custom_desc)
local file = _get_bookmark_file()
state.bookmarks = state.bookmarks or {}
@@ -132,9 +155,14 @@ local save_bookmark = ya.sync(function(state, idx)
_idx = #state.bookmarks + 1
end
local bookmark_desc = tostring(file.url)
if custom_desc then
bookmark_desc = tostring(custom_desc)
end
state.bookmarks[_idx] = {
on = SUPPORTED_KEYS[idx].on,
desc = _generate_description(file),
desc = bookmark_desc,
path = tostring(file.url),
is_parent = file.is_parent,
}
@@ -171,6 +199,10 @@ local save_bookmark = ya.sync(function(state, idx)
message, _ = message:gsub("<folder>", state.bookmarks[_idx].desc)
_send_notification(message)
end
if get_last_mode() == "mark" then
save_last_mark()
end
end)
local all_bookmarks = ya.sync(function(state, append_last_dir)
@@ -226,6 +258,19 @@ return {
if action == "save" then
local key = ya.which { cands = SUPPORTED_KEYS, silent = true }
if key then
if _is_custom_desc_input_enabled() then
local value, event = ya.input {
title = "Save with custom description:",
position = { "top-center", y = 3, w = 60 },
value = tostring(_get_bookmark_file().url),
}
if event ~= 1 then
return
end
save_bookmark(key, value)
return
end
save_bookmark(key)
end
return
@@ -242,6 +287,10 @@ return {
end
if action == "jump" then
if get_last_mode() == "jump" then
save_last_jump()
end
if bookmarks[selected].is_parent then
ya.manager_emit("cd", { bookmarks[selected].path })
else
@@ -258,7 +307,26 @@ return {
if type(args.last_directory) == "table" then
if args.last_directory.enable then
_save_last_directory(args.last_directory.persist)
if args.last_directory.mode == "mark" then
state.last_persist = args.last_directory.persist
state.last_mode = "mark"
elseif args.last_directory.mode == "jump" then
state.last_persist = args.last_directory.persist
state.last_mode = "jump"
elseif args.last_directory.mode == "dir" then
state.last_persist = args.last_directory.persist
state.last_mode = "dir"
save_last_dir()
else
-- default
state.last_persist = args.last_directory.persist
state.last_mode = "dir"
save_last_dir()
end
if args.last_directory.persist then
_load_last()
end
end
end
@@ -279,6 +347,10 @@ return {
state.file_pick_mode = "hover"
end
if type(args.custom_desc_input) == "boolean" then
state.custom_desc_input = args.custom_desc_input
end
state.notify = {
enable = false,
timeout = 1,