emacs-orgmode
[Top][All Lists]
Advanced

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

[O] [PATCH] Option for clock and timer to be displayed in frame-title


From: g . kettleborough
Subject: [O] [PATCH] Option for clock and timer to be displayed in frame-title
Date: Tue, 28 Feb 2012 21:44:12 +0000
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/23.1.50 (gnu/linux)

Attached is a patch that gives the option to show the clock and timer
information in the frame title as well as the mode line (or both or
neither).  I find this useful as there is often not enough room in the
mode line but there is enough in the frame title.

I am in the process of assigning my copyright to the FSF for this and
hopefully future org-mode contributions.  I submit the patch now and
request comments as this is my first contribution to the project.

Thanks,

George.

>From 3e29d48fb34e51a81544b1734dd75207c943d567 Mon Sep 17 00:00:00 2001
From: George Kettleborough <address@hidden>
Date: Tue, 28 Feb 2012 00:51:10 +0000
Subject: [PATCH] Option for clock and timer to be displayed in frame-title

---
 lisp/org-clock.el |   43 +++++++++++++++++++++++++++++++++++--------
 lisp/org-timer.el |   43 +++++++++++++++++++++++++++++++++++--------
 2 files changed, 70 insertions(+), 16 deletions(-)

diff --git a/lisp/org-clock.el b/lisp/org-clock.el
index 9206608..1a800b6 100644
--- a/lisp/org-clock.el
+++ b/lisp/org-clock.el
@@ -323,6 +323,15 @@ play with them."
   :version "24.1"
   :type 'boolean)
 
