Ferramenta para inserir trechos de texto em aplicativos

4

Em alemão, você começa a enviar 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 dar 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?

Desta forma, eu poderia inserir blocos de texto no vi, thunderbird, firefox, libreoffice ...

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

    
por guettli 31.10.2014 / 11:22

2 respostas

5

Assumindo que você está usando 14.04 (python3, nautilus) o script abaixo faz o trabalho com aplicações que usam Ctrl + V para colar texto . É importante saber que não funcionará no gnome-terminal , por exemplo.
Eu testei em um.o. Firefox, Thunderbird, Libreoffice, Sublime Text e Gedit sem qualquer problema.

Como funciona

Quando o script é chamado, uma janela é exibida, listando os snippets 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":

Adicionando/editandosnippets

Quandovocêescolhemanagesnippets,apastadoscriptem~/.config/snippet_pasteéabertanonautilus.Paracriarumnovosnippet,bastacriarumarquivodetextocomotextodosnippet.Nãosepreocupecomonomequevocêdeuaoarquivo;contantoquesejatextosimples,estátudobem.Oscriptusaapenasoconteúdodoarquivoecriaumalistanumeradadetodososarquivos('conteúdo)encontrados.

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

Como usar

  • primeiro instale xdotool e xclip , se não estiver instalado no seu sistema:

    sudo apt-get install xdotool
    

    e

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

    python3 /path/to/paste_snippets.py
    

O script

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

Colocando o script em 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" > "Teclado" > "Atalhos" > "Atalhos personalizados"

Clique em "+" para adicionar seu comando: python3 /path/to/paste_snippets.py

O script também é postado em gist.gisthub

EDITAR

A versão abaixo verifica automaticamente se o terminal ( gnome- ) é o aplicativo mais avançado e altera o comando paste automaticamente para Ctrl + Deslocamento + V em vez de Ctrl + V

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

O script

#!/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
    
por Jacob Vlijm 01.11.2014 / 13:50
4

Eu uso AutoKey que ele instala do Ubuntu Software Center

real fácil de usar

Eu adicionei "frase" s como meu endereço de e-mail [email protected] , digitando gm mais pressionando a guia <tab>

    
por BOB 17.07.2016 / 11:04