Como criar um lançador de aplicativos personalizado que copie um texto para minha área de transferência?

2

Eu quero fazer um Iniciador de Aplicativos Personalizado e adicioná-lo ao meu Painel para que toda vez que eu clicar nele copie uma linha de texto pré-carregada, mas não sei como escrever os comandos para isso .

Por exemplo, se a linha de texto pré-carregada for "Olá". Eu gostaria que fosse assim que toda vez que eu clicasse nele, ele copia a palavra "Olá" para minha área de transferência para que eu possa colá-la em qualquer lugar.

    
por omurad 08.07.2015 / 22:43

1 resposta

4

Abaixo, um exemplo de uma configuração facilmente personalizável. Existe um script e um arquivo .desktop (launcher) para executar o script com duas opções. Você pode:

  • clique no iniciador para copiar uma sequência ou linha predefinida para a área de transferência ou:
  • clique com o botão direito do mouse para definir uma nova string:


Como configurar

Para copiar texto para a área de transferência, precisamos instalar o xclip :

sudo apt-get install xclip

Então precisamos de duas coisas:

  1. O script:

    #!/usr/bin/env python3
    import subprocess
    import os
    import sys
    
    wordfile = os.environ["HOME"]+"/.word_file"
    
    def get_word():
        try:
            copy = "xclip -in -selection c "+"'"+wordfile+"'"
            subprocess.Popen(["/bin/bash", "-c", copy])
        except FileNotFoundError:
            pass
    
    def set_word():
        try:
            word = "zenity --entry --title='Change the word' --text='Set a new string or line'"
            new_word = subprocess.check_output(["/bin/bash", "-c", word]).decode("utf-8").strip()
            open(wordfile, "wt").write(new_word)
        except subprocess.CalledProcessError:
            pass
    
    arg = sys.argv[1]
    if arg == "-set":
       set_word()
    elif arg == "-get":
        get_word()
    

    Copie-o para um arquivo vazio, salve-o como copy_text.py e torne-o executável (!!)

  2. A .desktop file , para executar o script com duas opções

    [Desktop Entry]
    Name=Paste a string
    Exec=/path/to/copy_text.py -get
    Type=Application
    Icon=/path/to/your/icon.png
    
    Actions=Set a new string;
    
    [Desktop Action Set a new string]
    Name=Set a new string
    Exec=/path/to/copy_text.py -set
    OnlyShowIn=Unity;
    

    Copie-o para um arquivo vazio, salve-o como paste_text.desktop em ~/.local/share/applications , substitua nas duas linhas, começando com Exec= :

    /path/to/copy_text.py
    

    pelo caminho real para o script e substitua na linha, começando com Icon=

    /path/to/your/icon.png
    

    pelo caminho real até um ícone válido (por exemplo, um ícone .png de 64x64 px)

Agora arraste o arquivo .desktop para o Unity launcher e você terá sua configuração facilmente personalizável.

Explicação

Usando o xclip em um arquivo .desktop

xclip é um utilitário que pode ser usado para gerenciar a área de transferência a partir da linha de comando.
Para copiar uma string para a área de transferência, você pode usar o comando:

echo <string> | xclip -sel clip

Para copiar o conteúdo de um arquivo para a área de transferência:

xclip -in -selection c <file>

Se você precisar de uma string fixa , você poderia, como mencionou Serg, fazer com um arquivo .desktop com uma linha:

[Desktop Entry]
Name=Paste a string
Exec=/bin/bash -c "echo Hello World | xclip -sel clip"
Type=Application
Icon=/path/to/icon.png

ou, se você tiver apenas um número limitado de sequências (fixas) para usar:

[Desktop Entry]
Name=Paste a string
Exec=/bin/bash -c "echo Monkey | xclip -sel clip"
Type=Application
Icon=/opt/lswitcher/icon/lsw_64.png

Actions=Monkey;eats;banana;

[Desktop Action Monkey]
Name=Copy Monkey
Exec=/bin/bash -c "echo Monkey | xclip -sel clip"
OnlyShowIn=Unity;

[Desktop Action eats]
Name=Copy eats
Exec=/bin/bash -c "echo eats | xclip -sel clip"
OnlyShowIn=Unity;

[Desktop Action banana]
Name=Copy banana
Exec=/bin/bash -c "echo banana | xclip -sel clip"
OnlyShowIn=Unity;

crie o arquivo, conforme explicado na resposta, e arraste-o sobre o Unity launcher:

Se a string a ser copiada for imprevisível, isso significaria que você teria que editar o arquivo .desktop manualmente toda vez que quiser alterar a string, o que não é muito fácil de usar.

Para que serve o roteiro

Portanto, o script cria um arquivo externo, ~/.word_file , com o conteúdo da string que você gostaria de copiar para a área de transferência. O script tem duas funções:

def get_word():
    try:
        copy = "xclip -in -selection c "+"'"+wordfile+"'"
        subprocess.Popen(["/bin/bash", "-c", copy])
    except FileNotFoundError:
        pass

para (tentar) ler o texto a ser copiado para a área de transferência do arquivo, pass se o arquivo não existir.

e:

def set_word():
    try:
        word = "zenity --entry --title='Change the word' --text='Set a new string or line'"
        new_word = subprocess.check_output(["/bin/bash", "-c", word]).decode("utf-8").strip()
        open(wordfile, "wt").write(new_word)
    except subprocess.CalledProcessError:
        pass

para abrir uma janela zenity na qual você pode inserir a nova string ou linha para gravar no arquivo:

O arquivo .desktop

finalmente, chama as duas funções do script com dois comandos:

Exec=/path/to/copy_text.py -get

para chamar o script com a opção -get , como o comando "main" no arquivo .desktop , para ser executado com um simples clique no ícone do Unity launcher, e:

Exec=/path/to/copy_text.py -set

para chamar o script com a opção -set , como uma opção de clique com o botão direito do mouse (lista rápida).

    
por Jacob Vlijm 08.07.2015 / 23:58