New feature to display several time zones in a buffer.
(display-time-world-mode, display-time-world-display) (display-time-world, display-time-world-timer): New functions. display-time-world-list, display-time-world-time-format) (display-time-world-buffer-name, display-time-world-timer-enable) (display-time-world-timer-second, display-time-world-mode-map): New variables.
This commit is contained in:
parent
017de7849c
commit
aff2ba0407
3 changed files with 125 additions and 1 deletions
3
etc/NEWS
3
etc/NEWS
|
@ -63,6 +63,9 @@ to a remote display, e.g. because the display is about to become unreachable.
|
|||
called with a prefix, and the default directory is a remote file name.
|
||||
This is because some file name handler (like ange-ftp) are not able to
|
||||
run processes remotely.
|
||||
|
||||
** The new command `display-time-world' starts an updating time display
|
||||
using several time zones, in a buffer.
|
||||
|
||||
* Startup Changes in Emacs 23.1
|
||||
|
||||
|
|
|
@ -1,3 +1,13 @@
|
|||
2007-08-28 Ivan Kanis <apple@kanis.eu>
|
||||
|
||||
* time.el: New feature to display several time zones in a buffer.
|
||||
(display-time-world-mode, display-time-world-display)
|
||||
(display-time-world, display-time-world-timer): New functions.
|
||||
(display-time-world-list, display-time-world-time-format)
|
||||
(display-time-world-buffer-name, display-time-world-timer-enable)
|
||||
(display-time-world-timer-second, display-time-world-mode-map):
|
||||
New variables.
|
||||
|
||||
2007-08-28 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
|
||||
|
||||
* term/x-win.el (x-gtk-stock-map): New variable.
|
||||
|
|
113
lisp/time.el
113
lisp/time.el
|
@ -25,7 +25,10 @@
|
|||
;;; Commentary:
|
||||
|
||||
;; Facilities to display current time/date and a new-mail indicator
|
||||
;; in the Emacs mode line. The single entry point is `display-time'.
|
||||
;; in the Emacs mode line. The entry point is `display-time'.
|
||||
|
||||
;; Display time world in a buffer, the entry point is
|
||||
;; `display-time-world'.
|
||||
|
||||
;;; Code:
|
||||
|
||||
|
@ -109,6 +112,51 @@ A value of nil means 1 <= hh <= 12, and an AM/PM suffix is used."
|
|||
"Time when mail file's file system was recorded to be down.
|
||||
If that file system seems to be up, the value is nil.")
|
||||
|
||||
(defcustom display-time-world-list
|
||||
'(("America/Los_Angeles" "Seattle")
|
||||
("America/New_York" "New York")
|
||||
("Europe/London" "London")
|
||||
("Europe/Paris" "Paris")
|
||||
("Asia/Calcutta" "Bangalore")
|
||||
("Asia/Tokyo" "Tokyo"))
|
||||
"Alist specifying time zones and places for `display-time-world'.
|
||||
Each element has the form (TIMEZONE LABEL).
|
||||
TIMEZONE should be a valid argument for `set-time-zone-rule'.
|
||||
LABEL is a string to display to label that zone's time."
|
||||
:group 'display-time
|
||||
:type '(repeat (list string string))
|
||||
:version "23.1")
|
||||
|
||||
(defcustom display-time-world-time-format "%A %m %B %R %Z"
|
||||
"Format of the time displayed, see `format-time-string'."
|
||||
:group 'display-time
|
||||
:type 'string
|
||||
:version "23.1")
|
||||
|
||||
(defcustom display-time-world-buffer-name "*wclock*"
|
||||
"Name of the wclock buffer."
|
||||
:group 'display-time
|
||||
:type 'string
|
||||
:version "23.1")
|
||||
|
||||
(defcustom display-time-world-timer-enable t
|
||||
"If non-nil, a timer will update the world clock."
|
||||
:group 'display-time
|
||||
:type 'boolean
|
||||
:version "23.1")
|
||||
|
||||
(defcustom display-time-world-timer-second 60
|
||||
"Interval in seconds for updating the world clock."
|
||||
:group 'display-time
|
||||
:type 'integer
|
||||
:version "23.1")
|
||||
|
||||
(defvar display-time-world-mode-map
|
||||
(let ((map (make-sparse-keymap)))
|
||||
(define-key map "q" 'kill-this-buffer)
|
||||
map)
|
||||
"Keymap of Display Time World mode")
|
||||
|
||||
;;;###autoload
|
||||
(defun display-time ()
|
||||
"Enable display of time, load level, and mail flag in mode lines.
|
||||
|
@ -393,6 +441,69 @@ This runs the normal hook `display-time-hook' after each update."
|
|||
(remove-hook 'rmail-after-get-new-mail-hook
|
||||
'display-time-event-handler)))
|
||||
|
||||
|
||||
(defun display-time-world-mode ()
|
||||
"Major mode for buffer that displays times in various time zones.
|
||||
See `display-time-world'."
|
||||
(interactive)
|
||||
(kill-all-local-variables)
|
||||
(setq
|
||||
major-mode 'display-time-world-mode
|
||||
mode-name "World clock")
|
||||
(use-local-map display-time-world-mode-map))
|
||||
|
||||
(defun display-time-world-display (alist)
|
||||
"Replace current buffer text with times in various zones, based on ALIST."
|
||||
(let ((inhibit-read-only t)
|
||||
(buffer-undo-list t))
|
||||
(erase-buffer)
|
||||
(let ((max-width 0)
|
||||
(result ()))
|
||||
(unwind-protect
|
||||
(dolist (zone alist)
|
||||
(let* ((label (cadr zone))
|
||||
(width (string-width label)))
|
||||
(set-time-zone-rule (car zone))
|
||||
(setq result
|
||||
(append result
|
||||
(list
|
||||
label width
|
||||
(format-time-string display-time-world-time-format))))
|
||||
(when (> width max-width)
|
||||
(setq max-width width))))
|
||||
(set-time-zone-rule nil))
|
||||
(while result
|
||||
(insert (pop result)
|
||||
(make-string (1+ (- max-width (pop result))) ?\s)
|
||||
(pop result) "\n")))
|
||||
(delete-backward-char 1)))
|
||||
|
||||
;;;###autoload
|
||||
(defun display-time-world ()
|
||||
"Enable updating display of times in various time zones.
|
||||
`display-time-world-list' specifies the zones.
|
||||
To turn off the world time display, go to that window and type `q'."
|
||||
(interactive)
|
||||
(when (and display-time-world-timer-enable
|
||||
(not (get-buffer display-time-world-buffer-name)))
|
||||
(run-at-time t display-time-world-timer-second 'display-time-world-timer))
|
||||
(with-current-buffer (get-buffer-create display-time-world-buffer-name)
|
||||
(display-time-world-display display-time-world-list))
|
||||
(pop-to-buffer display-time-world-buffer-name)
|
||||
(fit-window-to-buffer)
|
||||
(display-time-world-mode))
|
||||
|
||||
(defun display-time-world-timer ()
|
||||
(if (get-buffer display-time-world-buffer-name)
|
||||
(with-current-buffer (get-buffer display-time-world-buffer-name)
|
||||
(display-time-world-display display-time-world-list))
|
||||
;; cancel timer
|
||||
(let ((list timer-list))
|
||||
(while list
|
||||
(let ((elt (pop list)))
|
||||
(when (equal (symbol-name (aref elt 5)) "display-time-world-timer")
|
||||
(cancel-timer elt)))))))
|
||||
|
||||
(provide 'time)
|
||||
|
||||
;;; arch-tag: b9c1623f-b5cb-48e4-b650-482a4d23c5a6
|
||||
|
|
Loading…
Add table
Reference in a new issue