使用 Ctrl+C 复制时我能获得视觉反馈吗?

使用 Ctrl+C 复制时我能获得视觉反馈吗?

很多时候我需要多次按Ctrl+ C(或Ctrl+ Insert) 来复制某些内容。我希望有视觉反馈,比如“已复制新内容”或类似的内容。有没有什么方法可以将其添加到 Ubuntu?

答案1

我修改了我的脚本来对剪贴板的变化做出反应这里这样,当你复制某些内容时,它就会显示本机通知气泡:

在此处输入图片描述

#!/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有用的更改。

然后简单地将其添加到您的启动应用程序中下次登录时它将自动启动。您也可以从Unity 中的Alt+ F2HUD 等手动启动脚本。

答案2

我已经创建了一个更标准的解决方案,仅使用 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该文件调用上述脚本,并且这个第二个文件被添加到启动中:

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

第二个文件的目的是防止原始文件clp-notify多次启动,因为clp-notify即使您注销并登录或重新启动 X 服务器,脚本仍将继续运行。

然后您需要将其添加start-clipboard-polling到您的启动应用程序中。

只有一个问题。虽然第二个脚本负责防止clp-notify在您注销和登录时多次启动(因为原始实例仍会从上一个会话运行),但由于某种原因,第二次登录时,以下条件会失败:

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

这意味着通知将不起作用。解决此问题的方法是结束原始实例start-clipboard-polling并重新启动clp-notify为新实例,然后您可以删除检查是否clp-notify正在运行的部分,但我不想使用解决方法,我更感兴趣的是它失败的原因。

否则,它将继续正常工作,直到您注销。

顺便说一句,你需要:

sudo apt install xclip

相关内容