Herramienta para insertar fragmentos de texto en aplicaciones

Herramienta para insertar fragmentos de texto en aplicaciones

En alemán los correos electrónicos y las cartas empiezan con "Sehr geehrter Herr...".

Estoy cansado de escribir esto una y otra vez. Y estoy cansado de configurar aplicaciones para que me den atajos para insertar bloques de texto como este.

¿Existe alguna forma de insertar bloques de texto de comentarios en el entorno de escritorio?

De esta manera podría insertar bloques de texto en vi, thunderbird, firefox, libreoffice...

Otro ejemplo: a menudo necesito insertar mi clave ssh-pub en algún lugar. Sé cómo usar ssh-copy-id, pero nuevamente, una solución de escritorio que me dé acceso a una lista configurable de bloques de texto sería excelente.

Respuesta1

yo sueloClave automáticase instala desde el Centro de software de Ubuntu

muy fácil de usar

He agregado "frases" como mi dirección de correo electrónico [email protected]escribiendo gmy presionando la pestaña<tab>

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

Respuesta2

El siguiente script hace el trabajo.con aplicaciones que utilizan Ctrl+V para pegar texto. Es importante saber que no funcionará en el gnome-terminal* por ejemplo.
Lo probé en Firefox, Thunderbird, Libreoffice, Sublime Text y Gedit sin ningún problema.

Cómo funciona

Cuando se llama al script, aparece una ventana que enumera los fragmentos que usted definió. Elija un elemento (o escriba su número) y el fragmento de texto se pegará en la ventana frontal de cualquier aplicación que sea Ctrl+ V"-compatible":

ingrese la descripción de la imagen aquí

Agregar/editar fragmentos

Cuando eliges manage snippets, la carpeta del script ~/.config/snippet_pastese abre en nautilus. Para crear un nuevo fragmento, simplemente cree un archivo de texto con el texto de su fragmento. No importa el nombre que le des al archivo; Mientras sea texto plano, está bien. El script solo usa el contenido del archivo y crea una lista numerada de todos los archivos ('contenido) que encuentra.

ingrese la descripción de la imagen aquí

Si el directorio de fragmentos ( ~/.config/snippet_paste) no existe, el script lo crea automáticamente.

Cómo utilizar

  • primero instale xdotooly xclip, si no está instalado en su sistema:

    sudo apt-get install xdotool
    

    y

    sudo apt-get install xclip
    
  • Copie el siguiente script, guárdelo como paste_snippets.pyy ejecútelo con el comando:

    python3 /path/to/paste_snippets.py
    

La secuencia de comandos

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

Si no estás usando nautilus

Si está utilizando otro explorador de archivos, reemplace la línea (29):

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

por:

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

Poner el script bajo una combinación de teclas de método abreviado

Para un uso más conveniente, puede crear un acceso directo para llamar al script:

  • Configuración del sistema →TecladoAtajosAtajos personalizados

  • Haga clic +para agregar su comando:

    python3 /path/to/paste_snippets.py
    

El guión también está publicado enesencia.gisthub.


*EDITAR

La siguiente versión comprueba automáticamente si la gnome-terminal ( ) es la aplicación principal y cambia el comando pegar automáticamente a Ctrl+ Shift+ Ven lugar de Ctrl+V

El uso y la configuración son prácticamente los mismos.

La secuencia de comandos

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

información relacionada