Inspirado pela resposta do cl-netbox, você pode automaticamente remover o ícone depois que empathy
fechar. Isso pode ser feito executando (iniciando) empathy
por meio de um script de wrapper. Tanto quanto eu posso ver, isso não tem desvantagem. A única desvantagem possível é que a opção de clicar com o botão direito do mouse para abrir com não funciona, mas isso não se aplica a empathy
.
O wrapper só seria executado durante e somente enquanto a empatia estivesse sendo executada, aguardando o fechamento, portanto a solução é muito específica.
O que faz
-
Quando a empatia é executada (através do wrapper), um pequeno script é iniciado, fazendo duas coisas:
-
olhe (marque) para o indicador
empathy
ficar visível, pelo comando:gsettings get com.canonical.indicator.messages applications
Isso retornará uma lista de indicadores atuais. Se o indicador
empathy
não estiver incluído, o script o adiciona à lista e define a lista alterada pelo comando:gsettings set com.canonical.indicator.messages applications <newlist>
-
Em seguida, o script procura a existência de uma janela
empathy
Se não existir mais nenhuma janela de empatia, o script buscará novamente a lista de indicadores e removerá o indicador da mesma maneira.
-
- Em seguida, o script wrapper é encerrado e seu ícone é removido do painel.
O wrapper
#!/usr/bin/env python3
import subprocess
import time
key = "com.canonical.indicator.messages"
def hide_icon(icon, mode):
# function to remove the targeted icon from the list
current = eval(subprocess.check_output([
"gsettings", "get", key, "applications"
]).decode("utf-8").strip())
if mode == "h":
try:
current.remove(icon)
except ValueError:
pass
elif mode == "s":
if not icon in current:
current.append(icon)
subprocess.call([
"gsettings", "set", key, "applications", str(current)
])
# run empathy
subprocess.Popen(["empathy"])
# make sure the icon shows
hide_icon('empathy.desktop', "s")
while True:
time.sleep(3)
try:
# get the pid of empathy
pid = subprocess.check_output(["pgrep", "empathy"]).decode("utf-8").strip()
except subprocess.CalledProcessError:
break
else:
try:
# see if the pid of empathy is still in the window list...
wlist = subprocess.check_output(["wmctrl", "-lp"]).decode("utf-8")
# ...if not, remove the icon from the list and break
if not pid in wlist:
hide_icon('empathy.desktop', "h")
break
except subprocess.CalledProcessError:
pass
Como configurar
-
Copie o script em um arquivo vazio, salve-o como
no_indicator.py
-
Teste o script com o comando:
python3 /path/to/no_indicator.py
O ícone deve desaparecer se você fechar a empatia. Se tudo funciona bem:
-
Copie o arquivo global
empathy.desktop
para~/.local/share/applications
:cp /usr/share/applications/empathy.desktop ~/.local/share/applications
-
Abra o arquivo copiado localmente com
gedit
:gedit ~/.local/share/applications/empathy.desktop
substitua a linha:
Exec=empathy
por:
Exec=python3 /path/to/no_indicator.py
-
logo antes (acima) da linha, começando com
Actions=
, insira a linha:StartupWMClass=empathy
Isso evita um ícone extra no Iniciador quando você executa
empathy
-
Faça logout e volte em