+(defcustom org-clock-clocked-in-display 'mode-line
+  "Where should the clocked in status be displayed."
+  :group 'org-clock
+  :type '(choice
+         (const :tag "Mode line" mode-line)
+         (const :tag "Frame title" frame-title)
+         (const :tag "Both" both)
+         (const :tag "None" nil)))
+
 (defvar org-clock-in-prepare-hook nil
   "Hook run when preparing the clock.
 This hook is run before anything happens to the task that
@@ -1170,18 +1179,28 @@ the clocking selection, associated with the letter `d'."
                         (save-excursion (org-back-to-heading t) (point))
                         (buffer-base-buffer))
            (setq org-clock-has-been-used t)
-           (or global-mode-string (setq global-mode-string '("")))
-           (or (memq 'org-mode-line-string global-mode-string)
-               (setq global-mode-string
-                     (append global-mode-string '(org-mode-line-string))))
+           ;; add to mode line
+           (when (or (eq org-clock-clocked-in-display 'mode-line)
+                     (eq org-clock-clocked-in-display 'both))
+             (or global-mode-string (setq global-mode-string '("")))
+             (or (memq 'org-mode-line-string global-mode-string)
+                 (setq global-mode-string
+                       (append global-mode-string '(org-mode-line-string)))))
+           ;; add to frame title
+           (when (or (eq org-clock-clocked-in-display 'frame-title)
+                     (eq org-clock-clocked-in-display 'both))
+             (or (memq 'org-mode-line-string frame-title-format)
+                 (setq frame-title-format
+                       (append frame-title-format '(" " 
org-mode-line-string)))))
            (org-clock-update-mode-line)
            (when org-clock-mode-line-timer
              (cancel-timer org-clock-mode-line-timer)
              (setq org-clock-mode-line-timer nil))
-           (setq org-clock-mode-line-timer
-                 (run-with-timer org-clock-update-period
-                                 org-clock-update-period
-                                 'org-clock-update-mode-line))
+           (when org-clock-clocked-in-display
+             (setq org-clock-mode-line-timer
+                   (run-with-timer org-clock-update-period
+                                   org-clock-update-period
+                                   'org-clock-update-mode-line)))
            (when org-clock-idle-timer
              (cancel-timer org-clock-idle-timer)
              (setq org-clock-idle-timer nil))
@@ -1329,6 +1348,8 @@ If there is no running clock, throw an error, unless 
FAIL-QUIETLY is set."
     (when (not (org-clocking-p))
       (setq global-mode-string
            (delq 'org-mode-line-string global-mode-string))
+      (setq frame-title-format
+           (delq 'org-mode-line-string frame-title-format))
       (force-mode-line-update)
       (if fail-quietly (throw 'exit t) (error "No active clock")))
     (let (ts te s h m remove)
@@ -1373,6 +1394,8 @@ If there is no running clock, throw an error, unless 
FAIL-QUIETLY is set."
            (setq org-clock-idle-timer nil))
          (setq global-mode-string
                (delq 'org-mode-line-string global-mode-string))
+         (setq frame-title-format
+               (delq 'org-mode-line-string frame-title-format))
          (when org-clock-out-switch-to-state
            (save-excursion
              (org-back-to-heading t)
@@ -1472,6 +1495,8 @@ UPDOWN tells whether to change 'up or 'down."
   (when (not (org-clocking-p))
     (setq global-mode-string
          (delq 'org-mode-line-string global-mode-string))
+    (setq frame-title-format
+         (delq 'org-mode-line-string frame-title-format))
     (force-mode-line-update)
     (error "No active clock"))
   (save-excursion ; Do not replace this with `with-current-buffer'.
@@ -1484,6 +1509,8 @@ UPDOWN tells whether to change 'up or 'down."
   (move-marker org-clock-hd-marker nil)
   (setq global-mode-string
        (delq 'org-mode-line-string global-mode-string))
+  (setq frame-title-format
+       (delq 'org-mode-line-string frame-title-format))
   (force-mode-line-update)
   (message "Clock canceled")
   (run-hooks 'org-clock-cancel-hook))
diff --git a/lisp/org-timer.el b/lisp/org-timer.el
index a3bde0f..b39d362 100644
--- a/lisp/org-timer.el
+++ b/lisp/org-timer.el
@@ -56,6 +56,15 @@ When 0, the user is prompted for a value."
   :version "24.1"
   :type 'number)
 
+(defcustom org-timer-display 'mode-line
+  "Where to display timer."
+  :group 'org-time
+  :type '(choice
+         (const :tag "Mode line" mode-line)
+         (const :tag "Frame title" frame-title)
+         (const :tag "Both" both)
+         (const :tag "None" nil)))
+
 (defvar org-timer-start-hook nil
   "Hook run after relative timer is started.")
 
@@ -270,10 +279,17 @@ If the integer is negative, the string will start with 
\"-\"."
 (defun org-timer-set-mode-line (value)
   "Set the mode-line display of the relative timer.
 VALUE can be `on', `off', or `pause'."
-  (or global-mode-string (setq global-mode-string '("")))
-  (or (memq 'org-timer-mode-line-string global-mode-string)
-      (setq global-mode-string
-           (append global-mode-string '(org-timer-mode-line-string))))
+  (when (or (eq org-timer-display 'mode-line)
+           (eq org-timer-display 'both))
+    (or global-mode-string (setq global-mode-string '("")))
+    (or (memq 'org-timer-mode-line-string global-mode-string)
+       (setq global-mode-string
+             (append global-mode-string '(org-timer-mode-line-string)))))
+  (when (or (eq org-timer-display 'frame-title)
+            (eq org-timer-display 'both))
+    (or (memq 'org-timer-mode-line-string frame-title-format)
+       (setq frame-title-format
+             (append frame-title-format '(org-timer-mode-line-string)))))
   (cond
    ((equal value 'off)
     (when org-timer-mode-line-timer
@@ -281,21 +297,32 @@ VALUE can be `on', `off', or `pause'."
       (setq org-timer-mode-line-timer nil))
     (setq global-mode-string
          (delq 'org-timer-mode-line-string global-mode-string))
+    (setq frame-title-format
+         (delq 'org-timer-mode-line-string frame-title-format))
     (force-mode-line-update))
    ((equal value 'pause)
     (when org-timer-mode-line-timer
       (cancel-timer org-timer-mode-line-timer)
       (setq org-timer-mode-line-timer nil)))
    ((equal value 'on)
+  (when (or (eq org-timer-display 'mode-line)
+           (eq org-timer-display 'both))
     (or global-mode-string (setq global-mode-string '("")))
     (or (memq 'org-timer-mode-line-string global-mode-string)
        (setq global-mode-string
-             (append global-mode-string '(org-timer-mode-line-string))))
+             (append global-mode-string '(org-timer-mode-line-string)))))
+  (when (or (eq org-timer-display 'frame-title)
+           (eq org-timer-display 'both))
+    (or (memq 'org-timer-mode-line-string frame-title-format)
+       (setq frame-title-format
+             (append frame-title-format '(org-timer-mode-line-string)))))
     (org-timer-update-mode-line)
     (when org-timer-mode-line-timer
-      (cancel-timer org-timer-mode-line-timer))
-    (setq org-timer-mode-line-timer
-         (run-with-timer 1 1 'org-timer-update-mode-line)))))
+      (cancel-timer org-timer-mode-line-timer)
+      (setq org-timer-mode-line-timer nil))
+    (when org-timer-display
+      (setq org-timer-mode-line-timer
+           (run-with-timer 1 1 'org-timer-update-mode-line))))))
 
 (defun org-timer-update-mode-line ()
   "Update the timer time in the mode line."
-- 
1.7.4.1


reply via email to

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