* notifications-notify resets idle-time @ 2012-02-10 22:08 Peter Münster 2012-02-11 9:57 ` Michael Albinus 0 siblings, 1 reply; 25+ messages in thread From: Peter Münster @ 2012-02-10 22:08 UTC (permalink / raw) To: help-gnu-emacs Hello, How can I prevent `notifications-notify' from resetting the idle time? In detail: when evaluating the following code, you'll see, that the idle time does not increase: --8<---------------cut here---------------start------------->8--- (require 'notifications) (defun my-test () (notifications-notify) (message (format "idle: %d" (if (current-idle-time) (cadr (current-idle-time)) 0)))) (run-with-timer 5 5 'my-test) --8<---------------cut here---------------end--------------->8--- TIA for any hints, -- Peter ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: notifications-notify resets idle-time 2012-02-10 22:08 notifications-notify resets idle-time Peter Münster @ 2012-02-11 9:57 ` Michael Albinus 2012-02-11 11:38 ` Peter Münster 0 siblings, 1 reply; 25+ messages in thread From: Michael Albinus @ 2012-02-11 9:57 UTC (permalink / raw) To: Peter Münster; +Cc: help-gnu-emacs Peter Münster <pmlists@free.fr> writes: > Hello, Hi, > How can I prevent `notifications-notify' from resetting the idle time? > > In detail: when evaluating the following code, you'll see, that the idle > time does not increase: > > (require 'notifications) > (defun my-test () > (notifications-notify) > (message (format "idle: %d" (if (current-idle-time) > (cadr (current-idle-time)) > 0)))) > (run-with-timer 5 5 'my-test) > > TIA for any hints, I have no problem. I've just evaluated your code snippet, and I get idle: 2 idle: 7 idle: 12 idle: 17 idle: 22 idle: 27 idle: 32 idle: 2 "GNU Emacs 24.0.93.1 (x86_64-unknown-linux-gnu, GTK+ Version 2.24.6) of 2012-01-29 on xxx" Best regards, Michael. ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: notifications-notify resets idle-time 2012-02-11 9:57 ` Michael Albinus @ 2012-02-11 11:38 ` Peter Münster 2012-02-11 12:40 ` Michael Albinus 0 siblings, 1 reply; 25+ messages in thread From: Peter Münster @ 2012-02-11 11:38 UTC (permalink / raw) To: help-gnu-emacs On Sat, Feb 11 2012, Michael Albinus wrote: > I have no problem. I've just evaluated your code snippet, and I get > > idle: 2 > idle: 7 > idle: 12 > idle: 17 > idle: 22 > idle: 27 > idle: 32 > idle: 2 Why not "37" here? (I get 5, 10, 2, 2, 2, 2, 2....) Version: GNU Emacs 24.0.93.1 (x86_64-suse-linux-gnu, GTK+ Version 2.22.1) -- Peter ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: notifications-notify resets idle-time 2012-02-11 11:38 ` Peter Münster @ 2012-02-11 12:40 ` Michael Albinus 2012-02-11 12:51 ` Peter Münster 0 siblings, 1 reply; 25+ messages in thread From: Michael Albinus @ 2012-02-11 12:40 UTC (permalink / raw) To: Peter Münster; +Cc: help-gnu-emacs Peter Münster <pmlists@free.fr> writes: > On Sat, Feb 11 2012, Michael Albinus wrote: > >> I have no problem. I've just evaluated your code snippet, and I get >> >> idle: 2 >> idle: 7 >> idle: 12 >> idle: 17 >> idle: 22 >> idle: 27 >> idle: 32 >> idle: 2 > > Why not "37" here? > (I get 5, 10, 2, 2, 2, 2, 2....) 'Cause I've started to type something. This resets the idle timer. Best regards, Michael. ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: notifications-notify resets idle-time 2012-02-11 12:40 ` Michael Albinus @ 2012-02-11 12:51 ` Peter Münster 2012-02-11 16:00 ` Michael Albinus 0 siblings, 1 reply; 25+ messages in thread From: Peter Münster @ 2012-02-11 12:51 UTC (permalink / raw) To: help-gnu-emacs On Sat, Feb 11 2012, Michael Albinus wrote: >>> idle: 2 >> >> Why not "37" here? >> (I get 5, 10, 2, 2, 2, 2, 2....) > > 'Cause I've started to type something. This resets the idle timer. It seems, that the issue depends on the :timeout parameter. Perhaps our default values are different. Could you please test with (notifications-notify :timeout 1000) With this timeout value, I get 5, 3, 3, 3, 3..... Can others confirm this behaviour? -- Peter ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: notifications-notify resets idle-time 2012-02-11 12:51 ` Peter Münster @ 2012-02-11 16:00 ` Michael Albinus 2012-02-11 16:38 ` Peter Münster 0 siblings, 1 reply; 25+ messages in thread From: Michael Albinus @ 2012-02-11 16:00 UTC (permalink / raw) To: Peter Münster; +Cc: help-gnu-emacs Peter Münster <pmlists@free.fr> writes: > It seems, that the issue depends on the :timeout parameter. Perhaps our > default values are different. Could you please test with > > (notifications-notify :timeout 1000) > > With this timeout value, I get 5, 3, 3, 3, 3..... > > Can others confirm this behaviour? It doesn't change the behaviour for me. I still get idle: 0 idle: 4 idle: 9 idle: 0 idle: 5 idle: 10 idle: 15 idle: 20 idle: 25 idle: 30 idle: 35 Have checked your code snippet by starting plain "emacs -Q"? Best regards, Michael. ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: notifications-notify resets idle-time 2012-02-11 16:00 ` Michael Albinus @ 2012-02-11 16:38 ` Peter Münster 2012-02-11 17:26 ` Michael Albinus 0 siblings, 1 reply; 25+ messages in thread From: Peter Münster @ 2012-02-11 16:38 UTC (permalink / raw) To: help-gnu-emacs On Sat, Feb 11 2012, Michael Albinus wrote: > It doesn't change the behaviour for me. I still get > > [...] > > Have checked your code snippet by starting plain "emacs -Q"? Yes. "emacs -Q" then copying the code snippet into *scratch*, then M-x eval-buffer. Strange, how could I debug this? It seems, that closing the notification window resets the idle time, by mouse-click or by :timeout does not matter. I've just tried ":timeout 30000" to keep the windows for a longer timer, and when I close a notification window with a mouse-click, the idle time is reset. I've just recompiled emacs-trunk, but nothing changes... -- Peter ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: notifications-notify resets idle-time 2012-02-11 16:38 ` Peter Münster @ 2012-02-11 17:26 ` Michael Albinus 2012-02-11 19:06 ` Peter Münster 0 siblings, 1 reply; 25+ messages in thread From: Michael Albinus @ 2012-02-11 17:26 UTC (permalink / raw) To: Peter Münster; +Cc: help-gnu-emacs Peter Münster <pmlists@free.fr> writes: > It seems, that closing the notification window resets the idle time, by > mouse-click or by :timeout does not matter. > I've just tried ":timeout 30000" to keep the windows for a longer timer, > and when I close a notification window with a mouse-click, the idle time > is reset. Ahh, that's the difference. I haven't closed the notification window, I let it expire. This does not reset idle-time. It sounds acceptable to reset the idle timer on Emacs, when you touch the notification window. A signal is returned, and a callback function is activated, which might be the reason of the reset. Best regards, Michael. ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: notifications-notify resets idle-time 2012-02-11 17:26 ` Michael Albinus @ 2012-02-11 19:06 ` Peter Münster 2012-02-12 9:16 ` Michael Albinus 0 siblings, 1 reply; 25+ messages in thread From: Peter Münster @ 2012-02-11 19:06 UTC (permalink / raw) To: help-gnu-emacs On Sat, Feb 11 2012, Michael Albinus wrote: > Ahh, that's the difference. I haven't closed the notification window, I > let it expire. This does not reset idle-time. Me too, I let it expire. I've just done another test with closing by mouse-click. The result is the same: when the windows closes (by click or expiration) it resets the idle-time. Any idea how to debug this? > It sounds acceptable to reset the idle timer on Emacs, when you touch > the notification window. I agree. But IMO it should not happen when the window expires. -- Peter ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: notifications-notify resets idle-time 2012-02-11 19:06 ` Peter Münster @ 2012-02-12 9:16 ` Michael Albinus 2012-02-12 11:09 ` Peter Münster 0 siblings, 1 reply; 25+ messages in thread From: Michael Albinus @ 2012-02-12 9:16 UTC (permalink / raw) To: Peter Münster; +Cc: help-gnu-emacs Peter Münster <pmlists@free.fr> writes: > On Sat, Feb 11 2012, Michael Albinus wrote: > >> Ahh, that's the difference. I haven't closed the notification window, I >> let it expire. This does not reset idle-time. > > Me too, I let it expire. I've just done another test with closing by > mouse-click. The result is the same: when the windows closes (by click > or expiration) it resets the idle-time. > > Any idea how to debug this? keyboard.c. notifications.el is implemented by D-Bus calls and signals. In keyboard.c, D-Bus events are handled like other input events, for example keyboard pressing. This might also reset idle-time, I haven't checked further. Best regards, Michael. ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: notifications-notify resets idle-time 2012-02-12 9:16 ` Michael Albinus @ 2012-02-12 11:09 ` Peter Münster 2012-02-12 11:59 ` Michael Albinus 0 siblings, 1 reply; 25+ messages in thread From: Peter Münster @ 2012-02-12 11:09 UTC (permalink / raw) To: help-gnu-emacs On Sun, Feb 12 2012, Michael Albinus wrote: > notifications.el is implemented by D-Bus calls and signals. In > keyboard.c, D-Bus events are handled like other input events, for > example keyboard pressing. I'm quite sure, that when I debug keyboard.c, I'll just find that the window-close-event resets the idle-time. The question for me: where is the difference between our systems? Perhaps it's related to the windowmanager, or the environment variables? Later (when I've more time), I'll try other setups (other user, other WM, perhaps other opensuse-version), and I'll report back. -- Peter ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: notifications-notify resets idle-time 2012-02-12 11:09 ` Peter Münster @ 2012-02-12 11:59 ` Michael Albinus 2012-02-12 20:37 ` Peter Münster 0 siblings, 1 reply; 25+ messages in thread From: Michael Albinus @ 2012-02-12 11:59 UTC (permalink / raw) To: Peter Münster; +Cc: help-gnu-emacs Peter Münster <pmlists@free.fr> writes: > I'm quite sure, that when I debug keyboard.c, I'll just find that the > window-close-event resets the idle-time. Look for the code which is embedded in #ifdef HAVE_DBUS #endif But IIRC, there's nothing special with the idle_timer settings, related to D-Bus. So you should check the whole logic of resetting it. > The question for me: where is the difference between our systems? > Perhaps it's related to the windowmanager, or the environment > variables? Maybe it's a timing issue. > Later (when I've more time), I'll try other setups (other user, other > WM, perhaps other opensuse-version), and I'll report back. I run Ubuntu 11.10. Best regards, Michael. ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: notifications-notify resets idle-time 2012-02-12 11:59 ` Michael Albinus @ 2012-02-12 20:37 ` Peter Münster 2012-02-12 21:17 ` Michael Albinus 0 siblings, 1 reply; 25+ messages in thread From: Peter Münster @ 2012-02-12 20:37 UTC (permalink / raw) To: help-gnu-emacs [-- Attachment #1: Type: text/plain, Size: 993 bytes --] On Sun, Feb 12 2012, Michael Albinus wrote: > Look for the code which is embedded in > > #ifdef HAVE_DBUS > #endif Yes, the code is executed, when the notification windows expires. The timer is reset on line 2849 in keyboard.c: --8<---------------cut here---------------start------------->8--- non_reread: if (!end_time) timer_stop_idle (); RESUME_POLLING; --8<---------------cut here---------------end--------------->8--- I've found that with some `puts("xxx")' here and there. I tried gdb (using ddd) but without success: the execution stops before I can set a breakpoint... > Maybe it's a timing issue. I don't know. But I've prepared now a very simple test file and it would be nice if you could try it please on your system and send me the *Messages* buffer afterwards, just to compare it with mine. You just need to save the attached file in /tmp and then run "emacs -Q -l /tmp/notify.el" The test takes just 2 seconds ;) Thanks for your efforts! -- Peter [-- Warning: decoded text below may be mangled, UTF-8 assumed --] [-- Attachment #2: notify.el --] [-- Type: text/x-emacs-lisp, Size: 325 bytes --] (require 'notifications) (setq dbus-debug t) (notifications-notify :timeout 1000) (defun my-test () (let ((ct (current-idle-time))) (message (format "idle time: %f" (if ct (+ (cadr ct) (/ (nth 2 ct) 1000000.0)) 0))))) (run-with-timer 1.5 nil 'my-test) ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: notifications-notify resets idle-time 2012-02-12 20:37 ` Peter Münster @ 2012-02-12 21:17 ` Michael Albinus 2012-02-13 8:29 ` Peter Münster 0 siblings, 1 reply; 25+ messages in thread From: Michael Albinus @ 2012-02-12 21:17 UTC (permalink / raw) To: Peter Münster; +Cc: help-gnu-emacs Peter Münster <pmlists@free.fr> writes: > I don't know. But I've prepared now a very simple test file and it would > be nice if you could try it please on your system and send me the > *Messages* buffer afterwards, just to compare it with mine. > You just need to save the attached file in /tmp and then run > "emacs -Q -l /tmp/notify.el" > The test takes just 2 seconds ;) > > Thanks for your efforts! That's the result: For information about GNU Emacs and the GNU system, type C-h C-a. Fdbus_call_method: org.freedesktop.Notifications /org/freedesktop/Notifications org.freedesktop.Notifications Notify Fdbus_call_method: Parameter1 :string Emacs xd_signature: s xd_append_arg: s Emacs Fdbus_call_method: Parameter3 :uint32 0 xd_signature: u xd_append_arg: u 0 Fdbus_call_method: Parameter5 :string /usr/local/share/emacs/24.0.93/etc/images/icons/hicolor/scalable/apps/emacs.svg xd_signature: s xd_append_arg: s /usr/local/share/emacs/24.0.93/etc/images/icons/hicolor/scalable/apps/emacs.svg Fdbus_call_method: Parameter7 :string xd_signature: s xd_append_arg: s Fdbus_call_method: Parameter9 :string xd_signature: s xd_append_arg: s Fdbus_call_method: Parameter11 (:array) xd_signature: as xd_append_arg: a s nil Fdbus_call_method: Parameter12 (:array :signature {sv}) xd_signature: g xd_signature: a{sv} xd_append_arg: a {sv} nil Fdbus_call_method: Parameter13 :int32 1000 xd_signature: i xd_append_arg: i 1000 Fdbus_call_method: Message sent xd_retrieve_arg: u 223 xd_retrieve_arg: s :1.240 xd_read_message_1: Event received: DBUS_MESSAGE_TYPE_SIGNAL 2 org.freedesktop.DBus /org/freedesktop/DBus org.freedesktop.DBus NameAcquired (:1.240) idle time: 1.297380 ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: notifications-notify resets idle-time 2012-02-12 21:17 ` Michael Albinus @ 2012-02-13 8:29 ` Peter Münster 2012-02-13 11:53 ` Michael Albinus 0 siblings, 1 reply; 25+ messages in thread From: Peter Münster @ 2012-02-13 8:29 UTC (permalink / raw) To: help-gnu-emacs On Sun, Feb 12 2012, Michael Albinus wrote: > xd_read_message_1: Event received: DBUS_MESSAGE_TYPE_SIGNAL 2 > org.freedesktop.DBus /org/freedesktop/DBus org.freedesktop.DBus NameAcquired > (:1.240) > idle time: 1.297380 Thanks! The only difference is, that you don't get a NotificationClosed signal, but on my system I do: --8<---------------cut here---------------start------------->8--- xd_read_message_1: Event received: DBUS_MESSAGE_TYPE_SIGNAL 1773 :1.10 /org/freedesktop/Notifications org.freedesktop.Notifications NotificationClosed (221 1) xd_read_message_1: Event stored: (:session 4 1773 :1.10 /org/freedesktop/Notifications org.freedesktop.Notifications NotificationClosed notifications-on-closed-signal 221 1) DBus-Event (dbus-event :session 4 1773 :1.10 /org/freedesktop/Notifications org.freedesktop.Notifications NotificationClosed notifications-on-closed-signal 221 1) idle time: 0.498186 --8<---------------cut here---------------end--------------->8--- So there are 2 issues: - The NotificationClosed signal resets the idle-time, and IMO it should not. (emacs issue) - You don't get the NotificationClosed signal and that's probably a bug of your notification system, perhaps this one: https://bugs.kde.org/show_bug.cgi?id=228743 On my system, it's the notification-daemon-0.5.0. According to the spec, the NotificationClosed signal should be sent: http://www.galago-project.org/specs/notification/0.9/x408.html#signal-notification-closed Should I make an emacs bug report? Does anyone know a workaround? -- Peter ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: notifications-notify resets idle-time 2012-02-13 8:29 ` Peter Münster @ 2012-02-13 11:53 ` Michael Albinus 2012-02-13 15:42 ` Peter Münster 0 siblings, 1 reply; 25+ messages in thread From: Michael Albinus @ 2012-02-13 11:53 UTC (permalink / raw) To: Peter Münster; +Cc: help-gnu-emacs Peter Münster <pmlists@free.fr> writes: > Thanks! The only difference is, that you don't get a NotificationClosed > signal, but on my system I do: I was too hasty: I've copied the *Messages* buffer before the notification did expire. No error at all. > So there are 2 issues: > > - The NotificationClosed signal resets the idle-time, and IMO it should > not. (emacs issue) It is not NotificationClosed specific. I would rather say that is due to the nature of D-Bus events, handled via `special-event-map'. I guess that all events defined in that map will reset the idle timer. > - You don't get the NotificationClosed signal and that's probably a bug > of your notification system, perhaps this one: > https://bugs.kde.org/show_bug.cgi?id=228743 Not a bug, as said. > Should I make an emacs bug report? I still don't understand why it disturbs you. Could you, please, explain your use case? Best regards, Michael. ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: notifications-notify resets idle-time 2012-02-13 11:53 ` Michael Albinus @ 2012-02-13 15:42 ` Peter Münster 2012-02-13 16:43 ` Michael Albinus 0 siblings, 1 reply; 25+ messages in thread From: Peter Münster @ 2012-02-13 15:42 UTC (permalink / raw) To: help-gnu-emacs On Mon, Feb 13 2012, Michael Albinus wrote: > I was too hasty: I've copied the *Messages* buffer before the > notification did expire. No error at all. That means, that ":timeout 1000" did not work for you...!? > It is not NotificationClosed specific. I would rather say that is due to > the nature of D-Bus events, handled via `special-event-map'. I guess that > all events defined in that map will reset the idle timer. Yes. It would be good, if there was a method to filter these events. (perhaps there is already, but I don't see it...) > I still don't understand why it disturbs you. Could you, please, explain > your use case? On the one hand, I use `gnus-demon-add-handler' for several actions, that need to be done repeatedly and only when idle for at least some minutes. On the other hand I use (setq appt-disp-window-function 'pm/todo-notify ; popup notify-windows appt-display-interval 1) and (org-agenda-to-appt t '((headline "TODO"))) in such a way, that the notification windows are refreshed once per minute (":timeout 60000"). This is nice, because I don't need to click on the notification window, I just edit my org-mode-todo-list (switch an item from todo to done), and the notification window will disappear automatically in at most 60 seconds. But when I'm idle, and once per minute a notification windows expires, the gnus-demon won't activate my handlers, because the idle-time is always reset, and this can be annoying. I admit, that this use case is quite particular and I don't expect emacs developers to fix it. Nevertheless, I'm going to fill a bug report, just in case. In the meanwhile, I've patched my notification-daemon, so that it does no more send any event, when windows expire (ugly work-around, but I don't need to touch emacs). -- Peter ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: notifications-notify resets idle-time 2012-02-13 15:42 ` Peter Münster @ 2012-02-13 16:43 ` Michael Albinus 2012-02-13 23:13 ` Peter Münster 0 siblings, 1 reply; 25+ messages in thread From: Michael Albinus @ 2012-02-13 16:43 UTC (permalink / raw) To: Peter Münster; +Cc: help-gnu-emacs Peter Münster <pmlists@free.fr> writes: >> I was too hasty: I've copied the *Messages* buffer before the >> notification did expire. No error at all. > > That means, that ":timeout 1000" did not work for you...!? It works for me, don't worry. >> It is not NotificationClosed specific. I would rather say that is due to >> the nature of D-Bus events, handled via `special-event-map'. I guess that >> all events defined in that map will reset the idle timer. > > Yes. It would be good, if there was a method to filter these events. > (perhaps there is already, but I don't see it...) One idea would be to add a property `dont-reset-idle-time' to an incoming event. Per default it is nil, and the timer is reset. But if this property exists non-nil, the timer isn't reset. Then we could extend `dbus-register-signal' in order to allow setting this property, or not. "NotificationClosed" would be registered with this property, and "ActionInvoked" without. > I admit, that this use case is quite particular and I don't expect emacs > developers to fix it. Nevertheless, I'm going to fill a bug report, just > in case. Please do. I wouldn't call it bug but wishlist, but it might be worth to implement. Chances are good that I will do, but I would like to discuss first with the other developers. Please add also your use case to the bug report. > In the meanwhile, I've patched my notification-daemon, so that it does > no more send any event, when windows expire (ugly work-around, but I > don't need to touch emacs). Wouldn't it suffice just to deregister signal "NotificationClosed"? You don't need this signal, if I understand your use cases. Another idea would be to send a new notification message to the opened notification window, before it expires. I haven't tried by myself, but I remember vaguely that it shall be possible. Best regards, Michael. ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: notifications-notify resets idle-time 2012-02-13 16:43 ` Michael Albinus @ 2012-02-13 23:13 ` Peter Münster 2012-02-14 9:45 ` Michael Albinus 0 siblings, 1 reply; 25+ messages in thread From: Peter Münster @ 2012-02-13 23:13 UTC (permalink / raw) To: help-gnu-emacs On Mon, Feb 13 2012, Michael Albinus wrote: > One idea would be to add a property `dont-reset-idle-time' to an > incoming event. Per default it is nil, and the timer is reset. But if > this property exists non-nil, the timer isn't reset. It should depend on the reason (second argument of signal), because when the user presses the mouse button, he is not idle. Expiration can happen without user action. > Please do. I wouldn't call it bug but wishlist, but it might be worth to > implement. Chances are good that I will do, but I would like to discuss > first with the other developers. Ok, done. > Wouldn't it suffice just to deregister signal "NotificationClosed"? How? With dbus-unregister-service? Thanks for your efforts, -- Peter ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: notifications-notify resets idle-time 2012-02-13 23:13 ` Peter Münster @ 2012-02-14 9:45 ` Michael Albinus 2012-03-04 21:24 ` Peter Münster 0 siblings, 1 reply; 25+ messages in thread From: Michael Albinus @ 2012-02-14 9:45 UTC (permalink / raw) To: Peter Münster; +Cc: help-gnu-emacs Peter Münster <pmlists@free.fr> writes: >> One idea would be to add a property `dont-reset-idle-time' to an >> incoming event. Per default it is nil, and the timer is reset. But if >> this property exists non-nil, the timer isn't reset. > > It should depend on the reason (second argument of signal), because when > the user presses the mouse button, he is not idle. Expiration can happen > without user action. It is not possible to check arguments of an incoming D-Bus signal. The signal is just put into the event queue. Arguments are inspected when the event is handled by the respective handler, which is much too late for the idle-time reset. >> Wouldn't it suffice just to deregister signal "NotificationClosed"? > > How? With dbus-unregister-service? Yes. I have played with the other woraround option, reusing the notification window. The following code snippet, based on your initial example, shall give you an idea: --8<---------------cut here---------------start------------->8--- (require 'notifications) (defvar msg-id nil) (defvar counter 0) (defun my-test () (setq counter (1+ counter) msg-id (apply 'notifications-notify :title (format "%d" (or msg-id 0)) :body (format "%d" counter) :timeout 0 (if msg-id `(:replaces-id ,msg-id) '(:on-close (lambda (&rest ignore) (setq msg-id nil)))))) (message (format "idle: %d" (if (current-idle-time) (cadr (current-idle-time)) 0)))) (run-with-timer 5 5 'my-test) --8<---------------cut here---------------end--------------->8--- > Thanks for your efforts, Best regards, Michael. ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: notifications-notify resets idle-time 2012-02-14 9:45 ` Michael Albinus @ 2012-03-04 21:24 ` Peter Münster 2012-03-05 14:51 ` Michael Albinus 2012-03-06 10:34 ` Michael Albinus 0 siblings, 2 replies; 25+ messages in thread From: Peter Münster @ 2012-03-04 21:24 UTC (permalink / raw) To: help-gnu-emacs On Tue, Feb 14 2012, Michael Albinus wrote: >>> Wouldn't it suffice just to deregister signal "NotificationClosed"? >> >> How? With dbus-unregister-service? > > Yes. It seems, that I rather need dbus-unregister-object, because I only want to unregister the closed-signal, not the action-signal. So I patched notifications.el: --8<---------------cut here---------------start------------->8--- --- notifications.el~ 2012-03-04 22:00:27.851590759 +0100 +++ notifications.el 2012-03-04 22:00:43.625016422 +0100 @@ -96,6 +96,12 @@ This must be kept, because the notification daemon could be restarted, and the registered signals cannot be identified anymore.") +(defvar notifications-action-signal-object nil + "Object of the registration of the action signal.") + +(defvar notifications-closed-signal-object nil + "Object of the registration of the closed signal.") + (defun notifications-on-action-signal (id action) "Dispatch signals to callback functions from `notifications-on-action-map'." (let ((entry (assoc id notifications-on-action-map))) @@ -106,13 +112,14 @@ (remove entry 'notifications-on-action-map)))) (when (fboundp 'dbus-register-signal) - (dbus-register-signal - :session - nil - notifications-path - notifications-interface - notifications-action-signal - 'notifications-on-action-signal)) + (setq notifications-action-signal-object + (dbus-register-signal + :session + nil + notifications-path + notifications-interface + notifications-action-signal + 'notifications-on-action-signal))) (defun notifications-on-closed-signal (id &optional reason) "Dispatch signals to callback functions from `notifications-on-closed-map'." @@ -128,13 +135,14 @@ (remove entry 'notifications-on-close-map)))) (when (fboundp 'dbus-register-signal) - (dbus-register-signal - :session - nil - notifications-path - notifications-interface - notifications-closed-signal - 'notifications-on-closed-signal)) + (setq notifications-closed-signal-object + (dbus-register-signal + :session + nil + notifications-path + notifications-interface + notifications-closed-signal + 'notifications-on-closed-signal))) (defun notifications-notify (&rest params) "Send notification via D-Bus using the Freedesktop notification protocol. --8<---------------cut here---------------end--------------->8--- And in my init.el I do now: --8<---------------cut here---------------start------------->8--- (require 'notifications) (dbus-unregister-object notifications-closed-signal-object) --8<---------------cut here---------------end--------------->8--- > I have played with the other woraround option, reusing the notification > window. The following code snippet, based on your initial example, shall > give you an idea: I understand: instead of closing the window, you replace it by another and no event is sent to emacs. But it does not really fit my needs: Now I use https://github.com/p-m/org-notify with a personal setup that opens notification pop-ups once per minute with a timeout of 10 seconds for example. -- Peter ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: notifications-notify resets idle-time 2012-03-04 21:24 ` Peter Münster @ 2012-03-05 14:51 ` Michael Albinus 2012-03-06 10:34 ` Michael Albinus 1 sibling, 0 replies; 25+ messages in thread From: Michael Albinus @ 2012-03-05 14:51 UTC (permalink / raw) To: Peter Münster; +Cc: help-gnu-emacs Peter Münster <pmlists@free.fr> writes: > It seems, that I rather need dbus-unregister-object, because I only want > to unregister the closed-signal, not the action-signal. So I patched > notifications.el: Well, I've played also with notifications.el, in order to make fine-grained signal registering. The ide was, that a new register-signal shall be applied exactly for the signal we do expect. In general it is possible, one could say how the arguments look like of the incoming signals. But unfortunately, the ID argument of the notifications-action-signal and notifications-close-signal is of type UINT32, and using arguments for registering signals is only possible if they are of type STRING. So I failed. Let's wait for Emacs 24.2. Either we will suppress resetting the idle timer when D-Bus events arrive, or I find a way to discriminate incoming signals also by arguments of non-STRING type. Best regards, Michael. ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: notifications-notify resets idle-time 2012-03-04 21:24 ` Peter Münster 2012-03-05 14:51 ` Michael Albinus @ 2012-03-06 10:34 ` Michael Albinus 2012-03-06 14:53 ` Peter Münster 1 sibling, 1 reply; 25+ messages in thread From: Michael Albinus @ 2012-03-06 10:34 UTC (permalink / raw) To: Peter Münster; +Cc: help-gnu-emacs Peter Münster <pmlists@free.fr> writes: Hi Peter, > It seems, that I rather need dbus-unregister-object, because I only want > to unregister the closed-signal, not the action-signal. So I patched > notifications.el: I have generalized your patch. It is not needed anymore to call `dbus-unregister-object' in your code. Could you, please, check whether it fits your needs? Note that this patch is based on notifications.el as I have committed to the trunk two days ago, --8<---------------cut here---------------start------------->8--- *** /home/albinus/src/emacs/lisp/notifications.el.~107516~ 2012-03-06 11:18:32.000000000 +0100 --- /home/albinus/src/emacs/lisp/notifications.el 2012-03-06 11:18:32.000000000 +0100 *************** *** 88,112 **** (defvar notifications-on-action-map nil "Mapping between notification and action callback functions.") (defvar notifications-on-close-map nil "Mapping between notification and close callback functions.") (defun notifications-on-action-signal (id action) "Dispatch signals to callback functions from `notifications-on-action-map'." (let* ((unique-name (dbus-event-service-name last-input-event)) (entry (assoc (cons unique-name id) notifications-on-action-map))) (when entry (funcall (cadr entry) id action) ! (remove entry notifications-on-action-map)))) ! ! (when (fboundp 'dbus-register-signal) ! (dbus-register-signal ! :session ! nil ! notifications-path ! notifications-interface ! notifications-action-signal ! 'notifications-on-action-signal)) (defun notifications-on-closed-signal (id &optional reason) "Dispatch signals to callback functions from `notifications-on-closed-map'." --- 88,113 ---- (defvar notifications-on-action-map nil "Mapping between notification and action callback functions.") + (defvar notifications-on-action-object nil + "Object for registered on-action signal.") + (defvar notifications-on-close-map nil "Mapping between notification and close callback functions.") + (defvar notifications-on-close-object nil + "Object for registered on-close signal.") + (defun notifications-on-action-signal (id action) "Dispatch signals to callback functions from `notifications-on-action-map'." (let* ((unique-name (dbus-event-service-name last-input-event)) (entry (assoc (cons unique-name id) notifications-on-action-map))) (when entry (funcall (cadr entry) id action) ! (when (and (not (setq notifications-on-action-map ! (remove entry notifications-on-action-map))) ! notifications-on-action-object) ! (dbus-unregister-object notifications-on-action-object) ! (setq notifications-on-action-object nil))))) (defun notifications-on-closed-signal (id &optional reason) "Dispatch signals to callback functions from `notifications-on-closed-map'." *************** *** 118,133 **** (when entry (funcall (cadr entry) id (cadr (assoc reason notifications-closed-reason))) ! (remove entry notifications-on-close-map)))) ! ! (when (fboundp 'dbus-register-signal) ! (dbus-register-signal ! :session ! nil ! notifications-path ! notifications-interface ! notifications-closed-signal ! 'notifications-on-closed-signal)) (defun notifications-notify (&rest params) "Send notification via D-Bus using the Freedesktop notification protocol. --- 119,129 ---- (when entry (funcall (cadr entry) id (cadr (assoc reason notifications-closed-reason))) ! (when (and (not (setq notifications-on-close-map ! (remove entry notifications-on-close-map))) ! notifications-on-close-object) ! (dbus-unregister-object notifications-on-close-object) ! (setq notifications-on-close-object nil))))) (defun notifications-notify (&rest params) "Send notification via D-Bus using the Freedesktop notification protocol. *************** *** 287,296 **** (unique-name (dbus-get-name-owner :session notifications-service))) (when on-action (add-to-list 'notifications-on-action-map ! (list (cons unique-name id) on-action))) (when on-close (add-to-list 'notifications-on-close-map ! (list (cons unique-name id) on-close)))) ;; Return notification id id)) --- 283,311 ---- (unique-name (dbus-get-name-owner :session notifications-service))) (when on-action (add-to-list 'notifications-on-action-map ! (list (cons unique-name id) on-action)) ! (unless notifications-on-action-object ! (setq notifications-on-action-object ! (dbus-register-signal ! :session ! nil ! notifications-path ! notifications-interface ! notifications-action-signal ! 'notifications-on-action-signal)))) ! (when on-close (add-to-list 'notifications-on-close-map ! (list (cons unique-name id) on-close)) ! (unless notifications-on-close-object ! (setq notifications-on-close-object ! (dbus-register-signal ! :session ! nil ! notifications-path ! notifications-interface ! notifications-closed-signal ! 'notifications-on-closed-signal))))) ;; Return notification id id)) --8<---------------cut here---------------end--------------->8--- If that works for you, I would be willing to commit it to the trunk, still for Emacs 24.1. We could close then also bug#10807. Best regards, Michael. ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: notifications-notify resets idle-time 2012-03-06 10:34 ` Michael Albinus @ 2012-03-06 14:53 ` Peter Münster 2012-03-07 7:58 ` Michael Albinus 0 siblings, 1 reply; 25+ messages in thread From: Peter Münster @ 2012-03-06 14:53 UTC (permalink / raw) To: help-gnu-emacs On Tue, Mar 06 2012, Michael Albinus wrote: > Could you, please, check whether it fits your needs? Yes, it does! Very fine, thanks! > If that works for you, Yes, it works. > I would be willing to commit it to the trunk, still for Emacs 24.1. We > could close then also bug#10807. Yes, I agree. -- Peter ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: notifications-notify resets idle-time 2012-03-06 14:53 ` Peter Münster @ 2012-03-07 7:58 ` Michael Albinus 0 siblings, 0 replies; 25+ messages in thread From: Michael Albinus @ 2012-03-07 7:58 UTC (permalink / raw) To: Peter Münster; +Cc: help-gnu-emacs Peter Münster <pmlists@free.fr> writes: >> I would be willing to commit it to the trunk, still for Emacs 24.1. We >> could close then also bug#10807. > > Yes, I agree. Done. Best regards, Michael. ^ permalink raw reply [flat|nested] 25+ messages in thread
end of thread, other threads:[~2012-03-07 7:58 UTC | newest] Thread overview: 25+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2012-02-10 22:08 notifications-notify resets idle-time Peter Münster 2012-02-11 9:57 ` Michael Albinus 2012-02-11 11:38 ` Peter Münster 2012-02-11 12:40 ` Michael Albinus 2012-02-11 12:51 ` Peter Münster 2012-02-11 16:00 ` Michael Albinus 2012-02-11 16:38 ` Peter Münster 2012-02-11 17:26 ` Michael Albinus 2012-02-11 19:06 ` Peter Münster 2012-02-12 9:16 ` Michael Albinus 2012-02-12 11:09 ` Peter Münster 2012-02-12 11:59 ` Michael Albinus 2012-02-12 20:37 ` Peter Münster 2012-02-12 21:17 ` Michael Albinus 2012-02-13 8:29 ` Peter Münster 2012-02-13 11:53 ` Michael Albinus 2012-02-13 15:42 ` Peter Münster 2012-02-13 16:43 ` Michael Albinus 2012-02-13 23:13 ` Peter Münster 2012-02-14 9:45 ` Michael Albinus 2012-03-04 21:24 ` Peter Münster 2012-03-05 14:51 ` Michael Albinus 2012-03-06 10:34 ` Michael Albinus 2012-03-06 14:53 ` Peter Münster 2012-03-07 7:58 ` Michael Albinus
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).