# HG changeset patch # User Glenn Morris # Date 1227149009 0 # Node ID bb974924d581e1eb1c141b4b7b500fe46640ebb7 # Parent 738930be185539ebe9eeb9b64c09de6b6dff42a6 (proced-available): New variable. (proced-process-attributes): Move availability check from previous change from here... (proced): ... to here. diff -r 738930be1855 -r bb974924d581 lisp/proced.el --- a/lisp/proced.el Thu Nov 20 02:42:27 2008 +0000 +++ b/lisp/proced.el Thu Nov 20 02:43:29 2008 +0000 @@ -574,6 +574,9 @@ (setq proced-timer (run-at-time t proced-timer-interval 'proced-timer)))) +(defvar proced-available nil + "Non-nil means Proced is known to work on this system.") + ;; Proced mode is suitable only for specially formatted data. (put 'proced-mode 'mode-class 'special) @@ -585,6 +588,9 @@ See `proced-mode' for a description of features available in Proced buffers." (interactive "P") + (or proced-available + (setq proced-available (not (null (list-system-processes)))) + (error "Proced is not available on this system")) (let ((buffer (get-buffer-create "*Proced*")) new) (set-buffer buffer) (setq new (zerop (buffer-size))) @@ -1233,28 +1239,25 @@ (defun proced-process-attributes () "Return alist of attributes for each system process. This alist can be customized via `proced-custom-attributes'." - (let ((procs (list-system-processes))) - (if procs - (mapcar (lambda (pid) - (let* ((attributes (system-process-attributes pid)) - (utime (cdr (assq 'utime attributes))) - (stime (cdr (assq 'stime attributes))) - (cutime (cdr (assq 'cutime attributes))) - (cstime (cdr (assq 'cstime attributes))) - attr) - (setq attributes - (append (list (cons 'pid pid)) - (if (and utime stime) - (list (cons 'time (time-add utime stime)))) - (if (and cutime cstime) - (list (cons 'ctime (time-add cutime cstime)))) - attributes)) - (dolist (fun proced-custom-attributes) - (if (setq attr (funcall fun attributes)) - (push attr attributes))) - (cons pid attributes))) - procs) - (error "Proced is not available on this system")))) + (mapcar (lambda (pid) + (let* ((attributes (system-process-attributes pid)) + (utime (cdr (assq 'utime attributes))) + (stime (cdr (assq 'stime attributes))) + (cutime (cdr (assq 'cutime attributes))) + (cstime (cdr (assq 'cstime attributes))) + attr) + (setq attributes + (append (list (cons 'pid pid)) + (if (and utime stime) + (list (cons 'time (time-add utime stime)))) + (if (and cutime cstime) + (list (cons 'ctime (time-add cutime cstime)))) + attributes)) + (dolist (fun proced-custom-attributes) + (if (setq attr (funcall fun attributes)) + (push attr attributes))) + (cons pid attributes))) + (list-system-processes))) (defun proced-update (&optional revert quiet) "Update the `proced' process information. Preserves point and marks.