21 Commits

Author SHA1 Message Date
Diogo Duarte
35da1073b7 Merge pull request #31 from wekauwau/main
Sort bookmarks when saving
2024-12-18 11:16:40 +00:00
wekauwau
a91fe1cb85 sort bookmarks when saving 2024-12-16 14:29:38 +07:00
Diogo Duarte
20ece7e1ef Add support in the entry function for Yazi stable release 2024-12-03 21:43:32 +00:00
Diogo Duarte
e755ebc1e6 Merge pull request #29 from TornaxO7/update-config
update config according to https://github.com/sxyazi/yazi/pull/1966
2024-12-02 16:28:38 +00:00
TornaxO7
d9b722a7e4 update config according to https://github.com/sxyazi/yazi/pull/1966 2024-11-29 17:36:50 +01:00
Diogo Duarte
600f87c021 Update README.md 2024-09-09 12:05:21 +01:00
Diogo Duarte
ae06e0c1c0 Merge pull request #24 from nralbrecht/bookmark_file_pick_mode
Add option to disable using hovered directory
2024-08-30 20:53:47 +01:00
nralbrecht
6769310fa2 Change to directory if the parent is stored
When storing a hovered file as bookmark it makes sense to use the reveal command to move to it. When storing the parent directory however, one has to cd to it. Otherwise the parent directory is opened and the stored directory is only focused.
2024-08-28 17:34:29 +02:00
nralbrecht
5b4258225b Rename bookmark_file_pick_mode option to file_pick_mode 2024-08-28 17:18:29 +02:00
nralbrecht
7ef1a95da1 Add bookmark_file_pick_mode option to README 2024-08-27 20:04:01 +02:00
nralbrecht
53ae96aed8 Rename bookmark_file_pick_mode option value from current to parent 2024-08-27 20:02:38 +02:00
nralbrecht
17702a3752 Add option to always pick the current folder and ignore hovered folder 2024-08-27 17:43:40 +02:00
Diogo Duarte
f65fa5e7e9 Merge pull request #23 from dedukun/save-last-bookmark
Save last bookmark
2024-08-18 17:11:49 +01:00
Diogo Duarte
5039aaa7d3 Update README.md 2024-08-14 09:56:02 +01:00
Diogo Duarte
944f7fd2b3 update README 2024-08-14 09:51:58 +01:00
Diogo Duarte
a5a4ea1bd1 Update README 2024-08-14 09:46:09 +01:00
Diogo Duarte
feffe662ee refactored last_directory configs + added persistence to last directory 2024-08-14 09:44:02 +01:00
Diogo Duarte
748efed3b9 Merge branch 'main' of github.com:dedukun/bookmarks.yazi 2024-07-14 19:56:48 +01:00
Diogo Duarte
b5dd86a7dd adapt to sxyazi/yazi#1257 2024-07-14 19:56:40 +01:00
Diogo Duarte
08b3f85c5d Update README.md 2024-06-28 21:34:39 +01:00
Diogo Duarte
15304f3535 Updated DDS interface 2024-06-24 13:05:31 +01:00
2 changed files with 91 additions and 43 deletions

View File

