Script para copiar o caminho de um arquivo, aberto em gedit
Com a janela do gedit à frente, o pequeno script abaixo deriva o caminho do nome da janela ( gedit
) e o copia para a área de transferência.
O script tem duas opções:
-
Copie apenas o caminho para o diretório do arquivo, executando o script com a opção
-path
ou
-
Copie o caminho incluindo o nome do arquivo, executando o script com a opção
-file
O script
#!/usr/bin/env python3
import subprocess
import sys
name = subprocess.check_output(["xdotool", "getactivewindow", "getwindowname"]).decode("utf-8").strip()
if all(["(" in name, ")" in name]):
path = name[name.find("(")+1:name.find(")")]
if sys.argv[1] == "-file":
fname = name[:name.find("(")]
elif sys.argv[1] == "-path":
fname = ""
command = "echo "+'"'+path+"/"+fname+'"'+" | xclip -selection clipboard"
subprocess.Popen(["/bin/bash", "-c", command])
Como usar
-
Instale os dois
xdotool
exclip
:sudo apt-get install xdotool xclip
-
Copie o script em um arquivo vazio, salve-o como
get_path.py
-
Teste o script:
- abre um arquivo
gedit
existente -
abra uma janela de terminal, execute o comando:
sleep 5 && python3 /path/to/get_path.py -file
mude imediatamente para a janela
gedit
, para que a última parte do comando seja executada com a janelagedit
na frente. - Pressione Ctrl + V em algum lugar para colar o caminho que acabou de ser copiado.
- abre um arquivo
-
Se tudo funcionar bem, você pode disponibilizar as opções de duas maneiras:
- Crie duas teclas de atalho para as duas opções: escolha: Configurações do sistema > "Teclado" > "Atalhos" > "Atalhos personalizados". Clique no botão "+" e adicione os dois comandos a dois atalhos diferentes.
-
Disponibilize as duas opções no
gedit
launcher:Copieoconteúdoabaixoemumarquivovazio,salve-ocomo
gedit.desktop
in~/.local/share/applications
[Desktop Entry] Name=gedit GenericName=Text Editor Comment=Edit text files Exec=gedit %U Terminal=false Type=Application StartupNotify=true MimeType=text/plain; Icon=accessories-text-editor Categories=GNOME;GTK;Utility;TextEditor; X-GNOME-DocPath=gedit/gedit.xml X-GNOME-FullName=Text Editor X-GNOME-Bugzilla-Bugzilla=GNOME X-GNOME-Bugzilla-Product=gedit X-GNOME-Bugzilla-Component=general X-GNOME-Bugzilla-Version=3.10.4 X-GNOME-Bugzilla-ExtraInfoScript=/usr/share/gedit/gedit-bugreport Actions=Window;Document;divider1;Copy current file's directory;Copy path+file name; Keywords=Text;Editor;Plaintext;Write; X-Ubuntu-Gettext-Domain=gedit [Desktop Action Window] Name=Open a New Window Exec=gedit --new-window OnlyShowIn=Unity; [Desktop Action Document] Name=Open a New Document Exec=gedit --new-document OnlyShowIn=Unity; [Desktop Action Copy current file's directory] Name=Copy current directory Exec=python3 /path/to/get_path.py -path OnlyShowIn=Unity; [Desktop Action divider1] Name=..................................... OnlyShowIn=Unity; [Desktop Action Copy path+file name] Name=Copy current directory, include file name Exec=python3 /path/to/get_path.py -file OnlyShowIn=Unity;
Nas duas linhas:
Exec=python3 /path/to/get_path.py -path
e
Exec=python3 /path/to/get_path.py -file
substitua
/path/to/get_path.py
pelo caminho real para o script.Faça o logout e volte a fazer o Unity "mudar" para o novo arquivo local
.desktop
.
Explicação
No nome da janela do gedit, o caminho é exibido entre (
e )
. O script simplesmente vê a janela da frente com a ajuda de xdotool
e, em seguida, lê o caminho entre esses dois caracteres.
Notas
Como o caminho é lido de forma textual, o script falhará se o nome do arquivo incluir outros caracteres ()
.
Exemplos
Com a seguinte janela na frente:
aprimeiraopçãocopiaparaaáreadetransferênciaocaminhoparaoarquivo:
~/Bureaublad
enquanto a segunda opção inclui o próprio arquivo:
~/Bureaublad/some test file.txt
Como você pode ver, os espaços são atendidos:).