]> git.eshelyaron.com Git - emacs.git/commitdiff
Cancel timer when world-clock buffer is killed
authorStefan Kangas <stefankangas@gmail.com>
Thu, 3 Sep 2020 10:54:30 +0000 (12:54 +0200)
committerStefan Kangas <stefankangas@gmail.com>
Thu, 3 Sep 2020 10:54:30 +0000 (12:54 +0200)
* lisp/time.el (world-clock-timer): New variable.
(world-clock-cancel-timer): New defun.
(world-clock): Add 'world-clock-cancel-timer' to 'kill-buffer-hook'.

lisp/time.el

index 1ab992adb453e4b203e2303401b17f66f9cae721..5ced92055236b97e7e6f8d90b54f389d8a103b1e 100644 (file)
@@ -523,6 +523,8 @@ See `world-clock'."
   (setq-local revert-buffer-function #'world-clock-update)
   (setq show-trailing-whitespace nil))
 
+(defvar world-clock-timer nil)
+
 (defun world-clock-display (alist)
   "Replace current buffer text with times in various zones, based on ALIST."
   (let ((inhibit-read-only t)
@@ -561,12 +563,20 @@ To turn off the world time display, go to the window and type `\\[quit-window]'.
   (interactive)
   (when (and world-clock-timer-enable
              (not (get-buffer world-clock-buffer-name)))
-    (run-at-time t world-clock-timer-second #'world-clock-update))
+    (setq world-clock-timer
+          (run-at-time t world-clock-timer-second #'world-clock-update))
+    (add-hook 'kill-buffer-hook #'world-clock-cancel-timer))
   (pop-to-buffer world-clock-buffer-name)
   (world-clock-display (time--display-world-list))
   (world-clock-mode)
   (fit-window-to-buffer))
 
+(defun world-clock-cancel-timer ()
+  "Cancel the world clock timer."
+  (when world-clock-timer
+    (cancel-timer world-clock-timer)
+    (setq world-clock-timer nil)))
+
 (defun world-clock-update (&optional _arg _noconfirm)
   "Update the `world-clock' buffer."
   (if (get-buffer world-clock-buffer-name)