diff --git a/README.md b/README.md index 26b6f55..4728c82 100644 --- a/README.md +++ b/README.md @@ -45,12 +45,13 @@ desc = "Delete all bookmarks" --- -Additionally you can enable notifications by calling the plugin's `setup` function in Yazi's `init.lua`, i.e. `~/.config/yazi/init.lua`. +Additionally there are configurations that can be done using the plugin's `setup` function in Yazi's `init.lua`, i.e. `~/.config/yazi/init.lua`. The following are the default configurations: ```lua -- ~/.config/yazi/init.lua require("bookmarks"):setup({ + save_last_directory = false, notify = { enable = false, timeout = 1, @@ -63,4 +64,17 @@ require("bookmarks"):setup({ }) ``` -For the `new` and `delete` messages, you can use `` and ``, which will be replaced by the respective new/deleted bookmark's associated key and folder. +### `save_last_directory` + +When enabled, a new bookmark is automatically created in `''` which allows the user to jump back to +the last directory. + +### `notify` + +When enabled, notifications will be shown when the user creates a new bookmark and deletes one or +all saved bookmarks. + +By default the notification has a 1 second timeout that can be changed with `notify.timeout`. + +Furthermore, you can customize the notification messages with `notify.message`. +For the `new` and `delete` messages, the `` and `` keywords can be used, which will be replaced by the respective new/deleted bookmark's associated key and folder. diff --git a/init.lua b/init.lua index 992531b..44cc73b 100644 --- a/init.lua +++ b/init.lua @@ -43,7 +43,21 @@ local save_bookmark = ya.sync(function(state, idx) end end) -local all_bookmarks = ya.sync(function(state) return state.bookmarks or {} end) +local all_bookmarks = ya.sync(function(state, append_last_dir) + local bookmarks = {} + + if state.bookmarks then + for _, value in pairs(state.bookmarks) do + table.insert(bookmarks, value) + end + end + + if append_last_dir and state.last_dir then + table.insert(bookmarks, state.last_dir) + end + + return bookmarks +end) local delete_bookmark = ya.sync(function(state, idx) if state.notify and state.notify.enable then @@ -72,6 +86,29 @@ local delete_all_bookmarks = ya.sync(function(state) end end) +local _save_last_directory = ya.sync(function(state) + state.curr_dir = { + on = "'", + desc = "~", + cursor = 0, + } + + ps.sub("cd", function() + local folder = Folder:by_kind(Folder.CURRENT) + state.last_dir = state.curr_dir + state.curr_dir = { + on = "'", + desc = tostring(folder.cwd), + cursor = folder.cursor, + } + end) + + ps.sub("hover", function() + local folder = Folder:by_kind(Folder.CURRENT) + state.curr_dir.cursor = folder.cursor + end) +end) + return { entry = function(_, args) local action = args[1] @@ -91,7 +128,7 @@ return { return delete_all_bookmarks() end - local bookmarks = all_bookmarks() + local bookmarks = all_bookmarks(action == "jump") local selected = #bookmarks > 0 and ya.which { cands = bookmarks } if not selected then return @@ -110,6 +147,10 @@ return { return end + if args.save_last_directory then + _save_last_directory() + end + state.notify = { enable = false, timeout = 1,