Вопрос или проблема
Левый щелчок в 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.
Это не совсем отвечает на ваш вопрос, но мне это помогло, поэтому я ставлю это здесь, возможно, это поможет кому-то еще:
- Скопируйте то, что вы хотите из xterm, выделив текст
- Откройте вторую копию xterm и ваш любимый текстовый редактор (я использую vim)
- Используйте Shift+Insert (или средний щелчок), чтобы вставить в текстовый редактор
- Сохраните файл.
- При необходимости откройте файл с графическим текстовым редактором (например, gedit)
- Скопируйте ваш текст и вставьте его в приложение, которое вам нужно.
Когда вы выделяете текст, он автоматически помещается в буфер вырезки (как буфер обмена). Когда вы используете Копировать, из меню или с помощью горячих клавиш, он идет в основной буфер обмена.
Чтобы вставить из буфера вырезки в ваш 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. Стандартная процедура будет следующей:
- Выделите текст в xterm, используя левую кнопку мыши. Текст автоматически будет скопирован в первичную выборку.
- Перейдите в gedit или другое приложение, что поддерживает вставку из первичной выборки.
- Кликните средней кнопкой мыши в то место, куда хотите вставить текст.
Если ваше устройство не имеет средней кнопки, вы можете имитировать нажатие средней кнопки, одновременно кликнув левую и правую кнопки мыши.
Применение
Чтобы упростить процесс взаимодействия xterm с другими приложениями, можно воспользоваться рядом советов и настроек. Один из самых эффективных подходов — изменение конфигурации xterm для использования стандартного буфера обмена X11:
-
Откройте или создайте файл
~/.Xresources
и добавьте строку:XTerm*selectToClipboard: true
Это позволит автоматически копировать выделенный в xterm текст в системный буфер обмена, по аналогии с современными терминалами.
-
Примените изменения с помощью команды:
xrdb -merge ~/.Xresources
-
Перезапустите xterm, чтобы изменения вступили в силу.
Кроме того, конфигурация ‘translations
‘ позволяет расширить возможности использования горячих клавиш:
*VT100*translations: #override \n\
Ctrl <KeyPress> Insert: copy-selection(CLIPBOARD) \n\
Shift <KeyPress> Insert: insert-selection(CLIPBOARD)
Эти настройки позволяют копировать выделенный текст в буфер обмена с использованием возникающей комбинации клавиш, что делает работу в xterm более интуитивной и удобной.
В качестве альтернативы можно использовать внешние программы, такие как parcellite
, которые могут помочь управлять содержимым буфера обмена и обеспечивать более гладкий процесс копирования и вставки между приложениями, работая с теми особенностями, которые недоступны или не поддерживаются напрямую в xterm.
В завершение, изучение работы с xterm требует понимания его исторического контекста и архитектурных особенностей X11. Настройка и изменение поведения xterm для работы с современными графическими интерфейсами позволяет более эффективно и функционально использовать его в повседневной работе.