Странное поведение xclip
В руководстве по xclip говорится, что есть три хранилища: первичное (XA_PRIMARY), вторичное (XA_SECONDARY) и буфер обмена (XA_CLIPBOARD). Я скопировал (Ctrl+c) текст из моего браузера и проверил содержимое трех мест, упомянутых выше, в терминале:
xclip -s primary -o
xclip -s secondary -o
xclip -s clipboard -o
Все три содержат один и тот же текст.
Если я сейчас наберу
date | xclip -selection XA_PRIMARY
Только XA_PRIMARY должен содержать текст даты. Но на самом деле два других, то есть XA_SECONDARY и XA_CLIPBOARD, также содержат один и тот же текст (информация о дате). Так три и одно и то же? И если да, то какой в этом смысл?
Что еще больше расстроило меня, Ctrl+Shift+v (все еще в режиме терминала) вставляет оригинальный текст, который я скопировал из браузера! что говорит о том, что собственный буфер обмена оболочки также работает.
Есть ли у кого-нибудь пример, демонстрирующий, что три местоположения могут одновременно содержать разные значения и как они соотносятся с обычным буфером обмена?
2 ответа
К несчастью xclip
молча игнорирует неверные параметры командной строки:
Здесь нет -s
вариант как оба -selection
а также -silent
начать с -s
, Вы должны использовать по крайней мере -se
,
Как xclip
просто игнорирует ваш -s
вариант команды
xclip -s primary -o
xclip -s secondary -o
xclip -s clipboard -o
xclip -s asdfghj -o
все просто используют выбор по умолчанию (primary
).
Для имени выбора фактически используется только первый символ, и если s
или же c
используется по умолчанию.
date | xclip -selection XA_PRIMARY
date | xclip -selection XA_SECONDARY
date | xclip -selection XA_CLIPBOARD
все используют первичный отбор.
Используйте что-то вроде
date | xclip -se p # write to primary selection
xclip -se c -o # read from clipboard
Я расскажу о пропущенном моменте, а именно: "почему 3 разных буфера обмена".
- Исторически сложилось так, что вы могли выполнить команду с 1 аргументом или с 2. Первый будет работать только на PRIMARY, 2-й - на PRIMARY и SECONDARY. Механизм "переключения", если хотите. Или резервное копирование, если вы действительно хотите оставить то, что у вас было в ПЕРВИЧНОМ, в покое и нетронутым. Спецификация, однако, не соблюдалась, и различные приложения делали это по-разному.
- Windows / Macs популярный буфер обмена.
- Это привело к интересному случаю: XA_PRIMARY использовался для выбора (как задумано), редко кто-либо имел хорошую идею для XA_SECONDARY, а XA_CLIPBOARD был... как буфер обмена.
xclip
а также xsel
по умолчанию работает с XA_PRIMARY, поскольку большинство X-приложений работают следующим образом: если вы выделите текст, он будет выделен и, следовательно, помещен в буфер PRIMARY SELECTION.
Если вы хотите вставить PRIMARY, используйте среднюю кнопку мыши или Shift + Insert. Или перенесите его содержимое в блокнот и просто вставьте xclip -o | xclip -se c
,
Отличное чтение: https://specifications.freedesktop.org/clipboards-spec/clipboards-latest.txt