web-dev-qa-db-fra.com

Puis-je obtenir un retour visuel de la copie avec Ctrl + C?

Beaucoup de fois j'ai besoin de Ctrl+C (ou Ctrl+Insert) plusieurs fois pour copier quelque chose. J'apprécierais les retours visuels indiquant "qu'une nouvelle chose a été copiée" ou quelque chose du genre. Est-il possible d'ajouter ceci à Ubuntu?

6
eri0o

J'ai adapté mon script pour qu'il réagisse aux modifications du presse-papiers à partir de ici afin qu'il affiche une bulle de notification native à chaque fois que vous copiez quelque chose:

enter image description here

#!/usr/bin/env python3

# Configuration:
APPNAME = "Clipboard Notifier"  # an arbitrary application name
TITLE = "Clipboard modified"    # the bold headline of each notification
ICON = "edit-paste"             # name of the icon to show
MAXLENGTH = 100                 # maximum message length

# Imports:
import gi
import signal
import notify2
gi.require_version("Gtk", "3.0")
from gi.repository import Gtk, Gdk

# Set up signal handler for killing the script with Ctrl+C from terminal:
signal.signal(signal.SIGINT, signal.SIG_DFL)

# Initialize the notifications library:
notify2.init(APPNAME)

# Callback function to handle clipboard modification events:
def callback(*args):
    # Get new clipboard content:
    text = clip.wait_for_text()
    # Truncate long content to avoid huge notification bubbles:
    body = text if len(text) < MAXLENGTH else text[:MAXLENGTH] + "..."
    # Create and show notification bubble:
    notify2.Notification(TITLE, body, ICON).show()

# Set up clipboard and register callback for change events
clip = Gtk.Clipboard.get(Gdk.SELECTION_CLIPBOARD)
clip.connect("owner-change", callback)

# Start Gtk main loop and wait for events:
Gtk.main()

Enregistrez-le quelque part (par exemple, en tant que /usr/local/bin/clipboard-notifier - vous avez besoin de Sudo pour pouvoir écrire à cet emplacement, mais mettez-le dans ~/bin) et exécutez-le à l'aide de la commande chmod +x FILENAME.

Mon script utilise le package Python 3 notify2 pour afficher les bulles de notification natives. Ce paquet n'est normalement pas installé par défaut, vous devez d'abord l'ajouter avec la commande ci-dessous:

Sudo apt install python3-notify2

Si vous le souhaitez, vous pouvez modifier les valeurs des variables en majuscule au début du script, selon vos besoins, en particulier TITLE et MAXLENGTH peuvent être utiles.

Alors simplement ajoutez-le à vos applications de démarrage et il se lancera automatiquement lors de votre prochaine connexion. Vous pouvez également lancer le script manuellement à partir, par exemple, de le Alt+F2 HUD dans l'unité.

5
Byte Commander

J'ai créé une solution plus standard en n'utilisant que des scripts bash sans bibliothèques supplémentaires:

Voici comment je l'ai fait:

Créez un fichier appelé: clp-notify et rendez-le exécutable.

Enregistrez le fichier dans: /home/$USER/add-ons/scripts/clp-notify

#!/bin/bash

echo "Script $0 started..."
notify-send -u normal -t 3000 -i info 'Script Started!' $0

clip_command="xclip -selection clipboard -o"
current_value=`$clip_command`

while true
do
   new_value=`$clip_command`

   if [[ ! ("$current_value" == "$new_value") ]];
   then      
      echo 'Clipboard Modified...'
      notify-send -u normal -t 3000 -i info 'Clipboard Modified!' 'Your clipboard has been modified.'

      current_value=$new_value
   else
      echo "Polliing..."
   fi

   sleep 1.5
done

Ensuite, j'ai créé un deuxième fichier appelé start-clipboard-polling qui appelle le script ci-dessus et c'est ce deuxième fichier qui est ajouté au démarrage:

#!/bin/bash

script_path=/home/$USER/add-ons/scripts/clp-notify

function IsClipboardPollingRunning
{
   if (ps -A | grep -q "clp-notify")
   then
      return 1;
   else
      return 0;        
   fi
}

if (IsClipboardPollingRunning == 0)
then
   echo "Starting $script_path"   
   Nohup $script_path &
else
   echo "$script_path is already running"
   notify-send -u normal -t 3000 -i info 'Clipboard Notify' "$script_path is already running."
fi

Ce deuxième fichier a pour but d’empêcher le clp-notify original de démarrer plusieurs fois, car le script clp-notify continuera de s’exécuter même si vous vous déconnectez et que vous redémarrez le serveur X.

Ensuite, vous devez ajouter ceci start-clipboard-polling à vos applications de démarrage.

Il n'y a qu'un seul problème avec cela. Bien que le second script évite à clp-notify de démarrer plusieurs fois lorsque vous vous déconnectez et vous connectez (car l'instance d'origine serait toujours en cours d'exécution depuis la session précédente), la deuxième fois que vous vous connectez, pour une raison quelconque, la condition suivante échoue:

if [[ ! ("$current_value" == "$new_value") ]];

et cela signifie que les notifications ne fonctionneront pas. La solution consiste à terminer l'instance d'origine à partir de start-clipboard-polling et à redémarrer clp-notify en tant qu'instance récente. Vous pouvez ensuite supprimer la section qui vérifie si clp-notify est en cours d'exécution, mais Je ne veux pas utiliser le travail autour, je suis plus intéressé de savoir pourquoi il échoue.

Sinon, il continuera à fonctionner correctement jusqu'à ce que vous vous déconnectiez.

BTW, vous devez:

Sudo apt install xclip
3
marko