Разделите буфер обмена между bash и X11

В этом потоке верхний ответ показывает, как скопировать текст, который был предварительно выбран с помощью мыши на гном-терминале, в буфер обмена в X11.

Мой вопрос: Скажем, я скопирую фрагмент текста с терминала с помощью значка set bash и скопируйте быстрые клавиши (т. Е. set-mark + Mw ). Можно ли разделить этот буфер обмена с X11?

EDIT : В исходном вопросе я говорил о совместном использовании буфера обмена с GNOME, но, как указывает Жиль, ниже в GNOME нет буфера обмена (он общий для X), поэтому я обновил этот вопрос.

  • linux - показать изображение на консоли / X11
  • Движение текста в текстовых полях
  • Как я могу следить за сообщениями X-клиента?
  • Использование X-Windows из Windows 8.1
  • Несколько экранов вызывают мерцание (только когда ноутбук заряжается)
  • Графическое исправление ошибок? Исправленный файл op оставил тень «почти drag-n-drop» файла, как его удалить?
  • Ищете простой графический уведомитель в KDE, invokable from bash
  • Запуск приложения в исходной рабочей области вместо текущей рабочей области
  • 2 Solutions collect form web for “Разделите буфер обмена между bash и X11”

    Буфер обмена Bash является внутренним для bash, bash не подключается к X-серверу.

    Что вы можете сделать, так это изменить значение Mw чтобы скопировать выделение в X clipboard¹ в дополнение к внутреннему буфере обмена 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 '\Cw' x-kill-region bindkey '\ew' x-copy-region-as-kill fi 

    ¹ Gnome специально не имеет буфер обмена, это общий для X.
    ² Начиная с bash 4.1, в ключевом синтаксическом коде есть ошибка: последовательности клавиш, связанные с bind -x могут содержать не более двух символов. Я думаю, что bash 4.2 исправляет некоторые случаи более длинных префиксов, но не все из них; Я не изучил детали.

    @Gilles уже дал отличный ответ. Я хотел бы упомянуть о существовании xclip , что также очень полезный способ скопировать вывод терминала в буфер обмена X, просто вложив в него что-нибудь:

     $ cat /etc/passwd | xclip 
    Linux и Unix - лучшая ОС в мире.