Инструмент для вставки фрагментов текста в приложения
На немецком языке вы начинаете письма и письма с "Sehr geehrter Herr ....".
Я устал набирать это снова и снова. И я устал от настройки приложений, чтобы дать мне ярлыки для вставки текстовых блоков, как это.
Есть ли способ вставить текстовые блоки комментариев в среде рабочего стола?
Таким образом, я мог бы вставить текстовые блоки в vi, thunderbird, firefox, libreoffice...
Другой пример: мне часто нужно куда-то вставлять свой ssh-pub-key. Я знаю, как использовать ssh-copy-id, но, опять же, было бы здорово использовать настольное решение, чтобы дать мне доступ к настраиваемому списку текстовых блоков.
2 ответа
Предполагая, что вы используете 14.04 (python3, nautilus), приведенный ниже скрипт выполняет работу с приложениями, которые используют Ctrl+V для вставки текста. Важно знать, что это не будет работать в gnome-terminal
например.
Я протестировал его на Firefox, Thunderbird, Libreoffice, Sublime Text и Gedit без каких-либо проблем.
Как это устроено
Когда скрипт вызывается, появляется окно со списком определенных вами фрагментов. Выберите элемент (или введите его номер), и фрагмент текста будет вставлен в самое переднее окно любого приложения, которое " Ctrl+V " -совместимо ":
Добавление / редактирование фрагментов
Когда вы выбираете manage snippets
, папка скрипта в ~/.config/snippet_paste
открывается в Наутилус. Чтобы создать новый фрагмент, просто создайте текстовый файл с текстом вашего фрагмента. Не обращайте внимания на имя, которое вы даете файлу; Пока это простой текст, это нормально. Сценарий использует только содержимое файла и создает нумерованный список всех файлов ("содержимое"), которые он находит.
Если каталог фрагментов (~/.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
Если вы не используете наутилус
Если вы используете другой файловый браузер, замените строку (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
Я использую AutoKey, который устанавливается из Ubuntu Software Center
очень прост в использовании
Я добавил фразу как мой адрес электронной почты [email protected]
набрав gm
плюс вкладка <tab>