Инструмент для вставки текстовых отрывков в приложения

На немецком языке Вы запускаете письма и буквы с "Sehr geehrter Герр....".

Я устал от ввода этого снова и снова. И я устал от конфигурирования приложений, чтобы дать мне ярлыки для вставки текстовых блоков как это.

Существует ли способ вставить блоки текста комментария с настольной средой?

Таким образом, я мог вставить текстовые блоки в vi, тандерберд, Firefox, libreoffice...

Другой пример: Я часто должен вводить свой ssh-pub-key где-нибудь. Я знаю, как использовать ssh-copy-id, но снова настольное решение предоставить мне доступ к настраиваемому списку текстовых блоков было бы отличным.

3
задан 26 April 2017 в 09:20

2 ответа

Принятие Вас использует 14.04 (python3, наутилус), сценарий ниже делает задание с приложениями, которые используют Ctrl+V для вставки текста. Важно знать, что это не будет работать в gnome-terminal например.
Я протестировал его на a.o. Firefox, Thunderbird, Libreoffice, Сублимированный текст и Gedit без любой проблемы.

Как это работает

Когда сценарий называют, окно появляется, перечисляя отрывки, которые Вы определили. Выберите объект (или введите его число), и фрагмент текста будет вставляться в frontmost окне любого приложения, которое является Ctrl+V "-совместимый":

enter image description here

Добавление / редактирование отрывков

Когда Вы выбираете manage snippets, папка сценария в ~/.config/snippet_paste открывается в наутилусе. Для создания нового отрывка просто создайте текстовый файл с текстом отрывка. Не возражайте против имени, которое Вы даете файлу; пока это - простой текст, это в порядке. Сценарий только использует содержание файла и создает пронумерованный список всех файлов ('содержание) это находит.

enter image description here

Если каталог отрывков (~/.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-) терминал является frontmost приложением и изменяет команду вставки автоматически в 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
6
ответ дан 1 December 2019 в 13:09

Я использую AutoKey, который это устанавливает от Центра программного обеспечения Ubuntu

очень легкий использовать

, я добавил "фразу" s как мой адрес электронной почты example@gmail.com путем ввода gm плюс совершающая нападки вкладка <tab>

enter image description here

enter image description here

4
ответ дан 1 December 2019 в 13:09

Другие вопросы по тегам:

Похожие вопросы: