File size: 1,815 Bytes
c981f27 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | #!/usr/bin/env zsh
# Key bindings and widget registration for forge plugin
# Register ZLE widgets
zle -N forge-accept-line
zle -N forge-completion
# Custom bracketed-paste handler that wraps dropped file paths in @[] syntax
# and fixes syntax highlighting after paste.
#
# Path detection and wrapping is delegated to `forge zsh format` (Rust) so
# that all parsing logic lives in one well-tested place.
function forge-bracketed-paste() {
# Call the built-in bracketed-paste widget first
zle .$WIDGET "$@"
# Only auto-wrap when the line is a forge command (starts with ':').
# This avoids mangling paths pasted into normal shell commands like
# 'vim /some/path' or 'cat /some/path'.
if [[ "$BUFFER" == :* ]]; then
local formatted=$("$_FORGE_BIN" zsh format --buffer "$BUFFER")
if [[ -n "$formatted" && "$formatted" != "$BUFFER" ]]; then
BUFFER="$formatted"
CURSOR=${#BUFFER}
fi
fi
# Explicitly redisplay the buffer to ensure paste content is visible
# This is critical for large or multiline pastes
zle redisplay
# Reset the prompt to trigger syntax highlighting refresh
# The redisplay before reset-prompt ensures the buffer is fully rendered
zle reset-prompt
}
# Re-applied after zsh-vi-mode's `zvm_init` precmd hook, which rebuilds the
# main/viins/vicmd keymaps and otherwise silently clobbers these bindings.
function _forge_apply_keybindings() {
zle -N bracketed-paste forge-bracketed-paste
bindkey '^M' forge-accept-line
bindkey '^J' forge-accept-line
bindkey '^I' forge-completion
}
_forge_apply_keybindings
# Harmless no-op when zsh-vi-mode (jeffreytse/zsh-vi-mode) isn't loaded.
typeset -ga zvm_after_init_commands
zvm_after_init_commands+=('_forge_apply_keybindings')
|