@@ -6,7 +6,7 @@ https://github.com/dedukun/bookmarks.yazi/assets/25795432/9a9fe345-dd06-442e-99f
## Requirements
- [Yazi](https://github.com/sxyazi/yazi) v0.2.5+
- [Yazi](https://github.com/sxyazi/yazi) v0.3.0+
## Features
@@ -17,36 +17,10 @@ https://github.com/dedukun/bookmarks.yazi/assets/25795432/9a9fe345-dd06-442e-99f
## Installation
<details>
<summary>Yazi v0.2.5 (manual installation)</summary>
```sh
# Linux/macOS
git clone https://github.com/dedukun/bookmarks.yazi.git ~/.config/yazi/plugins/bookmarks.yazi
# Windows
git clone https://github.com/dedukun/bookmarks.yazi.git %AppData%\yazi\config\plugins\bookmarks.yazi
```
</details>
<details>
<summary>Latest commit in Yazi (package manager)</summary>
```sh
# Add the plugin
ya pack -a dedukun/bookmarks
# Install plugin
ya pack -i
# Update plugin
ya pack -u
```
</details>
## Configuration
Add this to your `keymap.toml`:
@@ -81,9 +55,11 @@ The following are the default configurations:
```lua
-- ~/.config/yazi/init.lua
require("bookmarks"):setup({
save_last_directory = false,
save_last_directory = false, -- DEPRECATED - will be removed in the future. Use `last_directory`
last_directory = { enable = false, persist = false },
persist = "none",
desc_format = "full",
file_pick_mode = "hover",
notify = {
enable = false,
timeout = 1,
@@ -101,6 +77,15 @@ require("bookmarks"):setup({
When enabled, a new bookmark is automatically created in `'` which allows the user to jump back to
the last directory.
***NOTE:*** This option is **DEPRECATED** and will be removed in the future in favor of `last_directory`.
### `last_directory`
When enabled, a new bookmark is automatically created in `'` which allows the user to jump back to
the last directory.
There's also the option to enable persistence to this automatic bookmark.
### `persist`
When enabled the bookmarks will persist, i.e. if you close and reopen Yazi they will still be
@@ -125,6 +110,17 @@ There are two possible values for this option:
| `full` | The default, it shows the full path of the bookmark, i.e., the parent folder + the hovered file |
| `parent` | Only shows the parent folder of the bookmark |
### `file_pick_mode`
The mode for choosing which directory to bookmark.
There are two possible values for this option:
| Value | Description |
| -------- | ----------------------------------------------------------------------------------------------- |
| `hover` | The default, it uses the path of the hovered file for new bookmarks |
| `parent` | Uses the path of the parent folder for new bookmarks |
### `notify`
When enabled, notifications will be shown when the user creates a new bookmark and deletes one or

View File

@@ -33,17 +33,18 @@ local _get_real_index = ya.sync(function(state, idx)
return nil
end)
local _get_hovered_file = ya.sync(function()
local folder = Folder:by_kind(Folder.CURRENT)
if not folder.hovered then
return { url = folder.cwd, is_cwd = true }
local _get_bookmark_file = ya.sync(function(state)
local folder = cx.active.current
if state.file_pick_mode == "parent" or not folder.hovered then
return { url = folder.cwd, is_parent = true }
end
return { url = folder.hovered.url, is_cwd = false }
return { url = folder.hovered.url, is_parent = false }
end)
local _generate_description = ya.sync(function(state, file)
-- if this is true, we don't have information about the folder, so just return the folder url
if file.is_cwd then
if file.is_parent then
return tostring(file.url)
end
@@ -55,7 +56,7 @@ local _generate_description = ya.sync(function(state, file)
end)
local _load_state = ya.sync(function(state)
ps.sub_remote("bookmarks", function(body)
ps.sub_remote("@bookmarks", function(body)
if not state.bookmarks and body then
state.bookmarks = {}
for _, value in pairs(body) do
@@ -67,7 +68,7 @@ end)
local _save_state = ya.sync(function(state, bookmarks)
if not bookmarks then
ps.pub_static(10, "bookmarks", nil)
ps.pub_to(0, "@bookmarks", nil)
return
end
@@ -85,22 +86,32 @@ local _save_state = ya.sync(function(state, bookmarks)
end
end
ps.pub_static(10, "bookmarks", save_state)
ps.pub_to(0, "@bookmarks", save_state)
end)
local _save_last_directory = ya.sync(function(state)
local _save_last_directory = ya.sync(function(state, persist)
if persist then
ps.sub_remote("@bookmarks-lastdir", function(body) state.curr_dir = body end)
end
ps.sub("cd", function()
local file = _get_hovered_file()
local file = _get_bookmark_file()
state.last_dir = state.curr_dir
if persist and state.last_dir then
ps.pub_to(0, "@bookmarks-lastdir", state.last_dir)
end
state.curr_dir = {
on = "'",
desc = _generate_description(file),
path = tostring(file.url),
is_parent = file.is_parent,
}
end)
ps.sub("hover", function()
local file = _get_hovered_file()
local file = _get_bookmark_file()
state.curr_dir.desc = _generate_description(file)
state.curr_dir.path = tostring(file.url)
end)
@@ -111,7 +122,7 @@ end)
-- ***********************************************
local save_bookmark = ya.sync(function(state, idx)
local file = _get_hovered_file()
local file = _get_bookmark_file()
state.bookmarks = state.bookmarks or {}
@@ -124,8 +135,31 @@ local save_bookmark = ya.sync(function(state, idx)
on = SUPPORTED_KEYS[idx].on,
desc = _generate_description(file),
path = tostring(file.url),
is_parent = file.is_parent,
}
-- Custom sorting function
table.sort(state.bookmarks, function(a, b)
local key_a, key_b = a.on, b.on
-- Numbers first
if key_a:match("%d") and not key_b:match("%d") then
return true
elseif key_b:match("%d") and not key_a:match("%d") then
return false
end
-- Uppercase before lowercase
if key_a:match("%u") and key_b:match("%l") then
return true
elseif key_b:match("%u") and key_a:match("%l") then
return false
end
-- Regular alphabetical sorting
return key_a < key_b
end)
if state.persist then
_save_state(state.bookmarks)
end
@@ -182,7 +216,10 @@ local delete_all_bookmarks = ya.sync(function(state)
end)
return {
entry = function(_, args)
entry = function(_, job_or_args)
-- TODO: DEPRECATE IN Yazi 0.4
-- https://github.com/sxyazi/yazi/pull/1966
local args = job_or_args.args or job_or_args
local action = args[1]
if not action then
return
@@ -207,7 +244,11 @@ return {
end
if action == "jump" then
ya.manager_emit("reveal", { bookmarks[selected].path })
if bookmarks[selected].is_parent then
ya.manager_emit("cd", { bookmarks[selected].path })
else
ya.manager_emit("reveal", { bookmarks[selected].path })
end
elseif action == "delete" then
delete_bookmark(selected)
end
@@ -217,8 +258,13 @@ return {
return
end
-- TODO: DEPRECATED Yazi 0.4
if args.save_last_directory then
_save_last_directory()
elseif type(args.last_directory) == "table" then
if args.last_directory.enable then
_save_last_directory(args.last_directory.persist)
end
end
if args.persist == "all" or args.persist == "vim" then
@@ -232,6 +278,12 @@ return {
state.desc_format = "full"
end
if args.file_pick_mode == "parent" then
state.file_pick_mode = "parent"
else
state.file_pick_mode = "hover"
end
state.notify = {
enable = false,
timeout = 1,