AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题 / 960892
Accepted
eri0o
eri0o
Asked: 2017-10-01 12:58:13 +0800 CST2017-10-01 12:58:13 +0800 CST 2017-10-01 12:58:13 +0800 CST

我可以通过 Ctrl+C 复制获得视觉反馈吗?

  • 772

很多时候我需要多次Ctrl+ C(或Ctrl+ Insert)来复制一些东西。我会很感激视觉反馈说“一个新的东西已被复制”或类似的东西。有没有办法把它添加到 Ubuntu 中?

unity
  • 2 2 个回答
  • 524 Views

2 个回答

  • Voted
  1. Best Answer
    Byte Commander
    2017-10-01T14:51:58+08:002017-10-01T14:51:58+08:00

    我调整了我的脚本以对此处的剪贴板更改做出反应,以便在您复制某些内容时显示本机通知气泡:

    在此处输入图像描述

    #!/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 等手动启动脚本。

    • 6
  2. marko
    2017-10-01T17:29:38+08:002017-10-01T17:29:38+08:00

    我只使用 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
    
    • 3

相关问题

  • 如何将 Web 应用程序放入 Unity Launcher?

  • Ubuntu 上网本 10.10 中没有 Alt+F2?

  • Unity 中的 gnome-do 样式键盘快捷键

  • 在哪里提交 Unity 的错误/愿望清单?

  • Unity 启动器——它可以作为单独的包提供吗?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何运行 .sh 脚本?

    • 16 个回答
  • Marko Smith

    如何安装 .tar.gz(或 .tar.bz2)文件?

    • 14 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Martin Hope
    Flimm 如何在没有 sudo 的情况下使用 docker? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve