Как копировать и вставлять в xterm?

Вопрос или проблема

Левый щелчок в xterm начинает выделение чего-то, что будет скопировано-вставлено.

Двойной левый щелчок выделяет слово.

Тройной левый щелчок выделяет строку.

Все это работает в unity в 11.04. Однако нет возможности скопировать-вставить это выделение в другое место: в меню правого щелчка вставка отключена, а средний щелчок для копирования-вставки не работает.

Так как я могу скопировать выделение из xterm в другое место? Я буду доволен любым методом для этого.

(Я использую стандартную установку без специальной конфигурации на данный момент)

Редактировать: Та же проблема с xedit

Используйте средний щелчок или Shift + Insert

См. X Window selection.

Xterm использует буферы вырезки, а не стандартный буфер обмена X11, используемый для стандартного копирования-вставки, который используют gnome-terminal и большинство других программ для Linux.

Но если вы запустите xterm так:

xterm -ls -xrm 'XTerm*selectToClipboard: true'&

то выделения будут доступны через стандартный буфер обмена.

Подробнее читайте на Копирование и вставка в Xterm | База знаний StarNet – PC X, X Windows, X 11 и многое другое – StarNet

Программа xcb также предоставляет доступ к буферам вырезки из командной строки.

Например, в Trusty Tahr 12.04, запущенного с диспетчером окон lxde, я могу трижды щелкнуть на строку текста в xterm, которая будет выделена и помещена в буфер вырезки 0. Затем я могу запустить
xcb -p 0
что выводит строку на stdout.

По какой-то причине у меня не сработало нажатие обеих кнопок (симулирующих средний щелчок) в xterm, но shift-insert сработал в xterm.

Чтобы копировать между xterm и другими программами/документами/…

Добавьте в файл ~/.Xresources (или создайте):

XTerm*selectToClipboard: true

Затем выполните команду:

xrdb -merge ~/.Xresources

Перезапустите xterm.

Обсуждается аналогичная проблема здесь. Как заметил “strings”:

У X есть два буфера обмена, если вы выделяете что-то в xterm, это попадет
в буферы вырезки, в этом случае вы можете вставить средним щелчком или
shift+insert. это не тот же концепт, что и копировать и вставлять.

Копирование/вставка в xterm сработала для меня, но не в приложение за его пределами, например, в gedit. По ссылке выше я установил parcellite, и это устранило проблему,

sudo apt-get install parcellite

Обновление: Если “вставка” не работает с “shift-insert”, то используйте среднюю кнопку мыши или, если ее нет, одновременно нажмите левую и правую кнопки для вставки.

Когда вы копируете из xterm, просто используйте Shift+Средний щелчок, чтобы вставить что-то в gedit или другой редактор в xterm, например, mcedit

Чтобы скопировать текст в Xterm, сначала выделите текст, а затем нажмите shift+PrtScr. Чтобы вставить текст в Xterm, используйте shift+Insert.

Это не совсем отвечает на ваш вопрос, но мне это помогло, поэтому я ставлю это здесь, возможно, это поможет кому-то еще:

  1. Скопируйте то, что вы хотите из xterm, выделив текст
  2. Откройте вторую копию xterm и ваш любимый текстовый редактор (я использую vim)
  3. Используйте Shift+Insert (или средний щелчок), чтобы вставить в текстовый редактор
  4. Сохраните файл.
  5. При необходимости откройте файл с графическим текстовым редактором (например, gedit)
  6. Скопируйте ваш текст и вставьте его в приложение, которое вам нужно.

Когда вы выделяете текст, он автоматически помещается в буфер вырезки (как буфер обмена). Когда вы используете Копировать, из меню или с помощью горячих клавиш, он идет в основной буфер обмена.

Чтобы вставить из буфера вырезки в ваш xterm, щелкните средним. Чтобы вставить из буфера обмена в ваш xterm, нажмите с shift средним.

Xterm использует основное выделение X11, которое отличается от буфера обмена. Программа xsel может быть использована для копирования основного выделения в буфер обмена:

xsel -op | xsel -ib

Для этого я настроил Meta-c в Fluxbox.

Mod4 c :Exec xsel -op | xsel -ib

Это удобно для программ Windows, которые поддерживают только один буфер обмена (например, VirtualBox).

Если вы хотите сохранить поддержку PRIMARY и по-прежнему иметь возможность использовать CLIPBOARD (это круто, так как фактически вы получаете два буфера обмена вместо одного), вы можете игнорировать selectToClipboard и вместо этого установить ресурс translations:

*VT100*translations:    #override \n\
    Ctrl <KeyPress> Insert: copy-selection(CLIPBOARD) \n\
    Shift <KeyPress> Insert: insert-selection(CLIPBOARD)

После этого, если вы выделите текст мышью, он будет скопирован в PRIMARY, и средний щелчок мышью вставит текст из PRIMARY, так же, как и xterm по умолчанию.

В то же время, Ctrl+Insert скопирует текст в CLIPBOARD, и Shift+Insert вставит его, аналогично современным графическим приложениям.

Если вы хотите, можете добавить больше клавишных привязок аналогичным образом, и вы также можете иметь больше двух буферов обмена, используя буферы вырезок X (они могут быть обозначены как CUT_BUFFER0, CUT_BUFFER1 и т.д.). Подробнее о буферах вырезок X здесь.

Также смотрите этот вопрос.

Смотрите здесь объяснение проблем с вставкой в xterms и современные приложения/менеджеры окон:
http://www.davidsimmons.com/soft/xtermhacks/#copynpaste

