2016-08-21

О копипасте

А вы знаете, что в Unix, а точнее в X Window, есть аж три буфера обмена? Primary, Secondary и Clipboard.
Copy & Paste
Primary возник исторически. Он используется при вставке средней кнопкой мыши. Это когда вы выделяете где-то текст, а потом жмёте среднюю кнопочку мыши, и выделенный где-то там текст вставляется куда-то сюда, где находится текстовый курсор. Это действительно работает, но почему-то только опытные юниксоиды этим пользуются. Это даже работает в текстовой консоли, если там есть поддержка мыши (пакет gpm в Ubuntu).
Secondary, видимо, возник для дополнения Primary. Никаких кнопочек для прямого доступа к нему нет. Но он вполне доступен программно, и можно, например, поменять Primary и Secondary местами.
Clipboard — это знакомый по альтернативным ОС буфер обмена. В который можно скопировать по Ctrl+C или Ctrl+Ins. И из которого можно вставить по Ctrl+V или Shift+Ins. Про сочетания клавиш с Insert, похоже, все тоже начинают забывать. Но они работают.
С иксовыми буферами обмена можно работать из командной строки. Иногда это даже очень удобно, если работаешь в графическом терминале, и надо скопировать содержимое какого-нибудь файлика. И для этого есть аж две программки: xclip и xsel. Работают они немного по-разному, и по-разному глючат на не-ASCII символах.
% cat ~/.ssh/id_rsa.pub | xclip -selection clipboard
% xclip -o -selection clipboard > paste_file    

% cat ~/.ssh/id_rsa.pub | xsel -ib
% xsel -ob > paste_file
Программно приходилось пользовать буфер обмена только из Python. Тут есть чудесный модуль pyperclip. Он даже кроссплатформенный. Под Linux он юзает эти наши самые xclip или xsel (у меня в данном случае xclip работает корректнее).
import pyperclip

pyperclip.copy(text)
pasted = pyperclip.paste()
А ещё есть отдельная категория софта — менеджеры буферов обмена. Это то, что, например, реализовано в IntelliJ IDEA, когда вы нажимаете Ctrl+Shift+V. История буфера обмена. У вас для вставки будет доступно не одно единственное последнее значение, которое вы скопировали в буфер, а n-цать предыдущих скопированных значений. Это очень удобно, когда вам нужно перенести несколько кусочков текста в разные места в разном порядке. Лично я так привык к этим менеджерам, что не могу без них обходиться даже на андроидном телефоне.
IDEA
Под GTK, Unity и иже с ними имеется Parcellite. Просто ставите, засовываете в автостарт (если сам там не объявился), вешаете хотки показа истории на какой-нибудь экзотический Ctrl+Alt+H, и пользуетесь. Хоть в Unity иконка Parcellite и не видна в трее, это не важно. Жмёте где угодно хотки и, пожалуйста, вот она история буфера обмена.
Parcellite
Для KDE, говорят, имеется аналогичный Klipper.
Klipper
А для Android есть отличный Clipper. Даже с возможностью синхронизации буферов обмена между устройствами в платной версии.
Clipper
Будьте осторожны с менеджерами буфера обмена. Если вы, ай-ай-ай, копипастите пароль, он будет какое-то время висеть в истории. Да ещё и синхронизироваться. Поэтому правильные менеджеры позволяют почистить историю.
Удачного копипаста.
Clipper