`which` popup renders without a border, unlike other popups
featureneeds info
### `ya env` output
```Shell
Yazi
Yazi 26.5.6 (Arch Linux 2026-06-15)
Backtrace: None
Ya
Version: 26.5.6 (77a6e8dc 2026-07-29)
Debug : true
Triple : x86_64-unknown-linux-gnu (linux-x86_64)
Rustc : 1.97.1 (8bab26f4 2026-07-14)
Config
Init : /home/qvnt33/.config/yazi/init.lua (611 chars)
Yazi : /home/qvnt33/.config/yazi/yazi.toml (3291 chars)
Keymap : /home/qvnt33/.config/yazi/keymap.toml (10187 chars)
Theme : /home/qvnt33/.config/yazi/theme.toml (2916 chars)
VFS : /home/qvnt33/.config/yazi/vfs.toml (No such file or directory (os error 2))
Package : /home/qvnt33/.config/yazi/package.toml (1509 chars)
Dark/light flavor: ArcSwapAny("") / ArcSwapAny("")
Emulator
TERM : Some("tmux-256color")
TERM_PROGRAM : Some("tmux")
TERM_PROGRAM_VERSION: Some("3.7b")
Brand.from_env : Some(Ghostty)
Emulator.detect : Emulator { kind: Left(Ghostty), version: "ghostty 1.3.1-arch2", light: false, csi_16t: (9, 21), force_16t: false }
Adapter
Adapter.matches : Kgp
Dimension.available: Dimension { cols: 105, rows: 23, width: 945, height: 483 }
Desktop
XDG_SESSION_TYPE : Some("wayland")
WAYLAND_DISPLAY : Some("wayland-1")
DISPLAY : Some(":0")
NIRI_SOCKET : None
SWAYSOCK : Some("/run/user/1000/sway-ipc.1000.724.sock")
HYPRLAND_INSTANCE_SIGNATURE: None
WAYFIRE_SOCKET : None
SSH
shared.in_ssh_connection: false
WSL
WSL: false
Variables
SHELL : Some("/usr/bin/zsh")
EDITOR : Some("nvim")
VISUAL : Some("nvim")
YAZI_FILE_ONE : None
YAZI_CONFIG_HOME : None
YAZI_ZOXIDE_OPTS : None
SSH_AUTH_SOCK : None
FZF_DEFAULT_OPTS : Some("--height=50% --preview-window=right:70%:wrap --layout=reverse --border=rounded --exact --cycle --info=inline --ignore-case --scrollbar=▐ --wrap --highlight-line --ansi --color=fg:#f8f8f2,bg:#282a36,hl:#bd93f9 --color=fg+:#f8f8f2,bg+:#44475a,hl+:#bd93f9 --color=info:#ffb86c,prompt:#50fa7b,pointer:#ff79c6 --color=marker:#ff79c6,spinner:#ffb86c,header:#6272a4 --bind=tab:down,shift-tab:up --bind=S:preview-down+preview-down+preview-down,D:preview-up+preview-up+preview-up --bind=§:accept,esc:abort")
FZF_DEFAULT_COMMAND: Some("fd --hidden --follow --exclude .git")
Text Opener
default : Some(OpenerRuleArc(OpenerRule { id: Id(24), run: NonEmptyString("nvim %s"), block: true, orphan: false, desc: "NeoVim", for: All, spread: true }))
block-create: Some(OpenerRuleArc(OpenerRule { id: Id(24), run: NonEmptyString("nvim %s"), block: true, orphan: false, desc: "NeoVim", for: All, spread: true }))
block-rename: Some(OpenerRuleArc(OpenerRule { id: Id(24), run: NonEmptyString("nvim %s"), block: true, orphan: false, desc: "NeoVim", for: All, spread: true }))
Multiplexers
TMUX : true
tmux version : tmux 3.7b
tmux build flags : enable-sixel=Supported
ZELLIJ_SESSION_NAME: None
Zellij version : No such file or directory (os error 2)
Dependencies
file : 5.48
ueberzugpp : No such file or directory (os error 2)
ffmpeg/ffprobe: 8.1.2 / 8.1.2
pdftoppm : 26.07.0
magick : 7.1.2-27
fzf : 0.74.1
fd/fdfind : 10.4.2 / No such file or directory (os error 2)
rg : 15.2.0
chafa : No such file or directory (os error 2)
zoxide : 0.10.0
7zz/7z : No such file or directory (os error 2) / 26.02
resvg : No such file or directory (os error 2)
jq : 1.8.2
Clipboard
wl-copy/paste: 2.3.0 / 2.3.0
xclip : No such file or directory (os error 2)
xsel : No such file or directory (os error 2)
Routine
`file -bL --mime-type`: text/plain
```
### Please describe the problem you're trying to solve
### Description
The `which` popup (the keytip menu that appears after pressing a prefix key, e.g. `f`, `g`) is currently rendered as a simple filled block without a border.
Every other popup in the app draws a box with a border: `Confirm`, `Message`, `Select`, `Define`, `Task`, `Run`, `Enter`.
### Note
The `ya` package (Arch, pacman, 26.5.6-4) does not yet have an `env` subcommand, instead it is compiled with the `yazi/target/debug/ya env` command.
### Would you be willing to contribute this feature?
- [x] Yes, I'll give it a shot
### Describe the solution you'd like
### Suggested Change
- add a border field: `SyncCell<StyleFlat>` to the `Which` structure (`yazi-config/src/theme/theme.rs`), matching the template already used in `Confirm` / `Spot` / `Pick`;
- render `Which` using `Block::bordered().border_type(BorderType::Rounded)`.
---
I have working code for this and will open a **PR** request citing this issue.
### Additional context
**Screenshot:** before/after
<img width="1886" height="929" alt="Image" src="https://github.com/user-attachments/assets/96907295-068b-425b-acf1-fa5238b28079" />
### Checklist
- [x] I have searched the existing issues/discussions
- [x] The [latest nightly build](https://yazi-rs.github.io/docs/installation/#binaries) doesn't already have this feature
1 条评论