Comment utiliser 'notify-send' pour remplacer immédiatement une notification existante?

17

Lorsque j'utilise notify-send pour afficher une notification sur le bureau, puis que je l'utilise à nouveau pour afficher une notification différente, j'ai remarqué que la deuxième affiche uniquement après la première a disparu .

Existe-t-il un moyen d'obtenir que notify-send remplace immédiatement une notification existante par une autre?

    
posée ish 10.07.2012 - 07:54
la source

3 réponses

13

Vous pouvez, mais vous devez utiliser un libnotify patché pour le faire

notify-send n'a pas la capacité de remplacer les notifications existantes avant leur expiration (ou leur disparition). Ceci est un bogue connu . Cependant, un commentateur du rapport de bogue a publié un correctif pour corriger ça.

Installation du correctif libnotify-bin depuis PPA

J'ai créé une version corrigée du paquet libnotify-bin qui permet des remplacements dans mon PPA. Actuellement, ce n'est que pour Ubuntu 12.04, mais si vous en avez besoin pour toute autre version actuellement prise en charge, merci de poster un commentaire et je ferai de mon mieux pour le rendre disponible.

Pour installer, ouvrez un terminal et:

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

Comment utiliser les fonctionnalités de remplacement

Le notify-send corrigé inclut deux nouveaux commutateurs, -p (ou - print-id ) et -r (ou - ID-replace ) ). Le --help les décrit comme:

  -p, --print-id                    Print the notification ID.
  -r, --replace-id=REPLACE_ID       The ID of the notification to replace.
  • Avec -p , chaque notify-send retournera un identifiant N (nombre / entier).
  • L'émission d'un autre notify-send avec -r N remplacera la notification précédente immédiatement .
  • Par exemple, pour bash, vous pouvez enregistrer l'ID de notify-send -p ... avec:

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

    puis remplacez-le par:

    notify-send -r $NID "MESSAGE-2"
    
  • Vous pouvez utiliser récursivement -p et -r dans un script, tant que la variable -r est initialisée à 0 au début.

  • Voici un script simple qui affiche des notifications comptant de 0 à 100 à des intervalles d’une demi-seconde:

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

X-ref:

sans patch vous pouvez simplement faire

#!/bin/bash

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

Signet:
Comment utiliser 'notify-send' pour remplacer immédiatement une notification existante?

Envoie une erreur notify-osd (2592): opération non autorisée. Qu'est-ce que cela signifie?

Cela peut vouloir dire que les privilèges ne sont pas suffisants pour nécessiter:

sudo killall notify-osd
    
réponse donnée george rowell 19.09.2012 - 05:37
la source
6

Vous pouvez utiliser le conseil "synchrone" pour créer une notification de "confirmation" qui remplacera les notifications de confirmation précédentes. Par exemple:

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

L'indication "x-canonical-private-synchronous" est spécifiée dans ce document . Pour spécifier un indice, utilisez -h type:name:value . Le type ici est string , name est x-canonical-private-synchronous et il semble que la valeur puisse être celle que vous voulez.

Donc, si votre première notification est créée avec cet indice et , le second le sera aussi, le second remplacera immédiatement le premier. (Voir Animations et durées dans la documentation, dans la colonne "Bulles de confirmation".)

    
réponse donnée Mark L 12.01.2017 - 21:14
la source

Lire d'autres questions sur les étiquettes