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:
-
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 (!!) -
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 comExec=
:/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).