我想制作一个自定义应用程序启动器,然后将其添加到我的面板,以便每次我单击它时,它都会复制一行预加载的文本,但我不知道如何为它编写命令。
例如,如果预加载的文本行是“Hello”。我希望每次我点击它时,它都会将单词“Hello”复制到我的剪贴板,这样我就可以将其粘贴到任何地方。
答案1
下面是一个易于定制的设置示例。它包含一个脚本和一个.desktop
文件(启动器),用于使用两个选项运行该脚本。您可以:
- 单击启动器将预定义的字符串或行复制到剪贴板,或者:
右键单击它以设置新字符串:
如何设置
为了能够将文本复制到剪贴板,我们需要安装xclip
:
sudo apt-get install xclip
然后我们需要两样东西:
剧本:
#!/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
并使其可执行(!!)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
通过有效图标的实际路径(例如
.png
64x64 像素的图标)
现在将.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
,作为右键单击(快速列表)选项。