Como posso copiar o caminho para o arquivo atualmente aberto no gedit para a área de transferência?

3

Eu estou tentando escrever um comando personalizado no Gedit que copia o caminho do documento atualmente aberto e ativo (tanto para o diretório pai quanto para o arquivo upto) para a área de transferência, pois não encontrei nenhum plug-in ou ferramenta que possa fazer isso.

Ainda não sei de onde começar, nem tenho boas referências, mas sei que tenho que fazer scripts no script bash.

Eu procurei pelo comando externo para copiar qualquer string para a área de transferência do terminal (como também executa o script bash), mas as respostas sugerem o uso da ferramenta "xclip", que tentei e fiquei desapontado, pois qualquer string copiada com xclip pode só será colado com o comando "xclip -o". Eu preciso que a string copiada seja colada com Ctrl-V para que eu possa abrir o caminho no gerenciador de arquivos (nautilus).

Qualquer ajuda / sugestão é apreciada.

    
por Vicky Dev 13.08.2015 / 20:08

3 respostas

5

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:

  1. Copie apenas o caminho para o diretório do arquivo, executando o script com a opção

    -path
    

    ou

  2. 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

  1. Instale os dois xdotool e xclip :

    sudo apt-get install xdotool xclip
    
  2. Copie o script em um arquivo vazio, salve-o como get_path.py

  3. 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 janela gedit na frente.

    • Pressione Ctrl + V em algum lugar para colar o caminho que acabou de ser copiado.
  4. Se tudo funcionar bem, você pode disponibilizar as opções de duas maneiras:

    1. 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.
    2. Disponibilize as duas opções no gedit launcher:

      Copieoconteúdoabaixoemumarquivovazio,salve-ocomogedit.desktopin~/.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:).

    
por Jacob Vlijm 13.08.2015 / 20:49
3

Depois de alguma pesquisa de documentação, consegui encontrar a solução, por isso vou responder à minha pergunta aqui.

Abra o Gedit e vá para "Ferramentas" > > "Gerenciar ferramentas externas" e criar nova ferramenta.

Adicione o seguinte comando da seguinte forma:

echo -n $GEDIT_CURRENT_DOCUMENT_URI | xclip -sel clip;exit;

Feche e reinicie o Gedit (apenas para confirmação).

Abra qualquer documento e vá para Ferramentas > > Ferramentas Externas e, em seguida, clique no rótulo do comando recém-criado. O caminho estará na sua área de transferência.

    
por Vicky Dev 24.08.2015 / 10:00
0

comparar com $GEDIT_CURRENT_DOCUMENT_URI
variável $GEDIT_CURRENT_DOCUMENT_PATH  parece melhor para mim:

  • sem file:// prefixo
  • exibir caracteres multibyte (não urlencode)

ref:
link link

    
por yurenchen 26.09.2017 / 20:36