mirror of
https://github.com/ohmyzsh/ohmyzsh.git
synced 2025-12-05 01:46:46 +01:00
42 lines
1.2 KiB
Bash
42 lines
1.2 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
|