Буфер обміну Bash є внутрішнім для bash, bash не підключається до X-сервера.
Що ви можете зробити, це змінити значення M-w
копіювання виділення до буфера обміну X¹ на додаток до внутрішнього буфера обміну bash. Однак інтеграція bash є досить слабкою, і я не думаю, що існує спосіб отримати доступ до інформації про регіон чи буфера обміну з bash-коду. Ви можете зробити прив'язку клавіш, щоб скопіювати весь рядок у буфер обміну X.
if [[ -n $DISPLAY ]]; then
copy_line_to_x_clipboard () {
printf %s "$READLINE_LINE" | xsel -ib
}
bind -x '"\eW": copy_line_to_x_clipboard'
fi
Якщо ви хочете робити фантазії в оболонці, перейдіть на zsh, який (серед інших переваг) має набагато кращу інтеграцію між редактором рядків та мовою сценаріїв.
if [[ -n $DISPLAY ]]; then
x-copy-region-as-kill () {
zle copy-region-as-kill
print -rn -- "$CUTBUFFER" | xsel -ib
}
x-kill-region () {
zle kill-region
print -rn -- "$CUTBUFFER" | xsel -ib
}
zle -N x-copy-region-as-kill
zle -N x-kill-region
bindkey '\C-w' x-kill-region
bindkey '\ew' x-copy-region-as-kill
fi
¹
Gnome конкретно не має буфера, це взагалі X.
²
Як Баш 4.1, є помилка в ключовому коді парсинга: ключові послідовності , пов'язані з bind -x
не може бути більше двох символів. Я думаю, що bash 4.2 виправляє деякі випадки довших префіксів, але не всі; Я не досліджував деталей.