/ Статьи / Пользова­тельское / Заметка о буферах обмена в Linux /

Заметка о буферах обмена в Linux

Дата публикации: Feb. 2, 2011, 5:29 p.m.
Теги: буфер обмена,
Автор: Brainsburn

Tux Linux

Чтобы ввести вас в суть дела, напомню, что в Linux существует два буфера обмена - primary и clipboard. Они с собой никак не связаны, но не все программы умеют с ними правильно работать, а некоторые - намеренно работают лишь с одним. Поэтому у людей частенько возникают трудности с копированием-вставкой. К тому же, после завершения программы, из которой вы скопировали текст, вставить этот текст вы уже не сможете.

Буфер обмена clipboard схож с буфером в Windows - копирование производится сочетаниями Ctrl-C или Ctrl-Insert, а вставка - Ctrl-V или Shift-Insert. К сожалению, в терминалах сочетание Ctrl-C зарезервировано для завершения процесса, поэтому для копирования и вставки в терминале используются в основном сочетания Shift-Ctrl-C и Shift-Ctrl-V.
Буфер обмена primary специфичен для X11. Любой выделенный текст автоматически попадает в этот буфер обмена.

В связи с этим часто возникает неприятная путаница. К примеру, возьмем обычный браузер Firefox и зайдем на любую веб-страницу, где есть поле для ввода текста. Выделим слово "буфер" (вобщем, слово №1) и нажмем Ctrl-C. Затем выделим слово "обмена". По идее, раз в X11 каждый выделенный текст попадает в буфер обмена, то по Ctrl-V или Shift-Insert должно вставиться слово "обмена", но вставляется слово "буфер". В FireFox так сделано специально, но, честно говоря, мне это не по душе.

Теперь возьмем тот же FireFox, но установим на него плагин Vimperator или Pentadactyl (форк вимператора). В нем сочетание Ctrl-C вообще не работает - для копирования выделенного текста в clipboard можно использовать Y или Shift-C, а для копирования в primary буфер достаточно лишь выделить текст. Логично, что при копировании текста с помощью Y и Ctrl-Insert, текст попадает в оба буфера обмена. Для вставки из clipboard можно использовать двойное нажатие Ctrl-V, а для вставки из primary - Shift-Insert.

То же самое для эмулятора терминала - для вставки из primary буфера используется Shift-Insert, а для clipboard буфера - Shift-Ctrl-V (или через мышиное меню "Вставить"). Однако, такое разделение работает не везде и при вставке текста частенько возникают трудности. К примеру, FireFox и Psi работают исключительно с clipboard. Люди, забывшие, что есть два буфера обмена, часто злятся, когда копируют "слово", затем выделяют "текст" и жмут Shift-Insert в надежде, что "текст" заменится на "слово", но этого не происходит. Для таких случаев следует помнить: Shift-Ctrl-V, Ctrl-V - для вставки из clipboard, а Shift-Insert - для иксового primary.

Неудобства возникают и по причине закрытия программы, из которой был скопирован текст. Решить эту проблему поможет крохотная программка Clipboard Daemon (http://members.chello.nl/~h.lai/gnome-clipboard-daemon/). Она весит 3КБ, поэтому можно скачать архив с бинарным файлом, который будет работать везде, где есть GTK+2. Ее надо лишь запустить командой ./clipboard-daemon и скопированный текст будет продолжать находиться в буфере даже после закрытия программы, из которой он был скопирован. Следует заметить, однако, что после закрытия программы будет сохранен лишь clipboard буфер. Clipboard-daemon можно как и другие программы поставить в автозапуск, к примеру, с помощью файла ~/.xinitrc.

Еще одна полезная программка - xclip (http://sourceforge.net/projects/xclip/). С ее помощью можно оперировать буфером обмена в терминале и скриптах. К примеру:

Занести "asd" в буфер обмена. Стоит заметить, что по умолчанию xclip работает с primary буфером:
echo "asd" | xclip
Занести "asd" в secondary (clipboard) буфер обмена:
echo "asd" | xclip -sel c
Вывести содержимое буфера обмена на стандартный вывод:
xclip -o
Записать содержимое буфера обмена в файл:
xclip -o > file.txt
Вывести содержимое clipboard буфера на стандартный вывод:
xclip -o -sel c
Скопировать файл/каталог
xclip-copyfile <имя_файла_или_каталога>
Вставить файл/каталог
xclip-pastefile





Возможно, эти материалы Вас заинтересуют:


Рекомендовать эту страницу:

Комментарии:(3)

# Ананимус June 22, 2011, 9:39 p.m.
таки как заставить clipboard работать с Ctrl-Insert и Shift-Insert?

# su Nov. 27, 2015, 9:44 a.m.
> в Linux существует два буфера обмена - primary и clipboard
Да ладно! А clipit (xubuntu),a clipman (debian)? Тоже отличная вещь, да еще и автоматом после ctrl+c хавает и оттуда же копипастит по ctrl+v

# Гость Nov. 28, 2015, 10:32 p.m.
Да ладно! А clipit (xubuntu),a clipman (debian)?
Это сторонний софт, а в статье речь о стандартном

Комментировать:

Гость, Вы можете оставить свой комментарий.

Стиль кода:
Имя
Сайт * не обязательное поле
Поставьте галку, если вы - бот
Поставьте галку, если вы - человек

Друзья! Убедительная просьба воздержаться от нецензурной лексики!



Справка:
Если вы хотите использовать в тексте комментария специальные символы, например, [ и ], используйте их внутри тега [code] [/code]
Вы можете использовать теги BBcode. Для оформления кода и подсветки синтаксиса используйте тег [code] или [code=название_языка], например, [code=python]
Ссылки вставляйте так: [url]zenux.ru[/url] или так: http://zenux.ru, но не так: zenux.ru
Текст сообщения должен быть в пределах 3000 символов.




Последние комментарии:

fanyit: Спасибо за обзор. очень полезно и доступно.... >>>
cheech: Спасибо, статья полезная )... >>>
Васёк: Коммент, расскажи про часы на стене капитану в оке... >>>
METAJIJI: Ах да, почему я начал вообще трогать urxvt, потому... >>>
METAJIJI: Вкладки как раз не феншуйные (штатный tabbed), они... >>>