Um indicador, executando vários comandos
A resposta abaixo é uma versão editada de esta . Como essa questão é bem diferente daquela, decidimos especificar a resposta para servir de maneira flexível a essa questão, lendo nomes e comandos (de menu) a partir de um arquivo de texto.
Asolução
Éumindicador,lendolinhasdeumarquivo,chamadocommands
,noqualonomeeocomandosãodefinidos,umconjuntoporlinha.Nome(comoaparecenomenu)ecomandosãoseparadospor||
.Umexemplo:
Gedit || gedit
Go Home || nautilus $HOME
O script
#!/usr/bin/env python3
import subprocess
import os
import signal
import gi
gi.require_version('Gtk', '3.0')
gi.require_version('AppIndicator3', '0.1')
from gi.repository import Gtk, AppIndicator3
currpath = os.path.dirname(os.path.realpath(__file__))
class Indicator():
def __init__(self):
self.app = 'update_setting'
iconpath = currpath+"/icon.png"
self.indicator = AppIndicator3.Indicator.new(
self.app, iconpath,
AppIndicator3.IndicatorCategory.SYSTEM_SERVICES)
self.indicator.set_status(AppIndicator3.IndicatorStatus.ACTIVE)
self.indicator.set_menu(self.create_menu())
def getscripts(self):
cmd_data = [l for l in open(
os.path.join(currpath, "commands")
).read().splitlines()]
cmd_data = [l.split("||") for l in cmd_data]
for cmd in cmd_data:
menuitem = Gtk.MenuItem(cmd[0].strip())
menuitem.connect("activate", self.run_script, cmd[1].strip())
self.menu.append(menuitem)
def create_menu(self):
self.menu = Gtk.Menu()
self.getscripts()
# quit
item_quit = Gtk.MenuItem('Quit')
sep = Gtk.SeparatorMenuItem()
self.menu.append(sep)
item_quit.connect('activate', self.stop)
self.menu.append(item_quit)
self.menu.show_all()
return self.menu
def run_script(self, widget, script):
subprocess.Popen(["/bin/bash", "-c", script])
def stop(self, source):
Gtk.main_quit()
Indicator()
signal.signal(signal.SIGINT, signal.SIG_DFL)
Gtk.main()
Como usar
- Copie o script acima em um arquivo vazio, salve-o como
run_commands.py
-
Copie o ícone abaixo e salve-o como (exatamente)
icon.png
em uma e na mesma pasta do script. - Crieumarquivodetexto,tambémemumaenamesmapasta,(exatamente)chamado:
commands
(semextensão). Preenchaoarquivocomseuscomandoseseusnomes,como:
Gedit || gedit Go Home || nautilus $HOME
Ambos os nomes podem incluir espaços e os comandos podem incluir argumentos.
-
Execute o indicador pelo comando:
python3 /path/to/run_commands.py