
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 gm
mais clicando na guia<tab>
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":
Adicionando/editando trechos
Quando você escolhe manage snippets
, a pasta do script é ~/.config/snippet_paste
aberta 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.
Se o diretório de snippets ( ~/.config/snippet_paste
) não existir, o script o criará para você.
Como usar
primeiro instale
xdotool
exclip
, 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.py
e 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 →Teclado→Atalhos→Atalhos 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