emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] externals/org 693df6fd90 1/2: lisp/org-clock.el: Add support for


From: ELPA Syncer
Subject: [elpa] externals/org 693df6fd90 1/2: lisp/org-clock.el: Add support for logind
Date: Thu, 23 Mar 2023 07:59:05 -0400 (EDT)

branch: externals/org
commit 693df6fd90daaa3c982450b5978d9c203d8b629f
Author: Nathaniel Nicandro <nathanielnicandro@gmail.com>
Commit: Ihor Radchenko <yantar92@posteo.net>

    lisp/org-clock.el: Add support for logind
    
    * lisp/org-timer.el (org-logind-dbus-session-path): New variable.
    (org-logind-user-idle-seconds): New function.
    (org-user-idle-seconds): Use them.
    * etc/ORG-NEWS (Add support for ~logind~ idle time in
    ~org-user-idle-seconds~): Document the new feature.
---
 etc/ORG-NEWS      |  7 +++++++
 lisp/org-clock.el | 30 ++++++++++++++++++++++++++++++
 2 files changed, 37 insertions(+)

diff --git a/etc/ORG-NEWS b/etc/ORG-NEWS
index 4ca13af17b..4d45e65076 100644
--- a/etc/ORG-NEWS
+++ b/etc/ORG-NEWS
@@ -112,6 +112,13 @@ official 
[[https://clojure.org/guides/deps_and_cli][Clojure CLI tools]].
 The command can be customized with ~ob-clojure-cli-command~.
 
 ** New features
+*** Add support for ~logind~ idle time in ~org-user-idle-seconds~
+
+When Emacs is built with =dbus= support and
+the =org.freedesktop.login1= interface is available, fallback to
+checking the =IdleSinceHint= property when
+determining =org-user-idle-seconds= as the penultimate step.
+
 *** ~org-metaup~ and ~org-metadown~ now act on headings in region
 
 When region is active and starts at a heading, ~org-metaup~ and
diff --git a/lisp/org-clock.el b/lisp/org-clock.el
index a300df8ff4..482b3c5a8f 100644
--- a/lisp/org-clock.el
+++ b/lisp/org-clock.el
@@ -51,6 +51,9 @@
 (declare-function org-dynamic-block-define "org" (type func))
 (declare-function w32-notification-notify "w32fns.c" (&rest params))
 (declare-function w32-notification-close "w32fns.c" (&rest params))
+(declare-function dbus-list-activatable-names "dbus" (&optional bus))
+(declare-function dbus-call-method "dbus" (bus service path interface method 
&rest args))
+(declare-function dbus-get-property "dbus" (bus service path interface 
property))
 
 (defvar org-frame-title-format-backup nil)
 (defvar org-state)
@@ -1214,6 +1217,26 @@ 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))
 
+(defvar org-logind-dbus-session-path
+  (when (and (boundp 'dbus-runtime-version)
+             (require 'dbus nil t)
+             (member "org.freedesktop.login1" (dbus-list-activatable-names)))
+    (dbus-call-method
+     :system "org.freedesktop.login1"
+     "/org/freedesktop/login1"
+     "org.freedesktop.login1.Manager"
+     "GetSessionByPID" (emacs-pid)))
+  "D-Bus session path for the elogind interface.")
+
+(defun org-logind-user-idle-seconds ()
+  "Return the number of idle seconds for the user according to logind."
+  (- (float-time)
+     (/ (dbus-get-property
+         :system "org.freedesktop.login1"
+         org-logind-dbus-session-path
+         "org.freedesktop.login1.Session" "IdleSinceHint")
+        1e6)))
+
 (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 +1245,13 @@ 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
+     org-logind-dbus-session-path
+     (dbus-get-property
+      :system "org.freedesktop.login1"
+      org-logind-dbus-session-path
+      "org.freedesktop.login1.Session" "IdleHint"))
+    (org-logind-user-idle-seconds))
    (t
     (org-emacs-idle-seconds))))
 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]