web-dev-qa-db-ja.com

Ctrl + Cを使用してコピーすることで視覚的なフィードバックを取得できますか?

私がする必要がある多くの時間 Ctrl+C (または Ctrl+Insert)何かをコピーするために複数回。 「新しいものがコピーされました」などの視覚的なフィードバックをいただければ幸いです。これをUbuntuに追加する方法はありますか?

6
eri0o

here からのクリップボードの変更に反応するようにスクリプトを調整し、何かをコピーするたびにネイティブ通知バブルが表示されるようにしました。

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()

それをどこかに保存し(例:/usr/local/bin/clipboard-notifier-Sudoにその場所への書き込みを許可する必要がありますが、代わりに~/binに入れて)コマンドchmod +x FILENAMEを使用して実行可能にします。

私のスクリプトは、Python 3パッケージnotify2を使用して、ネイティブ通知バブルを表示します。通常、このパッケージはデフォルトではインストールされません。最初に以下のコマンドで追加する必要があります。

Sudo apt install python3-notify2

必要に応じて、スクリプトの先頭近くにある大文字の変数の値を必要に応じて変更できます。特に、TITLEおよびMAXLENGTHを変更すると便利です。

その後、単純に スタートアップアプリケーションに追加 すると、次回ログインしたときに自動的に起動します。また、スクリプトを手動で起動することもできます。その Alt+F2 UnityのHUD。

5
Byte Commander

追加のライブラリなしでのみbashスクリプトを使用して、より標準的なソリューションを作成しました。

ここに私がそれをした方法があります:

clp-notifyというファイルを作成し、実行可能にします。

ファイルを保存する場所:/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

次に、上記のスクリプトを呼び出すstart-clipboard-pollingという2番目のファイルを作成しました。この2番目のファイルがスタートアップに追加されます。

#!/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

この2番目のファイルの目的は、元のclp-notifyが複数回起動するのを防ぐことです。これは、Xサーバーをログアウトして再起動しても、clp-notifyスクリプトが実行し続けるためです。

次に、このstart-clipboard-pollingをスタートアップアプリケーションに追加する必要があります。

これには1つだけ問題があります。 2番目のスクリプトは、ログアウトおよびログイン時にclp-notifyが複数回開始するのを防ぐことに注意します(元のインスタンスは前のセッションから実行されているため)、何らかの理由で2回目のログインでは、次の条件は失敗します。

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

つまり、通知は機能しません。これを回避するには、start-clipboard-polling内から元のインスタンスを終了し、clp-notifyを新しいインスタンスとして再起動します。それで、clp-notifyが実行されているかどうかをチェックするセクションを削除できますが、私は回避策を使いたくありません。なぜ失敗するのか興味があります。

それ以外の場合は、ログアウトするまで正常に機能し続けます。

ところで、あなたがする必要があります:

Sudo apt install xclip
3
marko