changes in whoosh
This commit is contained in:
4
yazi/.config/yazi/plugins/whoosh.yazi/.luarc.json
Normal file
4
yazi/.config/yazi/plugins/whoosh.yazi/.luarc.json
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
{
|
||||||
|
"$schema": "https://raw.githubusercontent.com/LuaLS/vscode-lua/master/setting/schema.json",
|
||||||
|
"diagnostics.globals": ["ya", "ui", "cx", "ps"]
|
||||||
|
}
|
||||||
21
yazi/.config/yazi/plugins/whoosh.yazi/LICENSE
Normal file
21
yazi/.config/yazi/plugins/whoosh.yazi/LICENSE
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2025 Hunter Hwang
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
455
yazi/.config/yazi/plugins/whoosh.yazi/README.md
Normal file
455
yazi/.config/yazi/plugins/whoosh.yazi/README.md
Normal file
@@ -0,0 +1,455 @@
|
|||||||
|
<h1 align="center">🌀 whoosh.yazi</h1>
|
||||||
|
<p align="center">
|
||||||
|
<b>A lightning-fast, keyboard-first bookmark manager for <a href="https://github.com/sxyazi/yazi">Yazi</a></b><br>
|
||||||
|
<i>Save, search, and jump to your favorite paths in a blink</i>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
> [!TIP]
|
||||||
|
> **Russian version:** [README-RU.md](README-RU.md)
|
||||||
|
|
||||||
|
> [!NOTE]
|
||||||
|
> [Yazi](https://github.com/sxyazi/yazi) plugin for bookmark management, supporting the following features:
|
||||||
|
>
|
||||||
|
> - **Persistent bookmarks** - No bookmarks are lost after you close yazi
|
||||||
|
> - **Temporary bookmarks** - Session-only bookmarks that don't persist between restarts
|
||||||
|
> - **Quick navigation** - Jump, delete, and rename bookmarks by keymap
|
||||||
|
> - **Fuzzy search** - Support fuzzy search through [fzf](https://github.com/junegunn/fzf)
|
||||||
|
> - **Multiple bookmark deletion** - Select multiple bookmarks with TAB in fzf
|
||||||
|
> - **Configuration bookmarks** - Pre-configure bookmarks using Lua language
|
||||||
|
> - **Smart path truncation** - Configurable path shortening for better readability
|
||||||
|
> - **Directory history** - Navigate back to previous directory with Backspace
|
||||||
|
> - **Tab history navigation** - Browse and jump to recently visited directories with Tab key
|
||||||
|
> - **Quick bookmark creation** - Create temporary bookmarks directly from navigation menu
|
||||||
|
> - **Configurable menu shortcuts** - Override the default Tab/Backspace/Enter/Space bindings from `init.lua`
|
||||||
|
|
||||||
|
<div style="text-align: center;">
|
||||||
|
<img src="image/plugin.png" alt="Plugin preview" width="1100px">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
> [!IMPORTANT]
|
||||||
|
> Requires Yazi v25.5.28+
|
||||||
|
|
||||||
|
```sh
|
||||||
|
# Manual installation
|
||||||
|
|
||||||
|
# Linux/macOS
|
||||||
|
git clone https://gitlab.com/WhoSowSee/whoosh.yazi.git ~/.config/yazi/plugins/whoosh.yazi
|
||||||
|
|
||||||
|
# Windows
|
||||||
|
git clone https://gitlab.com/WhoSowSee/whoosh.yazi.git $env:APPDATA\yazi\config\plugins\whoosh.yazi
|
||||||
|
```
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
Add this to your `init.lua`
|
||||||
|
|
||||||
|
```lua
|
||||||
|
-- You can configure your bookmarks using simplified syntax
|
||||||
|
local bookmarks = {
|
||||||
|
{ tag = "Desktop", path = "~/Desktop", key = "d" },
|
||||||
|
{ tag = "Documents", path = "~/Documents", key = "D" },
|
||||||
|
{ tag = "Downloads", path = "~/Downloads", key = "o" },
|
||||||
|
}
|
||||||
|
|
||||||
|
-- You can also configure bookmarks with key arrays
|
||||||
|
local bookmarks = {
|
||||||
|
{ tag = "Desktop", path = "~/Desktop", key = { "d", "D" } },
|
||||||
|
{ tag = "Documents", path = "~/Documents", key = { "d", "d" } },
|
||||||
|
{ tag = "Downloads", path = "~/Downloads", key = "o" },
|
||||||
|
}
|
||||||
|
|
||||||
|
-- Windows-specific bookmarks
|
||||||
|
if ya.target_family() == "windows" then
|
||||||
|
local home_path = os.getenv("USERPROFILE")
|
||||||
|
table.insert(bookmarks, {
|
||||||
|
tag = "Scoop Local",
|
||||||
|
path = os.getenv("SCOOP") or (home_path .. "\\scoop"),
|
||||||
|
key = "p"
|
||||||
|
})
|
||||||
|
table.insert(bookmarks, {
|
||||||
|
tag = "Scoop Global",
|
||||||
|
path = os.getenv("SCOOP_GLOBAL") or "C:\\ProgramData\\scoop",
|
||||||
|
key = "P"
|
||||||
|
})
|
||||||
|
end
|
||||||
|
|
||||||
|
require("whoosh"):setup {
|
||||||
|
-- Configuration bookmarks (cannot be deleted through plugin)
|
||||||
|
bookmarks = bookmarks,
|
||||||
|
|
||||||
|
-- Notification settings
|
||||||
|
jump_notify = false,
|
||||||
|
|
||||||
|
-- Key generation for auto-assigning bookmark keys
|
||||||
|
keys = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ",
|
||||||
|
|
||||||
|
-- Configure the built-in menu action hotkeys
|
||||||
|
-- false - hide menu item
|
||||||
|
special_keys = {
|
||||||
|
create_temp = "<Enter>", -- Create a temporary bookmark from the menu
|
||||||
|
fuzzy_search = "<Space>", -- Launch fuzzy search (fzf)
|
||||||
|
history = "<Tab>", -- Open directory history
|
||||||
|
previous_dir = "<Backspace>", -- Jump back to the previous directory
|
||||||
|
},
|
||||||
|
|
||||||
|
-- File path for storing user bookmarks
|
||||||
|
bookmarks_path = (ya.target_family() == "windows" and os.getenv("APPDATA") .. "\\yazi\\config\\plugins\\whoosh.yazi\\bookmarks") or
|
||||||
|
(os.getenv("HOME") .. "/.config/yazi/plugins/whoosh.yazi/bookmarks"),
|
||||||
|
|
||||||
|
-- Replace home directory with "~"
|
||||||
|
home_alias_enabled = true, -- Toggle home aliasing in displays
|
||||||
|
|
||||||
|
-- Path truncation in navigation menu
|
||||||
|
path_truncate_enabled = false, -- Enable/disable path truncation
|
||||||
|
path_max_depth = 3, -- Maximum path depth before truncation
|
||||||
|
|
||||||
|
-- Path truncation in fuzzy search (fzf)
|
||||||
|
fzf_path_truncate_enabled = false, -- Enable/disable path truncation in fzf
|
||||||
|
fzf_path_max_depth = 5, -- Maximum path depth before truncation in fzf
|
||||||
|
|
||||||
|
-- Long folder name truncation
|
||||||
|
path_truncate_long_names_enabled = false, -- Enable in navigation menu
|
||||||
|
fzf_path_truncate_long_names_enabled = false, -- Enable in fzf
|
||||||
|
path_max_folder_name_length = 20, -- Max length in navigation menu
|
||||||
|
fzf_path_max_folder_name_length = 20, -- Max length in fzf
|
||||||
|
|
||||||
|
-- History directory settings
|
||||||
|
history_size = 10, -- Number of directories in history (default 10)
|
||||||
|
history_fzf_path_truncate_enabled = false, -- Enable/disable path truncation by depth for history
|
||||||
|
history_fzf_path_max_depth = 5, -- Maximum path depth before truncation for history (default 5)
|
||||||
|
history_fzf_path_truncate_long_names_enabled = false, -- Enable/disable long folder name truncation for history
|
||||||
|
history_fzf_path_max_folder_name_length = 30, -- Maximum length for folder names in history (default 30)
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Add this to your `keymap.toml`:
|
||||||
|
|
||||||
|
```toml
|
||||||
|
[[mgr.prepend_keymap]]
|
||||||
|
on = "["
|
||||||
|
run = "plugin whoosh jump_by_key"
|
||||||
|
desc = "Jump bookmark by key"
|
||||||
|
|
||||||
|
# Direct fuzzy search access
|
||||||
|
[[mgr.prepend_keymap]]
|
||||||
|
on = "}"
|
||||||
|
run = "plugin whoosh jump_by_fzf"
|
||||||
|
desc = "Direct fuzzy search for bookmarks"
|
||||||
|
|
||||||
|
# Basic bookmark operations
|
||||||
|
[[mgr.prepend_keymap]]
|
||||||
|
on = [ "]", "a" ]
|
||||||
|
run = "plugin whoosh save"
|
||||||
|
desc = "Add bookmark (hovered file/directory)"
|
||||||
|
|
||||||
|
[[mgr.prepend_keymap]]
|
||||||
|
on = [ "]", "A" ]
|
||||||
|
run = "plugin whoosh save_cwd"
|
||||||
|
desc = "Add bookmark (current directory)"
|
||||||
|
|
||||||
|
# Temporary bookmarks
|
||||||
|
[[mgr.prepend_keymap]]
|
||||||
|
on = [ "]", "t" ]
|
||||||
|
run = "plugin whoosh save_temp"
|
||||||
|
desc = "Add temporary bookmark (hovered file/directory)"
|
||||||
|
|
||||||
|
[[mgr.prepend_keymap]]
|
||||||
|
on = [ "]", "T" ]
|
||||||
|
run = "plugin whoosh save_cwd_temp"
|
||||||
|
desc = "Add temporary bookmark (current directory)"
|
||||||
|
|
||||||
|
# Jump to bookmarks
|
||||||
|
[[mgr.prepend_keymap]]
|
||||||
|
on = "<A-k>"
|
||||||
|
run = "plugin whoosh jump_key_k"
|
||||||
|
desc = "Jump directly to bookmark with key k"
|
||||||
|
|
||||||
|
[[mgr.prepend_keymap]]
|
||||||
|
on = [ "]", "f" ]
|
||||||
|
run = "plugin whoosh jump_by_fzf"
|
||||||
|
desc = "Jump bookmark by fzf"
|
||||||
|
|
||||||
|
# Delete bookmarks
|
||||||
|
[[mgr.prepend_keymap]]
|
||||||
|
on = [ "]", "d" ]
|
||||||
|
run = "plugin whoosh delete_by_key"
|
||||||
|
desc = "Delete bookmark by key"
|
||||||
|
|
||||||
|
[[mgr.prepend_keymap]]
|
||||||
|
on = [ "]", "D" ]
|
||||||
|
run = "plugin whoosh delete_by_fzf"
|
||||||
|
desc = "Delete bookmarks by fzf (use TAB to select multiple)"
|
||||||
|
|
||||||
|
[[mgr.prepend_keymap]]
|
||||||
|
on = [ "]", "C" ]
|
||||||
|
run = "plugin whoosh delete_all"
|
||||||
|
desc = "Delete all user bookmarks"
|
||||||
|
|
||||||
|
# Rename bookmarks
|
||||||
|
[[mgr.prepend_keymap]]
|
||||||
|
on = [ "]", "r" ]
|
||||||
|
run = "plugin whoosh rename_by_key"
|
||||||
|
desc = "Rename bookmark by key"
|
||||||
|
|
||||||
|
[[mgr.prepend_keymap]]
|
||||||
|
on = [ "]", "R" ]
|
||||||
|
run = "plugin whoosh rename_by_fzf"
|
||||||
|
desc = "Rename bookmark by fzf"
|
||||||
|
```
|
||||||
|
|
||||||
|
## Features
|
||||||
|
|
||||||
|
### Temporary Bookmarks
|
||||||
|
|
||||||
|
Session-only bookmarks that don't persist between Yazi restarts:
|
||||||
|
|
||||||
|
- Create using `save_temp` or `save_cwd_temp` commands
|
||||||
|
- Identified with [TEMP] prefix in navigation menu and fzf
|
||||||
|
- Automatically cleared when Yazi restarts
|
||||||
|
- Can be deleted individually or all at once with `delete_all_temp`
|
||||||
|
|
||||||
|
### Directory History
|
||||||
|
|
||||||
|
<div style="text-align: center;">
|
||||||
|
<img src="image/history.png" alt="History preview" width="1100px">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
The plugin supports a smart directory history system:
|
||||||
|
|
||||||
|
- **Independent history per tab** - Each tab maintains its own history
|
||||||
|
- **Automatic tracking** - History updates when navigating between directories
|
||||||
|
- **Current directory filtering** - Current directory is excluded from history display
|
||||||
|
- **Configurable size** - Number of stored directories is configurable (default 10)
|
||||||
|
- **Separate truncation settings** - Independent path display settings for history
|
||||||
|
|
||||||
|
**System behavior:**
|
||||||
|
|
||||||
|
- History is empty on first yazi startup
|
||||||
|
- Previous directories are added to history only when navigating to a new directory
|
||||||
|
- New items are added to the beginning of the list (sorted from newest to oldest)
|
||||||
|
- When limit is exceeded, oldest items are removed
|
||||||
|
- Duplicates are automatically removed and moved to the top
|
||||||
|
|
||||||
|
### Navigation Menu Features
|
||||||
|
|
||||||
|
When using `jump_by_key`, you get access to a smart navigation menu with:
|
||||||
|
|
||||||
|
- **Create temporary bookmark** - Press `<Enter>` to quickly bookmark current directory
|
||||||
|
- **Fuzzy search** - Press `<Space>` to open fzf search
|
||||||
|
- **Directory history** - Press `<Tab>` to browse history via fzf (only if history exists)
|
||||||
|
- **Previous directory** - Press `<Backspace>` to return to the previous directory (if available)
|
||||||
|
- **All bookmarks** - Both permanent and temporary bookmarks with clear visual distinction
|
||||||
|
|
||||||
|
### Directory History Navigation
|
||||||
|
|
||||||
|
The plugin provides two ways to navigate history:
|
||||||
|
|
||||||
|
1. **Through navigation menu** - When using `jump_by_key`, press `<Tab>` to access history
|
||||||
|
2. **Direct access** - Trigger the configured history special key (default `<Tab>`) for direct fzf access to history
|
||||||
|
|
||||||
|
#### Neovim `<Tab>` keymap (yazi.nvim)
|
||||||
|
|
||||||
|
When this plugin runs inside [mikavilpas/yazi.nvim](https://github.com/mikavilpas/yazi.nvim), the default `<Tab>` mapping (`cycle_open_buffers`) is handled by Neovim before Yazi sees it. If pressing `<Tab>` returns you to the buffer where Yazi was opened, disable or remap that key in the yazi.nvim configuration so the directory history picker can receive it:
|
||||||
|
|
||||||
|
```lua
|
||||||
|
opts = {
|
||||||
|
keymaps = {
|
||||||
|
cycle_open_buffers = false,
|
||||||
|
},
|
||||||
|
-- OR
|
||||||
|
keymaps = {
|
||||||
|
cycle_open_buffers = "<S-Tab>",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
```
|
||||||
|
|
||||||
|
Full config file example:
|
||||||
|
|
||||||
|
```lua
|
||||||
|
return {
|
||||||
|
"mikavilpas/yazi.nvim",
|
||||||
|
version = "*",
|
||||||
|
event = "VeryLazy",
|
||||||
|
dependencies = { { "nvim-lua/plenary.nvim", lazy = true } },
|
||||||
|
keys = {
|
||||||
|
{ "<leader>-", mode = { "n", "v" }, "<cmd>Yazi<cr>", desc = "Open Yazi" },
|
||||||
|
{ "<leader>cw", "<cmd>Yazi cwd<cr>", desc = "Open Yazi at CWD" },
|
||||||
|
},
|
||||||
|
opts = {
|
||||||
|
open_for_directories = false,
|
||||||
|
keymaps = {
|
||||||
|
cycle_open_buffers = false,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
init = function() vim.g.loaded_netrwPlugin = 1 end,
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
If you prefer to keep Neovim's `<Tab>` binding but still want access to the history picker, remap whoosh's shortcut via `special_keys` in the `init.lua` file:
|
||||||
|
|
||||||
|
```lua
|
||||||
|
require("whoosh"):setup {
|
||||||
|
special_keys = {
|
||||||
|
history = "<H>",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Bookmark Types
|
||||||
|
|
||||||
|
The plugin supports three types of bookmarks:
|
||||||
|
|
||||||
|
1. **Configuration bookmarks** - Defined in `init.lua`, cannot be deleted through the plugin
|
||||||
|
2. **User bookmarks** - Created during usage, saved to file, can be deleted
|
||||||
|
3. **Temporary bookmarks** - Session-only, stored in memory, cleared on restart
|
||||||
|
|
||||||
|
When paths conflict, user bookmarks override configuration bookmarks in the display
|
||||||
|
|
||||||
|
## Configuration Options
|
||||||
|
|
||||||
|
The plugin supports the following configuration options in the `setup()` function:
|
||||||
|
|
||||||
|
| Option | Type | Default | Description |
|
||||||
|
| -------------------------------------- | ------- | ----------------------- | ------------------------------------------------------------------ |
|
||||||
|
| `bookmarks` | table | `{}` | Pre-configured bookmarks (cannot be deleted through plugin) |
|
||||||
|
| `jump_notify` | boolean | `false` | Show notification when jumping to a bookmark |
|
||||||
|
| `keys` | string | `"0123456789abcdef..."` | Characters used for auto-generating bookmark keys |
|
||||||
|
| `special_keys` | table | `see description` | Override the built-in menu shortcuts (Enter/Space/Tab/Backspace); set to `false` to hide an item |
|
||||||
|
| `path` | string | OS-dependent | File path where user bookmarks are stored |
|
||||||
|
| `home_alias_enabled` | boolean | `true` | Replace paths under the user's home directory with `~` |
|
||||||
|
| `path_truncate_enabled` | boolean | `false` | Enable/disable path truncation in navigation menu |
|
||||||
|
| `path_max_depth` | number | `3` | Maximum path depth before truncation with "…" in navigation menu |
|
||||||
|
| `fzf_path_truncate_enabled` | boolean | `false` | Enable/disable path truncation in fuzzy search (fzf) |
|
||||||
|
| `fzf_path_max_depth` | number | `5` | Maximum path depth before truncation with "…" in fzf |
|
||||||
|
| `path_truncate_long_names_enabled` | boolean | `false` | Enable/disable long folder name truncation in navigation menu |
|
||||||
|
| `fzf_path_truncate_long_names_enabled` | boolean | `false` | Enable/disable long folder name truncation in fzf |
|
||||||
|
| `path_max_folder_name_length` | number | `20` | Maximum folder name length before truncation in navigation menu |
|
||||||
|
| `fzf_path_max_folder_name_length` | number | `20` | Maximum folder name length before truncation in fzf |
|
||||||
|
| `history_size` | number | `10` | Number of directories to keep in Tab history |
|
||||||
|
| `history_fzf_path_truncate_enabled` | boolean | `false` | Enable/disable path truncation by depth for Tab history display |
|
||||||
|
| `history_fzf_path_max_depth` | number | `5` | Maximum path depth before truncation for Tab history |
|
||||||
|
| `history_fzf_path_truncate_long_names_enabled` | boolean | `false` | Enable/disable long folder name truncation for Tab history |
|
||||||
|
| `history_fzf_path_max_folder_name_length` | number | `30` | Maximum folder name length before truncation for Tab history |
|
||||||
|
|
||||||
|
**Note:** Configuration bookmarks defined in the `bookmarks` option cannot be deleted through the plugin interface. They serve as permanent, protected bookmarks that are always available
|
||||||
|
|
||||||
|
### Bookmark Configuration
|
||||||
|
|
||||||
|
The plugin supports a simplified bookmark syntax in the configuration:
|
||||||
|
|
||||||
|
```lua
|
||||||
|
-- Simplified syntax (recommended)
|
||||||
|
local bookmarks = {
|
||||||
|
{ tag = "Desktop", path = "~/Desktop", key = "d" },
|
||||||
|
{ tag = "Projects", path = "~/Projects", key = "p" },
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
**Features of simplified syntax:**
|
||||||
|
|
||||||
|
- **Tilde expansion** - `~` is automatically expanded to home directory
|
||||||
|
- **Path normalization** - Separators `/` are automatically converted for your OS
|
||||||
|
- **Automatic trailing separator** - Directories get proper trailing separators
|
||||||
|
|
||||||
|
### Path Truncation
|
||||||
|
|
||||||
|
The path truncation feature can be controlled by two options:
|
||||||
|
|
||||||
|
- `path_truncate_enabled` (boolean, default: `false`) - Enables or disables path truncation entirely. If not specified in config, defaults to `false`
|
||||||
|
- `path_max_depth` (number, default: `3`) - Controls how long paths are displayed in the navigation menu
|
||||||
|
|
||||||
|
When `path_truncate_enabled` is explicitly set to `true` and a path has more directory levels than `path_max_depth`, the beginning parts are replaced with "…" to keep the display concise.
|
||||||
|
|
||||||
|
**By default (when `path_truncate_enabled` is not specified or set to `false`):**
|
||||||
|
|
||||||
|
- All paths are displayed in full without truncation
|
||||||
|
- `C:\Users\Documents\Projects\MyProject` → `C:\Users\Documents\Projects\MyProject` (full path)
|
||||||
|
|
||||||
|
**With `path_truncate_enabled = true` and `path_max_depth = 3`:**
|
||||||
|
|
||||||
|
- `C:\Users\Documents` → `C:\Users\Documents` (no change, 3 parts)
|
||||||
|
- `C:\Users\Documents\Projects\MyProject` → `C:\…\Projects\MyProject` (truncated, 5 parts)
|
||||||
|
- `~/.config/yazi/plugins/whoosh.yazi` → `~\…\plugins\whoosh.yazi` (truncated, 5 parts)
|
||||||
|
|
||||||
|
#### Folder Name Length Truncation
|
||||||
|
|
||||||
|
Long folder names can be truncated to improve readability in both navigation menu and fuzzy search:
|
||||||
|
|
||||||
|
**Configuration Options:**
|
||||||
|
|
||||||
|
- `path_truncate_long_names_enabled` (boolean, default: `false`) - Enable/disable for navigation menu
|
||||||
|
- `fzf_path_truncate_long_names_enabled` (boolean, default: `false`) - Enable/disable for fuzzy search (fzf)
|
||||||
|
- `path_max_folder_name_length` (number, default: `20`) - Maximum length for folder names in navigation menu
|
||||||
|
- `fzf_path_max_folder_name_length` (number, default: `20`) - Maximum length for folder names in fuzzy search
|
||||||
|
|
||||||
|
**How it works:**
|
||||||
|
|
||||||
|
- Individual folder names longer than the specified limit are truncated to 40% of the limit + "..."
|
||||||
|
- This truncation is applied to each folder name separately and works independently of depth-based path truncation
|
||||||
|
- Both truncation methods can be used together for optimal display
|
||||||
|
- Windows drive letters (e.g., `C:\`) are handled specially and never truncated
|
||||||
|
|
||||||
|
**Examples with `path_max_folder_name_length = 20`:**
|
||||||
|
|
||||||
|
- `VeryLongFolderNameThatExceedsLimit` → `VeryLongF…` (9 chars + "…")
|
||||||
|
- `C:\VeryLongFolderNameThatExceedsLimit\Documents` → `C:\VeryLongF…\Documents`
|
||||||
|
- `ShortName` → `ShortName` (no change, under limit)
|
||||||
|
- `/home/VeryLongFolderNameThatExceedsLimit/projects` → `/home/VeryLongF…/projects`
|
||||||
|
|
||||||
|
**Combined with depth truncation:**
|
||||||
|
|
||||||
|
When both folder name truncation and depth-based truncation are enabled, folder names are shortened first, then depth truncation is applied:
|
||||||
|
|
||||||
|
- Original: `C:\Users\VeryLongFolderNameThatExceedsLimit\Documents\Projects\MyProject`
|
||||||
|
- After folder name truncation: `C:\Users\VeryLongF…\Documents\Projects\MyProject`
|
||||||
|
- After depth truncation (max_depth=3): `C:\…\Projects\MyProject`
|
||||||
|
|
||||||
|
This feature significantly improves readability in deeply nested directory structures while preserving the most relevant path information.
|
||||||
|
|
||||||
|
## Available Commands
|
||||||
|
|
||||||
|
| Command | Description |
|
||||||
|
| ------------------ | ------------------------------------------------------------- |
|
||||||
|
| `save` | Add bookmark for hovered file/directory |
|
||||||
|
| `save_cwd` | Add bookmark for current working directory |
|
||||||
|
| `save_temp` | Add temporary bookmark for hovered file/directory |
|
||||||
|
| `save_cwd_temp` | Add temporary bookmark for current working directory |
|
||||||
|
| `jump_by_key` | Open navigation menu to jump to bookmark by key |
|
||||||
|
| `jump_key_<keys>` | Jump instantly to bookmark matching the provided key sequence |
|
||||||
|
| `jump_by_fzf` | Open fuzzy search to jump to bookmark |
|
||||||
|
| `delete_by_key` | Delete bookmark by selecting with key |
|
||||||
|
| `delete_by_fzf` | Delete multiple bookmarks using fzf (TAB to select) |
|
||||||
|
| `delete_all` | Delete all user-created bookmarks (excludes config bookmarks) |
|
||||||
|
| `delete_all_temp` | Delete all temporary bookmarks |
|
||||||
|
| `rename_by_key` | Rename bookmark by selecting with key |
|
||||||
|
| `rename_by_fzf` | Rename bookmark using fuzzy search |
|
||||||
|
|
||||||
|
### Direct Key Shortcuts
|
||||||
|
|
||||||
|
You can jump without opening the menu by calling the plugin with an inline key sequence:
|
||||||
|
|
||||||
|
- `plugin whoosh jump_key_<keys>` - inline sequence such as `jump_key_k`, `jump_key_<Space>`, or `jump_key_bb`.
|
||||||
|
|
||||||
|
Sequences must be provided inline; whitespace-separated forms are not supported. The format matches the bookmark editing prompt, so you can mix plain characters, comma-separated tokens, and special keys like `<Space>` or `<A-l>`.
|
||||||
|
|
||||||
|
### Navigation Menu Controls
|
||||||
|
|
||||||
|
When using `jump_by_key`, the following special controls are available:
|
||||||
|
|
||||||
|
| Default key | Action |
|
||||||
|
| ------------ | ----------------------------------------------- |
|
||||||
|
| `<Enter>` | Create temporary bookmark for current directory |
|
||||||
|
| `<Space>` | Open fuzzy search |
|
||||||
|
| `<Tab>` | Open directory history (only if history exists) |
|
||||||
|
| `<Backspace>` | Return to previous directory (if available) |
|
||||||
|
| `[a-zA-Z0-9]` | Jump to bookmark with corresponding key |
|
||||||
|
|
||||||
|
## Inspiration
|
||||||
|
|
||||||
|
- [yamb](https://github.com/h-hg/yamb.yazi)
|
||||||
|
- [bunny](https://github.com/stelcodes/bunny.yazi)
|
||||||
16
yazi/.config/yazi/plugins/whoosh.yazi/bookmarks
Normal file
16
yazi/.config/yazi/plugins/whoosh.yazi/bookmarks
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
zshrc /home/liph/dotfiles/zshrc z
|
||||||
|
yazi /home/liph/dotfiles/yazi/.config/yazi y
|
||||||
|
tank /mnt/tank t,t
|
||||||
|
podman /mnt/flash1/podman t,p
|
||||||
|
ohmyposh /home/liph/dotfiles/ohmyposh/.config/ohmyposh d,o
|
||||||
|
nvim /home/liph/dotfiles/nvim/.config/nvim/ n,n,n
|
||||||
|
neovim_plug /home/liph/dotfiles/nvim/.config/nvim/lua/plugins/ n,p
|
||||||
|
mnt /mnt m
|
||||||
|
kitty /home/liph/dotfiles/kitty/.config/kitty k
|
||||||
|
hyprland /home/liph/dotfiles/hyprland/.config/hypr h,l
|
||||||
|
home /home/liph f
|
||||||
|
Downloads /home/liph/Downloads D,D
|
||||||
|
dotfiles /home/liph/dotfiles d,d
|
||||||
|
Documents /home/liph/Documents D,d
|
||||||
|
.config /home/liph/.config c
|
||||||
|
aerc /home/liph/dotfiles/aerc/.config/aerc d,a
|
||||||
BIN
yazi/.config/yazi/plugins/whoosh.yazi/image/history.png
Normal file
BIN
yazi/.config/yazi/plugins/whoosh.yazi/image/history.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 2.4 MiB |
BIN
yazi/.config/yazi/plugins/whoosh.yazi/image/plugin.png
Normal file
BIN
yazi/.config/yazi/plugins/whoosh.yazi/image/plugin.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.4 MiB |
1742
yazi/.config/yazi/plugins/whoosh.yazi/main.lua
Normal file
1742
yazi/.config/yazi/plugins/whoosh.yazi/main.lua
Normal file
File diff suppressed because it is too large
Load Diff
0
yazi/.config/yazi/plugins/whoosh.yazi/test.file
Normal file
0
yazi/.config/yazi/plugins/whoosh.yazi/test.file
Normal file
Reference in New Issue
Block a user