Come si usa "invia-notifica" per sostituire immediatamente una notifica esistente?

17

Quando uso notify-send per mostrare una notifica sul desktop, e poi lo uso di nuovo per mostrare una notifica diversa, ho notato che il secondo mostra solo dopo il primo è scomparso .

C'è un modo per ottenere notify-send per sostituire immediatamente una notifica esistente con una diversa?

    
posta ish 10.07.2012 - 07:54

3 risposte

13

Puoi, ma devi usare un libnotify patchato per farlo

notify-send non ha la capacità di sostituire le notifiche esistenti prima che siano scadute (o scomparse). Questo è un bug noto . Tuttavia, un commentatore sul bug report ha pubblicato una patch per correggere esso.

Installazione del libnotify-bin con patch da PPA

Ho creato una versione con patch del pacchetto libnotify-bin che consente le sostituzioni nel mio PPA. Attualmente è solo per Ubuntu 12.04, ma se ne hai bisogno per qualsiasi altra versione attualmente supportata, per favore pubblica un commento e farò del mio meglio per renderlo disponibile.

Per installare, apri un terminale e:

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

Come utilizzare le capacità di sostituzione

La patch notify-send include due nuovi parametri, -p (o - print-id ) e -r (o - replace-id ). Il --help li descrive come:

  -p, --print-id                    Print the notification ID.
  -r, --replace-id=REPLACE_ID       The ID of the notification to replace.
  • Con -p , ogni notify-send restituirà un ID N (numero / intero).
  • L'emissione di un altro notify-send con -r N sostituirà la precedente notifica immediatamente .
  • Ad esempio, per bash, puoi salvare l'ID da notify-send -p ... con:

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

    e quindi sostituirlo con:

    notify-send -r $NID "MESSAGE-2"
    
  • Puoi ricorsivamente usare sia -p sia -r in uno script, purché la variabile -r sia inizializzata a 0 all'inizio.

  • Ecco un semplice script che mostra le notifiche contando da 0 a 100 a intervalli di mezzo secondo:

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

X-ref:
Come forzare una nuova notifica in notify-osd a comparire senza attendere che quella precedente esca?

senza patch puoi semplicemente fare

#!/bin/bash

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

Segnalibro:
Come faccio a utilizzare" invia-invia "per sostituire immediatamente una notifica esistente?

Invia un errore notify-osd (2592): Operazione non consentita. Cosa significa?

Può significare che i privilegi sono inadeguati e richiedono:

sudo killall notify-osd
    
risposta data george rowell 19.09.2012 - 05:37
6

È possibile utilizzare il suggerimento "sincrono" per creare una notifica di "conferma" che sostituirà le notifiche di conferma precedenti. Ad esempio:

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

L'hint "x-canonical-private-sincrono" è specificato in questo documento . Per specificare un suggerimento, usa -h type:name:value . Il tipo qui è string , il nome è x-canonical-private-synchronous e sembra che il valore possa essere quello che vuoi.

Quindi se la tua prima notifica è creata con quel suggerimento e anche la seconda è la seconda, la seconda sostituirà immediatamente la prima. (Vedi Animazioni e durate nella documentazione, nella colonna "bolle di conferma".)

    
risposta data Mark L 12.01.2017 - 21:14

Leggi altre domande sui tag