Como uso 'notify-send' para substituir imediatamente uma notificação existente?

17

Quando eu uso notify-send para mostrar uma notificação na área de trabalho e depois usá-la novamente para mostrar uma notificação diferente, observei que a segunda mostra apenas após a primeira desapareceu .

Existe uma maneira de obter notify-send para substituir imediatamente uma notificação existente por uma diferente?

    
por ish 10.07.2012 / 07:54

3 respostas

13

Você pode, mas deve usar um libnotify para fazer isso

notify-send não tem a capacidade de substituir as notificações existentes antes de expirarem (ou desaparecerem). Este é um bug conhecido . No entanto, um comentarista no relatório de erros postou um patch para corrigir isso.

Instalando o patch libnotify-bin do PPA

Eu criei uma versão corrigida do pacote libnotify-bin que permite substituições no meu PPA. Atualmente é apenas para o Ubuntu 12.04, mas se você precisar de qualquer outra versão suportada atualmente, por favor poste um comentário e eu farei o meu melhor para disponibilizá-lo.

Para instalar, abra um terminal e:

sudo apt-add-repository ppa:izx/askubuntu
sudo apt-get update
sudo apt-get install libnotify-bin

Como usar os recursos de substituição

O notify-send corrigido inclui dois novos comutadores, -p (ou - print-id ) e -r (ou - replace-id ). O --help descreve-os como:

  -p, --print-id                    Print the notification ID.
  -r, --replace-id=REPLACE_ID       The ID of the notification to replace.
  • Com -p , cada notify-send retornará uma ID N (número / número inteiro).
  • A emissão de outro notify-send com -r N substituirá a notificação anterior imediatamente .
  • Por exemplo, para bash, você pode salvar o ID de notify-send -p ... com:

    NID=$(notify-send -p "MESSAGE-1")
    

    e, em seguida, substitua-o por:

    notify-send -r $NID "MESSAGE-2"
    
  • Você pode recursivamente usar ambos -p e -r em um script, desde que a variável -r seja inicializada para 0 no começo.

  • Aqui está um script simples que mostra as notificações contando de 0 a 100 em intervalos de meio segundo:

    #!/bin/bash
    NID=0
    for i in {0..100..10}    do       NID=$(notify-send -p -r $NID $i)       sleep 0.5    done
por ish 10.07.2012 / 07:54
10

X-ref:
Como forçar uma nova notificação no notify-osd a aparecer sem esperar que a anterior saia?

sem patches, você pode simplesmente fazer

#!/bin/bash

for i in {0..100..10}
    do
          killall notify-osd
          notify-send "testing" $i
          sleep 1
    done

Bookmark:
Como uso 'notify-send' para substituir imediatamente uma notificação existente?

Envia um erro notify-osd (2592): Operação não permitida. O que isso significa?

Pode significar que os privilégios são inadequados, exigindo:

sudo killall notify-osd
    
por george rowell 19.09.2012 / 05:37
5

Você pode usar a dica "síncrona" para criar uma notificação de "confirmação" que substituirá as notificações de confirmação anteriores. Por exemplo:

notify-send "Message" -h string:x-canonical-private-synchronous:anything

A dica "x-canonical-private-synchronous" é especificada em este documento . Para especificar uma dica, use -h type:name:value . O tipo aqui é string , o nome é x-canonical-private-synchronous e parece que o valor pode ser o que você quiser.

Portanto, se a sua primeira notificação for criada com essa dica e a segunda também, a segunda substituirá imediatamente a primeira. (Veja Animations and Durations na documentação, na coluna "bolhas de confirmação").

    
por Mark L 12.01.2017 / 21:14