O que o gnome-terminal faz
A partir da leitura da documentação do Gtk, parece que há duas maneiras de um programa tratar o conteúdo da área de transferência - texto simples e lista de URIs para o arquivo. Por alguma razão, gnome-terminal
decidiu que seria uma boa ideia diferenciar entre dois e, portanto, quando você copia um arquivo do Nautilus para gnome-terminal
, o terminal recupera a lista de URI, enquanto outros programas - somente texto sem formatação. / p>
A edição automática da área de transferência seria um pouco problemática (embora ainda persista a ideia) - precisaríamos definir uma maneira de detectar onde você está tentando colar o conteúdo da área de transferência e executar um script persistente que edita o script em texto simples (efetivamente excluindo os URIs) impedirá que você copie arquivos de uma janela do Nautilus para outra.
Arrastar e soltar é provavelmente a solução mais simples. Mas desde que uma abordagem de script foi solicitada, tive a ideia de duas abordagens manuais. Uma conta com o recurso embutido do Nautilus de adicionar scripts ao menu do botão direito do mouse. O outro ao digitar um atalho específico antes colar no gnome-terminal.
Abordagem de script manual, versão 1
Esse script deve ser colocado na pasta ~/.local/share/nautilus/scripts
e tornado executável via chmod +x ~/.local/share/nautilus/scripts/scriptname.sh
ou clicando com o botão direito do mouse no arquivo e editando a guia Permissões nas propriedades. Efetivamente, permite que você copie o caminho para os arquivos selecionados como strings entre aspas e com file://
da parte removida.
Para usá-lo, selecione arquivos ou arquivos no Nautilus e clique com o botão direito do mouse. Selecione Scripts
menu - > %código%.
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from gi.repository import Gtk, Gdk
import sys
import os
import time
import subprocess
import signal
import urllib.parse
import threading
def autoquit(*args):
subprocess.call(['zenity','--info'])
time.sleep(1)
Gtk.main_quit()
def main():
uris = os.getenv("NAUTILUS_SCRIPT_SELECTED_URIS")
new_text = " ".join([ "'" + urllib.parse.unquote(i).replace('file://','') + "'"
for i in uris.split()])
clip = Gtk.Clipboard.get(Gdk.SELECTION_CLIPBOARD)
if clip.set_text(new_text,-1):
thread = threading.Thread(target=autoquit)
thread.start()
Gtk.main()
if __name__ == '__main__':
try:
main()
except Exception as e:
subprocess.call(['zenity','--info','--text',str(e)])
Abordagem de script manual, versão 2
Esta abordagem baseia-se na ideia de executar o script python logo abaixo antes de colar em your_script_name.py
. Você pode chamá-lo de gnome-terminal
manualmente como comando ou vincular isso a um atalho de teclado. Assim, com o método de atalho, eu iria ligá-lo ao Ctrl Deslocar B (porque é B e V estão próximos no teclado), e cada vez Eu preciso colar do Nautilus, eu bati CtrlShift B para editar, então CtrlShift v para colar
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from gi.repository import Gtk, Gdk
import subprocess
import urllib.parse
import signal
import sys
def unquote_uri(*args):
uris = args[-2]
new_text = " ".join([ "'" + str(urllib.parse.unquote(i).replace('file://','')) + "'"
for i in uris])
print(new_text)
args[-3].clear()
args[-3].set_text(new_text,-1)
Gtk.main_quit()
def main():
cached = str()
clip = Gtk.Clipboard.get(Gdk.SELECTION_CLIPBOARD)
clip.request_uris(unquote_uri, None)
signal.signal(signal.SIGINT,signal.SIG_DFL)
Gtk.main()
if __name__ == '__main__': main()
Aviso: resposta ainda em desenvolvimento; conteúdo / ideias adicionais podem ser adicionados posteriormente