Saturday, April 20, 2024
22
rated 0 times [  22] [ 0]  / answers: 1 / hits: 38899  / 1 Year ago, mon, april 24, 2023, 8:49:11

When I use notify-send to show a notification on the desktop, and then use it again to show a different notification, I have noticed that the second one only shows after the first one has disappeared.



Is there a way to get notify-send to immediately replace an existing notification with a different one?


More From » command-line

 Answers
6

You can, but you must use a patched libnotify to do so



notify-send does not have the capability to replace existing notifications before they have timed out (or disappeared). This is a known bug. However, a commenter on the bug report has posted a patch to fix it.



Installing the patched libnotify-bin from PPA



I have created a patched version of the libnotify-bin package which allows replacements in my PPA. Currently it's for Ubuntu 12.04 only, but if you need it for any other currently supported release, please post a comment and I will try my best to make it available.



To install, open a terminal and:




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


How to use the replacement capabilities



The patched notify-send includes two new switches, -p (or --print-id ), and -r (or --replace-id ). The --help describes them as:




-p, --print-id Print the notification ID.
-r, --replace-id=REPLACE_ID The ID of the notification to replace.



  • With -p, each notify-send will return an ID N (number/integer).

  • Issuing another notify-send with -r N will replace the previous notification immediately.

  • For example, for bash, you can save the ID from notify-send -p ... with:



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


    and then replace it with:



    notify-send -r $NID "MESSAGE-2"

  • You can recursively use both -p and -r in a script, as long as the -r variable is initialized to 0 at the beginning.


  • Here's a simple script that shows notifications counting from 0 to 100 at half-second intervals:




    #!/bin/bash

    NID=0

    for i in {0..100..10}
       do
          NID=$(notify-send -p -r $NID $i)
          sleep 0.5
       done


[#36964] Wednesday, April 26, 2023, 1 Year  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
aslity

Total Points: 336
Total Questions: 133
Total Answers: 98

Location: Zimbabwe
Member since Thu, Jul 21, 2022
2 Years ago
;