annotate lisp/proced.el @ 110410:f2e111723c3a

Merge changes made in Gnus trunk. Reimplement nnimap, and do tweaks to the rest of the code to support that. * gnus-int.el (gnus-finish-retrieve-group-infos) (gnus-retrieve-group-data-early): New functions. * gnus-range.el (gnus-range-nconcat): New function. * gnus-start.el (gnus-get-unread-articles): Support early retrieval of data. (gnus-read-active-for-groups): Support finishing the early retrieval of data. * gnus-sum.el (gnus-summary-move-article): Pass the move-to group name if the move is internal, so that nnimap can do fast internal moves. * gnus.el (gnus-article-special-mark-lists): Add uid/active tuples, for nnimap usage. * nnimap.el: Rewritten. * nnmail.el (nnmail-inhibit-default-split-group): New internal variable to allow the mail splitting to not return a default group. This is useful for nnimap, which will leave unmatched mail in the inbox. * utf7.el (utf7-encode): Autoload. Implement shell connection. * nnimap.el (nnimap-open-shell-stream): New function. (nnimap-open-connection): Use it. Get the number of lines by using BODYSTRUCTURE. (nnimap-transform-headers): Get the number of lines in each message. (nnimap-retrieve-headers): Query for BODYSTRUCTURE so that we get the number of lines. Not all servers return UIDNEXT. Work past this problem. Remove junk from end of file. Fix typo in "bogus" section. Make capabilties be case-insensitive. Require cl when compiling. Don't bug out if the LIST command doesn't have any parameters. 2010-09-17 Knut Anders Hatlen <kahatlen@gmail.com> (tiny change) * nnimap.el (nnimap-get-groups): Don't bug out if the LIST command doesn't have any parameters. (mm-text-html-renderer): Document gnus-article-html. 2010-09-17 Julien Danjou <julien@danjou.info> (tiny fix) * mm-decode.el (mm-text-html-renderer): Document gnus-article-html. * dgnushack.el: Define netrc-credentials. If the user doesn't have a /etc/services, supply some sensible port defaults. Have `unseen-or-unread' select an unread unseen article first. (nntp-open-server): Return whether the open was successful or not. Throughout all files, replace (save-excursion (set-buffer ...)) with (with-current-buffer ... ). Save result so that it doesn't say "failed" all the time. Add ~/.authinfo to the default, since that's probably most useful for users. Don't use the "finish" method when we're reading from the agent. Add some more nnimap-relevant agent stuff to nnagent.el. * nnimap.el (nnimap-with-process-buffer): Removed. Revert one line that was changed by mistake in the last checkin. (nnimap-open-connection): Don't error out when we can't make a connection nnimap-related changes to avoid bugging out if we can't contact a server. * gnus-start.el (gnus-get-unread-articles): Don't try to scan groups from methods that are denied. * nnimap.el (nnimap-possibly-change-group): Return nil if we can't log in. (nnimap-finish-retrieve-group-infos): Make sure we're not waiting for nothing. * gnus-sum.el (gnus-select-newsgroup): Indent.
author Katsumi Yamaoka <yamaoka@jpl.org>
date Sat, 18 Sep 2010 10:02:19 +0000
parents 6f57977b6f9e
children 376148b31b5e
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
94063
ab8c45d22418 (proced-command-alist): Remove sort column.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 93248
diff changeset
1 ;;; proced.el --- operate on system processes like dired
93212
134b2dc25692 proced.el: New file.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff changeset
2
106815
1d1d5d9bd884 Add 2010 to copyright years.
Glenn Morris <rgm@gnu.org>
parents: 106411
diff changeset
3 ;; Copyright (C) 2008, 2009, 2010 Free Software Foundation, Inc.
93213
f51aae2fc6a4 Update copyright.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 93212
diff changeset
4
110227
6f57977b6f9e Update email of Roland Winkler <winkler@gnu.org>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106815
diff changeset
5 ;; Author: Roland Winkler <winkler@gnu.org>
93212
134b2dc25692 proced.el: New file.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff changeset
6 ;; Keywords: Processes, Unix
134b2dc25692 proced.el: New file.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff changeset
7
93213
f51aae2fc6a4 Update copyright.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 93212
diff changeset
8 ;; This file is part of GNU Emacs.
93212
134b2dc25692 proced.el: New file.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff changeset
9
94678
ee5932bf781d Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 94621
diff changeset
10 ;; GNU Emacs is free software: you can redistribute it and/or modify
93213
f51aae2fc6a4 Update copyright.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 93212
diff changeset
11 ;; it under the terms of the GNU General Public License as published by
94678
ee5932bf781d Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 94621
diff changeset
12 ;; the Free Software Foundation, either version 3 of the License, or
ee5932bf781d Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 94621
diff changeset
13 ;; (at your option) any later version.
93213
f51aae2fc6a4 Update copyright.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 93212
diff changeset
14
f51aae2fc6a4 Update copyright.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 93212
diff changeset
15 ;; GNU Emacs is distributed in the hope that it will be useful,
f51aae2fc6a4 Update copyright.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 93212
diff changeset
16 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
f51aae2fc6a4 Update copyright.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 93212
diff changeset
17 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
f51aae2fc6a4 Update copyright.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 93212
diff changeset
18 ;; GNU General Public License for more details.
93212
134b2dc25692 proced.el: New file.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff changeset
19
134b2dc25692 proced.el: New file.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff changeset
20 ;; You should have received a copy of the GNU General Public License
94678
ee5932bf781d Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 94621
diff changeset
21 ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
93212
134b2dc25692 proced.el: New file.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff changeset
22
134b2dc25692 proced.el: New file.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff changeset
23 ;;; Commentary:
134b2dc25692 proced.el: New file.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff changeset
24
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
25 ;; Proced makes an Emacs buffer containing a listing of the current
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
26 ;; system processes. You can use the normal Emacs commands to move around
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
27 ;; in this buffer, and special Proced commands to operate on the processes
98162
d5c5ea23d8ea (proced-sort-header): New face.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98064
diff changeset
28 ;; listed. See `proced-mode' for getting started.
93212
134b2dc25692 proced.el: New file.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff changeset
29 ;;
94063
ab8c45d22418 (proced-command-alist): Remove sort column.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 93248
diff changeset
30 ;; To do:
98162
d5c5ea23d8ea (proced-sort-header): New face.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98064
diff changeset
31 ;; - interactive temporary customizability of flags in `proced-grammar-alist'
97522
ce7e3551dd0e (proced-signal-list): Add POSIX 1003.1-2001 signals.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97317
diff changeset
32 ;; - allow "sudo kill PID", "renice PID"
98162
d5c5ea23d8ea (proced-sort-header): New face.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98064
diff changeset
33 ;;
100421
0b3bb7c982eb (proced-auto-update-interval): Renamed from proced-timer-interval.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 99735
diff changeset
34 ;; Thoughts and Ideas
102205
0f4ba7f17aa0 Rename `system-process-attributes' to `process-attributes'
Miles Bader <miles@gnu.org>
parents: 101880
diff changeset
35 ;; - Currently, `process-attributes' returns the list of
100421
0b3bb7c982eb (proced-auto-update-interval): Renamed from proced-timer-interval.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 99735
diff changeset
36 ;; command-line arguments of a process as one concatenated string.
0b3bb7c982eb (proced-auto-update-interval): Renamed from proced-timer-interval.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 99735
diff changeset
37 ;; This format is compatible with `shell-command'. Also, under
0b3bb7c982eb (proced-auto-update-interval): Renamed from proced-timer-interval.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 99735
diff changeset
38 ;; MS-Windows, the command-line arguments are actually stored as a
0b3bb7c982eb (proced-auto-update-interval): Renamed from proced-timer-interval.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 99735
diff changeset
39 ;; single string, so that it is impossible to reverse-engineer it back
102205
0f4ba7f17aa0 Rename `system-process-attributes' to `process-attributes'
Miles Bader <miles@gnu.org>
parents: 101880
diff changeset
40 ;; into separate arguments. Alternatively, `process-attributes'
100421
0b3bb7c982eb (proced-auto-update-interval): Renamed from proced-timer-interval.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 99735
diff changeset
41 ;; could (try to) return a list of strings that correspond to individual
0b3bb7c982eb (proced-auto-update-interval): Renamed from proced-timer-interval.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 99735
diff changeset
42 ;; command-line arguments. Then one could feed such a list of
0b3bb7c982eb (proced-auto-update-interval): Renamed from proced-timer-interval.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 99735
diff changeset
43 ;; command-line arguments into `call-process' or `start-process'.
0b3bb7c982eb (proced-auto-update-interval): Renamed from proced-timer-interval.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 99735
diff changeset
44 ;; Are there real-world applications when such a feature would be useful?
0b3bb7c982eb (proced-auto-update-interval): Renamed from proced-timer-interval.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 99735
diff changeset
45 ;; What about something like `proced-restart-pid'?
93212
134b2dc25692 proced.el: New file.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff changeset
46
134b2dc25692 proced.el: New file.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff changeset
47 ;;; Code:
134b2dc25692 proced.el: New file.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff changeset
48
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
49 (require 'time-date) ; for `with-decoded-time-value'
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
50
93212
134b2dc25692 proced.el: New file.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff changeset
51 (defgroup proced nil
134b2dc25692 proced.el: New file.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff changeset
52 "Proced mode."
134b2dc25692 proced.el: New file.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff changeset
53 :group 'processes
134b2dc25692 proced.el: New file.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff changeset
54 :group 'unix
134b2dc25692 proced.el: New file.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff changeset
55 :prefix "proced-")
134b2dc25692 proced.el: New file.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff changeset
56
94063
ab8c45d22418 (proced-command-alist): Remove sort column.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 93248
diff changeset
57 (defcustom proced-signal-function 'signal-process
ab8c45d22418 (proced-command-alist): Remove sort column.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 93248
diff changeset
58 "Name of signal function.
ab8c45d22418 (proced-command-alist): Remove sort column.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 93248
diff changeset
59 It can be an elisp function (usually `signal-process') or a string specifying
ab8c45d22418 (proced-command-alist): Remove sort column.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 93248
diff changeset
60 the external command (usually \"kill\")."
93212
134b2dc25692 proced.el: New file.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff changeset
61 :group 'proced
94063
ab8c45d22418 (proced-command-alist): Remove sort column.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 93248
diff changeset
62 :type '(choice (function :tag "function")
ab8c45d22418 (proced-command-alist): Remove sort column.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 93248
diff changeset
63 (string :tag "command")))
93212
134b2dc25692 proced.el: New file.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff changeset
64
134b2dc25692 proced.el: New file.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff changeset
65 (defcustom proced-signal-list
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
66 '( ;; signals supported on all POSIX compliant systems
104721
368dc1e64a84 (proced-signal-list): Make it an alist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103028
diff changeset
67 ("HUP" . " (1. Hangup)")
368dc1e64a84 (proced-signal-list): Make it an alist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103028
diff changeset
68 ("INT" . " (2. Terminal interrupt)")
368dc1e64a84 (proced-signal-list): Make it an alist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103028
diff changeset
69 ("QUIT" . " (3. Terminal quit)")
368dc1e64a84 (proced-signal-list): Make it an alist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103028
diff changeset
70 ("ABRT" . " (6. Process abort)")
368dc1e64a84 (proced-signal-list): Make it an alist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103028
diff changeset
71 ("KILL" . " (9. Kill - cannot be caught or ignored)")
368dc1e64a84 (proced-signal-list): Make it an alist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103028
diff changeset
72 ("ALRM" . " (14. Alarm Clock)")
368dc1e64a84 (proced-signal-list): Make it an alist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103028
diff changeset
73 ("TERM" . " (15. Termination)")
97522
ce7e3551dd0e (proced-signal-list): Add POSIX 1003.1-2001 signals.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97317
diff changeset
74 ;; POSIX 1003.1-2001
ce7e3551dd0e (proced-signal-list): Add POSIX 1003.1-2001 signals.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97317
diff changeset
75 ;; Which systems do not support these signals so that we can
ce7e3551dd0e (proced-signal-list): Add POSIX 1003.1-2001 signals.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97317
diff changeset
76 ;; exclude them from `proced-signal-list'?
104721
368dc1e64a84 (proced-signal-list): Make it an alist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103028
diff changeset
77 ("CONT" . " (Continue executing)")
368dc1e64a84 (proced-signal-list): Make it an alist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103028
diff changeset
78 ("STOP" . " (Stop executing / pause - cannot be caught or ignored)")
368dc1e64a84 (proced-signal-list): Make it an alist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103028
diff changeset
79 ("TSTP" . " (Terminal stop / pause)"))
93212
134b2dc25692 proced.el: New file.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff changeset
80 "List of signals, used for minibuffer completion."
134b2dc25692 proced.el: New file.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff changeset
81 :group 'proced
104721
368dc1e64a84 (proced-signal-list): Make it an alist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103028
diff changeset
82 :type '(repeat (cons (string :tag "signal name")
368dc1e64a84 (proced-signal-list): Make it an alist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103028
diff changeset
83 (string :tag "description"))))
93212
134b2dc25692 proced.el: New file.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff changeset
84
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
85 ;; For which attributes can we use a fixed width of the output field?
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
86 ;; A fixed width speeds up formatting, yet it can make
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
87 ;; `proced-grammar-alist' system-dependent.
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
88 ;; (If proced runs like top(1) we want it to be fast.)
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
89 ;;
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
90 ;; If it is impossible / unlikely that an attribute has the same value
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
91 ;; for two processes, then sorting can be based on one ordinary (fast)
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
92 ;; predicate like `<'. Otherwise, a list of proced predicates can be used
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
93 ;; to refine the sort.
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
94 ;;
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
95 ;; It would be neat if one could temporarily override the following
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
96 ;; predefined rules.
98249
538f59dc1be8 (proced-grammar-alist, proced-custom-attributes)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98172
diff changeset
97 (defcustom proced-grammar-alist
102205
0f4ba7f17aa0 Rename `system-process-attributes' to `process-attributes'
Miles Bader <miles@gnu.org>
parents: 101880
diff changeset
98 '( ;; attributes defined in `process-attributes'
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
99 (euid "EUID" "%d" right proced-< nil (euid pid) (nil t nil))
104721
368dc1e64a84 (proced-signal-list): Make it an alist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103028
diff changeset
100 (user "User" nil left proced-string-lessp nil (user pid) (nil t nil))
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
101 (egid "EGID" "%d" right proced-< nil (egid euid pid) (nil t nil))
104721
368dc1e64a84 (proced-signal-list): Make it an alist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103028
diff changeset
102 (group "Group" nil left proced-string-lessp nil (group user pid) (nil t nil))
368dc1e64a84 (proced-signal-list): Make it an alist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103028
diff changeset
103 (comm "Command" nil left proced-string-lessp nil (comm pid) (nil t nil))
368dc1e64a84 (proced-signal-list): Make it an alist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103028
diff changeset
104 (state "Stat" nil left proced-string-lessp nil (state pid) (nil t nil))
100422
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
105 (ppid "PPID" "%d" right proced-< nil (ppid pid)
100847
883cbe72dc04 (proced-grammar-alist): Refiner can be a list (function help-echo)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100763
diff changeset
106 ((lambda (ppid) (proced-filter-parents proced-process-alist ppid))
100422
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
107 "refine to process parents"))
104721
368dc1e64a84 (proced-signal-list): Make it an alist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103028
diff changeset
108 (pgrp "PGrp" "%d" right proced-< nil (pgrp euid pid) (nil t nil))
368dc1e64a84 (proced-signal-list): Make it an alist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103028
diff changeset
109 (sess "Sess" "%d" right proced-< nil (sess pid) (nil t nil))
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
110 (ttname "TTY" proced-format-ttname left proced-string-lessp nil (ttname pid) (nil t nil))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
111 (tpgid "TPGID" "%d" right proced-< nil (tpgid pid) (nil t nil))
104721
368dc1e64a84 (proced-signal-list): Make it an alist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103028
diff changeset
112 (minflt "MinFlt" "%d" right proced-< nil (minflt pid) (nil t t))
368dc1e64a84 (proced-signal-list): Make it an alist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103028
diff changeset
113 (majflt "MajFlt" "%d" right proced-< nil (majflt pid) (nil t t))
368dc1e64a84 (proced-signal-list): Make it an alist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103028
diff changeset
114 (cminflt "CMinFlt" "%d" right proced-< nil (cminflt pid) (nil t t))
368dc1e64a84 (proced-signal-list): Make it an alist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103028
diff changeset
115 (cmajflt "CMajFlt" "%d" right proced-< nil (cmajflt pid) (nil t t))
368dc1e64a84 (proced-signal-list): Make it an alist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103028
diff changeset
116 (utime "UTime" proced-format-time right proced-time-lessp t (utime pid) (nil t t))
368dc1e64a84 (proced-signal-list): Make it an alist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103028
diff changeset
117 (stime "STime" proced-format-time right proced-time-lessp t (stime pid) (nil t t))
368dc1e64a84 (proced-signal-list): Make it an alist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103028
diff changeset
118 (time "Time" proced-format-time right proced-time-lessp t (time pid) (nil t t))
368dc1e64a84 (proced-signal-list): Make it an alist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103028
diff changeset
119 (cutime "CUTime" proced-format-time right proced-time-lessp t (cutime pid) (nil t t))
368dc1e64a84 (proced-signal-list): Make it an alist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103028
diff changeset
120 (cstime "CSTime" proced-format-time right proced-time-lessp t (cstime pid) (nil t t))
368dc1e64a84 (proced-signal-list): Make it an alist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103028
diff changeset
121 (ctime "CTime" proced-format-time right proced-time-lessp t (ctime pid) (nil t t))
368dc1e64a84 (proced-signal-list): Make it an alist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103028
diff changeset
122 (pri "Pr" "%d" right proced-< t (pri pid) (nil t t))
368dc1e64a84 (proced-signal-list): Make it an alist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103028
diff changeset
123 (nice "Ni" "%3d" 3 proced-< t (nice pid) (t t nil))
368dc1e64a84 (proced-signal-list): Make it an alist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103028
diff changeset
124 (thcount "THCount" "%d" right proced-< t (thcount pid) (nil t t))
368dc1e64a84 (proced-signal-list): Make it an alist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103028
diff changeset
125 (start "Start" proced-format-start 6 proced-time-lessp nil (start pid) (t t nil))
368dc1e64a84 (proced-signal-list): Make it an alist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103028
diff changeset
126 (vsize "VSize" "%d" right proced-< t (vsize pid) (nil t t))
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
127 (rss "RSS" "%d" right proced-< t (rss pid) (nil t t))
104721
368dc1e64a84 (proced-signal-list): Make it an alist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103028
diff changeset
128 (etime "ETime" proced-format-time right proced-time-lessp t (etime pid) (nil t t))
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
129 (pcpu "%CPU" "%.1f" right proced-< t (pcpu pid) (nil t t))
104721
368dc1e64a84 (proced-signal-list): Make it an alist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103028
diff changeset
130 (pmem "%Mem" "%.1f" right proced-< t (pmem pid) (nil t t))
368dc1e64a84 (proced-signal-list): Make it an alist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103028
diff changeset
131 (args "Args" proced-format-args left proced-string-lessp nil (args pid) (nil t nil))
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
132 ;;
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
133 ;; attributes defined by proced (see `proced-process-attributes')
100422
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
134 (pid "PID" "%d" right proced-< nil (pid)
100847
883cbe72dc04 (proced-grammar-alist): Refiner can be a list (function help-echo)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100763
diff changeset
135 ((lambda (ppid) (proced-filter-children proced-process-alist ppid))
100422
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
136 "refine to process children"))
100735
8ec0632b600c (proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100570
diff changeset
137 ;; process tree
104721
368dc1e64a84 (proced-signal-list): Make it an alist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103028
diff changeset
138 (tree "Tree" proced-format-tree left nil nil nil nil))
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
139 "Alist of rules for handling Proced attributes.
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
140
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
141 Each element has the form
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
142
100422
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
143 (KEY NAME FORMAT JUSTIFY PREDICATE REVERSE SORT-SCHEME REFINER).
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
144
98249
538f59dc1be8 (proced-grammar-alist, proced-custom-attributes)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98172
diff changeset
145 Symbol KEY is the car of a process attribute.
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
146
98249
538f59dc1be8 (proced-grammar-alist, proced-custom-attributes)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98172
diff changeset
147 String NAME appears in the header line.
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
148
100570
496de5bd1f6d * proced.el (proced-grammar-alist): Doc fix.
Juanma Barranquero <lekktu@gmail.com>
parents: 100424
diff changeset
149 FORMAT specifies the format for displaying the attribute values. It can
496de5bd1f6d * proced.el (proced-grammar-alist): Doc fix.
Juanma Barranquero <lekktu@gmail.com>
parents: 100424
diff changeset
150 be a string passed to `format'. It can be a function called with one
496de5bd1f6d * proced.el (proced-grammar-alist): Doc fix.
Juanma Barranquero <lekktu@gmail.com>
parents: 100424
diff changeset
151 argument, the value of the attribute. The value nil means take as is.
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
152
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
153 If JUSTIFY is an integer, its modulus gives the width of the attribute
98162
d5c5ea23d8ea (proced-sort-header): New face.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98064
diff changeset
154 values formatted with FORMAT. If JUSTIFY is positive, NAME appears
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
155 right-justified, otherwise it appears left-justified. If JUSTIFY is 'left
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
156 or 'right, the field width is calculated from all field values in the listing.
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
157 If JUSTIFY is 'left, the field values are formatted left-justified and
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
158 right-justified otherwise.
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
159
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
160 PREDICATE is the predicate for sorting and filtering the process listing
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
161 based on attribute KEY. PREDICATE takes two arguments P1 and P2,
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
162 the corresponding attribute values of two processes. PREDICATE should
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
163 return 'equal if P1 has same rank like P2. Any other non-nil value says
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
164 that P1 is \"less than\" P2, or nil if not.
100735
8ec0632b600c (proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100570
diff changeset
165 If PREDICATE is nil the attribute cannot be sorted.
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
166
100422
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
167 PREDICATE defines an ascending sort order. REVERSE is non-nil if the sort
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
168 order is descending.
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
169
98162
d5c5ea23d8ea (proced-sort-header): New face.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98064
diff changeset
170 SORT-SCHEME is a list (KEY1 KEY2 ...) defining a hierarchy of rules
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
171 for sorting the process listing. KEY1, KEY2, ... are KEYs appearing as cars
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
172 of `proced-grammar-alist'. First the PREDICATE of KEY1 is evaluated.
98162
d5c5ea23d8ea (proced-sort-header): New face.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98064
diff changeset
173 If it yields non-equal, it defines the sort order for the corresponding
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
174 processes. If it evaluates to 'equal the PREDICATE of KEY2 is evaluated, etc.
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
175
100422
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
176 REFINER can be a list of flags (LESS-B EQUAL-B LARGER-B) used by the command
98162
d5c5ea23d8ea (proced-sort-header): New face.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98064
diff changeset
177 `proced-refine' (see there) to refine the listing based on attribute KEY.
d5c5ea23d8ea (proced-sort-header): New face.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98064
diff changeset
178 This command compares the value of attribute KEY of every process with
d5c5ea23d8ea (proced-sort-header): New face.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98064
diff changeset
179 the value of attribute KEY of the process at the position of point
d5c5ea23d8ea (proced-sort-header): New face.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98064
diff changeset
180 using PREDICATE.
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
181 If PREDICATE yields non-nil, the process is accepted if LESS-B is non-nil.
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
182 If PREDICATE yields 'equal, the process is accepted if EQUAL-B is non-nil.
100422
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
183 If PREDICATE yields nil, the process is accepted if LARGER-B is non-nil.
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
184
100847
883cbe72dc04 (proced-grammar-alist): Refiner can be a list (function help-echo)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100763
diff changeset
185 REFINER can also be a list (FUNCTION HELP-ECHO).
100422
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
186 FUNCTION is called with one argument, the PID of the process at the position
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
187 of point. The function must return a list of PIDs that is used for the refined
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
188 listing. HELP-ECHO is a string that is shown when mouse is over this field.
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
189
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
190 If REFINER is nil no refinement is done."
98249
538f59dc1be8 (proced-grammar-alist, proced-custom-attributes)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98172
diff changeset
191 :group 'proced
538f59dc1be8 (proced-grammar-alist, proced-custom-attributes)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98172
diff changeset
192 :type '(repeat (list :tag "Attribute"
538f59dc1be8 (proced-grammar-alist, proced-custom-attributes)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98172
diff changeset
193 (symbol :tag "Key")
538f59dc1be8 (proced-grammar-alist, proced-custom-attributes)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98172
diff changeset
194 (string :tag "Header")
538f59dc1be8 (proced-grammar-alist, proced-custom-attributes)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98172
diff changeset
195 (choice :tag "Format"
538f59dc1be8 (proced-grammar-alist, proced-custom-attributes)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98172
diff changeset
196 (const :tag "None" nil)
538f59dc1be8 (proced-grammar-alist, proced-custom-attributes)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98172
diff changeset
197 (string :tag "Format String")
538f59dc1be8 (proced-grammar-alist, proced-custom-attributes)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98172
diff changeset
198 (function :tag "Formatting Function"))
538f59dc1be8 (proced-grammar-alist, proced-custom-attributes)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98172
diff changeset
199 (choice :tag "Justification"
538f59dc1be8 (proced-grammar-alist, proced-custom-attributes)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98172
diff changeset
200 (const :tag "left" left)
538f59dc1be8 (proced-grammar-alist, proced-custom-attributes)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98172
diff changeset
201 (const :tag "right" right)
538f59dc1be8 (proced-grammar-alist, proced-custom-attributes)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98172
diff changeset
202 (integer :tag "width"))
100735
8ec0632b600c (proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100570
diff changeset
203 (choice :tag "Predicate"
8ec0632b600c (proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100570
diff changeset
204 (const :tag "None" nil)
8ec0632b600c (proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100570
diff changeset
205 (function :tag "Function"))
100422
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
206 (boolean :tag "Descending Sort Order")
98249
538f59dc1be8 (proced-grammar-alist, proced-custom-attributes)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98172
diff changeset
207 (repeat :tag "Sort Scheme" (symbol :tag "Key"))
100422
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
208 (choice :tag "Refiner"
100735
8ec0632b600c (proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100570
diff changeset
209 (const :tag "None" nil)
100847
883cbe72dc04 (proced-grammar-alist): Refiner can be a list (function help-echo)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100763
diff changeset
210 (list (function :tag "Refinement Function")
883cbe72dc04 (proced-grammar-alist): Refiner can be a list (function help-echo)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100763
diff changeset
211 (string :tag "Help echo"))
100422
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
212 (list :tag "Refine Flags"
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
213 (boolean :tag "Less")
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
214 (boolean :tag "Equal")
100847
883cbe72dc04 (proced-grammar-alist): Refiner can be a list (function help-echo)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100763
diff changeset
215 (boolean :tag "Larger"))))))
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
216
98249
538f59dc1be8 (proced-grammar-alist, proced-custom-attributes)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98172
diff changeset
217 (defcustom proced-custom-attributes nil
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
218 "List of functions defining custom attributes.
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
219 This variable extends the functionality of `proced-process-attributes'.
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
220 Each function is called with one argument, the list of attributes
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
221 of a system process. It returns a cons cell of the form (KEY . VALUE)
102205
0f4ba7f17aa0 Rename `system-process-attributes' to `process-attributes'
Miles Bader <miles@gnu.org>
parents: 101880
diff changeset
222 like `process-attributes'. This cons cell is appended to the list
98249
538f59dc1be8 (proced-grammar-alist, proced-custom-attributes)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98172
diff changeset
223 returned by `proced-process-attributes'.
538f59dc1be8 (proced-grammar-alist, proced-custom-attributes)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98172
diff changeset
224 If the function returns nil, the value is ignored."
538f59dc1be8 (proced-grammar-alist, proced-custom-attributes)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98172
diff changeset
225 :group 'proced
538f59dc1be8 (proced-grammar-alist, proced-custom-attributes)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98172
diff changeset
226 :type '(repeat (function :tag "Attribute")))
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
227
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
228 ;; Formatting and sorting rules are defined "per attribute". If formatting
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
229 ;; and / or sorting should use more than one attribute, it appears more
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
230 ;; transparent to define a new derived attribute, so that formatting and
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
231 ;; sorting can use them consistently. (Are there exceptions to this rule?
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
232 ;; Would it be advantageous to have yet more general methods available?)
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
233 ;; Sorting can also be based on attributes that are invisible in the listing.
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
234
98249
538f59dc1be8 (proced-grammar-alist, proced-custom-attributes)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98172
diff changeset
235 (defcustom proced-format-alist
100735
8ec0632b600c (proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100570
diff changeset
236 '((short user pid tree pcpu pmem start time (args comm))
8ec0632b600c (proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100570
diff changeset
237 (medium user pid tree pcpu pmem vsize rss ttname state start time (args comm))
8ec0632b600c (proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100570
diff changeset
238 (long user euid group pid tree pri nice pcpu pmem vsize rss ttname state
100422
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
239 start time (args comm))
100735
8ec0632b600c (proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100570
diff changeset
240 (verbose user euid group egid pid ppid tree pgrp sess pri nice pcpu pmem
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
241 state thcount vsize rss ttname tpgid minflt majflt cminflt cmajflt
100422
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
242 start time utime stime ctime cutime cstime etime (args comm)))
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
243 "Alist of formats of listing.
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
244 The car of each element is a symbol, the name of the format.
100422
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
245 The cdr is a list of attribute keys appearing in `proced-grammar-alist'.
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
246 An element of this list may also be a list of attribute keys that specifies
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
247 alternatives. If the first attribute is absent for a process, use the second
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
248 one, etc."
98249
538f59dc1be8 (proced-grammar-alist, proced-custom-attributes)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98172
diff changeset
249 :group 'proced
538f59dc1be8 (proced-grammar-alist, proced-custom-attributes)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98172
diff changeset
250 :type '(alist :key-type (symbol :tag "Format Name")
100422
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
251 :value-type (repeat :tag "Keys"
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
252 (choice (symbol :tag "")
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
253 (repeat :tag "Alternative Keys"
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
254 (symbol :tag ""))))))
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
255
98249
538f59dc1be8 (proced-grammar-alist, proced-custom-attributes)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98172
diff changeset
256 (defcustom proced-format 'short
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
257 "Current format of Proced listing.
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
258 It can be the car of an element of `proced-format-alist'.
98249
538f59dc1be8 (proced-grammar-alist, proced-custom-attributes)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98172
diff changeset
259 It can also be a list of keys appearing in `proced-grammar-alist'."
538f59dc1be8 (proced-grammar-alist, proced-custom-attributes)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98172
diff changeset
260 :group 'proced
538f59dc1be8 (proced-grammar-alist, proced-custom-attributes)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98172
diff changeset
261 :type '(choice (symbol :tag "Format Name")
538f59dc1be8 (proced-grammar-alist, proced-custom-attributes)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98172
diff changeset
262 (repeat :tag "Keys" (symbol :tag ""))))
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
263 (make-variable-buffer-local 'proced-format)
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
264
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
265 ;; FIXME: is there a better name for filter `user' that does not coincide
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
266 ;; with an attribute key?
98249
538f59dc1be8 (proced-grammar-alist, proced-custom-attributes)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98172
diff changeset
267 (defcustom proced-filter-alist
106391
07c948701330 (proced-filter-alist): Use regexp-quote.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 105571
diff changeset
268 `((user (user . ,(concat "\\`" (regexp-quote (user-real-login-name)) "\\'")))
07c948701330 (proced-filter-alist): Use regexp-quote.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 105571
diff changeset
269 (user-running (user . ,(concat "\\`" (regexp-quote (user-real-login-name)) "\\'"))
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
270 (state . "\\`[Rr]\\'"))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
271 (all)
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
272 (all-running (state . "\\`[Rr]\\'"))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
273 (emacs (fun-all . (lambda (list)
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
274 (proced-filter-children list ,(emacs-pid))))))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
275 "Alist of process filters.
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
276 The car of each element is a symbol, the name of the filter.
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
277 The cdr is a list of elementary filters that are applied to every process.
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
278 A process is displayed if it passes all elementary filters of a selected
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
279 filter.
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
280
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
281 An elementary filter can be one of the following:
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
282 \(KEY . REGEXP) If value of attribute KEY matches REGEXP,
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
283 accept this process.
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
284 \(KEY . FUN) Apply function FUN to attribute KEY. Accept this process,
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
285 if FUN returns non-nil.
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
286 \(function . FUN) For each process, apply function FUN to list of attributes
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
287 of each. Accept the process if FUN returns non-nil.
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
288 \(fun-all . FUN) Apply function FUN to entire process list.
98249
538f59dc1be8 (proced-grammar-alist, proced-custom-attributes)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98172
diff changeset
289 FUN must return the filtered list."
538f59dc1be8 (proced-grammar-alist, proced-custom-attributes)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98172
diff changeset
290 :group 'proced
538f59dc1be8 (proced-grammar-alist, proced-custom-attributes)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98172
diff changeset
291 :type '(repeat (cons :tag "Filter"
538f59dc1be8 (proced-grammar-alist, proced-custom-attributes)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98172
diff changeset
292 (symbol :tag "Filter Name")
538f59dc1be8 (proced-grammar-alist, proced-custom-attributes)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98172
diff changeset
293 (repeat :tag "Filters"
538f59dc1be8 (proced-grammar-alist, proced-custom-attributes)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98172
diff changeset
294 (choice (cons :tag "Key . Regexp" (symbol :tag "Key") regexp)
538f59dc1be8 (proced-grammar-alist, proced-custom-attributes)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98172
diff changeset
295 (cons :tag "Key . Function" (symbol :tag "Key") function)
538f59dc1be8 (proced-grammar-alist, proced-custom-attributes)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98172
diff changeset
296 (cons :tag "Function" (const :tag "Key: function" function) function)
538f59dc1be8 (proced-grammar-alist, proced-custom-attributes)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98172
diff changeset
297 (cons :tag "Fun-all" (const :tag "Key: fun-all" fun-all) function))))))
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
298
98249
538f59dc1be8 (proced-grammar-alist, proced-custom-attributes)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98172
diff changeset
299 (defcustom proced-filter 'user
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
300 "Current filter of proced listing.
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
301 It can be the car of an element of `proced-filter-alist'.
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
302 It can also be a list of elementary filters as in the cdrs of the elements
98249
538f59dc1be8 (proced-grammar-alist, proced-custom-attributes)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98172
diff changeset
303 of `proced-filter-alist'."
538f59dc1be8 (proced-grammar-alist, proced-custom-attributes)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98172
diff changeset
304 :group 'proced
538f59dc1be8 (proced-grammar-alist, proced-custom-attributes)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98172
diff changeset
305 :type '(choice (symbol :tag "Filter Name")
538f59dc1be8 (proced-grammar-alist, proced-custom-attributes)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98172
diff changeset
306 (repeat :tag "Filters"
538f59dc1be8 (proced-grammar-alist, proced-custom-attributes)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98172
diff changeset
307 (choice (cons :tag "Key . Regexp" (symbol :tag "Key") regexp)
538f59dc1be8 (proced-grammar-alist, proced-custom-attributes)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98172
diff changeset
308 (cons :tag "Key . Function" (symbol :tag "Key") function)
538f59dc1be8 (proced-grammar-alist, proced-custom-attributes)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98172
diff changeset
309 (cons :tag "Function" (const :tag "Key: function" function) function)
538f59dc1be8 (proced-grammar-alist, proced-custom-attributes)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98172
diff changeset
310 (cons :tag "Fun-all" (const :tag "Key: fun-all" fun-all) function)))))
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
311 (make-variable-buffer-local 'proced-filter)
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
312
98249
538f59dc1be8 (proced-grammar-alist, proced-custom-attributes)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98172
diff changeset
313 (defcustom proced-sort 'pcpu
98162
d5c5ea23d8ea (proced-sort-header): New face.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98064
diff changeset
314 "Current sort scheme for proced listing.
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
315 It must be the KEY of an element of `proced-grammar-alist'.
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
316 It can also be a list of KEYs as in the SORT-SCHEMEs of the elements
98249
538f59dc1be8 (proced-grammar-alist, proced-custom-attributes)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98172
diff changeset
317 of `proced-grammar-alist'."
538f59dc1be8 (proced-grammar-alist, proced-custom-attributes)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98172
diff changeset
318 :group 'proced
538f59dc1be8 (proced-grammar-alist, proced-custom-attributes)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98172
diff changeset
319 :type '(choice (symbol :tag "Sort Scheme")
538f59dc1be8 (proced-grammar-alist, proced-custom-attributes)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98172
diff changeset
320 (repeat :tag "Key List" (symbol :tag "Key"))))
103028
15955ebb1aa7 (proced-sort): Declare it buffer-local.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 102205
diff changeset
321 (make-variable-buffer-local 'proced-sort)
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
322
100422
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
323 (defcustom proced-descend t
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
324 "Non-nil if proced listing is sorted in descending order."
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
325 :group 'proced
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
326 :type '(boolean :tag "Descending Sort Order"))
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
327 (make-variable-buffer-local 'proced-descend)
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
328
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
329 (defcustom proced-goal-attribute 'args
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
330 "If non-nil, key of the attribute that defines the `goal-column'."
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
331 :group 'proced
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
332 :type '(choice (const :tag "none" nil)
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
333 (symbol :tag "key")))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
334
100421
0b3bb7c982eb (proced-auto-update-interval): Renamed from proced-timer-interval.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 99735
diff changeset
335 (defcustom proced-auto-update-interval 5
98249
538f59dc1be8 (proced-grammar-alist, proced-custom-attributes)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98172
diff changeset
336 "Time interval in seconds for auto updating Proced buffers."
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
337 :group 'proced
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
338 :type 'integer)
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
339
100421
0b3bb7c982eb (proced-auto-update-interval): Renamed from proced-timer-interval.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 99735
diff changeset
340 (defcustom proced-auto-update-flag nil
98162
d5c5ea23d8ea (proced-sort-header): New face.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98064
diff changeset
341 "Non-nil for auto update of a Proced buffer.
100421
0b3bb7c982eb (proced-auto-update-interval): Renamed from proced-timer-interval.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 99735
diff changeset
342 Can be changed interactively via `proced-toggle-auto-update'."
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
343 :group 'proced
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
344 :type 'boolean)
100421
0b3bb7c982eb (proced-auto-update-interval): Renamed from proced-timer-interval.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 99735
diff changeset
345 (make-variable-buffer-local 'proced-auto-update-flag)
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
346
100735
8ec0632b600c (proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100570
diff changeset
347 (defcustom proced-tree-flag nil
100763
6a68c7a91e31 * proced.el (proced-tree-flag): Fix typo in docstring.
Juanma Barranquero <lekktu@gmail.com>
parents: 100752
diff changeset
348 "Non-nil for display of Proced buffer as process tree."
100735
8ec0632b600c (proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100570
diff changeset
349 :group 'proced
8ec0632b600c (proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100570
diff changeset
350 :type 'boolean)
8ec0632b600c (proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100570
diff changeset
351 (make-variable-buffer-local 'proced-tree-flag)
8ec0632b600c (proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100570
diff changeset
352
100847
883cbe72dc04 (proced-grammar-alist): Refiner can be a list (function help-echo)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100763
diff changeset
353 (defcustom proced-post-display-hook nil
883cbe72dc04 (proced-grammar-alist): Refiner can be a list (function help-echo)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100763
diff changeset
354 "Normal hook run after displaying or updating a Proced buffer.
883cbe72dc04 (proced-grammar-alist): Refiner can be a list (function help-echo)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100763
diff changeset
355 May be used to adapt the window size via `fit-window-to-buffer'."
883cbe72dc04 (proced-grammar-alist): Refiner can be a list (function help-echo)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100763
diff changeset
356 :type 'hook
883cbe72dc04 (proced-grammar-alist): Refiner can be a list (function help-echo)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100763
diff changeset
357 :options '(fit-window-to-buffer)
883cbe72dc04 (proced-grammar-alist): Refiner can be a list (function help-echo)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100763
diff changeset
358 :group 'proced)
883cbe72dc04 (proced-grammar-alist): Refiner can be a list (function help-echo)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100763
diff changeset
359
101880
18c7189fe029 (proced-after-send-signal-hook): Use defcustom.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100908
diff changeset
360 (defcustom proced-after-send-signal-hook nil
18c7189fe029 (proced-after-send-signal-hook): Use defcustom.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100908
diff changeset
361 "Normal hook run after sending a signal to processes by `proced-send-signal'.
18c7189fe029 (proced-after-send-signal-hook): Use defcustom.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100908
diff changeset
362 May be used to revert the process listing."
18c7189fe029 (proced-after-send-signal-hook): Use defcustom.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100908
diff changeset
363 :type 'hook
18c7189fe029 (proced-after-send-signal-hook): Use defcustom.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100908
diff changeset
364 :options '(proced-revert)
18c7189fe029 (proced-after-send-signal-hook): Use defcustom.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100908
diff changeset
365 :group 'proced)
18c7189fe029 (proced-after-send-signal-hook): Use defcustom.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100908
diff changeset
366
95135
33ea0b47d336 (proced-goal-header-re): Renamed from proced-procname-column-regexp.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 94678
diff changeset
367 ;; Internal variables
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
368
100424
586161dec886 (proced-sort-interactive, proced-sort-pcpu)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100422
diff changeset
369 (defvar proced-available (not (null (list-system-processes)))
586161dec886 (proced-sort-interactive, proced-sort-pcpu)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100422
diff changeset
370 "Non-nil means Proced is known to work on this system.")
586161dec886 (proced-sort-interactive, proced-sort-pcpu)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100422
diff changeset
371
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
372 (defvar proced-process-alist nil
98162
d5c5ea23d8ea (proced-sort-header): New face.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98064
diff changeset
373 "Alist of processes displayed by Proced.
d5c5ea23d8ea (proced-sort-header): New face.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98064
diff changeset
374 The car of each element is the PID, and the cdr is a list of
d5c5ea23d8ea (proced-sort-header): New face.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98064
diff changeset
375 cons pairs, see `proced-process-attributes'.")
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
376 (make-variable-buffer-local 'proced-process-alist)
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
377
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
378 (defvar proced-sort-internal nil
100422
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
379 "Sort scheme for listing (internal format).
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
380 It is a list of lists (KEY PREDICATE REVERSE).")
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
381
93212
134b2dc25692 proced.el: New file.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff changeset
382 (defvar proced-marker-char ?* ; the answer is 42
100570
496de5bd1f6d * proced.el (proced-grammar-alist): Doc fix.
Juanma Barranquero <lekktu@gmail.com>
parents: 100424
diff changeset
383 "In Proced, the current mark character.")
93212
134b2dc25692 proced.el: New file.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff changeset
384
98172
87d64c3d48ac (proced-mark-face, proced-marked-face)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98162
diff changeset
385 ;; Faces and font-lock code taken from dired,
87d64c3d48ac (proced-mark-face, proced-marked-face)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98162
diff changeset
386 ;; but face variables are deprecated for new code.
93212
134b2dc25692 proced.el: New file.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff changeset
387 (defgroup proced-faces nil
134b2dc25692 proced.el: New file.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff changeset
388 "Faces used by Proced."
134b2dc25692 proced.el: New file.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff changeset
389 :group 'proced
134b2dc25692 proced.el: New file.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff changeset
390 :group 'faces)
134b2dc25692 proced.el: New file.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff changeset
391
134b2dc25692 proced.el: New file.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff changeset
392 (defface proced-mark
134b2dc25692 proced.el: New file.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff changeset
393 '((t (:inherit font-lock-constant-face)))
100570
496de5bd1f6d * proced.el (proced-grammar-alist): Doc fix.
Juanma Barranquero <lekktu@gmail.com>
parents: 100424
diff changeset
394 "Face used for Proced marks."
93212
134b2dc25692 proced.el: New file.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff changeset
395 :group 'proced-faces)
134b2dc25692 proced.el: New file.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff changeset
396
134b2dc25692 proced.el: New file.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff changeset
397 (defface proced-marked
134b2dc25692 proced.el: New file.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff changeset
398 '((t (:inherit font-lock-warning-face)))
134b2dc25692 proced.el: New file.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff changeset
399 "Face used for marked processes."
134b2dc25692 proced.el: New file.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff changeset
400 :group 'proced-faces)
134b2dc25692 proced.el: New file.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff changeset
401
98162
d5c5ea23d8ea (proced-sort-header): New face.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98064
diff changeset
402 (defface proced-sort-header
d5c5ea23d8ea (proced-sort-header): New face.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98064
diff changeset
403 '((t (:inherit font-lock-keyword-face)))
d5c5ea23d8ea (proced-sort-header): New face.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98064
diff changeset
404 "Face used for header of attribute used for sorting."
d5c5ea23d8ea (proced-sort-header): New face.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98064
diff changeset
405 :group 'proced-faces)
d5c5ea23d8ea (proced-sort-header): New face.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98064
diff changeset
406
93212
134b2dc25692 proced.el: New file.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff changeset
407 (defvar proced-re-mark "^[^ \n]"
134b2dc25692 proced.el: New file.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff changeset
408 "Regexp matching a marked line.
134b2dc25692 proced.el: New file.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff changeset
409 Important: the match ends just after the marker.")
134b2dc25692 proced.el: New file.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff changeset
410
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
411 (defvar proced-header-line nil
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
412 "Headers in Proced buffer as a string.")
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
413 (make-variable-buffer-local 'proced-header-line)
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
414
100752
3bd2bab6d80f (proced-temp-alist): Renamed from variable proced-children-alist.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100743
diff changeset
415 (defvar proced-temp-alist nil
3bd2bab6d80f (proced-temp-alist): Renamed from variable proced-children-alist.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100743
diff changeset
416 "Temporary alist (internal variable).")
100735
8ec0632b600c (proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100570
diff changeset
417
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
418 (defvar proced-process-tree nil
100735
8ec0632b600c (proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100570
diff changeset
419 "Proced process tree (internal variable).")
8ec0632b600c (proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100570
diff changeset
420
100847
883cbe72dc04 (proced-grammar-alist): Refiner can be a list (function help-echo)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100763
diff changeset
421 (defvar proced-tree-depth nil
883cbe72dc04 (proced-grammar-alist): Refiner can be a list (function help-echo)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100763
diff changeset
422 "Internal variable for depth of Proced process tree.")
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
423
100421
0b3bb7c982eb (proced-auto-update-interval): Renamed from proced-timer-interval.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 99735
diff changeset
424 (defvar proced-auto-update-timer nil
0b3bb7c982eb (proced-auto-update-interval): Renamed from proced-timer-interval.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 99735
diff changeset
425 "Stores if Proced auto update timer is already installed.")
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
426
98249
538f59dc1be8 (proced-grammar-alist, proced-custom-attributes)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98172
diff changeset
427 (defvar proced-log-buffer "*Proced log*"
538f59dc1be8 (proced-grammar-alist, proced-custom-attributes)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98172
diff changeset
428 "Name of Proced Log buffer.")
538f59dc1be8 (proced-grammar-alist, proced-custom-attributes)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98172
diff changeset
429
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
430 (defconst proced-help-string
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
431 "(n)ext, (p)revious, (m)ark, (u)nmark, (k)ill, (q)uit (type ? for more help)"
100570
496de5bd1f6d * proced.el (proced-grammar-alist): Doc fix.
Juanma Barranquero <lekktu@gmail.com>
parents: 100424
diff changeset
432 "Help string for Proced.")
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
433
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
434 (defconst proced-header-help-echo
98162
d5c5ea23d8ea (proced-sort-header): New face.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98064
diff changeset
435 "mouse-1, mouse-2: sort by attribute %s%s (%s)"
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
436 "Help string shown when mouse is over a sortable header.")
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
437
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
438 (defconst proced-field-help-echo
98162
d5c5ea23d8ea (proced-sort-header): New face.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98064
diff changeset
439 "mouse-2, RET: refine by attribute %s %s"
d5c5ea23d8ea (proced-sort-header): New face.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98064
diff changeset
440 "Help string shown when mouse is over a refinable field.")
93212
134b2dc25692 proced.el: New file.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff changeset
441
134b2dc25692 proced.el: New file.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff changeset
442 (defvar proced-font-lock-keywords
98172
87d64c3d48ac (proced-mark-face, proced-marked-face)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98162
diff changeset
443 `(;; (Any) proced marks.
87d64c3d48ac (proced-mark-face, proced-marked-face)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98162
diff changeset
444 (,proced-re-mark . 'proced-mark)
87d64c3d48ac (proced-mark-face, proced-marked-face)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98162
diff changeset
445 ;; Processes marked with `proced-marker-char'
87d64c3d48ac (proced-mark-face, proced-marked-face)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98162
diff changeset
446 ;; Should we make sure that only certain attributes are font-locked?
87d64c3d48ac (proced-mark-face, proced-marked-face)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98162
diff changeset
447 (,(concat "^[" (char-to-string proced-marker-char) "]")
87d64c3d48ac (proced-mark-face, proced-marked-face)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98162
diff changeset
448 ".+" (proced-move-to-goal-column) nil (0 'proced-marked))))
93212
134b2dc25692 proced.el: New file.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff changeset
449
134b2dc25692 proced.el: New file.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff changeset
450 (defvar proced-mode-map
134b2dc25692 proced.el: New file.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff changeset
451 (let ((km (make-sparse-keymap)))
95135
33ea0b47d336 (proced-goal-header-re): Renamed from proced-procname-column-regexp.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 94678
diff changeset
452 ;; moving
100743
9fcd5ffe18c5 (proced-mode-map): Bind " " to next-line instead of the
Juri Linkov <juri@jurta.org>
parents: 100735
diff changeset
453 (define-key km " " 'next-line)
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
454 (define-key km "n" 'next-line)
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
455 (define-key km "p" 'previous-line)
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
456 (define-key km "\C-n" 'next-line)
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
457 (define-key km "\C-p" 'previous-line)
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
458 (define-key km "\C-?" 'previous-line)
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
459 (define-key km [down] 'next-line)
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
460 (define-key km [up] 'previous-line)
95135
33ea0b47d336 (proced-goal-header-re): Renamed from proced-procname-column-regexp.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 94678
diff changeset
461 ;; marking
104976
5db88d7b996f (proced-mark-alt): Remove alias.
Glenn Morris <rgm@gnu.org>
parents: 104954
diff changeset
462 (define-key km "d" 'proced-mark) ; Dired compatibility ("delete")
93212
134b2dc25692 proced.el: New file.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff changeset
463 (define-key km "m" 'proced-mark)
104954
2a33efb3a1e3 (proced-mode-map): Prefer "m" for proced-mark.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 104877
diff changeset
464 (put 'proced-mark :advertised-binding "m")
93212
134b2dc25692 proced.el: New file.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff changeset
465 (define-key km "u" 'proced-unmark)
94063
ab8c45d22418 (proced-command-alist): Remove sort column.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 93248
diff changeset
466 (define-key km "\177" 'proced-unmark-backward)
95135
33ea0b47d336 (proced-goal-header-re): Renamed from proced-procname-column-regexp.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 94678
diff changeset
467 (define-key km "M" 'proced-mark-all)
93212
134b2dc25692 proced.el: New file.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff changeset
468 (define-key km "U" 'proced-unmark-all)
94063
ab8c45d22418 (proced-command-alist): Remove sort column.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 93248
diff changeset
469 (define-key km "t" 'proced-toggle-marks)
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
470 (define-key km "C" 'proced-mark-children)
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
471 (define-key km "P" 'proced-mark-parents)
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
472 ;; filtering
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
473 (define-key km "f" 'proced-filter-interactive)
98162
d5c5ea23d8ea (proced-sort-header): New face.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98064
diff changeset
474 (define-key km [mouse-2] 'proced-refine)
d5c5ea23d8ea (proced-sort-header): New face.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98064
diff changeset
475 (define-key km "\C-m" 'proced-refine)
95135
33ea0b47d336 (proced-goal-header-re): Renamed from proced-procname-column-regexp.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 94678
diff changeset
476 ;; sorting
94621
97585dd63d91 (proced-command-alist): Fix system-type values. Fix defcustom.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 94109
diff changeset
477 (define-key km "sc" 'proced-sort-pcpu)
97585dd63d91 (proced-command-alist): Fix system-type values. Fix defcustom.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 94109
diff changeset
478 (define-key km "sm" 'proced-sort-pmem)
97585dd63d91 (proced-command-alist): Fix system-type values. Fix defcustom.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 94109
diff changeset
479 (define-key km "sp" 'proced-sort-pid)
97585dd63d91 (proced-command-alist): Fix system-type values. Fix defcustom.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 94109
diff changeset
480 (define-key km "ss" 'proced-sort-start)
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
481 (define-key km "sS" 'proced-sort-interactive)
94621
97585dd63d91 (proced-command-alist): Fix system-type values. Fix defcustom.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 94109
diff changeset
482 (define-key km "st" 'proced-sort-time)
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
483 (define-key km "su" 'proced-sort-user)
98162
d5c5ea23d8ea (proced-sort-header): New face.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98064
diff changeset
484 ;; similar to `Buffer-menu-sort-by-column'
d5c5ea23d8ea (proced-sort-header): New face.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98064
diff changeset
485 (define-key km [header-line mouse-1] 'proced-sort-header)
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
486 (define-key km [header-line mouse-2] 'proced-sort-header)
100735
8ec0632b600c (proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100570
diff changeset
487 (define-key km "T" 'proced-toggle-tree)
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
488 ;; formatting
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
489 (define-key km "F" 'proced-format-interactive)
95135
33ea0b47d336 (proced-goal-header-re): Renamed from proced-procname-column-regexp.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 94678
diff changeset
490 ;; operate
97522
ce7e3551dd0e (proced-signal-list): Add POSIX 1003.1-2001 signals.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97317
diff changeset
491 (define-key km "o" 'proced-omit-processes)
95135
33ea0b47d336 (proced-goal-header-re): Renamed from proced-procname-column-regexp.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 94678
diff changeset
492 (define-key km "x" 'proced-send-signal) ; Dired compatibility
33ea0b47d336 (proced-goal-header-re): Renamed from proced-procname-column-regexp.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 94678
diff changeset
493 (define-key km "k" 'proced-send-signal) ; kill processes
33ea0b47d336 (proced-goal-header-re): Renamed from proced-procname-column-regexp.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 94678
diff changeset
494 ;; misc
33ea0b47d336 (proced-goal-header-re): Renamed from proced-procname-column-regexp.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 94678
diff changeset
495 (define-key km "h" 'describe-mode)
33ea0b47d336 (proced-goal-header-re): Renamed from proced-procname-column-regexp.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 94678
diff changeset
496 (define-key km "?" 'proced-help)
93212
134b2dc25692 proced.el: New file.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff changeset
497 (define-key km [remap undo] 'proced-undo)
134b2dc25692 proced.el: New file.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff changeset
498 (define-key km [remap advertised-undo] 'proced-undo)
100847
883cbe72dc04 (proced-grammar-alist): Refiner can be a list (function help-echo)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100763
diff changeset
499 ;; Additional keybindings are inherited from `special-mode-map'
93212
134b2dc25692 proced.el: New file.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff changeset
500 km)
100570
496de5bd1f6d * proced.el (proced-grammar-alist): Doc fix.
Juanma Barranquero <lekktu@gmail.com>
parents: 100424
diff changeset
501 "Keymap for Proced commands.")
93212
134b2dc25692 proced.el: New file.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff changeset
502
134b2dc25692 proced.el: New file.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff changeset
503 (easy-menu-define
134b2dc25692 proced.el: New file.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff changeset
504 proced-menu proced-mode-map "Proced Menu"
97522
ce7e3551dd0e (proced-signal-list): Add POSIX 1003.1-2001 signals.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97317
diff changeset
505 `("Proced"
ce7e3551dd0e (proced-signal-list): Add POSIX 1003.1-2001 signals.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97317
diff changeset
506 ["Mark" proced-mark
ce7e3551dd0e (proced-signal-list): Add POSIX 1003.1-2001 signals.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97317
diff changeset
507 :help "Mark Current Process"]
ce7e3551dd0e (proced-signal-list): Add POSIX 1003.1-2001 signals.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97317
diff changeset
508 ["Unmark" proced-unmark
ce7e3551dd0e (proced-signal-list): Add POSIX 1003.1-2001 signals.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97317
diff changeset
509 :help "Unmark Current Process"]
ce7e3551dd0e (proced-signal-list): Add POSIX 1003.1-2001 signals.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97317
diff changeset
510 ["Mark All" proced-mark-all
ce7e3551dd0e (proced-signal-list): Add POSIX 1003.1-2001 signals.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97317
diff changeset
511 :help "Mark All Processes"]
ce7e3551dd0e (proced-signal-list): Add POSIX 1003.1-2001 signals.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97317
diff changeset
512 ["Unmark All" proced-unmark-all
ce7e3551dd0e (proced-signal-list): Add POSIX 1003.1-2001 signals.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97317
diff changeset
513 :help "Unmark All Process"]
ce7e3551dd0e (proced-signal-list): Add POSIX 1003.1-2001 signals.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97317
diff changeset
514 ["Toggle Marks" proced-toggle-marks
ce7e3551dd0e (proced-signal-list): Add POSIX 1003.1-2001 signals.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97317
diff changeset
515 :help "Marked Processes Become Unmarked, and Vice Versa"]
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
516 ["Mark Children" proced-mark-children
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
517 :help "Mark Current Process and its Children"]
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
518 ["Mark Parents" proced-mark-parents
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
519 :help "Mark Current Process and its Parents"]
94063
ab8c45d22418 (proced-command-alist): Remove sort column.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 93248
diff changeset
520 "--"
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
521 ("Filters"
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
522 :help "Select Filter for Process Listing"
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
523 ,@(mapcar (lambda (el)
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
524 (let ((filter (car el)))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
525 `[,(symbol-name filter)
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
526 (proced-filter-interactive ',filter)
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
527 :style radio
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
528 :selected (eq proced-filter ',filter)]))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
529 proced-filter-alist))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
530 ("Sorting"
98162
d5c5ea23d8ea (proced-sort-header): New face.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98064
diff changeset
531 :help "Select Sort Scheme"
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
532 ["Sort..." proced-sort-interactive
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
533 :help "Sort Process List"]
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
534 "--"
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
535 ["Sort by %CPU" proced-sort-pcpu]
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
536 ["Sort by %MEM" proced-sort-pmem]
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
537 ["Sort by PID" proced-sort-pid]
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
538 ["Sort by START" proced-sort-start]
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
539 ["Sort by TIME" proced-sort-time]
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
540 ["Sort by USER" proced-sort-user])
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
541 ("Formats"
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
542 :help "Select Format for Process Listing"
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
543 ,@(mapcar (lambda (el)
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
544 (let ((format (car el)))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
545 `[,(symbol-name format)
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
546 (proced-format-interactive ',format)
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
547 :style radio
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
548 :selected (eq proced-format ',format)]))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
549 proced-format-alist))
100735
8ec0632b600c (proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100570
diff changeset
550 ["Tree Display" proced-toggle-tree
8ec0632b600c (proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100570
diff changeset
551 :style toggle
8ec0632b600c (proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100570
diff changeset
552 :selected (eval proced-tree-flag)
8ec0632b600c (proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100570
diff changeset
553 :help "Display Proced Buffer as Process Tree"]
94621
97585dd63d91 (proced-command-alist): Fix system-type values. Fix defcustom.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 94109
diff changeset
554 "--"
97522
ce7e3551dd0e (proced-signal-list): Add POSIX 1003.1-2001 signals.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97317
diff changeset
555 ["Omit Marked Processes" proced-omit-processes
ce7e3551dd0e (proced-signal-list): Add POSIX 1003.1-2001 signals.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97317
diff changeset
556 :help "Omit Marked Processes in Process Listing."]
93212
134b2dc25692 proced.el: New file.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff changeset
557 "--"
97522
ce7e3551dd0e (proced-signal-list): Add POSIX 1003.1-2001 signals.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97317
diff changeset
558 ["Revert" revert-buffer
ce7e3551dd0e (proced-signal-list): Add POSIX 1003.1-2001 signals.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97317
diff changeset
559 :help "Revert Process Listing"]
100421
0b3bb7c982eb (proced-auto-update-interval): Renamed from proced-timer-interval.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 99735
diff changeset
560 ["Auto Update" proced-toggle-auto-update
100422
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
561 :style toggle
100421
0b3bb7c982eb (proced-auto-update-interval): Renamed from proced-timer-interval.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 99735
diff changeset
562 :selected (eval proced-auto-update-flag)
98162
d5c5ea23d8ea (proced-sort-header): New face.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98064
diff changeset
563 :help "Auto Update of Proced Buffer"]
97522
ce7e3551dd0e (proced-signal-list): Add POSIX 1003.1-2001 signals.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97317
diff changeset
564 ["Send signal" proced-send-signal
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
565 :help "Send Signal to Marked Processes"]))
97522
ce7e3551dd0e (proced-signal-list): Add POSIX 1003.1-2001 signals.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97317
diff changeset
566
95135
33ea0b47d336 (proced-goal-header-re): Renamed from proced-procname-column-regexp.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 94678
diff changeset
567 ;; helper functions
94063
ab8c45d22418 (proced-command-alist): Remove sort column.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 93248
diff changeset
568 (defun proced-marker-regexp ()
94621
97585dd63d91 (proced-command-alist): Fix system-type values. Fix defcustom.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 94109
diff changeset
569 "Return regexp matching `proced-marker-char'."
95135
33ea0b47d336 (proced-goal-header-re): Renamed from proced-procname-column-regexp.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 94678
diff changeset
570 ;; `proced-marker-char' must appear in column zero
94063
ab8c45d22418 (proced-command-alist): Remove sort column.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 93248
diff changeset
571 (concat "^" (regexp-quote (char-to-string proced-marker-char))))
ab8c45d22418 (proced-command-alist): Remove sort column.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 93248
diff changeset
572
ab8c45d22418 (proced-command-alist): Remove sort column.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 93248
diff changeset
573 (defun proced-success-message (action count)
94621
97585dd63d91 (proced-command-alist): Fix system-type values. Fix defcustom.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 94109
diff changeset
574 "Display success message for ACTION performed for COUNT processes."
94063
ab8c45d22418 (proced-command-alist): Remove sort column.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 93248
diff changeset
575 (message "%s %s process%s" action count (if (= 1 count) "" "es")))
ab8c45d22418 (proced-command-alist): Remove sort column.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 93248
diff changeset
576
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
577 ;; Unlike dired, we do not define our own commands for vertical motion.
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
578 ;; If `goal-column' is set, `next-line' and `previous-line' are fancy
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
579 ;; commands to satisfy our modest needs. If `proced-goal-attribute'
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
580 ;; and/or `goal-column' are not set, `next-line' and `previous-line'
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
581 ;; are really what we need to preserve the column of point.
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
582 ;; We use `proced-move-to-goal-column' for "non-interactive" cases only
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
583 ;; to get a well-defined position of point.
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
584
95135
33ea0b47d336 (proced-goal-header-re): Renamed from proced-procname-column-regexp.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 94678
diff changeset
585 (defun proced-move-to-goal-column ()
98162
d5c5ea23d8ea (proced-sort-header): New face.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98064
diff changeset
586 "Move to `goal-column' if non-nil. Return position of point."
94063
ab8c45d22418 (proced-command-alist): Remove sort column.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 93248
diff changeset
587 (beginning-of-line)
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
588 (unless (eobp)
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
589 (if goal-column
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
590 (forward-char goal-column)
98162
d5c5ea23d8ea (proced-sort-header): New face.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98064
diff changeset
591 (forward-char 2)))
d5c5ea23d8ea (proced-sort-header): New face.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98064
diff changeset
592 (point))
94063
ab8c45d22418 (proced-command-alist): Remove sort column.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 93248
diff changeset
593
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
594 (defun proced-header-line ()
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
595 "Return header line for Proced buffer."
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
596 (list (propertize " " 'display '(space :align-to 0))
101880
18c7189fe029 (proced-after-send-signal-hook): Use defcustom.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100908
diff changeset
597 (if (<= (window-hscroll) (length proced-header-line))
18c7189fe029 (proced-after-send-signal-hook): Use defcustom.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100908
diff changeset
598 (replace-regexp-in-string ;; preserve text properties
18c7189fe029 (proced-after-send-signal-hook): Use defcustom.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100908
diff changeset
599 "\\(%\\)" "\\1\\1"
18c7189fe029 (proced-after-send-signal-hook): Use defcustom.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100908
diff changeset
600 (substring proced-header-line (window-hscroll))))))
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
601
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
602 (defun proced-pid-at-point ()
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
603 "Return pid of system process at point.
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
604 Return nil if point is not on a process line."
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
605 (save-excursion
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
606 (beginning-of-line)
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
607 (if (looking-at "^. .")
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
608 (get-text-property (match-end 0) 'proced-pid))))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
609
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
610 ;; proced mode
94063
ab8c45d22418 (proced-command-alist): Remove sort column.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 93248
diff changeset
611
100847
883cbe72dc04 (proced-grammar-alist): Refiner can be a list (function help-echo)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100763
diff changeset
612 (define-derived-mode proced-mode special-mode "Proced"
104868
450b13730eae (proced-mode): Doc fix.
Eli Zaretskii <eliz@gnu.org>
parents: 104721
diff changeset
613 "Mode for displaying system processes and sending signals to them.
98249
538f59dc1be8 (proced-grammar-alist, proced-custom-attributes)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98172
diff changeset
614 Type \\[proced] to start a Proced session. In a Proced buffer
538f59dc1be8 (proced-grammar-alist, proced-custom-attributes)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98172
diff changeset
615 type \\<proced-mode-map>\\[proced-mark] to mark a process for later commands.
94108
7ab68bf3a905 (proced-mode): Redefine as just the major-mode.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 94066
diff changeset
616 Type \\[proced-send-signal] to send signals to marked processes.
7ab68bf3a905 (proced-mode): Redefine as just the major-mode.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 94066
diff changeset
617
98162
d5c5ea23d8ea (proced-sort-header): New face.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98064
diff changeset
618 The initial content of a listing is defined by the variable `proced-filter'
d5c5ea23d8ea (proced-sort-header): New face.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98064
diff changeset
619 and the variable `proced-format'.
d5c5ea23d8ea (proced-sort-header): New face.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98064
diff changeset
620 The variable `proced-filter' specifies which system processes are displayed.
d5c5ea23d8ea (proced-sort-header): New face.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98064
diff changeset
621 The variable `proced-format' specifies which attributes are displayed for
d5c5ea23d8ea (proced-sort-header): New face.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98064
diff changeset
622 each process. Type \\[proced-filter-interactive] and \\[proced-format-interactive]
d5c5ea23d8ea (proced-sort-header): New face.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98064
diff changeset
623 to change the values of `proced-filter' and `proced-format'.
d5c5ea23d8ea (proced-sort-header): New face.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98064
diff changeset
624 The current value of the variable `proced-filter' is indicated in the
d5c5ea23d8ea (proced-sort-header): New face.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98064
diff changeset
625 mode line.
d5c5ea23d8ea (proced-sort-header): New face.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98064
diff changeset
626
d5c5ea23d8ea (proced-sort-header): New face.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98064
diff changeset
627 The sort order of Proced listings is defined by the variable `proced-sort'.
d5c5ea23d8ea (proced-sort-header): New face.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98064
diff changeset
628 Type \\[proced-sort-interactive] or click on a header in the header line
d5c5ea23d8ea (proced-sort-header): New face.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98064
diff changeset
629 to change the sort scheme. The current sort scheme is indicated in the
d5c5ea23d8ea (proced-sort-header): New face.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98064
diff changeset
630 mode line, using \"+\" or \"-\" for ascending or descending sort order.
d5c5ea23d8ea (proced-sort-header): New face.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98064
diff changeset
631
100735
8ec0632b600c (proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100570
diff changeset
632 Type \\[proced-toggle-tree] to toggle whether the listing is
8ec0632b600c (proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100570
diff changeset
633 displayed as process tree.
8ec0632b600c (proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100570
diff changeset
634
100424
586161dec886 (proced-sort-interactive, proced-sort-pcpu)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100422
diff changeset
635 An existing Proced listing can be refined by typing \\[proced-refine].
98162
d5c5ea23d8ea (proced-sort-header): New face.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98064
diff changeset
636 Refining an existing listing does not update the variable `proced-filter'.
d5c5ea23d8ea (proced-sort-header): New face.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98064
diff changeset
637
d5c5ea23d8ea (proced-sort-header): New face.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98064
diff changeset
638 The attribute-specific rules for formatting, filtering, sorting, and refining
d5c5ea23d8ea (proced-sort-header): New face.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98064
diff changeset
639 are defined in `proced-grammar-alist'.
d5c5ea23d8ea (proced-sort-header): New face.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98064
diff changeset
640
100847
883cbe72dc04 (proced-grammar-alist): Refiner can be a list (function help-echo)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100763
diff changeset
641 After displaying or updating a Proced buffer, Proced runs the normal hook
883cbe72dc04 (proced-grammar-alist): Refiner can be a list (function help-echo)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100763
diff changeset
642 `proced-post-display-hook'.
883cbe72dc04 (proced-grammar-alist): Refiner can be a list (function help-echo)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100763
diff changeset
643
94108
7ab68bf3a905 (proced-mode): Redefine as just the major-mode.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 94066
diff changeset
644 \\{proced-mode-map}"
7ab68bf3a905 (proced-mode): Redefine as just the major-mode.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 94066
diff changeset
645 (abbrev-mode 0)
7ab68bf3a905 (proced-mode): Redefine as just the major-mode.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 94066
diff changeset
646 (auto-fill-mode 0)
7ab68bf3a905 (proced-mode): Redefine as just the major-mode.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 94066
diff changeset
647 (setq buffer-read-only t
95168
a031e38a88d4 (proced-header-line): New variable and new function.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 95135
diff changeset
648 truncate-lines t
a031e38a88d4 (proced-header-line): New variable and new function.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 95135
diff changeset
649 header-line-format '(:eval (proced-header-line)))
a031e38a88d4 (proced-header-line): New variable and new function.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 95135
diff changeset
650 (add-hook 'post-command-hook 'force-mode-line-update nil t)
94108
7ab68bf3a905 (proced-mode): Redefine as just the major-mode.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 94066
diff changeset
651 (set (make-local-variable 'revert-buffer-function) 'proced-revert)
7ab68bf3a905 (proced-mode): Redefine as just the major-mode.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 94066
diff changeset
652 (set (make-local-variable 'font-lock-defaults)
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
653 '(proced-font-lock-keywords t nil nil beginning-of-line))
100421
0b3bb7c982eb (proced-auto-update-interval): Renamed from proced-timer-interval.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 99735
diff changeset
654 (if (and (not proced-auto-update-timer) proced-auto-update-interval)
0b3bb7c982eb (proced-auto-update-interval): Renamed from proced-timer-interval.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 99735
diff changeset
655 (setq proced-auto-update-timer
0b3bb7c982eb (proced-auto-update-interval): Renamed from proced-timer-interval.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 99735
diff changeset
656 (run-at-time t proced-auto-update-interval
0b3bb7c982eb (proced-auto-update-interval): Renamed from proced-timer-interval.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 99735
diff changeset
657 'proced-auto-update-timer))))
99735
bb974924d581 (proced-available): New variable.
Glenn Morris <rgm@gnu.org>
parents: 99726
diff changeset
658
94108
7ab68bf3a905 (proced-mode): Redefine as just the major-mode.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 94066
diff changeset
659 ;;;###autoload
7ab68bf3a905 (proced-mode): Redefine as just the major-mode.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 94066
diff changeset
660 (defun proced (&optional arg)
98162
d5c5ea23d8ea (proced-sort-header): New face.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98064
diff changeset
661 "Generate a listing of UNIX system processes.
93212
134b2dc25692 proced.el: New file.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff changeset
662 If invoked with optional ARG the window displaying the process
134b2dc25692 proced.el: New file.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff changeset
663 information will be displayed but not selected.
100847
883cbe72dc04 (proced-grammar-alist): Refiner can be a list (function help-echo)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100763
diff changeset
664 Runs the normal hook `proced-post-display-hook'.
93212
134b2dc25692 proced.el: New file.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff changeset
665
99726
38b176122f90 (proced, proced-format-time): Doc fixes.
Glenn Morris <rgm@gnu.org>
parents: 98249
diff changeset
666 See `proced-mode' for a description of features available in Proced buffers."
93212
134b2dc25692 proced.el: New file.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff changeset
667 (interactive "P")
100421
0b3bb7c982eb (proced-auto-update-interval): Renamed from proced-timer-interval.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 99735
diff changeset
668 (unless proced-available
0b3bb7c982eb (proced-auto-update-interval): Renamed from proced-timer-interval.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 99735
diff changeset
669 (error "Proced is not available on this system"))
95135
33ea0b47d336 (proced-goal-header-re): Renamed from proced-procname-column-regexp.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 94678
diff changeset
670 (let ((buffer (get-buffer-create "*Proced*")) new)
94621
97585dd63d91 (proced-command-alist): Fix system-type values. Fix defcustom.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 94109
diff changeset
671 (set-buffer buffer)
93212
134b2dc25692 proced.el: New file.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff changeset
672 (setq new (zerop (buffer-size)))
100847
883cbe72dc04 (proced-grammar-alist): Refiner can be a list (function help-echo)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100763
diff changeset
673 (when new
883cbe72dc04 (proced-grammar-alist): Refiner can be a list (function help-echo)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100763
diff changeset
674 (proced-mode)
883cbe72dc04 (proced-grammar-alist): Refiner can be a list (function help-echo)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100763
diff changeset
675 ;; `proced-update' runs `proced-post-display-hook' only if the
883cbe72dc04 (proced-grammar-alist): Refiner can be a list (function help-echo)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100763
diff changeset
676 ;; Proced buffer has been selected. Yet the following call of
883cbe72dc04 (proced-grammar-alist): Refiner can be a list (function help-echo)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100763
diff changeset
677 ;; `proced-update' is for an empty Proced buffer that has not
883cbe72dc04 (proced-grammar-alist): Refiner can be a list (function help-echo)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100763
diff changeset
678 ;; yet been selected. Therefore we need to call
883cbe72dc04 (proced-grammar-alist): Refiner can be a list (function help-echo)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100763
diff changeset
679 ;; `proced-post-display-hook' below.
883cbe72dc04 (proced-grammar-alist): Refiner can be a list (function help-echo)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100763
diff changeset
680 (proced-update t))
93212
134b2dc25692 proced.el: New file.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff changeset
681 (if arg
100847
883cbe72dc04 (proced-grammar-alist): Refiner can be a list (function help-echo)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100763
diff changeset
682 (progn
883cbe72dc04 (proced-grammar-alist): Refiner can be a list (function help-echo)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100763
diff changeset
683 (display-buffer buffer)
883cbe72dc04 (proced-grammar-alist): Refiner can be a list (function help-echo)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100763
diff changeset
684 (with-current-buffer buffer
106411
a8fa237ee1fa (proced): Call `(proced-update t)' to update process
Juri Linkov <juri@jurta.org>
parents: 106391
diff changeset
685 (proced-update t)))
94621
97585dd63d91 (proced-command-alist): Fix system-type values. Fix defcustom.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 94109
diff changeset
686 (pop-to-buffer buffer)
106411
a8fa237ee1fa (proced): Call `(proced-update t)' to update process
Juri Linkov <juri@jurta.org>
parents: 106391
diff changeset
687 (proced-update t)
96824
9ebcc98e40f8 (proced-mode, proced): Add \\<proced-mode-map> to docstrings.
Juri Linkov <juri@jurta.org>
parents: 95300
diff changeset
688 (message
9ebcc98e40f8 (proced-mode, proced): Add \\<proced-mode-map> to docstrings.
Juri Linkov <juri@jurta.org>
parents: 95300
diff changeset
689 (substitute-command-keys
9ebcc98e40f8 (proced-mode, proced): Add \\<proced-mode-map> to docstrings.
Juri Linkov <juri@jurta.org>
parents: 95300
diff changeset
690 "Type \\<proced-mode-map>\\[quit-window] to quit, \\[proced-help] for help")))))
93212
134b2dc25692 proced.el: New file.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff changeset
691
100421
0b3bb7c982eb (proced-auto-update-interval): Renamed from proced-timer-interval.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 99735
diff changeset
692 (defun proced-auto-update-timer ()
98162
d5c5ea23d8ea (proced-sort-header): New face.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98064
diff changeset
693 "Auto-update Proced buffers using `run-at-time'."
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
694 (dolist (buf (buffer-list))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
695 (with-current-buffer buf
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
696 (if (and (eq major-mode 'proced-mode)
100421
0b3bb7c982eb (proced-auto-update-interval): Renamed from proced-timer-interval.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 99735
diff changeset
697 proced-auto-update-flag)
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
698 (proced-update t t)))))
95135
33ea0b47d336 (proced-goal-header-re): Renamed from proced-procname-column-regexp.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 94678
diff changeset
699
100421
0b3bb7c982eb (proced-auto-update-interval): Renamed from proced-timer-interval.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 99735
diff changeset
700 (defun proced-toggle-auto-update (arg)
98162
d5c5ea23d8ea (proced-sort-header): New face.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98064
diff changeset
701 "Change whether this Proced buffer is updated automatically.
d5c5ea23d8ea (proced-sort-header): New face.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98064
diff changeset
702 With prefix ARG, update this buffer automatically if ARG is positive,
100421
0b3bb7c982eb (proced-auto-update-interval): Renamed from proced-timer-interval.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 99735
diff changeset
703 otherwise do not update. Sets the variable `proced-auto-update-flag'.
0b3bb7c982eb (proced-auto-update-interval): Renamed from proced-timer-interval.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 99735
diff changeset
704 The time interval for updates is specified via `proced-auto-update-interval'."
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
705 (interactive (list (or current-prefix-arg 'toggle)))
100421
0b3bb7c982eb (proced-auto-update-interval): Renamed from proced-timer-interval.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 99735
diff changeset
706 (setq proced-auto-update-flag
0b3bb7c982eb (proced-auto-update-interval): Renamed from proced-timer-interval.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 99735
diff changeset
707 (cond ((eq arg 'toggle) (not proced-auto-update-flag))
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
708 (arg (> (prefix-numeric-value arg) 0))
100421
0b3bb7c982eb (proced-auto-update-interval): Renamed from proced-timer-interval.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 99735
diff changeset
709 (t (not proced-auto-update-flag))))
0b3bb7c982eb (proced-auto-update-interval): Renamed from proced-timer-interval.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 99735
diff changeset
710 (message "Proced auto update %s"
0b3bb7c982eb (proced-auto-update-interval): Renamed from proced-timer-interval.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 99735
diff changeset
711 (if proced-auto-update-flag "enabled" "disabled")))
95135
33ea0b47d336 (proced-goal-header-re): Renamed from proced-procname-column-regexp.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 94678
diff changeset
712
100847
883cbe72dc04 (proced-grammar-alist): Refiner can be a list (function help-echo)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100763
diff changeset
713 ;;; Mark
883cbe72dc04 (proced-grammar-alist): Refiner can be a list (function help-echo)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100763
diff changeset
714
93212
134b2dc25692 proced.el: New file.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff changeset
715 (defun proced-mark (&optional count)
134b2dc25692 proced.el: New file.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff changeset
716 "Mark the current (or next COUNT) processes."
134b2dc25692 proced.el: New file.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff changeset
717 (interactive "p")
134b2dc25692 proced.el: New file.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff changeset
718 (proced-do-mark t count))
134b2dc25692 proced.el: New file.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff changeset
719
134b2dc25692 proced.el: New file.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff changeset
720 (defun proced-unmark (&optional count)
134b2dc25692 proced.el: New file.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff changeset
721 "Unmark the current (or next COUNT) processes."
134b2dc25692 proced.el: New file.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff changeset
722 (interactive "p")
134b2dc25692 proced.el: New file.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff changeset
723 (proced-do-mark nil count))
134b2dc25692 proced.el: New file.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff changeset
724
94063
ab8c45d22418 (proced-command-alist): Remove sort column.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 93248
diff changeset
725 (defun proced-unmark-backward (&optional count)
ab8c45d22418 (proced-command-alist): Remove sort column.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 93248
diff changeset
726 "Unmark the previous (or COUNT previous) processes."
94621
97585dd63d91 (proced-command-alist): Fix system-type values. Fix defcustom.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 94109
diff changeset
727 ;; Analogous to `dired-unmark-backward',
97585dd63d91 (proced-command-alist): Fix system-type values. Fix defcustom.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 94109
diff changeset
728 ;; but `ibuffer-unmark-backward' behaves different.
94063
ab8c45d22418 (proced-command-alist): Remove sort column.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 93248
diff changeset
729 (interactive "p")
ab8c45d22418 (proced-command-alist): Remove sort column.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 93248
diff changeset
730 (proced-do-mark nil (- (or count 1))))
ab8c45d22418 (proced-command-alist): Remove sort column.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 93248
diff changeset
731
93212
134b2dc25692 proced.el: New file.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff changeset
732 (defun proced-do-mark (mark &optional count)
97522
ce7e3551dd0e (proced-signal-list): Add POSIX 1003.1-2001 signals.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97317
diff changeset
733 "Mark the current (or next COUNT) processes using MARK."
93212
134b2dc25692 proced.el: New file.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff changeset
734 (or count (setq count 1))
94063
ab8c45d22418 (proced-command-alist): Remove sort column.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 93248
diff changeset
735 (let ((backward (< count 0))
93212
134b2dc25692 proced.el: New file.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff changeset
736 buffer-read-only)
95135
33ea0b47d336 (proced-goal-header-re): Renamed from proced-procname-column-regexp.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 94678
diff changeset
737 (setq count (1+ (if (<= 0 count) count
33ea0b47d336 (proced-goal-header-re): Renamed from proced-procname-column-regexp.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 94678
diff changeset
738 (min (1- (line-number-at-pos)) (abs count)))))
33ea0b47d336 (proced-goal-header-re): Renamed from proced-procname-column-regexp.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 94678
diff changeset
739 (beginning-of-line)
33ea0b47d336 (proced-goal-header-re): Renamed from proced-procname-column-regexp.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 94678
diff changeset
740 (while (not (or (zerop (setq count (1- count))) (eobp)))
33ea0b47d336 (proced-goal-header-re): Renamed from proced-procname-column-regexp.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 94678
diff changeset
741 (proced-insert-mark mark backward))
33ea0b47d336 (proced-goal-header-re): Renamed from proced-procname-column-regexp.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 94678
diff changeset
742 (proced-move-to-goal-column)))
93212
134b2dc25692 proced.el: New file.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff changeset
743
94063
ab8c45d22418 (proced-command-alist): Remove sort column.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 93248
diff changeset
744 (defun proced-toggle-marks ()
ab8c45d22418 (proced-command-alist): Remove sort column.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 93248
diff changeset
745 "Toggle marks: marked processes become unmarked, and vice versa."
ab8c45d22418 (proced-command-alist): Remove sort column.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 93248
diff changeset
746 (interactive)
ab8c45d22418 (proced-command-alist): Remove sort column.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 93248
diff changeset
747 (let ((mark-re (proced-marker-regexp))
ab8c45d22418 (proced-command-alist): Remove sort column.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 93248
diff changeset
748 buffer-read-only)
ab8c45d22418 (proced-command-alist): Remove sort column.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 93248
diff changeset
749 (save-excursion
95135
33ea0b47d336 (proced-goal-header-re): Renamed from proced-procname-column-regexp.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 94678
diff changeset
750 (goto-char (point-min))
93212
134b2dc25692 proced.el: New file.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff changeset
751 (while (not (eobp))
94063
ab8c45d22418 (proced-command-alist): Remove sort column.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 93248
diff changeset
752 (cond ((looking-at mark-re)
ab8c45d22418 (proced-command-alist): Remove sort column.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 93248
diff changeset
753 (proced-insert-mark nil))
ab8c45d22418 (proced-command-alist): Remove sort column.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 93248
diff changeset
754 ((looking-at " ")
ab8c45d22418 (proced-command-alist): Remove sort column.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 93248
diff changeset
755 (proced-insert-mark t))
ab8c45d22418 (proced-command-alist): Remove sort column.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 93248
diff changeset
756 (t
ab8c45d22418 (proced-command-alist): Remove sort column.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 93248
diff changeset
757 (forward-line 1)))))))
93212
134b2dc25692 proced.el: New file.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff changeset
758
94063
ab8c45d22418 (proced-command-alist): Remove sort column.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 93248
diff changeset
759 (defun proced-insert-mark (mark &optional backward)
ab8c45d22418 (proced-command-alist): Remove sort column.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 93248
diff changeset
760 "If MARK is non-nil, insert `proced-marker-char'.
ab8c45d22418 (proced-command-alist): Remove sort column.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 93248
diff changeset
761 If BACKWARD is non-nil, move one line backwards before inserting the mark.
ab8c45d22418 (proced-command-alist): Remove sort column.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 93248
diff changeset
762 Otherwise move one line forward after inserting the mark."
ab8c45d22418 (proced-command-alist): Remove sort column.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 93248
diff changeset
763 (if backward (forward-line -1))
93212
134b2dc25692 proced.el: New file.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff changeset
764 (insert (if mark proced-marker-char ?\s))
134b2dc25692 proced.el: New file.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff changeset
765 (delete-char 1)
94063
ab8c45d22418 (proced-command-alist): Remove sort column.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 93248
diff changeset
766 (unless backward (forward-line)))
ab8c45d22418 (proced-command-alist): Remove sort column.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 93248
diff changeset
767
100847
883cbe72dc04 (proced-grammar-alist): Refiner can be a list (function help-echo)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100763
diff changeset
768 (defun proced-mark-all ()
883cbe72dc04 (proced-grammar-alist): Refiner can be a list (function help-echo)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100763
diff changeset
769 "Mark all processes.
883cbe72dc04 (proced-grammar-alist): Refiner can be a list (function help-echo)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100763
diff changeset
770 If `transient-mark-mode' is turned on and the region is active,
883cbe72dc04 (proced-grammar-alist): Refiner can be a list (function help-echo)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100763
diff changeset
771 mark the region."
883cbe72dc04 (proced-grammar-alist): Refiner can be a list (function help-echo)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100763
diff changeset
772 (interactive)
883cbe72dc04 (proced-grammar-alist): Refiner can be a list (function help-echo)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100763
diff changeset
773 (proced-do-mark-all t))
883cbe72dc04 (proced-grammar-alist): Refiner can be a list (function help-echo)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100763
diff changeset
774
883cbe72dc04 (proced-grammar-alist): Refiner can be a list (function help-echo)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100763
diff changeset
775 (defun proced-unmark-all ()
883cbe72dc04 (proced-grammar-alist): Refiner can be a list (function help-echo)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100763
diff changeset
776 "Unmark all processes.
883cbe72dc04 (proced-grammar-alist): Refiner can be a list (function help-echo)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100763
diff changeset
777 If `transient-mark-mode' is turned on and the region is active,
883cbe72dc04 (proced-grammar-alist): Refiner can be a list (function help-echo)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100763
diff changeset
778 unmark the region."
883cbe72dc04 (proced-grammar-alist): Refiner can be a list (function help-echo)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100763
diff changeset
779 (interactive)
883cbe72dc04 (proced-grammar-alist): Refiner can be a list (function help-echo)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100763
diff changeset
780 (proced-do-mark-all nil))
883cbe72dc04 (proced-grammar-alist): Refiner can be a list (function help-echo)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100763
diff changeset
781
883cbe72dc04 (proced-grammar-alist): Refiner can be a list (function help-echo)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100763
diff changeset
782 (defun proced-do-mark-all (mark)
883cbe72dc04 (proced-grammar-alist): Refiner can be a list (function help-echo)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100763
diff changeset
783 "Mark all processes using MARK.
883cbe72dc04 (proced-grammar-alist): Refiner can be a list (function help-echo)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100763
diff changeset
784 If `transient-mark-mode' is turned on and the region is active,
883cbe72dc04 (proced-grammar-alist): Refiner can be a list (function help-echo)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100763
diff changeset
785 mark the region."
883cbe72dc04 (proced-grammar-alist): Refiner can be a list (function help-echo)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100763
diff changeset
786 (let* ((count 0)
883cbe72dc04 (proced-grammar-alist): Refiner can be a list (function help-echo)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100763
diff changeset
787 (proced-marker-char (if mark proced-marker-char ?\s))
883cbe72dc04 (proced-grammar-alist): Refiner can be a list (function help-echo)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100763
diff changeset
788 (marker-re (proced-marker-regexp))
883cbe72dc04 (proced-grammar-alist): Refiner can be a list (function help-echo)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100763
diff changeset
789 end buffer-read-only)
883cbe72dc04 (proced-grammar-alist): Refiner can be a list (function help-echo)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100763
diff changeset
790 (save-excursion
883cbe72dc04 (proced-grammar-alist): Refiner can be a list (function help-echo)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100763
diff changeset
791 (if (use-region-p)
883cbe72dc04 (proced-grammar-alist): Refiner can be a list (function help-echo)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100763
diff changeset
792 ;; Operate even on those lines that are only partially a part
883cbe72dc04 (proced-grammar-alist): Refiner can be a list (function help-echo)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100763
diff changeset
793 ;; of region. This appears most consistent with
883cbe72dc04 (proced-grammar-alist): Refiner can be a list (function help-echo)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100763
diff changeset
794 ;; `proced-move-to-goal-column'.
883cbe72dc04 (proced-grammar-alist): Refiner can be a list (function help-echo)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100763
diff changeset
795 (progn (setq end (save-excursion
883cbe72dc04 (proced-grammar-alist): Refiner can be a list (function help-echo)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100763
diff changeset
796 (goto-char (region-end))
883cbe72dc04 (proced-grammar-alist): Refiner can be a list (function help-echo)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100763
diff changeset
797 (unless (looking-at "^") (forward-line))
883cbe72dc04 (proced-grammar-alist): Refiner can be a list (function help-echo)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100763
diff changeset
798 (point)))
883cbe72dc04 (proced-grammar-alist): Refiner can be a list (function help-echo)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100763
diff changeset
799 (goto-char (region-beginning))
883cbe72dc04 (proced-grammar-alist): Refiner can be a list (function help-echo)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100763
diff changeset
800 (unless (looking-at "^") (beginning-of-line)))
883cbe72dc04 (proced-grammar-alist): Refiner can be a list (function help-echo)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100763
diff changeset
801 (goto-char (point-min))
883cbe72dc04 (proced-grammar-alist): Refiner can be a list (function help-echo)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100763
diff changeset
802 (setq end (point-max)))
883cbe72dc04 (proced-grammar-alist): Refiner can be a list (function help-echo)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100763
diff changeset
803 (while (< (point) end)
883cbe72dc04 (proced-grammar-alist): Refiner can be a list (function help-echo)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100763
diff changeset
804 (unless (looking-at marker-re)
883cbe72dc04 (proced-grammar-alist): Refiner can be a list (function help-echo)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100763
diff changeset
805 (setq count (1+ count))
883cbe72dc04 (proced-grammar-alist): Refiner can be a list (function help-echo)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100763
diff changeset
806 (insert proced-marker-char)
883cbe72dc04 (proced-grammar-alist): Refiner can be a list (function help-echo)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100763
diff changeset
807 (delete-char 1))
883cbe72dc04 (proced-grammar-alist): Refiner can be a list (function help-echo)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100763
diff changeset
808 (forward-line))
883cbe72dc04 (proced-grammar-alist): Refiner can be a list (function help-echo)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100763
diff changeset
809 (proced-success-message (if mark "Marked" "Unmarked") count))))
883cbe72dc04 (proced-grammar-alist): Refiner can be a list (function help-echo)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100763
diff changeset
810
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
811 (defun proced-mark-children (ppid &optional omit-ppid)
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
812 "Mark child processes of process PPID.
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
813 Also mark process PPID unless prefix OMIT-PPID is non-nil."
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
814 (interactive (list (proced-pid-at-point) current-prefix-arg))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
815 (proced-mark-process-alist
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
816 (proced-filter-children proced-process-alist ppid omit-ppid)))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
817
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
818 (defun proced-mark-parents (cpid &optional omit-cpid)
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
819 "Mark parent processes of process CPID.
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
820 Also mark CPID unless prefix OMIT-CPID is non-nil."
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
821 (interactive (list (proced-pid-at-point) current-prefix-arg))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
822 (proced-mark-process-alist
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
823 (proced-filter-parents proced-process-alist cpid omit-cpid)))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
824
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
825 (defun proced-mark-process-alist (process-alist &optional quiet)
100735
8ec0632b600c (proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100570
diff changeset
826 "Mark processes in PROCESS-ALIST.
8ec0632b600c (proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100570
diff changeset
827 If QUIET is non-nil suppress status message."
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
828 (let ((count 0))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
829 (if process-alist
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
830 (let (buffer-read-only)
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
831 (save-excursion
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
832 (goto-char (point-min))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
833 (while (not (eobp))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
834 (when (assq (proced-pid-at-point) process-alist)
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
835 (insert proced-marker-char)
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
836 (delete-char 1)
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
837 (setq count (1+ count)))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
838 (forward-line)))))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
839 (unless quiet
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
840 (proced-success-message "Marked" count))))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
841
94063
ab8c45d22418 (proced-command-alist): Remove sort column.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 93248
diff changeset
842 ;; Mostly analog of `dired-do-kill-lines'.
ab8c45d22418 (proced-command-alist): Remove sort column.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 93248
diff changeset
843 ;; However, for negative args the target lines of `dired-do-kill-lines'
ab8c45d22418 (proced-command-alist): Remove sort column.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 93248
diff changeset
844 ;; include the current line, whereas `dired-mark' for negative args operates
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
845 ;; on the preceding lines. Here we are consistent with `dired-mark'.
97522
ce7e3551dd0e (proced-signal-list): Add POSIX 1003.1-2001 signals.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97317
diff changeset
846 (defun proced-omit-processes (&optional arg quiet)
ce7e3551dd0e (proced-signal-list): Add POSIX 1003.1-2001 signals.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97317
diff changeset
847 "Omit marked processes.
ce7e3551dd0e (proced-signal-list): Add POSIX 1003.1-2001 signals.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97317
diff changeset
848 With prefix ARG, omit that many lines starting with the current line.
ce7e3551dd0e (proced-signal-list): Add POSIX 1003.1-2001 signals.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97317
diff changeset
849 \(A negative argument omits backward.)
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
850 If `transient-mark-mode' is turned on and the region is active,
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
851 omit the processes in region.
94063
ab8c45d22418 (proced-command-alist): Remove sort column.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 93248
diff changeset
852 If QUIET is non-nil suppress status message.
97522
ce7e3551dd0e (proced-signal-list): Add POSIX 1003.1-2001 signals.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97317
diff changeset
853 Returns count of omitted lines."
94063
ab8c45d22418 (proced-command-alist): Remove sort column.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 93248
diff changeset
854 (interactive "P")
ab8c45d22418 (proced-command-alist): Remove sort column.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 93248
diff changeset
855 (let ((mark-re (proced-marker-regexp))
ab8c45d22418 (proced-command-alist): Remove sort column.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 93248
diff changeset
856 (count 0)
ab8c45d22418 (proced-command-alist): Remove sort column.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 93248
diff changeset
857 buffer-read-only)
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
858 (cond ((use-region-p) ;; Omit active region
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
859 (let ((lines (count-lines (region-beginning) (region-end))))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
860 (save-excursion
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
861 (goto-char (region-beginning))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
862 (while (< count lines)
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
863 (proced-omit-process)
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
864 (setq count (1+ count))))))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
865 ((not arg) ;; Omit marked lines
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
866 (save-excursion
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
867 (goto-char (point-min))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
868 (while (and (not (eobp))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
869 (re-search-forward mark-re nil t))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
870 (proced-omit-process)
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
871 (setq count (1+ count)))))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
872 ((< 0 arg) ;; Omit forward
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
873 (while (and (not (eobp)) (< count arg))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
874 (proced-omit-process)
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
875 (setq count (1+ count))))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
876 ((< arg 0) ;; Omit backward
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
877 (while (and (not (bobp)) (< count (- arg)))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
878 (forward-line -1)
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
879 (proced-omit-process)
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
880 (setq count (1+ count)))))
95135
33ea0b47d336 (proced-goal-header-re): Renamed from proced-procname-column-regexp.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 94678
diff changeset
881 (unless (zerop count) (proced-move-to-goal-column))
97522
ce7e3551dd0e (proced-signal-list): Add POSIX 1003.1-2001 signals.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97317
diff changeset
882 (unless quiet (proced-success-message "Omitted" count))
94063
ab8c45d22418 (proced-command-alist): Remove sort column.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 93248
diff changeset
883 count))
93212
134b2dc25692 proced.el: New file.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff changeset
884
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
885 (defun proced-omit-process ()
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
886 "Omit process from listing point is on.
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
887 Update `proced-process-alist' accordingly."
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
888 (setq proced-process-alist
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
889 (assq-delete-all (proced-pid-at-point) proced-process-alist))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
890 (delete-region (line-beginning-position)
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
891 (save-excursion (forward-line) (point))))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
892
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
893 ;;; Filtering
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
894
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
895 (defun proced-filter (process-alist filter-list)
98162
d5c5ea23d8ea (proced-sort-header): New face.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98064
diff changeset
896 "Apply FILTER-LIST to PROCESS-ALIST.
d5c5ea23d8ea (proced-sort-header): New face.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98064
diff changeset
897 Return the filtered process list."
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
898 (if (symbolp filter-list)
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
899 (setq filter-list (cdr (assq filter-list proced-filter-alist))))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
900 (dolist (filter filter-list)
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
901 (let (new-alist)
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
902 (cond ( ;; apply function to entire process list
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
903 (eq (car filter) 'fun-all)
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
904 (setq new-alist (funcall (cdr filter) process-alist)))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
905 ( ;; apply predicate to each list of attributes
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
906 (eq (car filter) 'function)
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
907 (dolist (process process-alist)
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
908 (if (funcall (car filter) (cdr process))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
909 (push process new-alist))))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
910 (t ;; apply predicate to specified attribute
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
911 (let ((fun (if (stringp (cdr filter))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
912 `(lambda (val)
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
913 (string-match ,(cdr filter) val))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
914 (cdr filter)))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
915 value)
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
916 (dolist (process process-alist)
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
917 (setq value (cdr (assq (car filter) (cdr process))))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
918 (if (and value (funcall fun value))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
919 (push process new-alist))))))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
920 (setq process-alist new-alist)))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
921 process-alist)
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
922
98162
d5c5ea23d8ea (proced-sort-header): New face.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98064
diff changeset
923 (defun proced-filter-interactive (scheme)
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
924 "Filter Proced buffer using SCHEME.
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
925 When called interactively, an empty string means nil, i.e., no filtering.
98162
d5c5ea23d8ea (proced-sort-header): New face.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98064
diff changeset
926 Set variable `proced-filter' to SCHEME. Revert listing."
93212
134b2dc25692 proced.el: New file.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff changeset
927 (interactive
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
928 (let ((scheme (completing-read "Filter: "
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
929 proced-filter-alist nil t)))
98162
d5c5ea23d8ea (proced-sort-header): New face.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98064
diff changeset
930 (list (if (string= "" scheme) nil (intern scheme)))))
98172
87d64c3d48ac (proced-mark-face, proced-marked-face)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98162
diff changeset
931 ;; only update if necessary
87d64c3d48ac (proced-mark-face, proced-marked-face)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98162
diff changeset
932 (unless (eq proced-filter scheme)
87d64c3d48ac (proced-mark-face, proced-marked-face)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98162
diff changeset
933 (setq proced-filter scheme)
87d64c3d48ac (proced-mark-face, proced-marked-face)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98162
diff changeset
934 (proced-update t)))
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
935
100752
3bd2bab6d80f (proced-temp-alist): Renamed from variable proced-children-alist.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100743
diff changeset
936 (defun proced-filter-parents (process-alist pid &optional omit-pid)
3bd2bab6d80f (proced-temp-alist): Renamed from variable proced-children-alist.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100743
diff changeset
937 "For PROCESS-ALIST return list of parent processes of PID.
3bd2bab6d80f (proced-temp-alist): Renamed from variable proced-children-alist.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100743
diff changeset
938 This list includes PID unless OMIT-PID is non-nil."
3bd2bab6d80f (proced-temp-alist): Renamed from variable proced-children-alist.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100743
diff changeset
939 (let ((parent-list (unless omit-pid (list (assq pid process-alist))))
3bd2bab6d80f (proced-temp-alist): Renamed from variable proced-children-alist.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100743
diff changeset
940 (process (assq pid process-alist))
3bd2bab6d80f (proced-temp-alist): Renamed from variable proced-children-alist.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100743
diff changeset
941 ppid)
3bd2bab6d80f (proced-temp-alist): Renamed from variable proced-children-alist.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100743
diff changeset
942 (while (and (setq ppid (cdr (assq 'ppid (cdr process))))
3bd2bab6d80f (proced-temp-alist): Renamed from variable proced-children-alist.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100743
diff changeset
943 ;; Ignore a PPID that equals PID.
3bd2bab6d80f (proced-temp-alist): Renamed from variable proced-children-alist.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100743
diff changeset
944 (/= ppid pid)
3bd2bab6d80f (proced-temp-alist): Renamed from variable proced-children-alist.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100743
diff changeset
945 ;; Accept only PPIDs that correspond to members in PROCESS-ALIST.
3bd2bab6d80f (proced-temp-alist): Renamed from variable proced-children-alist.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100743
diff changeset
946 (setq process (assq ppid process-alist)))
3bd2bab6d80f (proced-temp-alist): Renamed from variable proced-children-alist.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100743
diff changeset
947 (setq pid ppid)
3bd2bab6d80f (proced-temp-alist): Renamed from variable proced-children-alist.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100743
diff changeset
948 (push process parent-list))
3bd2bab6d80f (proced-temp-alist): Renamed from variable proced-children-alist.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100743
diff changeset
949 parent-list))
3bd2bab6d80f (proced-temp-alist): Renamed from variable proced-children-alist.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100743
diff changeset
950
3bd2bab6d80f (proced-temp-alist): Renamed from variable proced-children-alist.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100743
diff changeset
951 (defun proced-filter-children (process-alist ppid &optional omit-ppid)
3bd2bab6d80f (proced-temp-alist): Renamed from variable proced-children-alist.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100743
diff changeset
952 "For PROCESS-ALIST return list of child processes of PPID.
3bd2bab6d80f (proced-temp-alist): Renamed from variable proced-children-alist.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100743
diff changeset
953 This list includes PPID unless OMIT-PPID is non-nil."
3bd2bab6d80f (proced-temp-alist): Renamed from variable proced-children-alist.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100743
diff changeset
954 (let ((proced-temp-alist (proced-children-alist process-alist))
3bd2bab6d80f (proced-temp-alist): Renamed from variable proced-children-alist.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100743
diff changeset
955 new-alist)
3bd2bab6d80f (proced-temp-alist): Renamed from variable proced-children-alist.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100743
diff changeset
956 (dolist (pid (proced-children-pids ppid))
3bd2bab6d80f (proced-temp-alist): Renamed from variable proced-children-alist.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100743
diff changeset
957 (push (assq pid process-alist) new-alist))
3bd2bab6d80f (proced-temp-alist): Renamed from variable proced-children-alist.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100743
diff changeset
958 (if omit-ppid
3bd2bab6d80f (proced-temp-alist): Renamed from variable proced-children-alist.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100743
diff changeset
959 (assq-delete-all ppid new-alist)
3bd2bab6d80f (proced-temp-alist): Renamed from variable proced-children-alist.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100743
diff changeset
960 new-alist)))
3bd2bab6d80f (proced-temp-alist): Renamed from variable proced-children-alist.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100743
diff changeset
961
3bd2bab6d80f (proced-temp-alist): Renamed from variable proced-children-alist.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100743
diff changeset
962 ;;; Process tree
3bd2bab6d80f (proced-temp-alist): Renamed from variable proced-children-alist.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100743
diff changeset
963
100735
8ec0632b600c (proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100570
diff changeset
964 (defun proced-children-alist (process-alist)
8ec0632b600c (proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100570
diff changeset
965 "Return children alist for PROCESS-ALIST.
8ec0632b600c (proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100570
diff changeset
966 The children alist has elements (PPID PID1 PID2 ...).
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
967 PPID is a parent PID. PID1, PID2, ... are the child processes of PPID.
100752
3bd2bab6d80f (proced-temp-alist): Renamed from variable proced-children-alist.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100743
diff changeset
968 The children alist inherits the sorting order of PROCESS-ALIST.
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
969 The list of children does not include grandchildren."
100735
8ec0632b600c (proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100570
diff changeset
970 ;; The PPIDs inherit the sorting order of PROCESS-ALIST.
8ec0632b600c (proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100570
diff changeset
971 (let ((process-tree (mapcar (lambda (a) (list (car a))) process-alist))
8ec0632b600c (proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100570
diff changeset
972 ppid)
8ec0632b600c (proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100570
diff changeset
973 (dolist (process process-alist)
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
974 (setq ppid (cdr (assq 'ppid (cdr process))))
100735
8ec0632b600c (proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100570
diff changeset
975 (if (and ppid
8ec0632b600c (proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100570
diff changeset
976 ;; Ignore a PPID that equals PID.
8ec0632b600c (proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100570
diff changeset
977 (/= ppid (car process))
8ec0632b600c (proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100570
diff changeset
978 ;; Accept only PPIDs that correspond to members in PROCESS-ALIST.
8ec0632b600c (proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100570
diff changeset
979 (assq ppid process-alist))
8ec0632b600c (proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100570
diff changeset
980 (let ((temp-alist process-tree) elt)
8ec0632b600c (proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100570
diff changeset
981 (while (setq elt (pop temp-alist))
8ec0632b600c (proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100570
diff changeset
982 (when (eq ppid (car elt))
8ec0632b600c (proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100570
diff changeset
983 (setq temp-alist nil)
8ec0632b600c (proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100570
diff changeset
984 (setcdr elt (cons (car process) (cdr elt))))))))
8ec0632b600c (proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100570
diff changeset
985 ;; The child processes inherit the sorting order of PROCESS-ALIST.
8ec0632b600c (proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100570
diff changeset
986 (setq process-tree
8ec0632b600c (proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100570
diff changeset
987 (mapcar (lambda (a) (cons (car a) (nreverse (cdr a))))
8ec0632b600c (proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100570
diff changeset
988 process-tree))))
8ec0632b600c (proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100570
diff changeset
989
100752
3bd2bab6d80f (proced-temp-alist): Renamed from variable proced-children-alist.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100743
diff changeset
990 (defun proced-children-pids (ppid)
3bd2bab6d80f (proced-temp-alist): Renamed from variable proced-children-alist.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100743
diff changeset
991 "Return list of children PIDs of PPID (including PPID)."
3bd2bab6d80f (proced-temp-alist): Renamed from variable proced-children-alist.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100743
diff changeset
992 (let ((cpids (cdr (assq ppid proced-temp-alist))))
3bd2bab6d80f (proced-temp-alist): Renamed from variable proced-children-alist.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100743
diff changeset
993 (if cpids
3bd2bab6d80f (proced-temp-alist): Renamed from variable proced-children-alist.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100743
diff changeset
994 (cons ppid (apply 'append (mapcar 'proced-children-pids cpids)))
3bd2bab6d80f (proced-temp-alist): Renamed from variable proced-children-alist.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100743
diff changeset
995 (list ppid))))
3bd2bab6d80f (proced-temp-alist): Renamed from variable proced-children-alist.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100743
diff changeset
996
100735
8ec0632b600c (proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100570
diff changeset
997 (defun proced-process-tree (process-alist)
100752
3bd2bab6d80f (proced-temp-alist): Renamed from variable proced-children-alist.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100743
diff changeset
998 "Return process tree for PROCESS-ALIST.
3bd2bab6d80f (proced-temp-alist): Renamed from variable proced-children-alist.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100743
diff changeset
999 It is an alist of alists where the car of each alist is a parent process
3bd2bab6d80f (proced-temp-alist): Renamed from variable proced-children-alist.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100743
diff changeset
1000 and the cdr is a list of child processes according to the ppid attribute
3bd2bab6d80f (proced-temp-alist): Renamed from variable proced-children-alist.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100743
diff changeset
1001 of these processes.
3bd2bab6d80f (proced-temp-alist): Renamed from variable proced-children-alist.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100743
diff changeset
1002 The process tree inherits the sorting order of PROCESS-ALIST."
3bd2bab6d80f (proced-temp-alist): Renamed from variable proced-children-alist.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100743
diff changeset
1003 (let ((proced-temp-alist (proced-children-alist process-alist))
100735
8ec0632b600c (proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100570
diff changeset
1004 pid-alist proced-process-tree)
100752
3bd2bab6d80f (proced-temp-alist): Renamed from variable proced-children-alist.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100743
diff changeset
1005 (while (setq pid-alist (pop proced-temp-alist))
100735
8ec0632b600c (proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100570
diff changeset
1006 (push (proced-process-tree-internal pid-alist) proced-process-tree))
8ec0632b600c (proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100570
diff changeset
1007 (nreverse proced-process-tree)))
8ec0632b600c (proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100570
diff changeset
1008
8ec0632b600c (proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100570
diff changeset
1009 (defun proced-process-tree-internal (pid-alist)
8ec0632b600c (proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100570
diff changeset
1010 "Helper function for `proced-process-tree'."
8ec0632b600c (proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100570
diff changeset
1011 (let ((cpid-list (cdr pid-alist)) cpid-alist cpid)
8ec0632b600c (proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100570
diff changeset
1012 (while (setq cpid (car cpid-list))
100752
3bd2bab6d80f (proced-temp-alist): Renamed from variable proced-children-alist.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100743
diff changeset
1013 (if (setq cpid-alist (assq cpid proced-temp-alist))
100735
8ec0632b600c (proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100570
diff changeset
1014 ;; Unprocessed part of process tree that needs to be
8ec0632b600c (proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100570
diff changeset
1015 ;; analyzed recursively.
8ec0632b600c (proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100570
diff changeset
1016 (progn
100752
3bd2bab6d80f (proced-temp-alist): Renamed from variable proced-children-alist.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100743
diff changeset
1017 (setq proced-temp-alist
3bd2bab6d80f (proced-temp-alist): Renamed from variable proced-children-alist.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100743
diff changeset
1018 (assq-delete-all cpid proced-temp-alist))
100735
8ec0632b600c (proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100570
diff changeset
1019 (setcar cpid-list (proced-process-tree-internal cpid-alist)))
8ec0632b600c (proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100570
diff changeset
1020 ;; We already processed this subtree and take it "as is".
8ec0632b600c (proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100570
diff changeset
1021 (setcar cpid-list (assq cpid proced-process-tree))
8ec0632b600c (proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100570
diff changeset
1022 (setq proced-process-tree
8ec0632b600c (proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100570
diff changeset
1023 (assq-delete-all cpid proced-process-tree)))
8ec0632b600c (proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100570
diff changeset
1024 (pop cpid-list)))
8ec0632b600c (proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100570
diff changeset
1025 pid-alist)
8ec0632b600c (proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100570
diff changeset
1026
8ec0632b600c (proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100570
diff changeset
1027 (defun proced-toggle-tree (arg)
100752
3bd2bab6d80f (proced-temp-alist): Renamed from variable proced-children-alist.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100743
diff changeset
1028 "Toggle the display of the process listing as process tree.
100735
8ec0632b600c (proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100570
diff changeset
1029 With prefix ARG, display as process tree if ARG is positive, otherwise
100752
3bd2bab6d80f (proced-temp-alist): Renamed from variable proced-children-alist.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100743
diff changeset
1030 do not display as process tree. Sets the variable `proced-tree-flag'.
3bd2bab6d80f (proced-temp-alist): Renamed from variable proced-children-alist.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100743
diff changeset
1031
3bd2bab6d80f (proced-temp-alist): Renamed from variable proced-children-alist.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100743
diff changeset
1032 The process tree is generated from the selected processes in the
3bd2bab6d80f (proced-temp-alist): Renamed from variable proced-children-alist.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100743
diff changeset
1033 Proced buffer (that is, the processes in `proced-process-alist').
3bd2bab6d80f (proced-temp-alist): Renamed from variable proced-children-alist.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100743
diff changeset
1034 All processes that do not have a parent process in this list
3bd2bab6d80f (proced-temp-alist): Renamed from variable proced-children-alist.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100743
diff changeset
1035 according to their ppid attribute become the root of a process tree.
3bd2bab6d80f (proced-temp-alist): Renamed from variable proced-children-alist.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100743
diff changeset
1036 Each parent process is followed by its child processes.
3bd2bab6d80f (proced-temp-alist): Renamed from variable proced-children-alist.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100743
diff changeset
1037 The process tree inherits the chosen sorting order of the process listing,
3bd2bab6d80f (proced-temp-alist): Renamed from variable proced-children-alist.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100743
diff changeset
1038 that is, child processes of the same parent process are sorted using
3bd2bab6d80f (proced-temp-alist): Renamed from variable proced-children-alist.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100743
diff changeset
1039 the selected sorting order."
100735
8ec0632b600c (proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100570
diff changeset
1040 (interactive (list (or current-prefix-arg 'toggle)))
8ec0632b600c (proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100570
diff changeset
1041 (setq proced-tree-flag
8ec0632b600c (proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100570
diff changeset
1042 (cond ((eq arg 'toggle) (not proced-tree-flag))
8ec0632b600c (proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100570
diff changeset
1043 (arg (> (prefix-numeric-value arg) 0))
8ec0632b600c (proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100570
diff changeset
1044 (t (not proced-tree-flag))))
8ec0632b600c (proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100570
diff changeset
1045 (proced-update)
8ec0632b600c (proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100570
diff changeset
1046 (message "Proced process tree display %s"
8ec0632b600c (proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100570
diff changeset
1047 (if proced-tree-flag "enabled" "disabled")))
8ec0632b600c (proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100570
diff changeset
1048
8ec0632b600c (proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100570
diff changeset
1049 (defun proced-tree (process-alist)
100752
3bd2bab6d80f (proced-temp-alist): Renamed from variable proced-children-alist.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100743
diff changeset
1050 "Rearrange PROCESS-ALIST as process tree.
3bd2bab6d80f (proced-temp-alist): Renamed from variable proced-children-alist.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100743
diff changeset
1051 If `proced-tree-flag' is non-nil, rearrange PROCESS-ALIST such that
3bd2bab6d80f (proced-temp-alist): Renamed from variable proced-children-alist.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100743
diff changeset
1052 every processes is followed by its child processes. Each process
3bd2bab6d80f (proced-temp-alist): Renamed from variable proced-children-alist.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100743
diff changeset
1053 gets a tree attribute that specifies the depth of the process in the tree.
3bd2bab6d80f (proced-temp-alist): Renamed from variable proced-children-alist.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100743
diff changeset
1054 A root process is a process with no parent within PROCESS-ALIST according
3bd2bab6d80f (proced-temp-alist): Renamed from variable proced-children-alist.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100743
diff changeset
1055 to its value of the ppid attribute. It has depth 0.
3bd2bab6d80f (proced-temp-alist): Renamed from variable proced-children-alist.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100743
diff changeset
1056
3bd2bab6d80f (proced-temp-alist): Renamed from variable proced-children-alist.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100743
diff changeset
1057 If `proced-tree-flag' is nil, remove the tree attribute.
3bd2bab6d80f (proced-temp-alist): Renamed from variable proced-children-alist.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100743
diff changeset
1058 Return the rearranged process list."
100735
8ec0632b600c (proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100570
diff changeset
1059 (if proced-tree-flag
8ec0632b600c (proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100570
diff changeset
1060 ;; add tree attribute
8ec0632b600c (proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100570
diff changeset
1061 (let ((process-tree (proced-process-tree process-alist))
100847
883cbe72dc04 (proced-grammar-alist): Refiner can be a list (function help-echo)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100763
diff changeset
1062 (proced-tree-depth 0)
100752
3bd2bab6d80f (proced-temp-alist): Renamed from variable proced-children-alist.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100743
diff changeset
1063 (proced-temp-alist process-alist)
100735
8ec0632b600c (proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100570
diff changeset
1064 proced-process-tree pt)
8ec0632b600c (proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100570
diff changeset
1065 (while (setq pt (pop process-tree))
8ec0632b600c (proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100570
diff changeset
1066 (proced-tree-insert pt))
8ec0632b600c (proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100570
diff changeset
1067 (nreverse proced-process-tree))
100752
3bd2bab6d80f (proced-temp-alist): Renamed from variable proced-children-alist.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100743
diff changeset
1068 ;; remove tree attribute
3bd2bab6d80f (proced-temp-alist): Renamed from variable proced-children-alist.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100743
diff changeset
1069 (let ((process-alist process-alist))
3bd2bab6d80f (proced-temp-alist): Renamed from variable proced-children-alist.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100743
diff changeset
1070 (while process-alist
3bd2bab6d80f (proced-temp-alist): Renamed from variable proced-children-alist.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100743
diff changeset
1071 (setcar process-alist
3bd2bab6d80f (proced-temp-alist): Renamed from variable proced-children-alist.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100743
diff changeset
1072 (assq-delete-all 'tree (car process-alist)))
3bd2bab6d80f (proced-temp-alist): Renamed from variable proced-children-alist.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100743
diff changeset
1073 (pop process-alist)))
3bd2bab6d80f (proced-temp-alist): Renamed from variable proced-children-alist.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100743
diff changeset
1074 process-alist))
100735
8ec0632b600c (proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100570
diff changeset
1075
8ec0632b600c (proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100570
diff changeset
1076 (defun proced-tree-insert (process-tree)
8ec0632b600c (proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100570
diff changeset
1077 "Helper function for `proced-tree'."
100752
3bd2bab6d80f (proced-temp-alist): Renamed from variable proced-children-alist.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100743
diff changeset
1078 (let ((pprocess (assq (car process-tree) proced-temp-alist)))
100735
8ec0632b600c (proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100570
diff changeset
1079 (push (append (list (car pprocess))
100847
883cbe72dc04 (proced-grammar-alist): Refiner can be a list (function help-echo)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100763
diff changeset
1080 (list (cons 'tree proced-tree-depth))
100735
8ec0632b600c (proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100570
diff changeset
1081 (cdr pprocess))
8ec0632b600c (proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100570
diff changeset
1082 proced-process-tree)
8ec0632b600c (proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100570
diff changeset
1083 (if (cdr process-tree)
100847
883cbe72dc04 (proced-grammar-alist): Refiner can be a list (function help-echo)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100763
diff changeset
1084 (let ((proced-tree-depth (1+ proced-tree-depth)))
100735
8ec0632b600c (proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100570
diff changeset
1085 (mapc 'proced-tree-insert (cdr process-tree))))))
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1086
98162
d5c5ea23d8ea (proced-sort-header): New face.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98064
diff changeset
1087 ;; Refining
d5c5ea23d8ea (proced-sort-header): New face.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98064
diff changeset
1088
d5c5ea23d8ea (proced-sort-header): New face.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98064
diff changeset
1089 ;; Filters are used to select the processes in a new listing.
d5c5ea23d8ea (proced-sort-header): New face.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98064
diff changeset
1090 ;; Refiners are used to narrow down further (interactively) the processes
d5c5ea23d8ea (proced-sort-header): New face.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98064
diff changeset
1091 ;; in an existing listing.
d5c5ea23d8ea (proced-sort-header): New face.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98064
diff changeset
1092
d5c5ea23d8ea (proced-sort-header): New face.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98064
diff changeset
1093 (defun proced-refine (&optional event)
d5c5ea23d8ea (proced-sort-header): New face.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98064
diff changeset
1094 "Refine Proced listing by comparing with the attribute value at point.
d5c5ea23d8ea (proced-sort-header): New face.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98064
diff changeset
1095 Optional EVENT is the location of the Proced field.
d5c5ea23d8ea (proced-sort-header): New face.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98064
diff changeset
1096
100422
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
1097 Refinement is controlled by the REFINER defined for each attribute ATTR
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
1098 in `proced-grammar-alist'.
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
1099
100424
586161dec886 (proced-sort-interactive, proced-sort-pcpu)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100422
diff changeset
1100 If REFINER is a list of flags and point is on a process's value of ATTR,
586161dec886 (proced-sort-interactive, proced-sort-pcpu)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100422
diff changeset
1101 this command compares the value of ATTR of every process with the value
586161dec886 (proced-sort-interactive, proced-sort-pcpu)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100422
diff changeset
1102 of ATTR of the process at the position of point.
98162
d5c5ea23d8ea (proced-sort-header): New face.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98064
diff changeset
1103
d5c5ea23d8ea (proced-sort-header): New face.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98064
diff changeset
1104 The predicate for the comparison of two ATTR values is defined
d5c5ea23d8ea (proced-sort-header): New face.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98064
diff changeset
1105 in `proced-grammar-alist'. For each return value of the predicate
100422
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
1106 a refine flag is defined in `proced-grammar-alist'. One can select
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
1107 processes for which the value of ATTR is \"less than\", \"equal\",
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
1108 and / or \"larger\" than ATTR of the process point is on. A process
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
1109 is included in the new listing if the refine flag for the corresponding
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
1110 return value of the predicate is non-nil.
98162
d5c5ea23d8ea (proced-sort-header): New face.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98064
diff changeset
1111 The help-echo string for `proced-refine' uses \"+\" or \"-\" to indicate
100422
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
1112 the current values of these refine flags.
98162
d5c5ea23d8ea (proced-sort-header): New face.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98064
diff changeset
1113
100422
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
1114 If REFINER is a cons pair (FUNCTION . HELP-ECHO), FUNCTION is called
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
1115 with one argument, the PID of the process at the position of point.
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
1116 The function must return a list of PIDs that is used for the refined
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
1117 listing. HELP-ECHO is a string that is shown when mouse is over this field.
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
1118
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
1119 This command refines an already existing process listing generated initially
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
1120 based on the value of the variable `proced-filter'. It does not change
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
1121 this variable. It does not revert the listing. If you frequently need
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
1122 a certain refinement, consider defining a new filter in `proced-filter-alist'."
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1123 (interactive (list last-input-event))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1124 (if event (posn-set-point (event-end event)))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1125 (let ((key (get-text-property (point) 'proced-key))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1126 (pid (get-text-property (point) 'proced-pid)))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1127 (if (and key pid)
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1128 (let* ((grammar (assq key proced-grammar-alist))
100422
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
1129 (refiner (nth 7 grammar)))
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
1130 (when refiner
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
1131 (cond ((functionp (car refiner))
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
1132 (setq proced-process-alist (funcall (car refiner) pid)))
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
1133 ((consp refiner)
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
1134 (let ((predicate (nth 4 grammar))
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
1135 (ref (cdr (assq key (cdr (assq pid proced-process-alist)))))
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
1136 val new-alist)
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
1137 (dolist (process proced-process-alist)
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
1138 (setq val (funcall predicate (cdr (assq key (cdr process))) ref))
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
1139 (if (cond ((not val) (nth 2 refiner))
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
1140 ((eq val 'equal) (nth 1 refiner))
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
1141 (val (car refiner)))
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
1142 (push process new-alist)))
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
1143 (setq proced-process-alist new-alist))))
98162
d5c5ea23d8ea (proced-sort-header): New face.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98064
diff changeset
1144 ;; Do not revert listing.
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1145 (proced-update)))
98162
d5c5ea23d8ea (proced-sort-header): New face.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98064
diff changeset
1146 (message "No refiner defined here."))))
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1147
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1148 ;; Proced predicates for sorting and filtering are based on a three-valued
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1149 ;; logic:
98162
d5c5ea23d8ea (proced-sort-header): New face.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98064
diff changeset
1150 ;; Predicates take two arguments P1 and P2, the corresponding attribute
d5c5ea23d8ea (proced-sort-header): New face.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98064
diff changeset
1151 ;; values of two processes. Predicates should return 'equal if P1 has
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1152 ;; same rank like P2. Any other non-nil value says that P1 is "less than" P2,
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1153 ;; or nil if not.
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1154
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1155 (defun proced-< (num1 num2)
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1156 "Return t if NUM1 less than NUM2.
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1157 Return `equal' if NUM1 equals NUM2. Return nil if NUM1 greater than NUM2."
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1158 (if (= num1 num2)
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1159 'equal
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1160 (< num1 num2)))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1161
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1162 (defun proced-string-lessp (s1 s2)
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1163 "Return t if string S1 is less than S2 in lexicographic order.
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1164 Return `equal' if S1 and S2 have identical contents.
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1165 Return nil otherwise."
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1166 (if (string= s1 s2)
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1167 'equal
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1168 (string-lessp s1 s2)))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1169
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1170 (defun proced-time-lessp (t1 t2)
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1171 "Return t if time value T1 is less than time value T2.
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1172 Return `equal' if T1 equals T2. Return nil otherwise."
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1173 (with-decoded-time-value ((high1 low1 micro1 t1)
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1174 (high2 low2 micro2 t2))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1175 (cond ((< high1 high2))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1176 ((< high2 high1) nil)
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1177 ((< low1 low2))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1178 ((< low2 low1) nil)
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1179 ((< micro1 micro2))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1180 ((< micro2 micro1) nil)
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1181 (t 'equal))))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1182
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1183 ;;; Sorting
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1184
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1185 (defsubst proced-xor (b1 b2)
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1186 "Return the logical exclusive or of args B1 and B2."
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1187 (and (or b1 b2)
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1188 (not (and b1 b2))))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1189
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1190 (defun proced-sort-p (p1 p2)
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1191 "Predicate for sorting processes P1 and P2."
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1192 (if (not (cdr proced-sort-internal))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1193 ;; only one predicate: fast scheme
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1194 (let* ((sorter (car proced-sort-internal))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1195 (k1 (cdr (assq (car sorter) (cdr p1))))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1196 (k2 (cdr (assq (car sorter) (cdr p2)))))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1197 ;; if the attributes are undefined, we should really abort sorting
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1198 (if (and k1 k2)
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1199 (proced-xor (funcall (nth 1 sorter) k1 k2)
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1200 (nth 2 sorter))))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1201 (let ((sort-list proced-sort-internal) sorter predicate k1 k2)
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1202 (catch 'done
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1203 (while (setq sorter (pop sort-list))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1204 (setq k1 (cdr (assq (car sorter) (cdr p1)))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1205 k2 (cdr (assq (car sorter) (cdr p2)))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1206 predicate
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1207 (if (and k1 k2)
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1208 (funcall (nth 1 sorter) k1 k2)))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1209 (if (not (eq predicate 'equal))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1210 (throw 'done (proced-xor predicate (nth 2 sorter)))))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1211 (eq t predicate)))))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1212
100422
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
1213 (defun proced-sort (process-alist sorter descend)
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1214 "Sort PROCESS-ALIST using scheme SORTER.
100422
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
1215 SORTER is a scheme like `proced-sort'.
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
1216 DESCEND is non-nil if the first element of SORTER is sorted
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
1217 in descending order.
98162
d5c5ea23d8ea (proced-sort-header): New face.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98064
diff changeset
1218 Return the sorted process list."
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1219 ;; translate SORTER into a list of lists (KEY PREDICATE REVERSE)
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1220 (setq proced-sort-internal
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1221 (mapcar (lambda (arg)
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1222 (let ((grammar (assq arg proced-grammar-alist)))
100735
8ec0632b600c (proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100570
diff changeset
1223 (unless (nth 4 grammar)
8ec0632b600c (proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100570
diff changeset
1224 (error "Attribute %s not sortable" (car grammar)))
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1225 (list arg (nth 4 grammar) (nth 5 grammar))))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1226 (cond ((listp sorter) sorter)
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1227 ((and (symbolp sorter)
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1228 (nth 6 (assq sorter proced-grammar-alist))))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1229 ((symbolp sorter) (list sorter))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1230 (t (error "Sorter undefined %s" sorter)))))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1231 (if proced-sort-internal
100422
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
1232 (progn
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
1233 ;; splice DESCEND into the list
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
1234 (setcar proced-sort-internal
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
1235 (list (caar proced-sort-internal)
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
1236 (nth 1 (car proced-sort-internal)) descend))
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
1237 (sort process-alist 'proced-sort-p))
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1238 process-alist))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1239
100424
586161dec886 (proced-sort-interactive, proced-sort-pcpu)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100422
diff changeset
1240 (defun proced-sort-interactive (scheme &optional arg)
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1241 "Sort Proced buffer using SCHEME.
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1242 When called interactively, an empty string means nil, i.e., no sorting.
98162
d5c5ea23d8ea (proced-sort-header): New face.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98064
diff changeset
1243
100424
586161dec886 (proced-sort-interactive, proced-sort-pcpu)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100422
diff changeset
1244 Prefix ARG controls sort order:
586161dec886 (proced-sort-interactive, proced-sort-pcpu)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100422
diff changeset
1245 - If prefix ARG is positive (negative), sort in ascending (descending) order.
586161dec886 (proced-sort-interactive, proced-sort-pcpu)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100422
diff changeset
1246 - If ARG is nil or 'no-arg and SCHEME is equal to the previous sorting scheme,
586161dec886 (proced-sort-interactive, proced-sort-pcpu)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100422
diff changeset
1247 reverse the sorting order.
586161dec886 (proced-sort-interactive, proced-sort-pcpu)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100422
diff changeset
1248 - If ARG is nil or 'no-arg and SCHEME differs from the previous sorting scheme,
586161dec886 (proced-sort-interactive, proced-sort-pcpu)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100422
diff changeset
1249 adopt the sorting order defined for SCHEME in `proced-grammar-alist'.
100422
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
1250
98162
d5c5ea23d8ea (proced-sort-header): New face.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98064
diff changeset
1251 Set variable `proced-sort' to SCHEME. The current sort scheme is displayed
d5c5ea23d8ea (proced-sort-header): New face.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98064
diff changeset
1252 in the mode line, using \"+\" or \"-\" for ascending or descending order."
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1253 (interactive
100735
8ec0632b600c (proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100570
diff changeset
1254 (let* (choices
8ec0632b600c (proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100570
diff changeset
1255 (scheme (completing-read "Sort attribute: "
8ec0632b600c (proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100570
diff changeset
1256 (dolist (grammar proced-grammar-alist choices)
8ec0632b600c (proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100570
diff changeset
1257 (if (nth 4 grammar)
8ec0632b600c (proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100570
diff changeset
1258 (push (list (car grammar)) choices)))
8ec0632b600c (proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100570
diff changeset
1259 nil t)))
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1260 (list (if (string= "" scheme) nil (intern scheme))
100424
586161dec886 (proced-sort-interactive, proced-sort-pcpu)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100422
diff changeset
1261 ;; like 'toggle in `define-derived-mode'
586161dec886 (proced-sort-interactive, proced-sort-pcpu)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100422
diff changeset
1262 (or current-prefix-arg 'no-arg))))
93212
134b2dc25692 proced.el: New file.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff changeset
1263
100424
586161dec886 (proced-sort-interactive, proced-sort-pcpu)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100422
diff changeset
1264 (setq proced-descend
586161dec886 (proced-sort-interactive, proced-sort-pcpu)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100422
diff changeset
1265 ;; If `proced-sort-interactive' is called repeatedly for the same
586161dec886 (proced-sort-interactive, proced-sort-pcpu)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100422
diff changeset
1266 ;; sort key, the sort order is reversed.
586161dec886 (proced-sort-interactive, proced-sort-pcpu)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100422
diff changeset
1267 (cond ((and (eq arg 'no-arg) (equal proced-sort scheme))
586161dec886 (proced-sort-interactive, proced-sort-pcpu)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100422
diff changeset
1268 (not proced-descend))
586161dec886 (proced-sort-interactive, proced-sort-pcpu)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100422
diff changeset
1269 ((eq arg 'no-arg)
586161dec886 (proced-sort-interactive, proced-sort-pcpu)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100422
diff changeset
1270 (nth 5 (assq (if (consp scheme) (car scheme) scheme)
586161dec886 (proced-sort-interactive, proced-sort-pcpu)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100422
diff changeset
1271 proced-grammar-alist)))
586161dec886 (proced-sort-interactive, proced-sort-pcpu)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100422
diff changeset
1272 (arg (< (prefix-numeric-value arg) 0))
586161dec886 (proced-sort-interactive, proced-sort-pcpu)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100422
diff changeset
1273 ((equal proced-sort scheme)
586161dec886 (proced-sort-interactive, proced-sort-pcpu)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100422
diff changeset
1274 (not proced-descend))
586161dec886 (proced-sort-interactive, proced-sort-pcpu)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100422
diff changeset
1275 (t (nth 5 (assq (if (consp scheme) (car scheme) scheme)
586161dec886 (proced-sort-interactive, proced-sort-pcpu)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100422
diff changeset
1276 proced-grammar-alist))))
586161dec886 (proced-sort-interactive, proced-sort-pcpu)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100422
diff changeset
1277 proced-sort scheme)
586161dec886 (proced-sort-interactive, proced-sort-pcpu)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100422
diff changeset
1278 (proced-update))
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1279
100424
586161dec886 (proced-sort-interactive, proced-sort-pcpu)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100422
diff changeset
1280 (defun proced-sort-pcpu (&optional arg)
586161dec886 (proced-sort-interactive, proced-sort-pcpu)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100422
diff changeset
1281 "Sort Proced buffer by percentage CPU time (%CPU).
586161dec886 (proced-sort-interactive, proced-sort-pcpu)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100422
diff changeset
1282 Prefix ARG controls sort order, see `proced-sort-interactive'."
586161dec886 (proced-sort-interactive, proced-sort-pcpu)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100422
diff changeset
1283 (interactive (list (or current-prefix-arg 'no-arg)))
586161dec886 (proced-sort-interactive, proced-sort-pcpu)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100422
diff changeset
1284 (proced-sort-interactive 'pcpu arg))
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1285
100424
586161dec886 (proced-sort-interactive, proced-sort-pcpu)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100422
diff changeset
1286 (defun proced-sort-pmem (&optional arg)
586161dec886 (proced-sort-interactive, proced-sort-pcpu)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100422
diff changeset
1287 "Sort Proced buffer by percentage memory usage (%MEM).
586161dec886 (proced-sort-interactive, proced-sort-pcpu)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100422
diff changeset
1288 Prefix ARG controls sort order, see `proced-sort-interactive'."
586161dec886 (proced-sort-interactive, proced-sort-pcpu)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100422
diff changeset
1289 (interactive (list (or current-prefix-arg 'no-arg)))
586161dec886 (proced-sort-interactive, proced-sort-pcpu)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100422
diff changeset
1290 (proced-sort-interactive 'pmem arg))
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1291
100424
586161dec886 (proced-sort-interactive, proced-sort-pcpu)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100422
diff changeset
1292 (defun proced-sort-pid (&optional arg)
586161dec886 (proced-sort-interactive, proced-sort-pcpu)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100422
diff changeset
1293 "Sort Proced buffer by PID.
586161dec886 (proced-sort-interactive, proced-sort-pcpu)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100422
diff changeset
1294 Prefix ARG controls sort order, see `proced-sort-interactive'."
586161dec886 (proced-sort-interactive, proced-sort-pcpu)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100422
diff changeset
1295 (interactive (list (or current-prefix-arg 'no-arg)))
586161dec886 (proced-sort-interactive, proced-sort-pcpu)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100422
diff changeset
1296 (proced-sort-interactive 'pid arg))
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1297
100424
586161dec886 (proced-sort-interactive, proced-sort-pcpu)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100422
diff changeset
1298 (defun proced-sort-start (&optional arg)
586161dec886 (proced-sort-interactive, proced-sort-pcpu)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100422
diff changeset
1299 "Sort Proced buffer by time the command started (START).
586161dec886 (proced-sort-interactive, proced-sort-pcpu)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100422
diff changeset
1300 Prefix ARG controls sort order, see `proced-sort-interactive'."
586161dec886 (proced-sort-interactive, proced-sort-pcpu)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100422
diff changeset
1301 (interactive (list (or current-prefix-arg 'no-arg)))
586161dec886 (proced-sort-interactive, proced-sort-pcpu)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100422
diff changeset
1302 (proced-sort-interactive 'start arg))
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1303
100424
586161dec886 (proced-sort-interactive, proced-sort-pcpu)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100422
diff changeset
1304 (defun proced-sort-time (&optional arg)
586161dec886 (proced-sort-interactive, proced-sort-pcpu)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100422
diff changeset
1305 "Sort Proced buffer by CPU time (TIME).
586161dec886 (proced-sort-interactive, proced-sort-pcpu)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100422
diff changeset
1306 Prefix ARG controls sort order, see `proced-sort-interactive'."
586161dec886 (proced-sort-interactive, proced-sort-pcpu)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100422
diff changeset
1307 (interactive (list (or current-prefix-arg 'no-arg)))
586161dec886 (proced-sort-interactive, proced-sort-pcpu)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100422
diff changeset
1308 (proced-sort-interactive 'time arg))
586161dec886 (proced-sort-interactive, proced-sort-pcpu)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100422
diff changeset
1309
586161dec886 (proced-sort-interactive, proced-sort-pcpu)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100422
diff changeset
1310 (defun proced-sort-user (&optional arg)
100422
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
1311 "Sort Proced buffer by USER.
100424
586161dec886 (proced-sort-interactive, proced-sort-pcpu)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100422
diff changeset
1312 Prefix ARG controls sort order, see `proced-sort-interactive'."
586161dec886 (proced-sort-interactive, proced-sort-pcpu)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100422
diff changeset
1313 (interactive (list (or current-prefix-arg 'no-arg)))
586161dec886 (proced-sort-interactive, proced-sort-pcpu)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100422
diff changeset
1314 (proced-sort-interactive 'user arg))
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1315
100424
586161dec886 (proced-sort-interactive, proced-sort-pcpu)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100422
diff changeset
1316 (defun proced-sort-header (event &optional arg)
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1317 "Sort Proced listing based on an attribute.
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1318 EVENT is a mouse event with starting position in the header line.
100570
496de5bd1f6d * proced.el (proced-grammar-alist): Doc fix.
Juanma Barranquero <lekktu@gmail.com>
parents: 100424
diff changeset
1319 It is converted to the corresponding attribute key.
100422
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
1320 This command updates the variable `proced-sort'.
100424
586161dec886 (proced-sort-interactive, proced-sort-pcpu)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100422
diff changeset
1321 Prefix ARG controls sort order, see `proced-sort-interactive'."
586161dec886 (proced-sort-interactive, proced-sort-pcpu)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100422
diff changeset
1322 (interactive (list last-input-event (or last-prefix-arg 'no-arg)))
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1323 (let ((start (event-start event))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1324 col key)
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1325 (save-selected-window
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1326 (select-window (posn-window start))
98172
87d64c3d48ac (proced-mark-face, proced-marked-face)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98162
diff changeset
1327 (setq col (+ (1- (car (posn-actual-col-row start)))
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1328 (window-hscroll)))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1329 (when (and (<= 0 col) (< col (length proced-header-line)))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1330 (setq key (get-text-property col 'proced-key proced-header-line))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1331 (if key
100424
586161dec886 (proced-sort-interactive, proced-sort-pcpu)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100422
diff changeset
1332 (proced-sort-interactive key arg)
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1333 (message "No sorter defined here."))))))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1334
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1335 ;;; Formating
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1336
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1337 (defun proced-format-time (time)
99726
38b176122f90 (proced, proced-format-time): Doc fixes.
Glenn Morris <rgm@gnu.org>
parents: 98249
diff changeset
1338 "Format time interval TIME."
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1339 (let* ((ftime (float-time time))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1340 (days (truncate ftime 86400))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1341 (ftime (mod ftime 86400))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1342 (hours (truncate ftime 3600))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1343 (ftime (mod ftime 3600))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1344 (minutes (truncate ftime 60))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1345 (seconds (mod ftime 60)))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1346 (cond ((< 0 days)
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1347 (format "%d-%02d:%02d:%02d" days hours minutes seconds))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1348 ((< 0 hours)
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1349 (format "%02d:%02d:%02d" hours minutes seconds))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1350 (t
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1351 (format "%02d:%02d" minutes seconds)))))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1352
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1353 (defun proced-format-start (start)
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1354 "Format time START.
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1355 The return string is always 6 characters wide."
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1356 (let ((d-start (decode-time start))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1357 (d-current (decode-time)))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1358 (cond ( ;; process started in previous years
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1359 (< (nth 5 d-start) (nth 5 d-current))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1360 (format-time-string " %Y" start))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1361 ;; process started today
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1362 ((and (= (nth 3 d-start) (nth 3 d-current))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1363 (= (nth 4 d-start) (nth 4 d-current)))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1364 (format-time-string " %H:%M" start))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1365 (t ;; process started this year
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1366 (format-time-string "%b %e" start)))))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1367
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1368 (defun proced-format-ttname (ttname)
98162
d5c5ea23d8ea (proced-sort-header): New face.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98064
diff changeset
1369 "Format attribute TTNAME, omitting path \"/dev/\"."
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1370 ;; Does this work for all systems?
98162
d5c5ea23d8ea (proced-sort-header): New face.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98064
diff changeset
1371 (substring ttname (if (string-match "\\`/dev/" ttname)
d5c5ea23d8ea (proced-sort-header): New face.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98064
diff changeset
1372 (match-end 0) 0)))
d5c5ea23d8ea (proced-sort-header): New face.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98064
diff changeset
1373
100735
8ec0632b600c (proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100570
diff changeset
1374 (defun proced-format-tree (tree)
8ec0632b600c (proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100570
diff changeset
1375 "Format attribute TREE."
8ec0632b600c (proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100570
diff changeset
1376 (concat (make-string tree ?\s) (number-to-string tree)))
8ec0632b600c (proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100570
diff changeset
1377
100422
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
1378 ;; Proced assumes that every process occupies only one line in the listing.
98162
d5c5ea23d8ea (proced-sort-header): New face.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98064
diff changeset
1379 (defun proced-format-args (args)
d5c5ea23d8ea (proced-sort-header): New face.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98064
diff changeset
1380 "Format attribute ARGS.
d5c5ea23d8ea (proced-sort-header): New face.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98064
diff changeset
1381 Replace newline characters by \"^J\" (two characters)."
d5c5ea23d8ea (proced-sort-header): New face.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98064
diff changeset
1382 (replace-regexp-in-string "\n" "^J" args))
95168
a031e38a88d4 (proced-header-line): New variable and new function.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 95135
diff changeset
1383
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1384 (defun proced-format (process-alist format)
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1385 "Display PROCESS-ALIST using FORMAT."
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1386 (if (symbolp format)
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1387 (setq format (cdr (assq format proced-format-alist))))
100422
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
1388
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
1389 ;; Not all systems give us all attributes. We take `emacs-pid' as a
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
1390 ;; representative process PID. If FORMAT contains a list of alternative
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
1391 ;; attributes, we take the first attribute that is non-nil for `emacs-pid'.
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
1392 ;; If none of the alternatives is non-nil, the attribute is ignored
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
1393 ;; in the listing.
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
1394 (let ((standard-attributes
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
1395 (car (proced-process-attributes (list (emacs-pid)))))
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
1396 new-format fmi)
100847
883cbe72dc04 (proced-grammar-alist): Refiner can be a list (function help-echo)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100763
diff changeset
1397 (if (and proced-tree-flag
883cbe72dc04 (proced-grammar-alist): Refiner can be a list (function help-echo)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100763
diff changeset
1398 (assq 'ppid standard-attributes))
883cbe72dc04 (proced-grammar-alist): Refiner can be a list (function help-echo)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100763
diff changeset
1399 (push (cons 'tree 0) standard-attributes))
100422
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
1400 (dolist (fmt format)
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
1401 (if (symbolp fmt)
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
1402 (if (assq fmt standard-attributes)
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
1403 (push fmt new-format))
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
1404 (while (setq fmi (pop fmt))
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
1405 (when (assq fmi standard-attributes)
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
1406 (push fmi new-format)
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
1407 (setq fmt nil)))))
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
1408 (setq format (nreverse new-format)))
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
1409
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1410 (insert (make-string (length process-alist) ?\n))
100422
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
1411 (let ((whitespace " ") (unknown "?")
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
1412 (sort-key (if (consp proced-sort) (car proced-sort) proced-sort))
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
1413 header-list grammar)
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1414 ;; Loop over all attributes
100422
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
1415 (while (setq grammar (assq (pop format) proced-grammar-alist))
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1416 (let* ((key (car grammar))
98162
d5c5ea23d8ea (proced-sort-header): New face.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98064
diff changeset
1417 (fun (cond ((stringp (nth 2 grammar))
d5c5ea23d8ea (proced-sort-header): New face.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98064
diff changeset
1418 `(lambda (arg) (format ,(nth 2 grammar) arg)))
d5c5ea23d8ea (proced-sort-header): New face.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98064
diff changeset
1419 ((not (nth 2 grammar)) 'identity)
d5c5ea23d8ea (proced-sort-header): New face.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98064
diff changeset
1420 ( t (nth 2 grammar))))
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1421 (whitespace (if format whitespace ""))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1422 ;; Text properties:
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1423 ;; We use the text property `proced-key' to store in each
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1424 ;; field the corresponding key.
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1425 ;; Of course, the sort predicate appearing in help-echo
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1426 ;; is only part of the story. But it gives the main idea.
100735
8ec0632b600c (proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100570
diff changeset
1427 (hprops
8ec0632b600c (proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100570
diff changeset
1428 (if (nth 4 grammar)
8ec0632b600c (proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100570
diff changeset
1429 (let ((descend (if (eq key sort-key) proced-descend (nth 5 grammar))))
8ec0632b600c (proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100570
diff changeset
1430 `(proced-key ,key mouse-face highlight
8ec0632b600c (proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100570
diff changeset
1431 help-echo ,(format proced-header-help-echo
8ec0632b600c (proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100570
diff changeset
1432 (if descend "-" "+")
8ec0632b600c (proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100570
diff changeset
1433 (nth 1 grammar)
8ec0632b600c (proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100570
diff changeset
1434 (if descend "descending" "ascending"))))))
100422
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
1435 (refiner (nth 7 grammar))
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
1436 (fprops
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
1437 (cond ((functionp (car refiner))
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
1438 `(proced-key ,key mouse-face highlight
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
1439 help-echo ,(format "mouse-2, RET: %s"
100847
883cbe72dc04 (proced-grammar-alist): Refiner can be a list (function help-echo)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100763
diff changeset
1440 (nth 1 refiner))))
100422
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
1441 ((consp refiner)
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
1442 `(proced-key ,key mouse-face highlight
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
1443 help-echo ,(format "mouse-2, RET: refine by attribute %s %s"
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1444 (nth 1 grammar)
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1445 (mapconcat (lambda (s)
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1446 (if s "+" "-"))
100422
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
1447 refiner ""))))))
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1448 value)
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1449
98162
d5c5ea23d8ea (proced-sort-header): New face.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98064
diff changeset
1450 ;; highlight the header of the sort column
100422
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
1451 (if (eq key sort-key)
98172
87d64c3d48ac (proced-mark-face, proced-marked-face)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98162
diff changeset
1452 (setq hprops (append '(face proced-sort-header) hprops)))
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1453 (goto-char (point-min))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1454 (cond ( ;; fixed width of output field
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1455 (numberp (nth 3 grammar))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1456 (dolist (process process-alist)
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1457 (end-of-line)
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1458 (setq value (cdr (assq key (cdr process))))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1459 (insert (if value
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1460 (apply 'propertize (funcall fun value) fprops)
100422
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
1461 (format (concat "%" (number-to-string (nth 3 grammar)) "s")
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
1462 unknown))
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1463 whitespace)
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1464 (forward-line))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1465 (push (format (concat "%" (number-to-string (nth 3 grammar)) "s")
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1466 (apply 'propertize (nth 1 grammar) hprops))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1467 header-list))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1468
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1469 ( ;; last field left-justified
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1470 (and (not format) (eq 'left (nth 3 grammar)))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1471 (dolist (process process-alist)
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1472 (end-of-line)
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1473 (setq value (cdr (assq key (cdr process))))
100422
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
1474 (insert (if value (apply 'propertize (funcall fun value) fprops)
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
1475 unknown))
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1476 (forward-line))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1477 (push (apply 'propertize (nth 1 grammar) hprops) header-list))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1478
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1479 (t ;; calculated field width
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1480 (let ((width (length (nth 1 grammar)))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1481 field-list value)
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1482 (dolist (process process-alist)
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1483 (setq value (cdr (assq key (cdr process))))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1484 (if value
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1485 (setq value (apply 'propertize (funcall fun value) fprops)
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1486 width (max width (length value))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1487 field-list (cons value field-list))
100422
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
1488 (push unknown field-list)
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
1489 (setq width (max width (length unknown)))))
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1490 (let ((afmt (concat "%" (if (eq 'left (nth 3 grammar)) "-" "")
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1491 (number-to-string width) "s")))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1492 (push (format afmt (apply 'propertize (nth 1 grammar) hprops))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1493 header-list)
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1494 (dolist (value (nreverse field-list))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1495 (end-of-line)
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1496 (insert (format afmt value) whitespace)
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1497 (forward-line))))))))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1498
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1499 ;; final cleanup
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1500 (goto-char (point-min))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1501 (dolist (process process-alist)
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1502 ;; We use the text property `proced-pid' to store in each line
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1503 ;; the corresponding pid
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1504 (put-text-property (point) (line-end-position) 'proced-pid (car process))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1505 (forward-line))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1506 ;; Set header line
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1507 (setq proced-header-line
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1508 (mapconcat 'identity (nreverse header-list) whitespace))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1509 (if (string-match "[ \t]+$" proced-header-line)
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1510 (setq proced-header-line (substring proced-header-line 0
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1511 (match-beginning 0))))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1512 ;; (delete-trailing-whitespace)
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1513 (goto-char (point-min))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1514 (while (re-search-forward "[ \t\r]+$" nil t)
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1515 (delete-region (match-beginning 0) (match-end 0)))))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1516
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1517 (defun proced-format-interactive (scheme &optional revert)
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1518 "Format Proced buffer using SCHEME.
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1519 When called interactively, an empty string means nil, i.e., no formatting.
98162
d5c5ea23d8ea (proced-sort-header): New face.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98064
diff changeset
1520 Set variable `proced-format' to SCHEME.
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1521 With prefix REVERT non-nil revert listing."
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1522 (interactive
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1523 (let ((scheme (completing-read "Format: "
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1524 proced-format-alist nil t)))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1525 (list (if (string= "" scheme) nil (intern scheme))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1526 current-prefix-arg)))
98172
87d64c3d48ac (proced-mark-face, proced-marked-face)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98162
diff changeset
1527 ;; only update if necessary
87d64c3d48ac (proced-mark-face, proced-marked-face)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98162
diff changeset
1528 (when (or (not (eq proced-format scheme)) revert)
87d64c3d48ac (proced-mark-face, proced-marked-face)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98162
diff changeset
1529 (setq proced-format scheme)
87d64c3d48ac (proced-mark-face, proced-marked-face)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98162
diff changeset
1530 (proced-update revert)))
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1531
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1532 ;; generate listing
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1533
100422
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
1534 (defun proced-process-attributes (&optional pid-list)
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1535 "Return alist of attributes for each system process.
100422
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
1536 This alist can be customized via `proced-custom-attributes'.
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
1537 Optional arg PID-LIST is a list of PIDs of system process that are analyzed.
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
1538 If no attributes are known for a process (possibly because it already died)
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
1539 the process is ignored."
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
1540 ;; Should we make it customizable whether processes with empty attribute
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
1541 ;; lists are ignored? When would such processes be of interest?
100847
883cbe72dc04 (proced-grammar-alist): Refiner can be a list (function help-echo)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100763
diff changeset
1542 (let (process-alist attributes attr)
100422
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
1543 (dolist (pid (or pid-list (list-system-processes)) process-alist)
102205
0f4ba7f17aa0 Rename `system-process-attributes' to `process-attributes'
Miles Bader <miles@gnu.org>
parents: 101880
diff changeset
1544 (when (setq attributes (process-attributes pid))
100847
883cbe72dc04 (proced-grammar-alist): Refiner can be a list (function help-echo)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100763
diff changeset
1545 (setq attributes (cons (cons 'pid pid) attributes))
883cbe72dc04 (proced-grammar-alist): Refiner can be a list (function help-echo)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100763
diff changeset
1546 (dolist (fun proced-custom-attributes)
883cbe72dc04 (proced-grammar-alist): Refiner can be a list (function help-echo)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100763
diff changeset
1547 (if (setq attr (funcall fun attributes))
883cbe72dc04 (proced-grammar-alist): Refiner can be a list (function help-echo)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100763
diff changeset
1548 (push attr attributes)))
883cbe72dc04 (proced-grammar-alist): Refiner can be a list (function help-echo)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100763
diff changeset
1549 (push (cons pid attributes) process-alist)))))
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1550
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1551 (defun proced-update (&optional revert quiet)
100570
496de5bd1f6d * proced.el (proced-grammar-alist): Doc fix.
Juanma Barranquero <lekktu@gmail.com>
parents: 100424
diff changeset
1552 "Update the Proced process information. Preserves point and marks.
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1553 With prefix REVERT non-nil, revert listing.
100847
883cbe72dc04 (proced-grammar-alist): Refiner can be a list (function help-echo)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100763
diff changeset
1554 Suppress status information if QUIET is nil.
883cbe72dc04 (proced-grammar-alist): Refiner can be a list (function help-echo)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100763
diff changeset
1555 After updating a displayed Proced buffer run the normal hook
883cbe72dc04 (proced-grammar-alist): Refiner can be a list (function help-echo)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100763
diff changeset
1556 `proced-post-display-hook'."
94063
ab8c45d22418 (proced-command-alist): Remove sort column.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 93248
diff changeset
1557 ;; This is the main function that generates and updates the process listing.
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1558 (interactive "P")
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1559 (setq revert (or revert (not proced-process-alist)))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1560 (or quiet (message (if revert "Updating process information..."
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1561 "Updating process display...")))
98162
d5c5ea23d8ea (proced-sort-header): New face.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98064
diff changeset
1562 (if revert ;; evaluate all processes
d5c5ea23d8ea (proced-sort-header): New face.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98064
diff changeset
1563 (setq proced-process-alist (proced-process-attributes)))
d5c5ea23d8ea (proced-sort-header): New face.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98064
diff changeset
1564 ;; filtering and sorting
d5c5ea23d8ea (proced-sort-header): New face.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98064
diff changeset
1565 (setq proced-process-alist
100422
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
1566 (proced-sort (proced-filter proced-process-alist proced-filter)
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
1567 proced-sort proced-descend))
98162
d5c5ea23d8ea (proced-sort-header): New face.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98064
diff changeset
1568
100735
8ec0632b600c (proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100570
diff changeset
1569 ;; display as process tree?
8ec0632b600c (proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100570
diff changeset
1570 (setq proced-process-alist
8ec0632b600c (proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100570
diff changeset
1571 (proced-tree proced-process-alist))
8ec0632b600c (proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100570
diff changeset
1572
98162
d5c5ea23d8ea (proced-sort-header): New face.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98064
diff changeset
1573 ;; It is useless to keep undo information if we revert, filter, or
d5c5ea23d8ea (proced-sort-header): New face.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98064
diff changeset
1574 ;; refine the listing so that `proced-process-alist' has changed.
d5c5ea23d8ea (proced-sort-header): New face.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98064
diff changeset
1575 ;; We could keep the undo information if we only re-sort the buffer.
d5c5ea23d8ea (proced-sort-header): New face.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98064
diff changeset
1576 ;; Would that be useful? Re-re-sorting is easy, too.
d5c5ea23d8ea (proced-sort-header): New face.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98064
diff changeset
1577 (if (consp buffer-undo-list)
d5c5ea23d8ea (proced-sort-header): New face.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98064
diff changeset
1578 (setq buffer-undo-list nil))
d5c5ea23d8ea (proced-sort-header): New face.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98064
diff changeset
1579 (let ((buffer-undo-list t)
d5c5ea23d8ea (proced-sort-header): New face.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98064
diff changeset
1580 ;; If point is on a field, we try to return point to that field.
d5c5ea23d8ea (proced-sort-header): New face.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98064
diff changeset
1581 ;; Otherwise we try to return to the same column
d5c5ea23d8ea (proced-sort-header): New face.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98064
diff changeset
1582 (old-pos (let ((pid (proced-pid-at-point))
d5c5ea23d8ea (proced-sort-header): New face.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98064
diff changeset
1583 (key (get-text-property (point) 'proced-key)))
d5c5ea23d8ea (proced-sort-header): New face.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98064
diff changeset
1584 (list pid key ; can both be nil
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1585 (if key
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1586 (if (get-text-property (1- (point)) 'proced-key)
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1587 (- (point) (previous-single-property-change
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1588 (point) 'proced-key))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1589 0)
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1590 (current-column)))))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1591 buffer-read-only mp-list)
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1592 ;; remember marked processes (whatever the mark was)
93212
134b2dc25692 proced.el: New file.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff changeset
1593 (goto-char (point-min))
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1594 (while (re-search-forward "^\\(\\S-\\)" nil t)
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1595 (push (cons (save-match-data (proced-pid-at-point))
95135
33ea0b47d336 (proced-goal-header-re): Renamed from proced-procname-column-regexp.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 94678
diff changeset
1596 (match-string-no-properties 1)) mp-list))
98162
d5c5ea23d8ea (proced-sort-header): New face.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98064
diff changeset
1597
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1598 ;; generate listing
93212
134b2dc25692 proced.el: New file.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff changeset
1599 (erase-buffer)
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1600 (proced-format proced-process-alist proced-format)
93212
134b2dc25692 proced.el: New file.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff changeset
1601 (goto-char (point-min))
134b2dc25692 proced.el: New file.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff changeset
1602 (while (not (eobp))
134b2dc25692 proced.el: New file.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff changeset
1603 (insert " ")
134b2dc25692 proced.el: New file.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff changeset
1604 (forward-line))
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1605 (setq proced-header-line (concat " " proced-header-line))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1606 (if revert (set-buffer-modified-p nil))
98162
d5c5ea23d8ea (proced-sort-header): New face.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98064
diff changeset
1607
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1608 ;; set `goal-column'
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1609 (let ((grammar (assq proced-goal-attribute proced-grammar-alist)))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1610 (setq goal-column ;; set to nil if no match
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1611 (if (and grammar
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1612 (not (zerop (buffer-size)))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1613 (string-match (regexp-quote (nth 1 grammar))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1614 proced-header-line))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1615 (if (nth 3 grammar)
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1616 (match-beginning 0)
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1617 (match-end 0)))))
98162
d5c5ea23d8ea (proced-sort-header): New face.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98064
diff changeset
1618
98249
538f59dc1be8 (proced-grammar-alist, proced-custom-attributes)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98172
diff changeset
1619 ;; Restore process marks and buffer position (if possible).
538f59dc1be8 (proced-grammar-alist, proced-custom-attributes)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98172
diff changeset
1620 ;; Sometimes this puts point in the middle of the proced buffer
98162
d5c5ea23d8ea (proced-sort-header): New face.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98064
diff changeset
1621 ;; where it is not interesting. Is there a better / more flexible solution?
95135
33ea0b47d336 (proced-goal-header-re): Renamed from proced-procname-column-regexp.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 94678
diff changeset
1622 (goto-char (point-min))
98162
d5c5ea23d8ea (proced-sort-header): New face.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98064
diff changeset
1623 (let (pid mark new-pos)
d5c5ea23d8ea (proced-sort-header): New face.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98064
diff changeset
1624 (if (or mp-list (car old-pos))
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1625 (while (not (eobp))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1626 (setq pid (proced-pid-at-point))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1627 (when (setq mark (assq pid mp-list))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1628 (insert (cdr mark))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1629 (delete-char 1)
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1630 (beginning-of-line))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1631 (when (eq (car old-pos) pid)
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1632 (if (nth 1 old-pos)
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1633 (let ((limit (line-end-position)) pos)
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1634 (while (and (not new-pos)
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1635 (setq pos (next-property-change (point) nil limit)))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1636 (goto-char pos)
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1637 (when (eq (nth 1 old-pos)
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1638 (get-text-property (point) 'proced-key))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1639 (forward-char (min (nth 2 old-pos)
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1640 (- (next-property-change (point))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1641 (point))))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1642 (setq new-pos (point))))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1643 (unless new-pos
98162
d5c5ea23d8ea (proced-sort-header): New face.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98064
diff changeset
1644 ;; we found the process, but the field of point
d5c5ea23d8ea (proced-sort-header): New face.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98064
diff changeset
1645 ;; is not listed anymore
d5c5ea23d8ea (proced-sort-header): New face.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98064
diff changeset
1646 (setq new-pos (proced-move-to-goal-column))))
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1647 (setq new-pos (min (+ (line-beginning-position) (nth 2 old-pos))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1648 (line-end-position)))))
98162
d5c5ea23d8ea (proced-sort-header): New face.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98064
diff changeset
1649 (forward-line)))
d5c5ea23d8ea (proced-sort-header): New face.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98064
diff changeset
1650 (if new-pos
d5c5ea23d8ea (proced-sort-header): New face.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98064
diff changeset
1651 (goto-char new-pos)
d5c5ea23d8ea (proced-sort-header): New face.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98064
diff changeset
1652 (goto-char (point-min))
d5c5ea23d8ea (proced-sort-header): New face.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98064
diff changeset
1653 (proced-move-to-goal-column)))
94621
97585dd63d91 (proced-command-alist): Fix system-type values. Fix defcustom.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 94109
diff changeset
1654 ;; update modeline
98162
d5c5ea23d8ea (proced-sort-header): New face.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98064
diff changeset
1655 ;; Does the long `mode-name' clutter the modeline? It would be nice
d5c5ea23d8ea (proced-sort-header): New face.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98064
diff changeset
1656 ;; to have some other location for displaying the values of the various
d5c5ea23d8ea (proced-sort-header): New face.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98064
diff changeset
1657 ;; flags that affect the behavior of proced (flags one might want
d5c5ea23d8ea (proced-sort-header): New face.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 98064
diff changeset
1658 ;; to change on the fly). Where??
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1659 (setq mode-name
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1660 (concat "Proced"
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1661 (if proced-filter
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1662 (concat ": " (symbol-name proced-filter))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1663 "")
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1664 (if proced-sort
100422
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
1665 (let* ((key (if (consp proced-sort) (car proced-sort)
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1666 proced-sort))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1667 (grammar (assq key proced-grammar-alist)))
100422
b3edbaf87682 (proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100421
diff changeset
1668 (concat " by " (if proced-descend "-" "+")
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1669 (nth 1 grammar)))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1670 "")))
94621
97585dd63d91 (proced-command-alist): Fix system-type values. Fix defcustom.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 94109
diff changeset
1671 (force-mode-line-update)
100847
883cbe72dc04 (proced-grammar-alist): Refiner can be a list (function help-echo)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100763
diff changeset
1672 ;; run `proced-post-display-hook' only for a displayed buffer.
883cbe72dc04 (proced-grammar-alist): Refiner can be a list (function help-echo)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100763
diff changeset
1673 (if (get-buffer-window) (run-hooks 'proced-post-display-hook))
94621
97585dd63d91 (proced-command-alist): Fix system-type values. Fix defcustom.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 94109
diff changeset
1674 ;; done
93212
134b2dc25692 proced.el: New file.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff changeset
1675 (or quiet (input-pending-p)
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1676 (message (if revert "Updating process information...done."
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1677 "Updating process display...done.")))))
93212
134b2dc25692 proced.el: New file.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff changeset
1678
134b2dc25692 proced.el: New file.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff changeset
1679 (defun proced-revert (&rest args)
100424
586161dec886 (proced-sort-interactive, proced-sort-pcpu)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100422
diff changeset
1680 "Reevaluate the process listing based on the currently running processes.
586161dec886 (proced-sort-interactive, proced-sort-pcpu)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100422
diff changeset
1681 Preserves point and marks."
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1682 (proced-update t))
93212
134b2dc25692 proced.el: New file.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff changeset
1683
134b2dc25692 proced.el: New file.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff changeset
1684 (defun proced-send-signal (&optional signal)
134b2dc25692 proced.el: New file.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff changeset
1685 "Send a SIGNAL to the marked processes.
97522
ce7e3551dd0e (proced-signal-list): Add POSIX 1003.1-2001 signals.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97317
diff changeset
1686 If no process is marked, operate on current process.
93212
134b2dc25692 proced.el: New file.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff changeset
1687 SIGNAL may be a string (HUP, INT, TERM, etc.) or a number.
100847
883cbe72dc04 (proced-grammar-alist): Refiner can be a list (function help-echo)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100763
diff changeset
1688 If SIGNAL is nil display marked processes and query interactively for SIGNAL.
883cbe72dc04 (proced-grammar-alist): Refiner can be a list (function help-echo)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100763
diff changeset
1689 After sending the signal, this command runs the normal hook
883cbe72dc04 (proced-grammar-alist): Refiner can be a list (function help-echo)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100763
diff changeset
1690 `proced-after-send-signal-hook'."
93212
134b2dc25692 proced.el: New file.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff changeset
1691 (interactive)
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1692 (let ((regexp (proced-marker-regexp))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1693 process-alist)
93212
134b2dc25692 proced.el: New file.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff changeset
1694 ;; collect marked processes
134b2dc25692 proced.el: New file.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff changeset
1695 (save-excursion
134b2dc25692 proced.el: New file.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff changeset
1696 (goto-char (point-min))
134b2dc25692 proced.el: New file.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff changeset
1697 (while (re-search-forward regexp nil t)
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1698 (push (cons (proced-pid-at-point)
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1699 ;; How much info should we collect here?
100847
883cbe72dc04 (proced-grammar-alist): Refiner can be a list (function help-echo)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100763
diff changeset
1700 (buffer-substring-no-properties
883cbe72dc04 (proced-grammar-alist): Refiner can be a list (function help-echo)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100763
diff changeset
1701 (+ 2 (line-beginning-position))
883cbe72dc04 (proced-grammar-alist): Refiner can be a list (function help-echo)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100763
diff changeset
1702 (line-end-position)))
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1703 process-alist)))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1704 (setq process-alist
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1705 (if process-alist
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1706 (nreverse process-alist)
97522
ce7e3551dd0e (proced-signal-list): Add POSIX 1003.1-2001 signals.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97317
diff changeset
1707 ;; take current process
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1708 (list (cons (proced-pid-at-point)
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1709 (buffer-substring-no-properties
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1710 (+ 2 (line-beginning-position))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1711 (line-end-position))))))
97522
ce7e3551dd0e (proced-signal-list): Add POSIX 1003.1-2001 signals.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97317
diff changeset
1712 (unless signal
ce7e3551dd0e (proced-signal-list): Add POSIX 1003.1-2001 signals.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97317
diff changeset
1713 ;; Display marked processes (code taken from `dired-mark-pop-up').
106411
a8fa237ee1fa (proced): Call `(proced-update t)' to update process
Juri Linkov <juri@jurta.org>
parents: 106391
diff changeset
1714 (let ((bufname " *Marked Processes*") ; use leading space in buffer name
a8fa237ee1fa (proced): Call `(proced-update t)' to update process
Juri Linkov <juri@jurta.org>
parents: 106391
diff changeset
1715 ; to make this buffer ephemeral
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1716 (header-line (substring-no-properties proced-header-line)))
97522
ce7e3551dd0e (proced-signal-list): Add POSIX 1003.1-2001 signals.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97317
diff changeset
1717 (with-current-buffer (get-buffer-create bufname)
ce7e3551dd0e (proced-signal-list): Add POSIX 1003.1-2001 signals.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97317
diff changeset
1718 (setq truncate-lines t
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1719 proced-header-line header-line ; inherit header line
97522
ce7e3551dd0e (proced-signal-list): Add POSIX 1003.1-2001 signals.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97317
diff changeset
1720 header-line-format '(:eval (proced-header-line)))
ce7e3551dd0e (proced-signal-list): Add POSIX 1003.1-2001 signals.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97317
diff changeset
1721 (add-hook 'post-command-hook 'force-mode-line-update nil t)
104721
368dc1e64a84 (proced-signal-list): Make it an alist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103028
diff changeset
1722 (let ((inhibit-read-only t))
368dc1e64a84 (proced-signal-list): Make it an alist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103028
diff changeset
1723 (erase-buffer)
368dc1e64a84 (proced-signal-list): Make it an alist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103028
diff changeset
1724 (buffer-disable-undo)
368dc1e64a84 (proced-signal-list): Make it an alist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103028
diff changeset
1725 (setq buffer-read-only t)
368dc1e64a84 (proced-signal-list): Make it an alist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103028
diff changeset
1726 (dolist (process process-alist)
368dc1e64a84 (proced-signal-list): Make it an alist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103028
diff changeset
1727 (insert " " (cdr process) "\n")))
97522
ce7e3551dd0e (proced-signal-list): Add POSIX 1003.1-2001 signals.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97317
diff changeset
1728 (save-window-excursion
101880
18c7189fe029 (proced-after-send-signal-hook): Use defcustom.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100908
diff changeset
1729 ;; Analogous to `dired-pop-to-buffer'
18c7189fe029 (proced-after-send-signal-hook): Use defcustom.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100908
diff changeset
1730 ;; Don't split window horizontally. (Bug#1806)
18c7189fe029 (proced-after-send-signal-hook): Use defcustom.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100908
diff changeset
1731 (let (split-width-threshold)
18c7189fe029 (proced-after-send-signal-hook): Use defcustom.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100908
diff changeset
1732 (pop-to-buffer (current-buffer)))
100847
883cbe72dc04 (proced-grammar-alist): Refiner can be a list (function help-echo)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 100763
diff changeset
1733 (fit-window-to-buffer (get-buffer-window) nil 1)
97522
ce7e3551dd0e (proced-signal-list): Add POSIX 1003.1-2001 signals.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97317
diff changeset
1734 (let* ((completion-ignore-case t)
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1735 (pnum (if (= 1 (length process-alist))
97522
ce7e3551dd0e (proced-signal-list): Add POSIX 1003.1-2001 signals.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97317
diff changeset
1736 "1 process"
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1737 (format "%d processes" (length process-alist))))
104721
368dc1e64a84 (proced-signal-list): Make it an alist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103028
diff changeset
1738 (completion-annotate-function
368dc1e64a84 (proced-signal-list): Make it an alist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103028
diff changeset
1739 (lambda (s) (cdr (assoc s proced-signal-list)))))
368dc1e64a84 (proced-signal-list): Make it an alist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103028
diff changeset
1740 (setq signal
368dc1e64a84 (proced-signal-list): Make it an alist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103028
diff changeset
1741 (completing-read (concat "Send signal [" pnum
368dc1e64a84 (proced-signal-list): Make it an alist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103028
diff changeset
1742 "] (default TERM): ")
368dc1e64a84 (proced-signal-list): Make it an alist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103028
diff changeset
1743 proced-signal-list
368dc1e64a84 (proced-signal-list): Make it an alist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103028
diff changeset
1744 nil nil nil nil "TERM")))))))
103028
15955ebb1aa7 (proced-sort): Declare it buffer-local.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 102205
diff changeset
1745 ;; send signal
15955ebb1aa7 (proced-sort): Declare it buffer-local.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 102205
diff changeset
1746 (let ((count 0)
15955ebb1aa7 (proced-sort): Declare it buffer-local.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 102205
diff changeset
1747 failures)
15955ebb1aa7 (proced-sort): Declare it buffer-local.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 102205
diff changeset
1748 ;; Why not always use `signal-process'? See
15955ebb1aa7 (proced-sort): Declare it buffer-local.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 102205
diff changeset
1749 ;; http://lists.gnu.org/archive/html/emacs-devel/2008-03/msg02955.html
15955ebb1aa7 (proced-sort): Declare it buffer-local.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 102205
diff changeset
1750 (if (functionp proced-signal-function)
15955ebb1aa7 (proced-sort): Declare it buffer-local.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 102205
diff changeset
1751 ;; use built-in `signal-process'
15955ebb1aa7 (proced-sort): Declare it buffer-local.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 102205
diff changeset
1752 (let ((signal (if (stringp signal)
15955ebb1aa7 (proced-sort): Declare it buffer-local.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 102205
diff changeset
1753 (if (string-match "\\`[0-9]+\\'" signal)
15955ebb1aa7 (proced-sort): Declare it buffer-local.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 102205
diff changeset
1754 (string-to-number signal)
15955ebb1aa7 (proced-sort): Declare it buffer-local.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 102205
diff changeset
1755 (make-symbol signal))
15955ebb1aa7 (proced-sort): Declare it buffer-local.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 102205
diff changeset
1756 signal))) ; number
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1757 (dolist (process process-alist)
103028
15955ebb1aa7 (proced-sort): Declare it buffer-local.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 102205
diff changeset
1758 (condition-case err
15955ebb1aa7 (proced-sort): Declare it buffer-local.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 102205
diff changeset
1759 (if (zerop (funcall
15955ebb1aa7 (proced-sort): Declare it buffer-local.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 102205
diff changeset
1760 proced-signal-function (car process) signal))
15955ebb1aa7 (proced-sort): Declare it buffer-local.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 102205
diff changeset
1761 (setq count (1+ count))
15955ebb1aa7 (proced-sort): Declare it buffer-local.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 102205
diff changeset
1762 (proced-log "%s\n" (cdr process))
15955ebb1aa7 (proced-sort): Declare it buffer-local.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 102205
diff changeset
1763 (push (cdr process) failures))
15955ebb1aa7 (proced-sort): Declare it buffer-local.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 102205
diff changeset
1764 (error ; catch errors from failed signals
15955ebb1aa7 (proced-sort): Declare it buffer-local.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 102205
diff changeset
1765 (proced-log "%s\n" err)
15955ebb1aa7 (proced-sort): Declare it buffer-local.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 102205
diff changeset
1766 (proced-log "%s\n" (cdr process))
15955ebb1aa7 (proced-sort): Declare it buffer-local.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 102205
diff changeset
1767 (push (cdr process) failures)))))
15955ebb1aa7 (proced-sort): Declare it buffer-local.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 102205
diff changeset
1768 ;; use external system call
15955ebb1aa7 (proced-sort): Declare it buffer-local.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 102205
diff changeset
1769 (let ((signal (concat "-" (if (numberp signal)
15955ebb1aa7 (proced-sort): Declare it buffer-local.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 102205
diff changeset
1770 (number-to-string signal) signal))))
15955ebb1aa7 (proced-sort): Declare it buffer-local.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 102205
diff changeset
1771 (dolist (process process-alist)
15955ebb1aa7 (proced-sort): Declare it buffer-local.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 102205
diff changeset
1772 (with-temp-buffer
15955ebb1aa7 (proced-sort): Declare it buffer-local.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 102205
diff changeset
1773 (condition-case err
15955ebb1aa7 (proced-sort): Declare it buffer-local.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 102205
diff changeset
1774 (if (zerop (call-process
15955ebb1aa7 (proced-sort): Declare it buffer-local.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 102205
diff changeset
1775 proced-signal-function nil t nil
15955ebb1aa7 (proced-sort): Declare it buffer-local.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 102205
diff changeset
1776 signal (number-to-string (car process))))
15955ebb1aa7 (proced-sort): Declare it buffer-local.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 102205
diff changeset
1777 (setq count (1+ count))
15955ebb1aa7 (proced-sort): Declare it buffer-local.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 102205
diff changeset
1778 (proced-log (current-buffer))
15955ebb1aa7 (proced-sort): Declare it buffer-local.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 102205
diff changeset
1779 (proced-log "%s\n" (cdr process))
15955ebb1aa7 (proced-sort): Declare it buffer-local.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 102205
diff changeset
1780 (push (cdr process) failures))
15955ebb1aa7 (proced-sort): Declare it buffer-local.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 102205
diff changeset
1781 (error ; catch errors from failed signals
15955ebb1aa7 (proced-sort): Declare it buffer-local.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 102205
diff changeset
1782 (proced-log (current-buffer))
15955ebb1aa7 (proced-sort): Declare it buffer-local.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 102205
diff changeset
1783 (proced-log "%s\n" (cdr process))
15955ebb1aa7 (proced-sort): Declare it buffer-local.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 102205
diff changeset
1784 (push (cdr process) failures)))))))
15955ebb1aa7 (proced-sort): Declare it buffer-local.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 102205
diff changeset
1785 (if failures
15955ebb1aa7 (proced-sort): Declare it buffer-local.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 102205
diff changeset
1786 ;; Proced error message are not always very precise.
15955ebb1aa7 (proced-sort): Declare it buffer-local.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 102205
diff changeset
1787 ;; Can we issue a useful one-line summary in the
15955ebb1aa7 (proced-sort): Declare it buffer-local.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 102205
diff changeset
1788 ;; message area (using FAILURES) if only one signal failed?
15955ebb1aa7 (proced-sort): Declare it buffer-local.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 102205
diff changeset
1789 (proced-log-summary
15955ebb1aa7 (proced-sort): Declare it buffer-local.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 102205
diff changeset
1790 signal
15955ebb1aa7 (proced-sort): Declare it buffer-local.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 102205
diff changeset
1791 (format "%d of %d signal%s failed"
15955ebb1aa7 (proced-sort): Declare it buffer-local.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 102205
diff changeset
1792 (length failures) (length process-alist)
15955ebb1aa7 (proced-sort): Declare it buffer-local.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 102205
diff changeset
1793 (if (= 1 (length process-alist)) "" "s")))
15955ebb1aa7 (proced-sort): Declare it buffer-local.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 102205
diff changeset
1794 (proced-success-message "Sent signal to" count)))
15955ebb1aa7 (proced-sort): Declare it buffer-local.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 102205
diff changeset
1795 ;; final clean-up
15955ebb1aa7 (proced-sort): Declare it buffer-local.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 102205
diff changeset
1796 (run-hooks 'proced-after-send-signal-hook)))
97522
ce7e3551dd0e (proced-signal-list): Add POSIX 1003.1-2001 signals.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97317
diff changeset
1797
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1798 ;; similar to `dired-why'
97522
ce7e3551dd0e (proced-signal-list): Add POSIX 1003.1-2001 signals.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97317
diff changeset
1799 (defun proced-why ()
ce7e3551dd0e (proced-signal-list): Add POSIX 1003.1-2001 signals.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97317
diff changeset
1800 "Pop up a buffer with error log output from Proced.
ce7e3551dd0e (proced-signal-list): Add POSIX 1003.1-2001 signals.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97317
diff changeset
1801 A group of errors from a single command ends with a formfeed.
ce7e3551dd0e (proced-signal-list): Add POSIX 1003.1-2001 signals.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97317
diff changeset
1802 Thus, use \\[backward-page] to find the beginning of a group of errors."
ce7e3551dd0e (proced-signal-list): Add POSIX 1003.1-2001 signals.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97317
diff changeset
1803 (interactive)
ce7e3551dd0e (proced-signal-list): Add POSIX 1003.1-2001 signals.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97317
diff changeset
1804 (if (get-buffer proced-log-buffer)
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1805 (save-selected-window
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1806 ;; move `proced-log-buffer' to the front of the buffer list
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1807 (select-window (display-buffer (get-buffer proced-log-buffer)))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1808 (setq truncate-lines t)
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1809 (set-buffer-modified-p nil)
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1810 (setq buffer-read-only t)
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1811 (goto-char (point-max))
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1812 (forward-line -1)
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1813 (backward-page 1)
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1814 (recenter 0))))
97522
ce7e3551dd0e (proced-signal-list): Add POSIX 1003.1-2001 signals.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97317
diff changeset
1815
ce7e3551dd0e (proced-signal-list): Add POSIX 1003.1-2001 signals.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97317
diff changeset
1816 ;; similar to `dired-log'
ce7e3551dd0e (proced-signal-list): Add POSIX 1003.1-2001 signals.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97317
diff changeset
1817 (defun proced-log (log &rest args)
ce7e3551dd0e (proced-signal-list): Add POSIX 1003.1-2001 signals.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97317
diff changeset
1818 "Log a message or the contents of a buffer.
ce7e3551dd0e (proced-signal-list): Add POSIX 1003.1-2001 signals.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97317
diff changeset
1819 If LOG is a string and there are more args, it is formatted with
ce7e3551dd0e (proced-signal-list): Add POSIX 1003.1-2001 signals.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97317
diff changeset
1820 those ARGS. Usually the LOG string ends with a \\n.
ce7e3551dd0e (proced-signal-list): Add POSIX 1003.1-2001 signals.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97317
diff changeset
1821 End each bunch of errors with (proced-log t signal):
ce7e3551dd0e (proced-signal-list): Add POSIX 1003.1-2001 signals.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97317
diff changeset
1822 this inserts the current time, buffer and signal at the start of the page,
ce7e3551dd0e (proced-signal-list): Add POSIX 1003.1-2001 signals.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97317
diff changeset
1823 and \f (formfeed) at the end."
ce7e3551dd0e (proced-signal-list): Add POSIX 1003.1-2001 signals.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97317
diff changeset
1824 (let ((obuf (current-buffer)))
ce7e3551dd0e (proced-signal-list): Add POSIX 1003.1-2001 signals.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97317
diff changeset
1825 (with-current-buffer (get-buffer-create proced-log-buffer)
ce7e3551dd0e (proced-signal-list): Add POSIX 1003.1-2001 signals.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97317
diff changeset
1826 (goto-char (point-max))
98064
9ec9b806fd81 Require time-date.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97524
diff changeset
1827 (let (buffer-read-only)
97522
ce7e3551dd0e (proced-signal-list): Add POSIX 1003.1-2001 signals.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97317
diff changeset
1828 (cond ((stringp log)
ce7e3551dd0e (proced-signal-list): Add POSIX 1003.1-2001 signals.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97317
diff changeset
1829 (insert (if args
ce7e3551dd0e (proced-signal-list): Add POSIX 1003.1-2001 signals.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97317
diff changeset
1830 (apply 'format log args)
ce7e3551dd0e (proced-signal-list): Add POSIX 1003.1-2001 signals.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97317
diff changeset
1831 log)))
ce7e3551dd0e (proced-signal-list): Add POSIX 1003.1-2001 signals.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97317
diff changeset
1832 ((bufferp log)
ce7e3551dd0e (proced-signal-list): Add POSIX 1003.1-2001 signals.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97317
diff changeset
1833 (insert-buffer-substring log))
ce7e3551dd0e (proced-signal-list): Add POSIX 1003.1-2001 signals.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97317
diff changeset
1834 ((eq t log)
ce7e3551dd0e (proced-signal-list): Add POSIX 1003.1-2001 signals.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97317
diff changeset
1835 (backward-page 1)
ce7e3551dd0e (proced-signal-list): Add POSIX 1003.1-2001 signals.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97317
diff changeset
1836 (unless (bolp)
ce7e3551dd0e (proced-signal-list): Add POSIX 1003.1-2001 signals.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97317
diff changeset
1837 (insert "\n"))
ce7e3551dd0e (proced-signal-list): Add POSIX 1003.1-2001 signals.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97317
diff changeset
1838 (insert (current-time-string)
ce7e3551dd0e (proced-signal-list): Add POSIX 1003.1-2001 signals.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97317
diff changeset
1839 "\tBuffer `" (buffer-name obuf) "', "
ce7e3551dd0e (proced-signal-list): Add POSIX 1003.1-2001 signals.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97317
diff changeset
1840 (format "signal `%s'\n" (car args)))
ce7e3551dd0e (proced-signal-list): Add POSIX 1003.1-2001 signals.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97317
diff changeset
1841 (goto-char (point-max))
ce7e3551dd0e (proced-signal-list): Add POSIX 1003.1-2001 signals.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97317
diff changeset
1842 (insert "\f\n")))))))
ce7e3551dd0e (proced-signal-list): Add POSIX 1003.1-2001 signals.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97317
diff changeset
1843
ce7e3551dd0e (proced-signal-list): Add POSIX 1003.1-2001 signals.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97317
diff changeset
1844 ;; similar to `dired-log-summary'
ce7e3551dd0e (proced-signal-list): Add POSIX 1003.1-2001 signals.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97317
diff changeset
1845 (defun proced-log-summary (signal string)
ce7e3551dd0e (proced-signal-list): Add POSIX 1003.1-2001 signals.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97317
diff changeset
1846 "State a summary of SIGNAL's failures, in echo area and log buffer.
ce7e3551dd0e (proced-signal-list): Add POSIX 1003.1-2001 signals.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97317
diff changeset
1847 STRING is an overall summary of the failures."
ce7e3551dd0e (proced-signal-list): Add POSIX 1003.1-2001 signals.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97317
diff changeset
1848 (message "Signal %s: %s--type ? for details" signal string)
ce7e3551dd0e (proced-signal-list): Add POSIX 1003.1-2001 signals.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97317
diff changeset
1849 ;; Log a summary describing a bunch of errors.
ce7e3551dd0e (proced-signal-list): Add POSIX 1003.1-2001 signals.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97317
diff changeset
1850 (proced-log (concat "\n" string "\n"))
ce7e3551dd0e (proced-signal-list): Add POSIX 1003.1-2001 signals.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97317
diff changeset
1851 (proced-log t signal))
93212
134b2dc25692 proced.el: New file.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff changeset
1852
134b2dc25692 proced.el: New file.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff changeset
1853 (defun proced-help ()
100570
496de5bd1f6d * proced.el (proced-grammar-alist): Doc fix.
Juanma Barranquero <lekktu@gmail.com>
parents: 100424
diff changeset
1854 "Provide help for the Proced user."
93212
134b2dc25692 proced.el: New file.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff changeset
1855 (interactive)
97522
ce7e3551dd0e (proced-signal-list): Add POSIX 1003.1-2001 signals.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97317
diff changeset
1856 (proced-why)
93212
134b2dc25692 proced.el: New file.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff changeset
1857 (if (eq last-command 'proced-help)
134b2dc25692 proced.el: New file.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff changeset
1858 (describe-mode)
134b2dc25692 proced.el: New file.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff changeset
1859 (message proced-help-string)))
134b2dc25692 proced.el: New file.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff changeset
1860
134b2dc25692 proced.el: New file.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff changeset
1861 (defun proced-undo ()
100570
496de5bd1f6d * proced.el (proced-grammar-alist): Doc fix.
Juanma Barranquero <lekktu@gmail.com>
parents: 100424
diff changeset
1862 "Undo in a Proced buffer.
496de5bd1f6d * proced.el (proced-grammar-alist): Doc fix.
Juanma Barranquero <lekktu@gmail.com>
parents: 100424
diff changeset
1863 This doesn't recover killed processes, it just undoes changes in the Proced
93212
134b2dc25692 proced.el: New file.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff changeset
1864 buffer. You can use it to recover marks."
134b2dc25692 proced.el: New file.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff changeset
1865 (interactive)
134b2dc25692 proced.el: New file.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff changeset
1866 (let (buffer-read-only)
134b2dc25692 proced.el: New file.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff changeset
1867 (undo))
95135
33ea0b47d336 (proced-goal-header-re): Renamed from proced-procname-column-regexp.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 94678
diff changeset
1868 (message "Change in Proced buffer undone.
93212
134b2dc25692 proced.el: New file.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff changeset
1869 Killed processes cannot be recovered by Emacs."))
134b2dc25692 proced.el: New file.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff changeset
1870
105571
9325921bfcde * proced.el (proced-unload-function): New function.
Juanma Barranquero <lekktu@gmail.com>
parents: 104976
diff changeset
1871 (defun proced-unload-function ()
9325921bfcde * proced.el (proced-unload-function): New function.
Juanma Barranquero <lekktu@gmail.com>
parents: 104976
diff changeset
1872 "Unload the Proced library."
9325921bfcde * proced.el (proced-unload-function): New function.
Juanma Barranquero <lekktu@gmail.com>
parents: 104976
diff changeset
1873 (save-current-buffer
9325921bfcde * proced.el (proced-unload-function): New function.
Juanma Barranquero <lekktu@gmail.com>
parents: 104976
diff changeset
1874 (dolist (buf (buffer-list))
9325921bfcde * proced.el (proced-unload-function): New function.
Juanma Barranquero <lekktu@gmail.com>
parents: 104976
diff changeset
1875 (set-buffer buf)
9325921bfcde * proced.el (proced-unload-function): New function.
Juanma Barranquero <lekktu@gmail.com>
parents: 104976
diff changeset
1876 (when (eq major-mode 'proced-mode)
9325921bfcde * proced.el (proced-unload-function): New function.
Juanma Barranquero <lekktu@gmail.com>
parents: 104976
diff changeset
1877 (funcall (or (default-value 'major-mode) 'fundamental-mode)))))
9325921bfcde * proced.el (proced-unload-function): New function.
Juanma Barranquero <lekktu@gmail.com>
parents: 104976
diff changeset
1878 ;; continue standard unloading
9325921bfcde * proced.el (proced-unload-function): New function.
Juanma Barranquero <lekktu@gmail.com>
parents: 104976
diff changeset
1879 nil)
9325921bfcde * proced.el (proced-unload-function): New function.
Juanma Barranquero <lekktu@gmail.com>
parents: 104976
diff changeset
1880
93212
134b2dc25692 proced.el: New file.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff changeset
1881 (provide 'proced)
134b2dc25692 proced.el: New file.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff changeset
1882
93248
072dbbf778d2 Add arch-tag.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 93213
diff changeset
1883 ;; arch-tag: a6e312ad-9032-45aa-972d-31a8cfc545af
97522
ce7e3551dd0e (proced-signal-list): Add POSIX 1003.1-2001 signals.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 97317
diff changeset
1884 ;;; proced.el ends here