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
exclip
, 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