;;; time.el --- display time, load and mail indicator in mode line of Emacs -*-coding: utf-8 -*-
;; Copyright (C) 1985, 1986, 1987, 1993, 1994, 1996, 2000, 2001, 2002,
-;; 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+;; 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
;; Maintainer: FSF
;; This file is part of GNU Emacs.
-;; GNU Emacs is free software; you can redistribute it and/or modify
+;; GNU Emacs is free software: you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 3, or (at your option)
-;; any later version.
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
;; GNU Emacs is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-;; Boston, MA 02110-1301, USA.
+;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
;;; Commentary:
(defcustom display-time-mail-file nil
- "*File name of mail inbox file, for indicating existence of new mail.
+ "File name of mail inbox file, for indicating existence of new mail.
Non-nil and not a string means don't check for mail; nil means use
default, which is system-dependent, and is the same as used by Rmail."
:type '(choice (const :tag "None" none)
:group 'display-time)
(defcustom display-time-mail-directory nil
- "*Name of mail inbox directory, for indicating existence of new mail.
+ "Name of mail inbox directory, for indicating existence of new mail.
Any nonempty regular file in the directory is regarded as newly arrived mail.
If nil, do not check a directory for arriving mail."
:type '(choice (const :tag "None" nil)
:group 'display-time)
(defcustom display-time-mail-function nil
- "*Function to call, for indicating existence of new mail.
+ "Function to call, for indicating existence of new mail.
If nil, that means use the default method: check that the file
specified by `display-time-mail-file' is nonempty or that the
directory `display-time-mail-directory' contains nonempty files."
:group 'display-time)
(defcustom display-time-default-load-average 0
- "*Which load average value will be shown in the mode line.
+ "Which load average value will be shown in the mode line.
Almost every system can provide values of load for past 1 minute, past 5 or
-past 15 minutes. The default is to display 1 minute load average."
+past 15 minutes. The default is to display 1 minute load average.
+The value can be one of:
+
+ 0 => 1 minute load
+ 1 => 5 minutes load
+ 2 => 15 minutes load"
:type '(choice (const :tag "1 minute load" 0)
(const :tag "5 minutes load" 1)
(const :tag "15 minutes load" 2)
"Load average currently being shown in mode line.")
(defcustom display-time-load-average-threshold 0.1
- "*Load-average values below this value won't be shown in the mode line."
+ "Load-average values below this value won't be shown in the mode line."
:type 'number
:group 'display-time)
;;;###autoload
(defcustom display-time-day-and-date nil "\
-*Non-nil means \\[display-time] should display day and date as well as time."
+Non-nil means \\[display-time] should display day and date as well as time."
:type 'boolean
:group 'display-time)
(defvar display-time-timer nil)
(defcustom display-time-interval 60
- "*Seconds between updates of time in the mode line."
+ "Seconds between updates of time in the mode line."
:type 'integer
:group 'display-time)
(defcustom display-time-24hr-format nil
- "*Non-nil indicates time should be displayed as hh:mm, 0 <= hh <= 23.
+ "Non-nil indicates time should be displayed as hh:mm, 0 <= hh <= 23.
A value of nil means 1 <= hh <= 12, and an AM/PM suffix is used."
:type 'boolean
:group 'display-time)
(defvar display-time-string nil)
+;;;###autoload(put 'display-time-string 'risky-local-variable t)
(defcustom display-time-hook nil
- "*List of functions to be called when the time is updated on the mode line."
+ "List of functions to be called when the time is updated on the mode line."
:type 'hook
:group 'display-time)
:version "23.1")
(defcustom display-time-world-buffer-name "*wclock*"
- "Name of the wclock buffer."
+ "Name of the world clock buffer."
:group 'display-time
:type 'string
:version "23.1")
(let ((map (make-sparse-keymap)))
(define-key map "q" 'kill-this-buffer)
map)
- "Keymap of Display Time World mode")
+ "Keymap of Display Time World mode.")
;;;###autoload
(defun display-time ()
string))
(defcustom display-time-format nil
- "*String specifying format for displaying the time in the mode line.
+ "String specifying format for displaying the time in the mode line.
See the function `format-time-string' for an explanation of
how to write this string. If this is nil, the defaults
depend on `display-time-day-and-date' and `display-time-24hr-format'."
'local-map (make-mode-line-mouse-map 'mouse-2
read-mail-command)))
""))
- "*List of expressions governing display of the time in the mode line.
+ "List of expressions governing display of the time in the mode line.
For most purposes, you can control the time format using `display-time-format'
which is a more standard interface.
(force-mode-line-update))
(defun display-time-file-nonempty-p (file)
- (and (file-exists-p file)
- (< 0 (nth 7 (file-attributes (file-chase-links file))))))
+ (let ((remote-file-name-inhibit-cache (- display-time-interval 5)))
+ (and (file-exists-p file)
+ (< 0 (nth 7 (file-attributes (file-chase-links file)))))))
;;;###autoload
(define-minor-mode display-time-mode
"Toggle display of time, load level, and mail flag in mode lines.
With a numeric arg, enable this display if arg is positive.
-When this display is enabled, it updates automatically every minute.
+When this display is enabled, it updates automatically every minute
+\(you can control the number of seconds between updates by
+customizing `display-time-interval').
If `display-time-day-and-date' is non-nil, the current day and date
are displayed as well.
This runs the normal hook `display-time-hook' after each update."
'display-time-event-handler)))
-(defun display-time-world-mode ()
+(define-derived-mode display-time-world-mode nil "World clock"
"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))
+ (setq show-trailing-whitespace nil))
(defun display-time-world-display (alist)
"Replace current buffer text with times in various zones, based on ALIST."
(buffer-undo-list t))
(erase-buffer)
(let ((max-width 0)
- (result ()))
+ (result ())
+ fmt)
(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))))
+ (push (cons label
+ (format-time-string display-time-world-time-format))
+ result)
(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)))
+ (setq fmt (concat "%-" (int-to-string max-width) "s %s\n"))
+ (dolist (timedata (nreverse result))
+ (insert (format fmt (car timedata) (cdr timedata)))))
+ (delete-char -1)))
;;;###autoload
(defun display-time-world ()
(when (equal (symbol-name (aref elt 5)) "display-time-world-timer")
(cancel-timer elt)))))))
-\f
;;;###autoload
(defun emacs-uptime (&optional format)
"Return a string giving the uptime of this instance of Emacs.
(interactive)
(let ((str
(format-seconds (or format "%Y, %D, %H, %M, %z%S")
- (time-to-seconds
+ (float-time
(time-subtract (current-time) before-init-time)))))
- (if (interactive-p)
+ (if (called-interactively-p 'interactive)
+ (message "%s" str)
+ str)))
+
+;;;###autoload
+(defun emacs-init-time ()
+ "Return a string giving the duration of the Emacs initialization."
+ (interactive)
+ (let ((str
+ (format "%.1f seconds"
+ (float-time
+ (time-subtract after-init-time before-init-time)))))
+ (if (called-interactively-p 'interactive)
(message "%s" str)
str)))
(provide 'time)
-;;; arch-tag: b9c1623f-b5cb-48e4-b650-482a4d23c5a6
;;; time.el ends here