|
|
1.1 ! root 1: ;; Display time and load in mode line of Emacs. ! 2: ;; Copyright (C) 1985, 1986, 1987, 1990 Free Software Foundation, Inc. ! 3: ! 4: ;; This file is part of GNU Emacs. ! 5: ! 6: ;; GNU Emacs is free software; you can redistribute it and/or modify ! 7: ;; it under the terms of the GNU General Public License as published by ! 8: ;; the Free Software Foundation; either version 1, or (at your option) ! 9: ;; any later version. ! 10: ! 11: ;; GNU Emacs is distributed in the hope that it will be useful, ! 12: ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ! 13: ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! 14: ;; GNU General Public License for more details. ! 15: ! 16: ;; You should have received a copy of the GNU General Public License ! 17: ;; along with GNU Emacs; see the file COPYING. If not, write to ! 18: ;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. ! 19: ! 20: ! 21: (defvar display-time-mail-file nil ! 22: "*File name of mail inbox file, for indicating existence of new mail. ! 23: Default is system-dependent, and is the same as used by Rmail.") ! 24: ! 25: (defvar display-time-process nil) ! 26: ! 27: (defvar display-time-interval 60 ! 28: "*Seconds between updates of time in the mode line.") ! 29: ! 30: (defvar display-time-string nil) ! 31: ! 32: (defun display-time () ! 33: "Display current time and load level in mode line of each buffer. ! 34: Updates automatically every minute. ! 35: If display-time-day-and-date is non-nil, the current day and date ! 36: are displayed as well." ! 37: (interactive) ! 38: (let ((live (and display-time-process ! 39: (eq (process-status display-time-process) 'run)))) ! 40: (if (not live) ! 41: (progn ! 42: (if display-time-process ! 43: (delete-process display-time-process)) ! 44: (or global-mode-string (setq global-mode-string '(""))) ! 45: (or (memq 'display-time-string global-mode-string) ! 46: (setq global-mode-string ! 47: (append global-mode-string '(display-time-string)))) ! 48: (setq display-time-string "") ! 49: (let ((process-connection-type nil)) ! 50: (setq display-time-process ! 51: (start-process "display-time" nil ! 52: (concat exec-directory "wakeup") ! 53: (int-to-string display-time-interval)))) ! 54: (process-kill-without-query display-time-process) ! 55: (set-process-sentinel display-time-process 'display-time-sentinel) ! 56: (set-process-filter display-time-process 'display-time-filter))))) ! 57: ! 58: (defun display-time-sentinel (proc reason) ! 59: (or (eq (process-status proc) 'run) ! 60: (setq display-time-string "")) ! 61: ;; Force mode-line updates ! 62: (save-excursion (set-buffer (other-buffer))) ! 63: (set-buffer-modified-p (buffer-modified-p)) ! 64: (sit-for 0)) ! 65: ! 66: (defun display-time-filter (proc string) ! 67: (let ((time (current-time-string)) ! 68: (load (condition-case () ! 69: (if (zerop (car (load-average))) "" ! 70: (format "%03d" (car (load-average)))) ! 71: (error ! 72: (condition-case () ! 73: (unwind-protect ! 74: (save-excursion ! 75: (set-buffer (get-buffer-create " *uptime*")) ! 76: (call-process "/usr/ucb/uptime" nil (current-buffer)) ! 77: (goto-char (point-min)) ! 78: (search-forward "average: ") ! 79: ;; Get the integer part and fraction part, ! 80: ;; discarding the period. ! 81: ;; (Because code below adds a period.) ! 82: (concat ! 83: (buffer-substring (point) ! 84: (progn (forward-word 1) (point))) ! 85: (buffer-substring (1+ (point)) ! 86: (progn (forward-word 1) (point))))) ! 87: (kill-buffer " *uptime*")) ! 88: (error ""))))) ! 89: (mail-spool-file (or display-time-mail-file ! 90: (getenv "MAIL") ! 91: (concat rmail-spool-directory ! 92: (or (getenv "LOGNAME") ! 93: (getenv "USER") ! 94: (user-login-name))))) ! 95: hour pm) ! 96: (setq hour (read (substring time 11 13))) ! 97: (setq pm (>= hour 12)) ! 98: (if (> hour 12) ! 99: (setq hour (- hour 12)) ! 100: (if (= hour 0) ! 101: (setq hour 12))) ! 102: (setq display-time-string ! 103: (concat (format "%d" hour) (substring time 13 16) ! 104: (if pm "pm" "am") ! 105: (if (string= load "") ! 106: "" ! 107: (concat " " (substring load 0 -2) "." (substring load -2))) ! 108: (if (and (file-exists-p mail-spool-file) ! 109: ;; file not empty? ! 110: (> (nth 7 (file-attributes mail-spool-file)) 0)) ! 111: " Mail" ! 112: ""))) ! 113: ;; Append the date if desired. ! 114: (if display-time-day-and-date ! 115: (setq display-time-string ! 116: (concat (substring time 0 11) display-time-string)))) ! 117: ;; Force redisplay of all buffers' mode lines to be considered. ! 118: (save-excursion (set-buffer (other-buffer))) ! 119: (set-buffer-modified-p (buffer-modified-p)) ! 120: ;; Do redisplay right now, if no input pending. ! 121: (sit-for 0))
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.