Что сработало для меня, было взято из https://www.davidsimmons.com/soft/xtermhacks/#copynpastenopatch

Резюме:
Добавьте в ~/.Xresources

XTerm*VT100.translations: #override <Btn1Up>: select-end(PRIMARY, CLIPBOARD, CUT_BUFFER0)

затем выполните xrdb -merge ~/.Xresources.

Команда Emacs (поместите ее в ваш инициализационный файл ~/.emacs), чтобы игнорировать selection и использовать primary:

;; Получить выделенный текст из любого окна,
;; например, выделите мышью в xterm
;; затем нажмите Super-V в Emacs.

(global-set-key [(super v)]
        (defun yank-x11-primary ()
          "Вставить выделенный текст x windows."
          (interactive)
          (insert (gui-get-primary-selection))))

Лично я хотел, чтобы поведение xterm совпадало с gnome-terminal, который работает гораздо более интуитивно по умолчанию:

  • Копировать с помощью Ctrl+Shift+C
  • Вставить с помощью Ctrl+Shift+V
  • Копировать/Вставить в другие приложения должно “просто работать”

Чтобы получить такое поведение, я использовал следующую конфигурацию ~/.Xresources:

*VT100*translations:      #override \n\
    Ctrl Shift <Key>C:  copy-selection(SELECT) \n\
    Ctrl Shift <Key>V:  insert-selection(SELECT)

xterm*selectToClipboard: true

После редактирования этого файла, я должен был выполнить sudo xrdb ~/.Xresources, затем перезапустить xterm. (Обратите внимание, что эта команда xrdb заменяет любые текущие загруженные настройки – вы можете использовать xrdb -edit /tmp/xresources, чтобы сбросить текущие загруженные настройки в /tmp/xresources).

У меня есть, в остальном полезный, менеджер буфера обмена Glipper, работающий на 12.04.
Если я выделю символы в xterm, они появятся в новой записи Glipper.
Если я выберу эту запись (кнопку) из этой последовательности, следующая вставка будет из нее и вставит эти символы в любое приложение.

.

Ответ или решение

Копирование и вставка текста в среде xterm может показаться сложной задачей для тех, кто привык к современным графическим терминалам, таким как gnome-terminal, где указанные операции осуществляются максимально просто и понятно. Однако, процедурная логика xterm основана на традиционных принципах X Window System, которые остаются неизменными на протяжении многих лет. Разберем подробности этого процесса с точки зрения технологии, применимости и реализации.

Теория

В xterm используется механизм, называемый первичной выборкой (PRIMARY), который значительно отличается от стандартного буфера обмена (CLIPBOARD), применяемого в современных средах. Когда вы выделяете текст в xterm, он помещается в первичную выборку, а из неё текст можно вставить с помощью средней кнопки мыши. Это отличается от привычного концепта буфера обмена, когда вы должны явно скопировать текст с помощью команды "Копировать", чтобы перенести его в другое приложение.

Кроме того, xterm также поддерживает старую концепцию "вырезных буферов" (cut buffers), что добавляет дополнительный уровень сложности. Эти вырезные буферы позволяют хранить несколько разных выборок одновременно, однако в современных системах это свойство практически не используется из-за неудобства и сложности интеграции с графическими интерфейсами.

Пример

Предположим, что вы хотите скопировать текст из xterm и вставить его в текстовый редактор gedit. Стандартная процедура будет следующей:

  1. Выделите текст в xterm, используя левую кнопку мыши. Текст автоматически будет скопирован в первичную выборку.
  2. Перейдите в gedit или другое приложение, что поддерживает вставку из первичной выборки.
  3. Кликните средней кнопкой мыши в то место, куда хотите вставить текст.

Если ваше устройство не имеет средней кнопки, вы можете имитировать нажатие средней кнопки, одновременно кликнув левую и правую кнопки мыши.

Применение

Чтобы упростить процесс взаимодействия xterm с другими приложениями, можно воспользоваться рядом советов и настроек. Один из самых эффективных подходов — изменение конфигурации xterm для использования стандартного буфера обмена X11:

  1. Откройте или создайте файл ~/.Xresources и добавьте строку:

    XTerm*selectToClipboard: true

    Это позволит автоматически копировать выделенный в xterm текст в системный буфер обмена, по аналогии с современными терминалами.

  2. Примените изменения с помощью команды:

    xrdb -merge ~/.Xresources
  3. Перезапустите xterm, чтобы изменения вступили в силу.

Кроме того, конфигурация ‘translations‘ позволяет расширить возможности использования горячих клавиш:

*VT100*translations:    #override \n\
    Ctrl &lt;KeyPress&gt; Insert: copy-selection(CLIPBOARD) \n\
    Shift &lt;KeyPress&gt; Insert: insert-selection(CLIPBOARD)

Эти настройки позволяют копировать выделенный текст в буфер обмена с использованием возникающей комбинации клавиш, что делает работу в xterm более интуитивной и удобной.

В качестве альтернативы можно использовать внешние программы, такие как parcellite, которые могут помочь управлять содержимым буфера обмена и обеспечивать более гладкий процесс копирования и вставки между приложениями, работая с теми особенностями, которые недоступны или не поддерживаются напрямую в xterm.

В завершение, изучение работы с xterm требует понимания его исторического контекста и архитектурных особенностей X11. Настройка и изменение поведения xterm для работы с современными графическими интерфейсами позволяет более эффективно и функционально использовать его в повседневной работе.

Оцените материал
Добавить комментарий

Капча загружается...