Ferramenta para inserir trechos de texto em aplicativos

Ferramenta para inserir trechos de texto em aplicativos

Em alemão, você inicia e-mails e cartas com "Sehr geehrter Herr ....".

Estou cansado de digitar isso de novo e de novo. E estou cansado de configurar aplicativos para me fornecerem atalhos para inserir blocos de texto como este.

Existe uma maneira de inserir blocos de texto de comentários no ambiente de área de trabalho?

Dessa forma eu poderia inserir blocos de texto no vi, Thunderbird, Firefox, libreoffice...

Outro exemplo: muitas vezes preciso inserir minha chave ssh-pub em algum lugar. Eu sei como usar o ssh-copy-id, mas novamente uma solução de desktop que me desse acesso a uma lista configurável de blocos de texto seria ótimo.

Responder1

eu usoChave automáticaele é instalado a partir do Ubuntu Software Center

muito fácil de usar

Eu adicionei "frases" como meu endereço de e-mail [email protected]digitando gmmais clicando na guia<tab>

insira a descrição da imagem aqui

insira a descrição da imagem aqui

Responder2

O script abaixo faz o trabalhocom aplicativos que usam Ctrl+V para colar texto. É importante saber que não funcionará no gnome-terminal* por exemplo.
Testei no Firefox, Thunderbird, Libreoffice, Sublime Text e Gedit sem nenhum problema.

Como funciona

Quando o script é chamado, uma janela aparece listando os trechos que você definiu. Escolha um item (ou digite seu número) e o fragmento de texto será colado na janela frontal de qualquer aplicativo que seja Ctrl+ V"-compatível":

insira a descrição da imagem aqui

Adicionando/editando trechos

Quando você escolhe manage snippets, a pasta do script é ~/.config/snippet_pasteaberta no nautilus. Para criar um novo snippet, basta criar um arquivo de texto com o texto do seu snippet. Não se importe com o nome que você dá ao arquivo; contanto que seja texto simples, está tudo bem. O script usa apenas o conteúdo do arquivo e cria uma lista numerada de todos os arquivos ('conteúdo) que encontra.

insira a descrição da imagem aqui

Se o diretório de snippets ( ~/.config/snippet_paste) não existir, o script o criará para você.

Como usar

  • primeiro instale xdotoole xclip, se não estiver instalado em seu sistema:

    sudo apt-get install xdotool
    

    e

    sudo apt-get install xclip
    
  • Copie o script abaixo, salve-o como paste_snippets.pye execute-o pelo comando:

    python3 /path/to/paste_snippets.py
    

O roteiro

#!/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

Se você não estiver usando o nautilus

Se você estiver usando outro navegador de arquivos, substitua a linha (29):

subprocess.Popen(["nautilus", directory])

por:

subprocess.Popen(["<your_filebrowser>", directory])

Colocar o script sob uma combinação de teclas de atalho

Para um uso mais conveniente, você pode criar um atalho para chamar o script:

  • Configurações do sistema →TecladoAtalhosAtalhos personalizados

  • Clique +para adicionar seu comando:

    python3 /path/to/paste_snippets.py
    

O roteiro também está postado emessência.gisthub.


*EDITAR

A versão abaixo verifica automaticamente se o gnome-terminal ( ) é o aplicativo mais frontal e altera o comando colar automaticamente para Ctrl+ Shift+ Vem vez de Ctrl+V

O uso e a configuração são praticamente os mesmos.

O roteiro

#!/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

informação relacionada