11 votes

Détecter l'événement de copier/coller du presse-papiers et modifier le contenu du presse-papiers

Après qu'un élément a été copié dans le presse-papiers (en utilisant ctrl+c), je veux qu'un script (bash, python ou tout autre langage) détecte automatiquement que nouvelle entrée a été ajoutée au presse-papiers, modifie son contenu et le remette dans le presse-papiers afin que lorsque je le colle, je reçoive le texte modifié. Le script doit fonctionner en arrière-plan en permanence et surveiller les changements dans le presse-papiers.

Le script suivant décrit la modification qui est nécessaire :
Source : https://superuser.com/questions/796292/is-there-an-efficient-way-to-copy-text-from-a-pdf-without-the-line-breaks

#!/bin/bash

# title: copy_without_linebreaks
# author: Glutanimate (github.com/glutanimate)
# license: MIT license

# Analyse le texte actuellement sélectionné et supprime
# les sauts de ligne qui ne sont pas précédés d'un point final

SelectedText="$(xsel)"

ModifiedText="$(echo "$SelectedText" | \
    sed 's/\.$/.|/g' | sed 's/^\s*$/|/g' | tr '\n' ' ' | tr '|' '\n')"

#   - premier commande sed: remplace les points finaux de ligne par un délimiteur '|' et conserve les points d'origine.
#   - deuxième commande sed: remplace les lignes vides par le même délimiteur (par exemple pour séparer les titres de texte du texte)
#   - commandes tr suivantes: supprime les sauts de ligne existants; remplace le délimiteur par des sauts de ligne
# Ce n'est pas très élégant mais ça fonctionne.

echo "$ModifiedText" | xsel -bi

Je ne veux pas utiliser de raccourci clavier pour exécuter le script.

10voto

SidMan Points 311

Le crédit revient à Kenn.

J'ai modifié le script selon mes besoins et ajouté la fonction pour détecter l'événement de copie du presse-papiers et modifier son contenu.

Source.

Supprimer les sauts de ligne lors de la copie de texte depuis un PDF (Linux)

Ce script bash supprime les sauts de ligne lors de la copie de texte à partir d'un PDF. Il fonctionne à la fois pour la Sélection Principale et le Presse-Papiers de Linux.

#!/bin/bash

# title: copy_without_linebreaks
# author: Glutanimate (github.com/glutanimate)
# modifier: Siddharth (github.com/SidMan2001)
# license: MIT license

# Analyse le texte actuellement sélectionné et supprime les nouvelles lignes

while ./clipnotify;
do
  SelectedText="$(xsel)"
  CopiedText="$(xsel -b)"
  if [[ $SelectedText != *"file:///"* ]]; then
    ModifiedTextPrimary="$(echo "$SelectedText" | tr -s '\n' ' ')"
    echo -n "$ModifiedTextPrimary" | xsel -i
  fi
  if [[ $CopiedText != *"file:///"* ]]; then
    ModifiedTextClipboard="$(echo "$CopiedText" | tr -s '\n' ' '  )"
    echo -n "$ModifiedTextClipboard" | xsel -bi
  fi
done

Dépendances

  1. xsel: sudo apt install xsel
  2. clipnotify. Vous pouvez utiliser le clipnotify pré-compilé fourni dans le dépôt ou le compiler vous-même.
    Pour compiler clipnotify vous-même

    sudo apt install git build-essential libx11-dev libxtst-dev
    git clone https://github.com/cdown/clipnotify.git
    cd clipnotify
    sudo make

Pour UTILISER

  1. Téléchargez ce dépôt au format zip ou copiez-collez le script dans un éditeur de texte et enregistrez-le sous le nom copy_without_linebreaks.sh.
  2. Assurez-vous que le script et clipnotify (téléchargé ou précompilé) sont dans le même dossier.
  3. Ouvrez un terminal dans le dossier du script et donnez les autorisations
    chmod +x "copy_without_linebreaks.sh"
  4. Cliquez deux fois sur le script ou exécutez-le en entrant dans le terminal :
    .\copy_without_linebreaks.sh
  5. Copiez le texte dans le pdf et collez-le n'importe où. Les sauts de ligne seront supprimés.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X