* org-clock idle time in pgtk Emacs @ 2022-05-24 8:32 Julien Cubizolles 2022-05-24 10:27 ` Tim Cross 2022-05-25 6:38 ` Ihor Radchenko 0 siblings, 2 replies; 11+ messages in thread From: Julien Cubizolles @ 2022-05-24 8:32 UTC (permalink / raw) To: emacs-orgmode org-clock checks for the 'x window-system in order to use the program set up by org-clock-x11idle-program-name. Recent Emacs versions use the 'pgtk instead of 'x and as such will default to using org-emacs-idle-seconds in org-user-idle-seconds. The following patch provides a crude workaround. I'm using a python program (included below) to report idletime in wayland, using the idle-time module. It can be used for org-clock-x11idle-program-name. --8<---------------cut here---------------start------------->8--- modified lisp/org-clock.el @@ -1196,7 +1196,7 @@ If `only-dangling-p' is non-nil, only ask to resolve dangling (defvar org-x11idle-exists-p ;; Check that x11idle exists - (and (eq window-system 'x) + (and (or (eq window-system 'pgtk) (eq window-system 'x)) (eq 0 (call-process-shell-command (format "command -v %s" org-clock-x11idle-program-name))) ;; Check that x11idle can retrieve the idle time @@ -1213,7 +1213,7 @@ This routine returns a floating point number." (cond ((eq system-type 'darwin) (org-mac-idle-seconds)) - ((and (eq window-system 'x) org-x11idle-exists-p) + ((and (or (eq window-system 'x) (eq window-system 'pgtk)) org-x11idle-exists-p) (org-x11-idle-seconds)) (t (org-emacs-idle-seconds)))) --8<---------------cut here---------------end--------------->8--- --8<---------------cut here---------------start------------->8--- #!/usr/bin/env python3 from idle_time import IdleMonitor monitor = IdleMonitor.get_monitor() print(f"{1000*monitor.get_idle_time():.0f}") --8<---------------cut here---------------end--------------->8--- -- Julien Cubizolles ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: org-clock idle time in pgtk Emacs 2022-05-24 8:32 org-clock idle time in pgtk Emacs Julien Cubizolles @ 2022-05-24 10:27 ` Tim Cross 2022-05-25 6:38 ` Ihor Radchenko 1 sibling, 0 replies; 11+ messages in thread From: Tim Cross @ 2022-05-24 10:27 UTC (permalink / raw) To: emacs-orgmode Julien Cubizolles <j.cubizolles@free.fr> writes: > org-clock checks for the 'x window-system in order to use the program > set up by org-clock-x11idle-program-name. Recent Emacs versions use the > 'pgtk instead of 'x and as such will default to using > org-emacs-idle-seconds in org-user-idle-seconds. > I"m not sure this is accurate. You should only use the pgtk build of Emacs if your running wayland. You definitely should not use it if your running under X. The big issue is that some important key input facilities don't work correctly if you run the pgtk build under X (actually, I'm not sure they work correctly under Wayland either, but then again, Wayland is a different beast to X and differences can be expected). The pgtk build is not a replacement for the current xlib+gtk build, which will remain the correct build when running under X. Unfortunately, this does mean that if you use both X and Wayland, you likely will need two builds of Emacs. There was a fairly long discussion thread about this on emacs-devel about a month or so ago. The upshot was flagging the need to update the documentation to clarify that people should not use the pgtk build when running under X windows. I suspect this means the below patch will need further refinement. > The following patch provides a crude workaround. > > I'm using a python program (included below) to report idletime in > wayland, using the idle-time module. It can be used for > org-clock-x11idle-program-name. > > modified lisp/org-clock.el > @@ -1196,7 +1196,7 @@ If `only-dangling-p' is non-nil, only ask to resolve dangling > > (defvar org-x11idle-exists-p > ;; Check that x11idle exists > - (and (eq window-system 'x) > + (and (or (eq window-system 'pgtk) (eq window-system 'x)) > (eq 0 (call-process-shell-command > (format "command -v %s" org-clock-x11idle-program-name))) > ;; Check that x11idle can retrieve the idle time > @@ -1213,7 +1213,7 @@ This routine returns a floating point number." > (cond > ((eq system-type 'darwin) > (org-mac-idle-seconds)) > - ((and (eq window-system 'x) org-x11idle-exists-p) > + ((and (or (eq window-system 'x) (eq window-system 'pgtk)) org-x11idle-exists-p) > (org-x11-idle-seconds)) > (t > (org-emacs-idle-seconds)))) > > #!/usr/bin/env python3 > > from idle_time import IdleMonitor > > monitor = IdleMonitor.get_monitor() > print(f"{1000*monitor.get_idle_time():.0f}") ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: org-clock idle time in pgtk Emacs 2022-05-24 8:32 org-clock idle time in pgtk Emacs Julien Cubizolles 2022-05-24 10:27 ` Tim Cross @ 2022-05-25 6:38 ` Ihor Radchenko 2023-01-31 16:24 ` Julien Cubizolles 1 sibling, 1 reply; 11+ messages in thread From: Ihor Radchenko @ 2022-05-25 6:38 UTC (permalink / raw) To: Julien Cubizolles; +Cc: emacs-orgmode Julien Cubizolles <j.cubizolles@free.fr> writes: > org-clock checks for the 'x window-system in order to use the program > set up by org-clock-x11idle-program-name. Recent Emacs versions use the > 'pgtk instead of 'x and as such will default to using > org-emacs-idle-seconds in org-user-idle-seconds. > > The following patch provides a crude workaround. > > I'm using a python program (included below) to report idletime in > wayland, using the idle-time module. It can be used for > org-clock-x11idle-program-name. Thanks for the patch! As Tim pointed out, we cannot guarantee that things working on 'x build will also work on 'pgtk. Instead of abusing settings for 'x window system, can you please introduce a new function org-pgtk-idle-seconds using a new variable org-clock-pgtkidle-program-name, similar to org-x11-idle-seconds, and then update org-user-idle-seconds? Please, make sure that the pgtk option works on Wayland as well (or not, but we will then need to wait until someone tests the patch on Wayland). Best, Ihor ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: org-clock idle time in pgtk Emacs 2022-05-25 6:38 ` Ihor Radchenko @ 2023-01-31 16:24 ` Julien Cubizolles 2023-02-01 13:15 ` Ihor Radchenko 0 siblings, 1 reply; 11+ messages in thread From: Julien Cubizolles @ 2023-01-31 16:24 UTC (permalink / raw) To: emacs-orgmode [-- Attachment #1: Type: text/plain, Size: 447 bytes --] Ihor Radchenko <yantar92@gmail.com> writes: > > As Tim pointed out, we cannot guarantee that things working on 'x build > will also work on 'pgtk. Instead of abusing settings for 'x window > system, can you please introduce a new function org-pgtk-idle-seconds > using a new variable org-clock-pgtkidle-program-name, similar to > org-x11-idle-seconds, and then update org-user-idle-seconds? Sorry for the delay, here is a patch to that effect. [-- Warning: decoded text below may be mangled, UTF-8 assumed --] [-- Attachment #2: org-clock.patch --] [-- Type: text/x-diff, Size: 2641 bytes --] diff --git a/lisp/org-clock.el b/lisp/org-clock.el index ceb1fc833..81be37448 100644 --- a/lisp/org-clock.el +++ b/lisp/org-clock.el @@ -453,6 +453,15 @@ https://orgmode.org/worg/code/scripts/x11idle.c" :package-version '(Org . "9.7") :type 'string) +(defcustom org-clock-pgtkidle-program-name + (if (executable-find "jc-idle-time") + "jc-idle-time") + "Name of the program which prints idle time in milliseconds. +Case of a pgtk Emacs instance." + :group 'org-clock + :package-version '(Org . "9.7") + :type 'string) + (defcustom org-clock-goto-before-context 2 "Number of lines of context to display before currently clocked-in entry. This applies when using `org-clock-goto'." @@ -1199,6 +1208,17 @@ If `only-dangling-p' is non-nil, only ask to resolve dangling "Return the current Mac idle time in seconds." (string-to-number (shell-command-to-string "ioreg -c IOHIDSystem | perl -ane 'if (/Idle/) {$idle=(pop @F)/1000000000; print $idle; last}'"))) +(defvar org-pgtkidle-exists-p + ;; Check that org-clock-pgtkidle-program-name exists. But don't do that on DOS/Windows, + ;; since the command definitely does NOT exist there, and invoking + ;; COMMAND.COM on MS-Windows is a bad idea -- it hangs. + (and (null (memq system-type '(windows-nt ms-dos))) + (eq 0 (call-process-shell-command + (format "command -v %s" org-clock-pgtkidle-program-name))) + ;; Check that x11idle can retrieve the idle time + ;; FIXME: Why "..-shell-command" rather than just `call-process'? + (eq 0 (call-process-shell-command org-clock-pgtkidle-program-name)))) + (defvar org-x11idle-exists-p ;; Check that x11idle exists. But don't do that on DOS/Windows, ;; since the command definitely does NOT exist there, and invoking @@ -1214,6 +1234,10 @@ If `only-dangling-p' is non-nil, only ask to resolve dangling "Return the current X11 idle time in seconds." (/ (string-to-number (shell-command-to-string org-clock-x11idle-program-name)) 1000)) +(defun org-pgtk-idle-seconds () + "Return the current X11 idle time in seconds." + (/ (string-to-number (shell-command-to-string org-clock-pgtkidle-program-name)) 1000)) + (defun org-user-idle-seconds () "Return the number of seconds the user has been idle for. This routine returns a floating point number." @@ -1222,6 +1246,8 @@ This routine returns a floating point number." (org-mac-idle-seconds)) ((and (eq window-system 'x) org-x11idle-exists-p) (org-x11-idle-seconds)) + ((and (eq window-system 'pgtk) org-pgtkidle-exists-p) + (org-pgtk-idle-seconds)) (t (org-emacs-idle-seconds)))) [-- Attachment #3: Type: text/plain, Size: 219 bytes --] > Please, make sure that the pgtk option works on Wayland as well (or not, > but we will then need to wait until someone tests the patch on Wayland). It's working in Wayland, with a pgtk build. -- Julien Cubizolles ^ permalink raw reply related [flat|nested] 11+ messages in thread
* Re: org-clock idle time in pgtk Emacs 2023-01-31 16:24 ` Julien Cubizolles @ 2023-02-01 13:15 ` Ihor Radchenko 2023-02-01 15:45 ` Max Nikulin 2023-02-03 5:55 ` Julien Cubizolles 0 siblings, 2 replies; 11+ messages in thread From: Ihor Radchenko @ 2023-02-01 13:15 UTC (permalink / raw) To: Julien Cubizolles; +Cc: emacs-orgmode Julien Cubizolles <j.cubizolles@free.fr> writes: > Ihor Radchenko <yantar92@gmail.com> writes: > >> >> As Tim pointed out, we cannot guarantee that things working on 'x build >> will also work on 'pgtk. Instead of abusing settings for 'x window >> system, can you please introduce a new function org-pgtk-idle-seconds >> using a new variable org-clock-pgtkidle-program-name, similar to >> org-x11-idle-seconds, and then update org-user-idle-seconds? > > Sorry for the delay, here is a patch to that effect. Thanks! > +(defcustom org-clock-pgtkidle-program-name > + (if (executable-find "jc-idle-time") > + "jc-idle-time") > + "Name of the program which prints idle time in milliseconds. May I know where "jc-idle-time" is coming from? Is it a built-in command on wayland? > +(defvar org-pgtkidle-exists-p > + ;; Check that org-clock-pgtkidle-program-name exists. But don't do that on DOS/Windows, > + ;; since the command definitely does NOT exist there, and invoking > + ;; COMMAND.COM on MS-Windows is a bad idea -- it hangs. > + (and (null (memq system-type '(windows-nt ms-dos))) > + (eq 0 (call-process-shell-command > + (format "command -v %s" org-clock-pgtkidle-program-name))) > + ;; Check that x11idle can retrieve the idle time > + ;; FIXME: Why "..-shell-command" rather than just `call-process'? > + (eq 0 (call-process-shell-command org-clock-pgtkidle-program-name)))) We may as well resolve this FIXME since we are at it. Instead of the awkward combination of two `call-process-shell-command' prompts, we can simply use `executable-find' + `call-process'. -- Ihor Radchenko // yantar92, Org mode contributor, Learn more about Org mode at <https://orgmode.org/>. Support Org development at <https://liberapay.com/org-mode>, or support my work at <https://liberapay.com/yantar92> ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: org-clock idle time in pgtk Emacs 2023-02-01 13:15 ` Ihor Radchenko @ 2023-02-01 15:45 ` Max Nikulin 2023-02-02 9:17 ` Ihor Radchenko 2023-02-03 5:55 ` Julien Cubizolles 1 sibling, 1 reply; 11+ messages in thread From: Max Nikulin @ 2023-02-01 15:45 UTC (permalink / raw) To: emacs-orgmode; +Cc: Julien Cubizolles On 01/02/2023 20:15, Ihor Radchenko wrote: >> +(defcustom org-clock-pgtkidle-program-name >> + (if (executable-find "jc-idle-time") >> + "jc-idle-time") >> + "Name of the program which prints idle time in milliseconds. > > May I know where "jc-idle-time" is coming from? Is it a built-in command > on wayland? During discussion in the later thread Julien Cubizolles to emacs-orgmode. org-x11idle-exists-p with emacs --daemon. Fri, 28 Oct 2022 00:31:23 +0200. https://list.orgmode.org/871qqs6gqs.fsf@free.fr I noticed a suggestion to use a d-bus method, unfortunately it is Gnome-specific https://unix.stackexchange.com/questions/396911/how-can-i-tell-if-a-user-is-idle-in-wayland/ dbus-send --print-reply --dest=org.gnome.Mutter.IdleMonitor /org/gnome/Mutter/IdleMonitor/Core org.gnome.Mutter.IdleMonitor.GetIdletime Another interface likely may give not really reliable results: org.freedesktop.ScreenSaver GetSessionIdleTime https://lists.freedesktop.org/archives/xdg/2007-March/009187.html Stephan Kulow. screensaver dbus interfaces. Mon Mar 5 05:16:39 PST 2007 Unsure if some workaround like in xprintidle should be used on this way: https://github.com/g0hl1n/xprintidle/blob/master/xprintidle.c#L150 * Workaround: Check if if XServer is in a dpms state, check the * current timeout for this state and add this value to * the current idle time and return. */ >> +(defvar org-pgtkidle-exists-p >> + ;; Check that org-clock-pgtkidle-program-name exists. But don't do that on DOS/Windows, >> + ;; since the command definitely does NOT exist there, and invoking >> + ;; COMMAND.COM on MS-Windows is a bad idea -- it hangs. >> + (and (null (memq system-type '(windows-nt ms-dos))) >> + (eq 0 (call-process-shell-command >> + (format "command -v %s" org-clock-pgtkidle-program-name))) >> + ;; Check that x11idle can retrieve the idle time >> + ;; FIXME: Why "..-shell-command" rather than just `call-process'? >> + (eq 0 (call-process-shell-command org-clock-pgtkidle-program-name)))) > > We may as well resolve this FIXME since we are at it. > Instead of the awkward combination of two `call-process-shell-command' > prompts, we can simply use `executable-find' + `call-process'. Is there a reasonable way to avoid code duplication? I agree that `executable-find' may be better since `org-clock-pgtkidle-program-name' might contain spaces or shell specials causing issues with current code. ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: org-clock idle time in pgtk Emacs 2023-02-01 15:45 ` Max Nikulin @ 2023-02-02 9:17 ` Ihor Radchenko 0 siblings, 0 replies; 11+ messages in thread From: Ihor Radchenko @ 2023-02-02 9:17 UTC (permalink / raw) To: Max Nikulin; +Cc: emacs-orgmode, Julien Cubizolles Max Nikulin <manikulin@gmail.com> writes: >>> +(defvar org-pgtkidle-exists-p >>> + ;; Check that org-clock-pgtkidle-program-name exists. But don't do that on DOS/Windows, >>> + ;; since the command definitely does NOT exist there, and invoking >>> + ;; COMMAND.COM on MS-Windows is a bad idea -- it hangs. >>> + (and (null (memq system-type '(windows-nt ms-dos))) >>> + (eq 0 (call-process-shell-command >>> + (format "command -v %s" org-clock-pgtkidle-program-name))) >>> + ;; Check that x11idle can retrieve the idle time >>> + ;; FIXME: Why "..-shell-command" rather than just `call-process'? >>> + (eq 0 (call-process-shell-command org-clock-pgtkidle-program-name)))) >> >> We may as well resolve this FIXME since we are at it. >> Instead of the awkward combination of two `call-process-shell-command' >> prompts, we can simply use `executable-find' + `call-process'. > > Is there a reasonable way to avoid code duplication? I agree that > `executable-find' may be better since `org-clock-pgtkidle-program-name' > might contain spaces or shell specials causing issues with current code. I do not think that we should avoid code duplication here. pgtk and x11 is principally different. The fact that the same code works for them is rather a co-incidence. It is unlikely that a new window-system is going to use the same code again. And de-duplicating jut two functions is not worth it. -- Ihor Radchenko // yantar92, Org mode contributor, Learn more about Org mode at <https://orgmode.org/>. Support Org development at <https://liberapay.com/org-mode>, or support my work at <https://liberapay.com/yantar92> ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: org-clock idle time in pgtk Emacs 2023-02-01 13:15 ` Ihor Radchenko 2023-02-01 15:45 ` Max Nikulin @ 2023-02-03 5:55 ` Julien Cubizolles 2023-02-03 12:17 ` Ihor Radchenko 1 sibling, 1 reply; 11+ messages in thread From: Julien Cubizolles @ 2023-02-03 5:55 UTC (permalink / raw) To: emacs-orgmode Ihor Radchenko <yantar92@posteo.net> writes: >> +(defcustom org-clock-pgtkidle-program-name >> + (if (executable-find "jc-idle-time") >> + "jc-idle-time") >> + "Name of the program which prints idle time in milliseconds. > > May I know where "jc-idle-time" is coming from? Is it a built-in command > on wayland? Sorry, I forgot to mention. It's a custom python program, working both in X11 and wayland. I didn't find a built-in command. --8<---------------cut here---------------start------------->8--- #!/usr/bin/env python3 from idle_time import IdleMonitor monitor = IdleMonitor.get_monitor() print(f"{1000*monitor.get_idle_time():.0f}") --8<---------------cut here---------------end--------------->8--- -- Julien Cubizolles ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: org-clock idle time in pgtk Emacs 2023-02-03 5:55 ` Julien Cubizolles @ 2023-02-03 12:17 ` Ihor Radchenko 2023-02-03 15:07 ` Max Nikulin 0 siblings, 1 reply; 11+ messages in thread From: Ihor Radchenko @ 2023-02-03 12:17 UTC (permalink / raw) To: Julien Cubizolles; +Cc: emacs-orgmode Julien Cubizolles <j.cubizolles@free.fr> writes: >> May I know where "jc-idle-time" is coming from? Is it a built-in command >> on wayland? > > Sorry, I forgot to mention. It's a custom python program, working both > in X11 and wayland. I didn't find a built-in command. I would prefer something built-in or, at least, available via OS' package manager. > --8<---------------cut here---------------start------------->8--- > #!/usr/bin/env python3 > > from idle_time import IdleMonitor > > monitor = IdleMonitor.get_monitor() > print(f"{1000*monitor.get_idle_time():.0f}") > --8<---------------cut here---------------end--------------->8--- This does not look pgtk-specific. Is it? -- Ihor Radchenko // yantar92, Org mode contributor, Learn more about Org mode at <https://orgmode.org/>. Support Org development at <https://liberapay.com/org-mode>, or support my work at <https://liberapay.com/yantar92> ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: org-clock idle time in pgtk Emacs 2023-02-03 12:17 ` Ihor Radchenko @ 2023-02-03 15:07 ` Max Nikulin 2023-02-04 11:04 ` Ihor Radchenko 0 siblings, 1 reply; 11+ messages in thread From: Max Nikulin @ 2023-02-03 15:07 UTC (permalink / raw) To: Julien Cubizolles; +Cc: emacs-orgmode On 03/02/2023 19:17, Ihor Radchenko wrote: > Julien Cubizolles writes: > >>> May I know where "jc-idle-time" is coming from? Is it a built-in command >>> on wayland? >> >> Sorry, I forgot to mention. It's a custom python program, working both >> in X11 and wayland. I didn't find a built-in command. > > I would prefer something built-in or, at least, available via OS' > package manager. It seems, one can obtain the python package using pip install idle-time https://pypi.org/project/idle-time/ The issue is that the project has just 2 commits, a pull request for wider support of various environments is ignored by the author. The package already has CLI interface, but output format is not script-friendly: https://github.com/escaped/idle_time/blob/master/idle_time/__main__.py print(f"Idle time: {monitor.get_idle_time()}s") python3 -m idle-time > This does not look pgtk-specific. Is it? I see X11 and Windows in the implementation. xprintidle might be more reliable though. As to Org my opinion is still that a defcustom for user-defined function returning idle may be a better option. ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: org-clock idle time in pgtk Emacs 2023-02-03 15:07 ` Max Nikulin @ 2023-02-04 11:04 ` Ihor Radchenko 0 siblings, 0 replies; 11+ messages in thread From: Ihor Radchenko @ 2023-02-04 11:04 UTC (permalink / raw) To: Max Nikulin; +Cc: Julien Cubizolles, emacs-orgmode Max Nikulin <manikulin@gmail.com> writes: > As to Org my opinion is still that a defcustom for user-defined function > returning idle may be a better option. Agree. If pgtk does not have to use something that absolutely needs to be pgtk-specific, we should rather introduce a generic customization. For example, a new `org-clock-idle-function' customization may accept Elisp function of a string (for a shell command), defaulting to `org-emacs-idle-seconds'. -- Ihor Radchenko // yantar92, Org mode contributor, Learn more about Org mode at <https://orgmode.org/>. Support Org development at <https://liberapay.com/org-mode>, or support my work at <https://liberapay.com/yantar92> ^ permalink raw reply [flat|nested] 11+ messages in thread
end of thread, other threads:[~2023-02-04 11:05 UTC | newest] Thread overview: 11+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2022-05-24 8:32 org-clock idle time in pgtk Emacs Julien Cubizolles 2022-05-24 10:27 ` Tim Cross 2022-05-25 6:38 ` Ihor Radchenko 2023-01-31 16:24 ` Julien Cubizolles 2023-02-01 13:15 ` Ihor Radchenko 2023-02-01 15:45 ` Max Nikulin 2023-02-02 9:17 ` Ihor Radchenko 2023-02-03 5:55 ` Julien Cubizolles 2023-02-03 12:17 ` Ihor Radchenko 2023-02-03 15:07 ` Max Nikulin 2023-02-04 11:04 ` Ihor Radchenko
Code repositories for project(s) associated with this public inbox https://git.savannah.gnu.org/cgit/emacs/org-mode.git 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).