在德语中,邮件和信函的开头是“Sehr geehrter Herr ....”
我厌倦了一遍又一遍地输入这些文字。我也厌倦了配置应用程序来给我提供插入此类文本块的快捷方式。
有没有办法在桌面环境中插入注释文本块?
这样我就可以在 vi、thunderbird、firefox、libreoffice 中插入文本块...
另一个例子:我经常需要在某个地方插入我的 ssh-pub-key。我知道如何使用 ssh-copy-id,但如果有一个桌面解决方案可以让我访问可配置的文本块列表,那就太好了。
答案1
答案2
下面的脚本可以完成这个工作使用应用程序 Ctrl+V 粘贴文本。重要的是要知道它在 * 中不起作用gnome-terminal
。
我在 Firefox、Thunderbird、Libreoffice、Sublime Text 和 Gedit 上进行了测试,没有任何问题。
怎么运行的
调用脚本时,会出现一个窗口,列出您定义的代码片段。选择一个项目(或输入其编号),文本片段将粘贴到任何“兼容”应用程序的最前面的窗口Ctrl中V:
添加/编辑片段
当您选择 时manage snippets
,脚本的文件夹会~/.config/snippet_paste
在 nautilus 中打开。要创建新的代码片段,只需创建一个包含代码片段文本的文本文件即可。不必介意您为文件指定的名称;只要它是纯文本就可以了。该脚本仅使用文件的内容并创建它找到的所有文件(内容)的编号列表。
如果代码片段目录 ( ~/.config/snippet_paste
) 不存在,脚本会为您创建该目录。
如何使用
首先安装
xdotool
,xclip
如果您的系统上尚未安装:sudo apt-get install xdotool
和
sudo apt-get install xclip
复制以下脚本,保存为
paste_snippets.py
,通过命令运行:python3 /path/to/paste_snippets.py
剧本
#!/usr/bin/env python3
import os
import subprocess
home = os.environ["HOME"]
directory = home+"/.config/snippet_paste"
if not os.path.exists(directory):
os.mkdir(directory)
# create file list with snippets
files = [
directory+"/"+item for item in os.listdir(directory) \
if not item.endswith("~") and not item.startswith(".")
]
# create string list
strings = []
for file in files:
with open(file) as src:
strings.append(src.read())
# create list to display in option menu
list_items = ["manage snippets"]+[
(str(i+1)+". "+strings[i].replace("\n", " ").replace\
('"', "'")[:20]+"..") for i in range(len(strings))
]
# define (zenity) option menu
test= 'zenity --list '+'"'+('" "')\
.join(list_items)+'"'\
+' --column="text fragments" --title="Paste snippets"'
# process user input
try:
choice = subprocess.check_output(["/bin/bash", "-c", test]).decode("utf-8")
if "manage snippets" in choice:
subprocess.call(["nautilus", directory])
else:
i = int(choice[:choice.find(".")])
# copy the content of corresponding snippet
copy = "xclip -in -selection c "+"'"+files[i-1]+"'"
subprocess.call(["/bin/bash", "-c", copy])
# paste into open frontmost file
paste = "xdotool key Control_L+v"
subprocess.Popen(["/bin/bash", "-c", paste])
except Exception:
pass
如果您不使用 nautilus
如果你使用其他文件浏览器,请将以下行(29)替换为:
subprocess.Popen(["nautilus", directory])
经过:
subprocess.Popen(["<your_filebrowser>", directory])
将脚本置于快捷键组合下
为了更方便使用,可以创建一个快捷方式来调用脚本:
系统设置 →键盘→快捷方式→自定义快捷方式
单击+添加您的命令:
python3 /path/to/paste_snippets.py
该剧本还发布在gist.gisthub。
*编辑
以下版本会自动检查 ( gnome-
) 终端是否是最前面的应用程序,并自动将粘贴命令更改为Ctrl+ Shift+V而不是Ctrl+V
使用和设置几乎相同。
剧本
#!/usr/bin/env python3
import os
import subprocess
home = os.environ["HOME"]
directory = home+"/.config/snippet_paste"
if not os.path.exists(directory):
os.mkdir(directory)
# create file list with snippets
files = [
directory+"/"+item for item in os.listdir(directory) \
if not item.endswith("~") and not item.startswith(".")
]
# create string list
strings = []
for file in files:
with open(file) as src:
strings.append(src.read())
# create list to display in option menu
list_items = ["manage snippets"]+[
(str(i+1)+". "+strings[i].replace("\n", " ").replace\
('"', "'")[:20]+"..") for i in range(len(strings))
]
# define (zenity) option menu
test= 'zenity --list '+'"'+('" "')\
.join(list_items)+'"'\
+' --column="text fragments" --title="Paste snippets" --height 450 --width 150'
def check_terminal():
# function to check if terminal is frontmost
try:
get = lambda cmd: subprocess.check_output(cmd).decode("utf-8").strip()
get_terms = get(["xdotool", "search", "--class", "gnome-terminal"])
term = [p for p in get(["xdotool", "search", "--class", "terminal"]).splitlines()]
front = get(["xdotool", "getwindowfocus"])
return True if front in term else False
except:
return False
# process user input
try:
choice = subprocess.check_output(["/bin/bash", "-c", test]).decode("utf-8")
if "manage snippets" in choice:
subprocess.call(["nautilus", directory])
else:
i = int(choice[:choice.find(".")])
# copy the content of corresponding snippet
copy = "xclip -in -selection c "+"'"+files[i-1]+"'"
subprocess.call(["/bin/bash", "-c", copy])
# paste into open frontmost file
paste = "xdotool key Control_L+v" if check_terminal() == False else "xdotool key Control_L+Shift_L+v"
subprocess.Popen(["/bin/bash", "-c", paste])
except Exception:
pass