Skip to content

Do not restrict [input] plugin bindings to normal mode #4075

Description

@paul-dest

ya env output

ya env                                                                                
error: unrecognized subcommand 'env'

Usage: ya <COMMAND>

---

yazi --version                                                                         
Yazi 26.5.6 (aa52643 2026-05-05)
yazi --debug                                                                          

Yazi
    Version  : 26.5.6 (aa52643 2026-05-05)
    Debug    : false
    Triple   : x86_64-unknown-linux-gnu (linux-x86_64)
    Rustc    : 1.95.0 (59807616 2026-04-14)
    Backtrace: None

Ya
    Version: 26.5.6 (aa52643 2026-05-05)

Config
    Init             : /home/paul/.config/yazi/init.lua (32 chars)
    Yazi             : /home/paul/.config/yazi/yazi.toml (2836 chars)
    Keymap           : /home/paul/.config/yazi/keymap.toml (11051 chars)
    Theme            : /home/paul/.config/yazi/theme.toml (No such file or directory (os error 2))
    VFS              : /home/paul/.config/yazi/vfs.toml (No such file or directory (os error 2))
    Package          : /home/paul/.config/yazi/package.toml (447 chars)
    Dark/light flavor: ArcSwapAny("") / ArcSwapAny("")

Emulator
    TERM                : Some("xterm-kitty")
    TERM_PROGRAM        : None
    TERM_PROGRAM_VERSION: None
    Brand.from_env      : Some(Kitty)
    Emulator.detect     : Emulator { kind: Left(Kitty), version: "kitty(0.47.4)", light: false, csi_16t: (9, 18), force_16t: false }

Adapter
    Adapter.matches    : Kgp
    Dimension.available: Dimension { rows: 75, columns: 108, width: 972, height: 1350 }

Desktop
    XDG_SESSION_TYPE           : Some("x11")
    WAYLAND_DISPLAY            : None
    DISPLAY                    : Some(":0")
    SWAYSOCK                   : None
    HYPRLAND_INSTANCE_SIGNATURE: None
    WAYFIRE_SOCKET             : None

SSH
    shared.in_ssh_connection: false

WSL
    WSL: false

Variables
    SHELL              : Some("/usr/bin/fish")
    EDITOR             : Some("dte")
    VISUAL             : None
    YAZI_FILE_ONE      : None
    YAZI_CONFIG_HOME   : None
    YAZI_ZOXIDE_OPTS   : None
    SSH_AUTH_SOCK      : None
    FZF_DEFAULT_OPTS   : None
    FZF_DEFAULT_COMMAND: None

Text Opener
    default     : Some(OpenerRule { id: Id(24), run: NonEmptyString("${EDITOR:-vi} %s"), block: true, orphan: false, desc: "$EDITOR", for: Unix, spread: true })
    block-create: Some(OpenerRule { id: Id(24), run: NonEmptyString("${EDITOR:-vi} %s"), block: true, orphan: false, desc: "$EDITOR", for: Unix, spread: true })
    block-rename: Some(OpenerRule { id: Id(24), run: NonEmptyString("${EDITOR:-vi} %s"), block: true, orphan: false, desc: "$EDITOR", for: Unix, spread: true })

Multiplexers
    TMUX               : false
    tmux version       : No such file or directory (os error 2)
    tmux build flags   : enable-sixel=Unknown
    ZELLIJ_SESSION_NAME: None
    Zellij version     : No such file or directory (os error 2)

Dependencies
    file          : 5.41
    ueberzugpp    : No such file or directory (os error 2)
    ffmpeg/ffprobe: 4.4.2-0 / 4.4.2-0
    pdftoppm      : 22.02.0
    magick        : No such file or directory (os error 2)
    fzf           : 0.73.1
    fd/fdfind     : 10.4.2 / 8.3.1
    rg            : 15.1.0
    chafa         : No such file or directory (os error 2)
    zoxide        : 0.4.3
    7zz/7z        : 21.07 / No such file or directory (os error 2)
    resvg         : No such file or directory (os error 2)
    jq            : 1.8.1

Clipboard
    wl-copy/paste: No such file or directory (os error 2) / No such file or directory (os error 2)
    xclip        : 0.13
    xsel         : 1.2.0

Routine
    `file -bL --mime-type`: text/plain


See https://yazi-rs.github.io/docs/plugins/overview#debugging on how to enable logging or debug runtime errors.

Please describe the problem you're trying to solve

Trying to make a plugin that would allow navigation by directions (left, right, up, down) and interactive finding (default shortcut /) combined as inspired by yazi-rs/plugins:smart-filter.

Unfortunately, running into the restriction that a plugin bind for an input element "is only available in normal mode". Is there a rationale for this restriction?

Would you be willing to contribute this feature?

  • Yes, I'll give it a shot

Describe the solution you'd like

Please remove the restriction that a plugin bind for an input element "is only available in normal mode".

Additional context

  1. As a user of a columnar programmable keyboard with layers (Glove80), I am not dependent on availability of and do not take any benefit from the existence of "modes" (like vi-modes) in software as I manage my "modes" across all software tools on the level of my keyboard.
  2. I am aware that it is possible to use the realtime option with ya.input() and ya.emit("find_do", { value }). But in this case cx.active.current.hovered:found() returns nil. So, it seems to return integer, integer in the "native" find mode only? Is there any way to programmatically switch into the "native" find mode?

Checklist

  • I have searched the existing issues/discussions
  • The latest nightly build doesn't already have this feature

Metadata

Metadata

Assignees

No one assigned

    Labels

    featureNew feature request

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions