Je veux intercepter l'événement Coller et exécuter n'importe quel texte dans mon script. Le cas d'utilisation est le suivant (supposons que j'ai un script quelque part qui accepte le texte sur stdin et transforme "monde" en "pomme de terre", écrivant sur stdout).
Il ne devrait y avoir aucune étape manuelle entre 1 et 2, c’est-à-dire que je veux un crochet sur l’événement de collage (ou peut-être sur l’événement de copie) afin que le texte soit traité automatiquement. Je n'ai rien de malin en tête; il s’agit simplement de formater automatiquement du code source lors du copier/coller depuis/vers le Web.
Ma question concerne le tampon de sélection (presse-papiers du milieu de la souris), mais je suppose que la question s’applique aussi au texte des autres presse-papiers en général.
Vous pouvez utiliser la fonction Bash suivante. Copiez-le dans votre _~/.bashrc
_ et sourcez-le sous la forme _. ~/.bashrc
_ à partir d'un terminal.
_cngstr(){
echo `xclip -o` | sed -e "s#$1#$2#g" | xclip
}
_
Run in terminal:
_$ cngstr "string" "replacement"
_
Ensuite, lorsque vous collez en utilisant le clic du milieu, les mots "chaîne" de votre sélection seront remplacés par "remplacement".
Dites que votre sélection est "bonjour le monde!". Ensuite, vous courez dans le terminal,
_cngstr world potato
_
Utilisez _""
_ pour une chaîne composée de plusieurs mots . Ensuite, lorsque vous collez à l’aide du clip central de la souris, "hello patato!" apparaîtra. Voir les captures d'écran.
xclip -o
_ imprime la sélection sur la sortie standard qui est acheminée vers sed
ici.sed
remplace les chaînes en prenant une entrée de l'utilisateur.xclip
qui le met dans la sélection primaire et devient disponible pour le collage par un clic du milieu.Je pense que xclip
est fourni avec la distribution Ubuntu par défaut. Sinon, installez-le avec _apt-get
_:
_Sudo apt-get install xclip
_
Rend le contenu modifié disponible dans le presse-papier également
Si vous souhaitez que le contenu modifié soit également disponible dans le presse-papiers, de sorte que Ctrl+V fonctionne également, ajoutez la ligne suivante dans le script ci-dessus.
_echo `xclip -o` | xclip -selection c
_
La ligne ci-dessus transmettra le contenu de la sélection primaire au presse-papiers. La fonction modifiée ressemblera à:
_cngstr(){
echo `xclip -o` | sed -e "s#$1#$2#g" | xclip
echo `xclip -o` | xclip -selection c
}
_
Fonction Bash pouvant modifier le contenu du presse-papiers (c'est-à-dire copiée à l'aide de Ctrl+C ou dans le menu contextuel) et rendre la chaîne modifiée disponible pour la sélection primaire ainsi que pour le presse-papiers.
_cngstr1(){
echo `xclip -o -selection c` | sed -e "s#$1#$2#g" | xclip
echo `xclip -o` | xclip -selection c
}
_
_xclip -o
_ imprime le contenu de la sélection principale par défaut. Utilisez _-selection c
_ pour imprimer le contenu du presse-papiers. Voir man xclip
pour plus d'informations.
Vous pouvez combiner ces deux fonctions dans un script en utilisant un cas de commutation,
_#!/bin/sh
string="$2"
replacement="$3"
cngstr(){
echo `xclip -o` | sed -e "s#$1#$2#g" | xclip
echo `xclip -o` | xclip -selection c
}
cngstr1(){
echo `xclip -o -selection c` | sed -e "s#$1#$2#g" | xclip
echo `xclip -o` | xclip -selection c
}
if [ $# -lt 2 ]
then
echo "Usage : $0 [c|p] \"string\" \"replacement\" "
exit
fi
case "$1" in
c) cngstr1 "$string" "$replacement"
;;
p) cngstr "$string" "$replacement"
;;
*) echo "Usage : $0 [c|p] \"string\" \"replacement\" "
;;
esac
_
Utilisation
_./script.sh [c|p] "string" "replacement"
_
Utilisez l'option c
pour modifier le contenu copié à l'aide du presse-papiers, c'est-à-dire le contenu copié à l'aide de Ctrl+C ou dans le menu contextuel.
Utilisez l'option p
pour modifier le contenu copié à l'aide de la sélection principale.