web-dev-qa-db-fra.com

Comportement étrange de xclip

Le manuel xclip indique qu'il existe trois emplacements de stockage nommés principal (XA_PRIMARY), secondaire (XA_SECONDARY) et presse-papiers (XA_CLIPBOARD). J'ai copié (Ctrl + c) du texte de mon navigateur et examiné le contenu des trois emplacements mentionnés ci-dessus dans le terminal:

xclip -s primary -o
xclip -s secondary -o
xclip -s clipboard -o

Les trois contiennent le même texte.

Si je tape maintenant

date | xclip -selection XA_PRIMARY

Seul le XA_PRIMARY doit contenir le texte de la date. Mais en fait, les deux autres, c'est-à-dire XA_SECONDARY et XA_CLIPBOARD contiennent également le même texte (informations de date). Alors, les trois sont-ils les mêmes? Et si oui, à quoi ça sert?

Ce qui m'a encore plus dérouté, Ctrl + Shift + v (toujours en mode terminal) colle le texte original que j'ai copié depuis le navigateur! ce qui suggère que le presse-papiers de Shell fonctionne également.

Quelqu'un a-t-il un exemple qui montre que les trois emplacements peuvent contenir des valeurs différentes en même temps et comment ils se rapportent au presse-papiers normal?

3
elmclose

Malheureusement, xclip ignore silencieusement les options de ligne de commande non valides:

Il n'y a pas -s option comme les deux -selection et -silent Commencer avec -s. Vous devez utiliser au moins -se.

Comme xclip ignore simplement votre -s option les commandes

xclip -s primary -o
xclip -s secondary -o
xclip -s clipboard -o
xclip -s asdfghj -o

tous utilisent simplement la sélection par défaut (primary).

Pour le nom de la sélection, seul le premier caractère est réellement utilisé, et s'il est différent de s ou c, la valeur par défaut est utilisée.

date | xclip -selection XA_PRIMARY
date | xclip -selection XA_SECONDARY
date | xclip -selection XA_CLIPBOARD

tous utilisent la sélection principale.

Utilisez quelque chose comme

date | xclip -se p    # write to primary selection
xclip -se c -o        # read from clipboard
2
Florian Diesch

Je vais aborder le point manquant, c'est "pourquoi 3 presse-papiers différents".

  1. Historiquement, vous pouviez émettre une commande avec 1 argument ou avec 2. La première fonctionnerait sur PRIMARY uniquement, la 2ème - sur PRIMARY et SECONDARY. Un mécanisme de "commutation", si vous voulez. Ou une sauvegarde, si vous vouliez vraiment laisser ce que vous aviez dans PRIMARY seul et intact. Cependant, les spécifications n'ont pas été suivies et diverses applications l'ont fait de diverses manières.
  2. Presse-papiers popularisé Windows/Mac.
  3. Cela a conduit à un cas intéressant: XA_PRIMARY a été utilisé pour les sélections (tel que conçu), rarement quiconque avait une bonne idée de XA_SECONDARY et XA_CLIPBOARD était ... comme un presse-papiers.

xclip et xsel fonctionnent par défaut sur XA_PRIMARY, car la plupart des applications X fonctionnent de cette façon: si vous mettez en surbrillance a texte, il est sélectionné et atterrit donc dans un tampon de SÉLECTION PRIMAIRE .

Si vous souhaitez coller PRIMAIRE, utilisez le bouton central de la souris ou Shift+Insert. Ou transférez son contenu sur CLIPBOARD et collez simplement xclip -o | xclip -se c.

Excellente lecture: https://specifications.freedesktop.org/clipboards-spec/clipboards-latest.txt