web-dev-qa-db-fra.com

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

Une fois que quelque chose est copié dans le presse-papiers (en utilisant ctrl + c) je veux un script (bash, python ou toute autre langue) pour détecter automatiquement que la nouvelle entrée est ajoutée au presse-papiers, changer son contenu et mettre il retourne dans le presse-papiers, donc quand je le colle, j'obtiens le texte modifié. Le script doit constamment s'exécuter en arrière-plan et surveiller les modifications du presse-papiers.

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

#!/bin/bash

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

# Parses currently selected text and removes 
# newlines that aren't preceded by a full stop

SelectedText="$(xsel)"

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

#   - first sed command: replace end-of-line full stops with '|' delimiter and keep original periods.
#   - second sed command: replace empty lines with same delimiter (e.g.
#     to separate text headings from text)
#   - subsequent tr commands: remove existing newlines; replace delimiter with
#     newlines
# This is less than elegant but it works.

echo "$ModifiedText" | xsel -bi

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

3
SidMan

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: https://github.com/SidMan2001/Scripts/tree/master/PDF-Copy-without-Linebreaks-Linux

Supprimer les sauts de ligne lors de la copie de texte de 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

# Parses currently selected text and removes 
# newlines

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-get install xsel
  2. clipnotify ( https://github.com/cdown/clipnotify )
    Vous pouvez utiliser le clipnotify précompilé fourni dans le référentiel ou compiler vous-même.

Pour compiler le clip, notifiez-vous:
Sudo apt install git build-essential libx11-dev libxtst-dev
git clone https://github.com/cdown/clipnotify.git
cd clipnotify
Sudo make

Utiliser :

  1. Téléchargez ce référentiel au format Zip ou copiez et collez le script dans un éditeur de texte et enregistrez-le sous copy_without_linebreaks.sh.
  2. Assurez-vous que le script et clipnotify (téléchargés ou précompilés) se trouvent dans le même dossier.
  3. Ouvrir le terminal dans le dossier du script et définir l'autorisation
    chmod +x "copy_without_linebreaks.sh"
  4. Double-cliquez sur le script ou exécutez-le en entrant dans le terminal:
    .\copy_without_linebreaks.sh
  5. Copiez du texte en pdf et collez-le n'importe où. Les sauts de ligne seront supprimés.
3
SidMan