如何创建自定义应用程序启动器以将文本复制到剪贴板?

如何创建自定义应用程序启动器以将文本复制到剪贴板?

我想制作一个自定义应用程序启动器,然后将其添加到我的面板,以便每次我单击它时,它都会复制一行预加载的文本,但我不知道如何为它编写命令。

例如,如果预加载的文本行是“Hello”。我希望每次我点击它时,它都会将单词“Hello”复制到我的剪贴板,这样我就可以将其粘贴到任何地方。

答案1

下面是一个易于定制的设置示例。它包含一个脚本和一个.desktop文件(启动器),用于使用两个选项运行该脚本。您可以:

  • 单击启动器将预定义的字符串或行复制到剪贴板,或者:
  • 右键单击它以设置新字符串:

    在此处输入图片描述
    在此处输入图片描述

如何设置

为了能够将文本复制到剪贴板,我们需要安装xclip

sudo apt-get install xclip

然后我们需要两样东西:

  1. 剧本:

    #!/usr/bin/env python3
    import subprocess
    import os
    import sys
    
    wordfile = os.environ["HOME"]+"/.word_file"
    
    def get_word():
        try:
            copy = "xclip -in -selection c "+"'"+wordfile+"'"
            subprocess.Popen(["/bin/bash", "-c", copy])
        except FileNotFoundError:
            pass
    
    def set_word():
        try:
            word = "zenity --entry --title='Change the word' --text='Set a new string or line'"
            new_word = subprocess.check_output(["/bin/bash", "-c", word]).decode("utf-8").strip()
            open(wordfile, "wt").write(new_word)
        except subprocess.CalledProcessError:
            pass
    
    arg = sys.argv[1]
    if arg == "-set":
       set_word()
    elif arg == "-get":
        get_word()
    

    将其复制到空文件中,另存为copy_text.py使其可执行(!!)

  2. A .desktop file、使用两个选项运行脚本

    [Desktop Entry]
    Name=Paste a string
    Exec=/path/to/copy_text.py -get
    Type=Application
    Icon=/path/to/your/icon.png
    
    Actions=Set a new string;
    
    [Desktop Action Set a new string]
    Name=Set a new string
    Exec=/path/to/copy_text.py -set
    OnlyShowIn=Unity;
    

    将其复制到一个空文件中,保存为paste_text.desktop~/.local/share/applications在两行中替换,以以下内容开头Exec=

    /path/to/copy_text.py
    

    脚本的实际路径,并在行中替换,以Icon=

    /path/to/your/icon.png
    

    通过有效图标的实际路径(例如.png64x64 像素的图标)

现在将.desktop文件拖到Unity启动器,您将获得可轻松自定义的设置。

解释

在 .desktop 文件中使用 xclip

xclip是一个可用于从命令行管理剪贴板的实用程序。
要将字符串复制到剪贴板,可以使用以下命令:

echo <string> | xclip -sel clip

要复制文件到剪贴板:

xclip -in -selection c <file>

如果这将是一个固定字符串你确实可以像 Serg 提到的那样,使用一个.desktop单行文件来完成你需要的操作:

[Desktop Entry]
Name=Paste a string
Exec=/bin/bash -c "echo Hello World | xclip -sel clip"
Type=Application
Icon=/path/to/icon.png

或者,如果您只能使用有限数量的(固定)字符串:

[Desktop Entry]
Name=Paste a string
Exec=/bin/bash -c "echo Monkey | xclip -sel clip"
Type=Application
Icon=/opt/lswitcher/icon/lsw_64.png

Actions=Monkey;eats;banana;

[Desktop Action Monkey]
Name=Copy Monkey
Exec=/bin/bash -c "echo Monkey | xclip -sel clip"
OnlyShowIn=Unity;

[Desktop Action eats]
Name=Copy eats
Exec=/bin/bash -c "echo eats | xclip -sel clip"
OnlyShowIn=Unity;

[Desktop Action banana]
Name=Copy banana
Exec=/bin/bash -c "echo banana | xclip -sel clip"
OnlyShowIn=Unity;

然后按照答案中的说明创建文件并将其拖到Unity启动器上:

在此处输入图片描述

如果要复制的字符串是不可预测的,则意味着.desktop每次您想要更改字符串时都必须手动编辑文件,这不是很用户友好。

脚本的用途

因此,该脚本会创建一个外部文件,~/.word_file其中包含您想要复制到剪贴板的字符串内容。该脚本有两个功能:

def get_word():
    try:
        copy = "xclip -in -selection c "+"'"+wordfile+"'"
        subprocess.Popen(["/bin/bash", "-c", copy])
    except FileNotFoundError:
        pass

pass如果文件不存在,则尝试从文件读取要复制到剪贴板的文本。

和:

def set_word():
    try:
        word = "zenity --entry --title='Change the word' --text='Set a new string or line'"
        new_word = subprocess.check_output(["/bin/bash", "-c", word]).decode("utf-8").strip()
        open(wordfile, "wt").write(new_word)
    except subprocess.CalledProcessError:
        pass

打开一个zenity窗口,您可以在其中输入要写入文件的新字符串或行:

在此处输入图片描述

文件.desktop

最后,通过两个命令调用脚本的两个函数:

Exec=/path/to/copy_text.py -get

使用选项调用脚本-get,作为文件中的“主”命令.desktop,只需单击Unity启动器的图标即可执行:

Exec=/path/to/copy_text.py -set

使用选项调用脚本-set,作为右键单击(快速列表)选项。

在此处输入图片描述

相关内容