Evite que “notifique-envie” do empilhamento

2

Eu escrevi este script, quando o botão "Aumentar volume" é pressionado para exibir notificações na área de trabalho com "notify-send".

quando o botão é pressionado:
notify-send "Current volume 'pamixer --get-volume'"

O problema é que as notificações são empilhadas, por ex.

Existe uma maneira de impedir o empilhamento das notificações e apenas exibir a notificação mais recente?

    
por Dankata 07.07.2017 / 22:01

1 resposta

2

A API de notificação tem um meio de especificar o ID de uma notificação atual que deve ser atualizada em vez de criar um novo pop-up, mas notify-send não fornece isso. Se você estiver disposto a usar uma pequena quantidade de python, poderá recuperar o ID de uma notificação quando fizer isso e, em seguida, tentar atualizar esse id posteriormente. Coloque o seguinte código python2 em um arquivo em um diretório que esteja em seu PATH, digamos mynotify-send e do chmod +x mynotify-send :

#!/usr/bin/python
import argparse, gi
#gi.require_version('Notify', '0.7')
from gi.repository import Notify

def parse_args():
    parser = argparse.ArgumentParser()
    parser.add_argument('-m', '--message', default="body")
    parser.add_argument('-i', '--id', type=int)
    return parser.parse_args()

def run(myid,message):
    Notify.init("mynote")
    obj = Notify.Notification.new("my summary", message)
    obj.set_timeout(60*1000)
    if myid:
        obj.set_property('id', myid)
        obj.show()
        newid = obj.get_property('id')
        print newid
    else:
        obj.show()
        myid = obj.get_property('id')
        print myid

def main():
    options = parse_args()
    run(options.id, options.message)

main()

Você deve instalar python-gobject também. Quando você corre

mynotify-send -m 'message 1'

deve aparecer a notificação, mas também imprimir um id no stdout. Geralmente, esse é apenas um pequeno número que conta o número de notificações, por exemplo, 6 . Você pode então alterar a mensagem no popup existente, adicionando este id:

mynotify-send --id 6 -m 'message 2'

Você pode fazer isso enquanto o pop-up existir. Depois que o pop-up desaparecer, a próxima mensagem receberá um novo ID, por exemplo, 7 , que o programa imprime, e você precisará usá-lo em mensagens posteriores. Então, basicamente, em um shell script, você só se lembraria da saída do programa e a reutilizaria a cada vez.

    
por 08.07.2017 / 15:18