Странное поведение 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. Исторически сложилось так, что вы могли выполнить команду с 1 аргументом или с 2. Первый будет работать только на PRIMARY, 2-й - на PRIMARY и SECONDARY. Механизм "переключения", если хотите. Или резервное копирование, если вы действительно хотите оставить то, что у вас было в ПЕРВИЧНОМ, в покое и нетронутым. Спецификация, однако, не соблюдалась, и различные приложения делали это по-разному.
  2. Windows / Macs популярный буфер обмена.
  3. Это привело к интересному случаю: 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

Другие вопросы по тегам