ohmyzsh/plugins/ghostty-copypaste/ghostty-copypaste.plugin.zsh
2025-10-07 18:22:43 +02:00

43 lines
1.1 KiB
Bash

function zle-copy-to-clipboard {
local selected_text start_pos end_pos
(( $MARK < $CURSOR ))
&& { start_pos=$MARK; end_pos=$CURSOR; }
|| { start_pos=$CURSOR; end_pos=$MARK; }
(( start_pos < 0 || end_pos < 0 ))
&& zle -R && return
selected_text="${BUFFER[$start_pos+1, $end_pos]}"
command -v xclip &> /dev/null
&& ( echo -n "$selected_text" | xclip -selection clipboard )
&& zle -R && return
command -v wl-copy &> /dev/null
&& ( echo -n "$selected_text" | wl-copy )
&& zle -R && return
zle -R
}
function zle-paste-from-clipboard {
local clipboard_content
command -v xclip &> /dev/null
&& clipboard_content=$(xclip -selection clipboard -o 2>/dev/null)
command -v wl-paste &> /dev/null
&& clipboard_content=$(wl-paste --no-newline 2>/dev/null)
[[ -z "$clipboard_content" ]] && return
LBUFFER+="$clipboard_content"
zle -R
}
zle -N zle-copy-to-clipboard
zle -N zle-paste-from-clipboard
# these 2 CSI from ghostty are sent for Ctrl+Shift+C and Ctrl+Shift+V
bindkey '^[[99;6u' zle-copy-to-clipboard
bindkey '^[[118;6u' zle-paste-from-clipboard