94063
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1 ;;; proced.el --- operate on system processes like dired
|
93212
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff
changeset
|
2
|
106815
|
3 ;; Copyright (C) 2008, 2009, 2010 Free Software Foundation, Inc.
|
93213
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
4
|
93212
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff
changeset
|
5 ;; Author: Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff
changeset
|
6 ;; Keywords: Processes, Unix
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff
changeset
|
7
|
93213
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
8 ;; This file is part of GNU Emacs.
|
93212
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff
changeset
|
9
|
94678
|
10 ;; GNU Emacs is free software: you can redistribute it and/or modify
|
93213
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
11 ;; it under the terms of the GNU General Public License as published by
|
94678
|
12 ;; the Free Software Foundation, either version 3 of the License, or
|
|
13 ;; (at your option) any later version.
|
93213
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
14
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
15 ;; GNU Emacs is distributed in the hope that it will be useful,
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
16 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
17 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
18 ;; GNU General Public License for more details.
|
93212
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff
changeset
|
19
|
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
|
21 ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
|
93212
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff
changeset
|
22
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff
changeset
|
23 ;;; Commentary:
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff
changeset
|
24
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
25 ;; Proced makes an Emacs buffer containing a listing of the current
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
26 ;; system processes. You can use the normal Emacs commands to move around
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
27 ;; in this buffer, and special Proced commands to operate on the processes
|
98162
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
28 ;; listed. See `proced-mode' for getting started.
|
93212
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff
changeset
|
29 ;;
|
94063
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
30 ;; To do:
|
98162
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
diff
changeset
|
32 ;; - allow "sudo kill PID", "renice PID"
|
98162
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
33 ;;
|
100421
0b3bb7c982eb
(proced-auto-update-interval): Renamed from proced-timer-interval.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
34 ;; Thoughts and Ideas
|
102205
|
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>
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>
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>
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>
diff
changeset
|
39 ;; single string, so that it is impossible to reverse-engineer it back
|
102205
|
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>
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>
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>
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>
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>
diff
changeset
|
45 ;; What about something like `proced-restart-pid'?
|
93212
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff
changeset
|
46
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff
changeset
|
47 ;;; Code:
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff
changeset
|
48
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
49 (require 'time-date) ; for `with-decoded-time-value'
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
50
|
93212
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff
changeset
|
51 (defgroup proced nil
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff
changeset
|
52 "Proced mode."
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff
changeset
|
53 :group 'processes
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff
changeset
|
54 :group 'unix
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff
changeset
|
55 :prefix "proced-")
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff
changeset
|
56
|
94063
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
57 (defcustom proced-signal-function 'signal-process
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
58 "Name of signal function.
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
59 It can be an elisp function (usually `signal-process') or a string specifying
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
60 the external command (usually \"kill\")."
|
93212
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff
changeset
|
61 :group 'proced
|
94063
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
62 :type '(choice (function :tag "function")
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
63 (string :tag "command")))
|
93212
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff
changeset
|
64
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff
changeset
|
65 (defcustom proced-signal-list
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
66 '( ;; signals supported on all POSIX compliant systems
|
104721
|
67 ("HUP" . " (1. Hangup)")
|
|
68 ("INT" . " (2. Terminal interrupt)")
|
|
69 ("QUIT" . " (3. Terminal quit)")
|
|
70 ("ABRT" . " (6. Process abort)")
|
|
71 ("KILL" . " (9. Kill - cannot be caught or ignored)")
|
|
72 ("ALRM" . " (14. Alarm Clock)")
|
|
73 ("TERM" . " (15. Termination)")
|
97522
ce7e3551dd0e
(proced-signal-list): Add POSIX 1003.1-2001 signals.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
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>
diff
changeset
|
76 ;; exclude them from `proced-signal-list'?
|
104721
|
77 ("CONT" . " (Continue executing)")
|
|
78 ("STOP" . " (Stop executing / pause - cannot be caught or ignored)")
|
|
79 ("TSTP" . " (Terminal stop / pause)"))
|
93212
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff
changeset
|
80 "List of signals, used for minibuffer completion."
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff
changeset
|
81 :group 'proced
|
104721
|
82 :type '(repeat (cons (string :tag "signal name")
|
|
83 (string :tag "description"))))
|
93212
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff
changeset
|
84
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
85 ;; For which attributes can we use a fixed width of the output field?
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
86 ;; A fixed width speeds up formatting, yet it can make
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
87 ;; `proced-grammar-alist' system-dependent.
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
88 ;; (If proced runs like top(1) we want it to be fast.)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
89 ;;
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
90 ;; If it is impossible / unlikely that an attribute has the same value
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
91 ;; for two processes, then sorting can be based on one ordinary (fast)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
92 ;; predicate like `<'. Otherwise, a list of proced predicates can be used
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
93 ;; to refine the sort.
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
94 ;;
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
95 ;; It would be neat if one could temporarily override the following
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
96 ;; predefined rules.
|
98249
538f59dc1be8
(proced-grammar-alist, proced-custom-attributes)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
97 (defcustom proced-grammar-alist
|
102205
|
98 '( ;; attributes defined in `process-attributes'
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
99 (euid "EUID" "%d" right proced-< nil (euid pid) (nil t nil))
|
104721
|
100 (user "User" nil left proced-string-lessp nil (user pid) (nil t nil))
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
101 (egid "EGID" "%d" right proced-< nil (egid euid pid) (nil t nil))
|
104721
|
102 (group "Group" nil left proced-string-lessp nil (group user pid) (nil t nil))
|
|
103 (comm "Command" nil left proced-string-lessp nil (comm pid) (nil t nil))
|
|
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>
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>
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>
diff
changeset
|
107 "refine to process parents"))
|
104721
|
108 (pgrp "PGrp" "%d" right proced-< nil (pgrp euid pid) (nil t nil))
|
|
109 (sess "Sess" "%d" right proced-< nil (sess pid) (nil t nil))
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
110 (ttname "TTY" proced-format-ttname left proced-string-lessp nil (ttname pid) (nil t nil))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
111 (tpgid "TPGID" "%d" right proced-< nil (tpgid pid) (nil t nil))
|
104721
|
112 (minflt "MinFlt" "%d" right proced-< nil (minflt pid) (nil t t))
|
|
113 (majflt "MajFlt" "%d" right proced-< nil (majflt pid) (nil t t))
|
|
114 (cminflt "CMinFlt" "%d" right proced-< nil (cminflt pid) (nil t t))
|
|
115 (cmajflt "CMajFlt" "%d" right proced-< nil (cmajflt pid) (nil t t))
|
|
116 (utime "UTime" proced-format-time right proced-time-lessp t (utime pid) (nil t t))
|
|
117 (stime "STime" proced-format-time right proced-time-lessp t (stime pid) (nil t t))
|
|
118 (time "Time" proced-format-time right proced-time-lessp t (time pid) (nil t t))
|
|
119 (cutime "CUTime" proced-format-time right proced-time-lessp t (cutime pid) (nil t t))
|
|
120 (cstime "CSTime" proced-format-time right proced-time-lessp t (cstime pid) (nil t t))
|
|
121 (ctime "CTime" proced-format-time right proced-time-lessp t (ctime pid) (nil t t))
|
|
122 (pri "Pr" "%d" right proced-< t (pri pid) (nil t t))
|
|
123 (nice "Ni" "%3d" 3 proced-< t (nice pid) (t t nil))
|
|
124 (thcount "THCount" "%d" right proced-< t (thcount pid) (nil t t))
|
|
125 (start "Start" proced-format-start 6 proced-time-lessp nil (start pid) (t t nil))
|
|
126 (vsize "VSize" "%d" right proced-< t (vsize pid) (nil t t))
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
127 (rss "RSS" "%d" right proced-< t (rss pid) (nil t t))
|
104721
|
128 (etime "ETime" proced-format-time right proced-time-lessp t (etime pid) (nil t t))
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
129 (pcpu "%CPU" "%.1f" right proced-< t (pcpu pid) (nil t t))
|
104721
|
130 (pmem "%Mem" "%.1f" right proced-< t (pmem pid) (nil t t))
|
|
131 (args "Args" proced-format-args left proced-string-lessp nil (args pid) (nil t nil))
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
132 ;;
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
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>
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>
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>
diff
changeset
|
137 ;; process tree
|
104721
|
138 (tree "Tree" proced-format-tree left nil nil nil nil))
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
139 "Alist of rules for handling Proced attributes.
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
140
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
141 Each element has the form
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
142
|
100422
b3edbaf87682
(proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
143 (KEY NAME FORMAT JUSTIFY PREDICATE REVERSE SORT-SCHEME REFINER).
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
144
|
98249
538f59dc1be8
(proced-grammar-alist, proced-custom-attributes)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
145 Symbol KEY is the car of a process attribute.
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
146
|
98249
538f59dc1be8
(proced-grammar-alist, proced-custom-attributes)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
147 String NAME appears in the header line.
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
148
|
100570
|
149 FORMAT specifies the format for displaying the attribute values. It can
|
|
150 be a string passed to `format'. It can be a function called with one
|
|
151 argument, the value of the attribute. The value nil means take as is.
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
152
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
153 If JUSTIFY is an integer, its modulus gives the width of the attribute
|
98162
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
154 values formatted with FORMAT. If JUSTIFY is positive, NAME appears
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
155 right-justified, otherwise it appears left-justified. If JUSTIFY is 'left
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
156 or 'right, the field width is calculated from all field values in the listing.
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
157 If JUSTIFY is 'left, the field values are formatted left-justified and
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
158 right-justified otherwise.
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
159
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
160 PREDICATE is the predicate for sorting and filtering the process listing
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
161 based on attribute KEY. PREDICATE takes two arguments P1 and P2,
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
162 the corresponding attribute values of two processes. PREDICATE should
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
163 return 'equal if P1 has same rank like P2. Any other non-nil value says
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
diff
changeset
|
165 If PREDICATE is nil the attribute cannot be sorted.
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
166
|
100422
b3edbaf87682
(proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
diff
changeset
|
168 order is descending.
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
169
|
98162
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
170 SORT-SCHEME is a list (KEY1 KEY2 ...) defining a hierarchy of rules
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
171 for sorting the process listing. KEY1, KEY2, ... are KEYs appearing as cars
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
172 of `proced-grammar-alist'. First the PREDICATE of KEY1 is evaluated.
|
98162
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
173 If it yields non-equal, it defines the sort order for the corresponding
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
174 processes. If it evaluates to 'equal the PREDICATE of KEY2 is evaluated, etc.
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
175
|
100422
b3edbaf87682
(proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
176 REFINER can be a list of flags (LESS-B EQUAL-B LARGER-B) used by the command
|
98162
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
177 `proced-refine' (see there) to refine the listing based on attribute KEY.
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
178 This command compares the value of attribute KEY of every process with
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
179 the value of attribute KEY of the process at the position of point
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
180 using PREDICATE.
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
181 If PREDICATE yields non-nil, the process is accepted if LESS-B is non-nil.
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
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>
diff
changeset
|
184
|
100847
883cbe72dc04
(proced-grammar-alist): Refiner can be a list (function help-echo)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
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>
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>
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>
diff
changeset
|
189
|
b3edbaf87682
(proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
diff
changeset
|
191 :group 'proced
|
538f59dc1be8
(proced-grammar-alist, proced-custom-attributes)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
192 :type '(repeat (list :tag "Attribute"
|
538f59dc1be8
(proced-grammar-alist, proced-custom-attributes)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
193 (symbol :tag "Key")
|
538f59dc1be8
(proced-grammar-alist, proced-custom-attributes)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
194 (string :tag "Header")
|
538f59dc1be8
(proced-grammar-alist, proced-custom-attributes)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
195 (choice :tag "Format"
|
538f59dc1be8
(proced-grammar-alist, proced-custom-attributes)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
196 (const :tag "None" nil)
|
538f59dc1be8
(proced-grammar-alist, proced-custom-attributes)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
197 (string :tag "Format String")
|
538f59dc1be8
(proced-grammar-alist, proced-custom-attributes)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
198 (function :tag "Formatting Function"))
|
538f59dc1be8
(proced-grammar-alist, proced-custom-attributes)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
199 (choice :tag "Justification"
|
538f59dc1be8
(proced-grammar-alist, proced-custom-attributes)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
200 (const :tag "left" left)
|
538f59dc1be8
(proced-grammar-alist, proced-custom-attributes)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
201 (const :tag "right" right)
|
538f59dc1be8
(proced-grammar-alist, proced-custom-attributes)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
diff
changeset
|
203 (choice :tag "Predicate"
|
8ec0632b600c
(proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
diff
changeset
|
205 (function :tag "Function"))
|
100422
b3edbaf87682
(proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
206 (boolean :tag "Descending Sort Order")
|
98249
538f59dc1be8
(proced-grammar-alist, proced-custom-attributes)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
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>
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>
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>
diff
changeset
|
211 (string :tag "Help echo"))
|
100422
b3edbaf87682
(proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
212 (list :tag "Refine Flags"
|
b3edbaf87682
(proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
213 (boolean :tag "Less")
|
b3edbaf87682
(proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
diff
changeset
|
215 (boolean :tag "Larger"))))))
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
216
|
98249
538f59dc1be8
(proced-grammar-alist, proced-custom-attributes)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
217 (defcustom proced-custom-attributes nil
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
218 "List of functions defining custom attributes.
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
219 This variable extends the functionality of `proced-process-attributes'.
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
220 Each function is called with one argument, the list of attributes
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
221 of a system process. It returns a cons cell of the form (KEY . VALUE)
|
102205
|
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>
diff
changeset
|
223 returned by `proced-process-attributes'.
|
538f59dc1be8
(proced-grammar-alist, proced-custom-attributes)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
diff
changeset
|
225 :group 'proced
|
538f59dc1be8
(proced-grammar-alist, proced-custom-attributes)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
226 :type '(repeat (function :tag "Attribute")))
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
227
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
228 ;; Formatting and sorting rules are defined "per attribute". If formatting
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
229 ;; and / or sorting should use more than one attribute, it appears more
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
230 ;; transparent to define a new derived attribute, so that formatting and
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
231 ;; sorting can use them consistently. (Are there exceptions to this rule?
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
232 ;; Would it be advantageous to have yet more general methods available?)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
233 ;; Sorting can also be based on attributes that are invisible in the listing.
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
234
|
98249
538f59dc1be8
(proced-grammar-alist, proced-custom-attributes)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
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>
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>
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>
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>
diff
changeset
|
240 (verbose user euid group egid pid ppid tree pgrp sess pri nice pcpu pmem
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
diff
changeset
|
242 start time utime stime ctime cutime cstime etime (args comm)))
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
243 "Alist of formats of listing.
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
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>
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>
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>
diff
changeset
|
248 one, etc."
|
98249
538f59dc1be8
(proced-grammar-alist, proced-custom-attributes)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
249 :group 'proced
|
538f59dc1be8
(proced-grammar-alist, proced-custom-attributes)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
diff
changeset
|
251 :value-type (repeat :tag "Keys"
|
b3edbaf87682
(proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
252 (choice (symbol :tag "")
|
b3edbaf87682
(proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
253 (repeat :tag "Alternative Keys"
|
b3edbaf87682
(proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
254 (symbol :tag ""))))))
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
255
|
98249
538f59dc1be8
(proced-grammar-alist, proced-custom-attributes)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
256 (defcustom proced-format 'short
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
257 "Current format of Proced listing.
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
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>
diff
changeset
|
260 :group 'proced
|
538f59dc1be8
(proced-grammar-alist, proced-custom-attributes)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
261 :type '(choice (symbol :tag "Format Name")
|
538f59dc1be8
(proced-grammar-alist, proced-custom-attributes)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
262 (repeat :tag "Keys" (symbol :tag ""))))
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
263 (make-variable-buffer-local 'proced-format)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
264
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
265 ;; FIXME: is there a better name for filter `user' that does not coincide
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
266 ;; with an attribute key?
|
98249
538f59dc1be8
(proced-grammar-alist, proced-custom-attributes)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
267 (defcustom proced-filter-alist
|
106391
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
268 `((user (user . ,(concat "\\`" (regexp-quote (user-real-login-name)) "\\'")))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
269 (user-running (user . ,(concat "\\`" (regexp-quote (user-real-login-name)) "\\'"))
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
270 (state . "\\`[Rr]\\'"))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
271 (all)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
272 (all-running (state . "\\`[Rr]\\'"))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
273 (emacs (fun-all . (lambda (list)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
274 (proced-filter-children list ,(emacs-pid))))))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
275 "Alist of process filters.
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
276 The car of each element is a symbol, the name of the filter.
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
277 The cdr is a list of elementary filters that are applied to every process.
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
278 A process is displayed if it passes all elementary filters of a selected
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
279 filter.
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
280
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
281 An elementary filter can be one of the following:
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
282 \(KEY . REGEXP) If value of attribute KEY matches REGEXP,
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
283 accept this process.
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
284 \(KEY . FUN) Apply function FUN to attribute KEY. Accept this process,
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
285 if FUN returns non-nil.
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
286 \(function . FUN) For each process, apply function FUN to list of attributes
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
287 of each. Accept the process if FUN returns non-nil.
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
diff
changeset
|
289 FUN must return the filtered list."
|
538f59dc1be8
(proced-grammar-alist, proced-custom-attributes)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
290 :group 'proced
|
538f59dc1be8
(proced-grammar-alist, proced-custom-attributes)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
291 :type '(repeat (cons :tag "Filter"
|
538f59dc1be8
(proced-grammar-alist, proced-custom-attributes)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
292 (symbol :tag "Filter Name")
|
538f59dc1be8
(proced-grammar-alist, proced-custom-attributes)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
293 (repeat :tag "Filters"
|
538f59dc1be8
(proced-grammar-alist, proced-custom-attributes)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
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>
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>
diff
changeset
|
297 (cons :tag "Fun-all" (const :tag "Key: fun-all" fun-all) function))))))
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
298
|
98249
538f59dc1be8
(proced-grammar-alist, proced-custom-attributes)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
299 (defcustom proced-filter 'user
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
300 "Current filter of proced listing.
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
301 It can be the car of an element of `proced-filter-alist'.
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
diff
changeset
|
303 of `proced-filter-alist'."
|
538f59dc1be8
(proced-grammar-alist, proced-custom-attributes)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
304 :group 'proced
|
538f59dc1be8
(proced-grammar-alist, proced-custom-attributes)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
305 :type '(choice (symbol :tag "Filter Name")
|
538f59dc1be8
(proced-grammar-alist, proced-custom-attributes)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
306 (repeat :tag "Filters"
|
538f59dc1be8
(proced-grammar-alist, proced-custom-attributes)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
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>
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>
diff
changeset
|
310 (cons :tag "Fun-all" (const :tag "Key: fun-all" fun-all) function)))))
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
311 (make-variable-buffer-local 'proced-filter)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
312
|
98249
538f59dc1be8
(proced-grammar-alist, proced-custom-attributes)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
313 (defcustom proced-sort 'pcpu
|
98162
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
314 "Current sort scheme for proced listing.
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
315 It must be the KEY of an element of `proced-grammar-alist'.
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
diff
changeset
|
317 of `proced-grammar-alist'."
|
538f59dc1be8
(proced-grammar-alist, proced-custom-attributes)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
318 :group 'proced
|
538f59dc1be8
(proced-grammar-alist, proced-custom-attributes)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
319 :type '(choice (symbol :tag "Sort Scheme")
|
538f59dc1be8
(proced-grammar-alist, proced-custom-attributes)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
320 (repeat :tag "Key List" (symbol :tag "Key"))))
|
103028
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
321 (make-variable-buffer-local 'proced-sort)
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
322
|
100422
b3edbaf87682
(proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
323 (defcustom proced-descend t
|
b3edbaf87682
(proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
diff
changeset
|
325 :group 'proced
|
b3edbaf87682
(proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
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>
diff
changeset
|
328
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
329 (defcustom proced-goal-attribute 'args
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
330 "If non-nil, key of the attribute that defines the `goal-column'."
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
331 :group 'proced
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
332 :type '(choice (const :tag "none" nil)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
333 (symbol :tag "key")))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
334
|
100421
0b3bb7c982eb
(proced-auto-update-interval): Renamed from proced-timer-interval.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
diff
changeset
|
336 "Time interval in seconds for auto updating Proced buffers."
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
337 :group 'proced
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
338 :type 'integer)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
339
|
100421
0b3bb7c982eb
(proced-auto-update-interval): Renamed from proced-timer-interval.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
340 (defcustom proced-auto-update-flag nil
|
98162
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
diff
changeset
|
342 Can be changed interactively via `proced-toggle-auto-update'."
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
343 :group 'proced
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
344 :type 'boolean)
|
100421
0b3bb7c982eb
(proced-auto-update-interval): Renamed from proced-timer-interval.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
345 (make-variable-buffer-local 'proced-auto-update-flag)
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
346
|
100735
8ec0632b600c
(proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
347 (defcustom proced-tree-flag nil
|
100763
|
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>
diff
changeset
|
349 :group 'proced
|
8ec0632b600c
(proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
350 :type 'boolean)
|
8ec0632b600c
(proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
diff
changeset
|
352
|
100847
883cbe72dc04
(proced-grammar-alist): Refiner can be a list (function help-echo)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
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>
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>
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>
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>
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>
diff
changeset
|
359
|
101880
18c7189fe029
(proced-after-send-signal-hook): Use defcustom.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
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>
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>
diff
changeset
|
363 :type 'hook
|
18c7189fe029
(proced-after-send-signal-hook): Use defcustom.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
364 :options '(proced-revert)
|
18c7189fe029
(proced-after-send-signal-hook): Use defcustom.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
365 :group 'proced)
|
18c7189fe029
(proced-after-send-signal-hook): Use defcustom.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
366
|
95135
33ea0b47d336
(proced-goal-header-re): Renamed from proced-procname-column-regexp.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
367 ;; Internal variables
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
368
|
100424
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
369 (defvar proced-available (not (null (list-system-processes)))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
370 "Non-nil means Proced is known to work on this system.")
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
371
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
372 (defvar proced-process-alist nil
|
98162
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
373 "Alist of processes displayed by Proced.
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
374 The car of each element is the PID, and the cdr is a list of
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
375 cons pairs, see `proced-process-attributes'.")
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
376 (make-variable-buffer-local 'proced-process-alist)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
377
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
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>
diff
changeset
|
380 It is a list of lists (KEY PREDICATE REVERSE).")
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
381
|
93212
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff
changeset
|
382 (defvar proced-marker-char ?* ; the answer is 42
|
100570
|
383 "In Proced, the current mark character.")
|
93212
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff
changeset
|
384
|
98172
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
385 ;; Faces and font-lock code taken from dired,
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
386 ;; but face variables are deprecated for new code.
|
93212
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff
changeset
|
387 (defgroup proced-faces nil
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff
changeset
|
388 "Faces used by Proced."
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff
changeset
|
389 :group 'proced
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff
changeset
|
390 :group 'faces)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff
changeset
|
391
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff
changeset
|
392 (defface proced-mark
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff
changeset
|
393 '((t (:inherit font-lock-constant-face)))
|
100570
|
394 "Face used for Proced marks."
|
93212
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff
changeset
|
395 :group 'proced-faces)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff
changeset
|
396
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff
changeset
|
397 (defface proced-marked
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff
changeset
|
398 '((t (:inherit font-lock-warning-face)))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff
changeset
|
399 "Face used for marked processes."
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff
changeset
|
400 :group 'proced-faces)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff
changeset
|
401
|
98162
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
402 (defface proced-sort-header
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
403 '((t (:inherit font-lock-keyword-face)))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
404 "Face used for header of attribute used for sorting."
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
405 :group 'proced-faces)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
406
|
93212
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff
changeset
|
407 (defvar proced-re-mark "^[^ \n]"
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff
changeset
|
408 "Regexp matching a marked line.
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff
changeset
|
409 Important: the match ends just after the marker.")
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff
changeset
|
410
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
411 (defvar proced-header-line nil
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
412 "Headers in Proced buffer as a string.")
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
413 (make-variable-buffer-local 'proced-header-line)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
414
|
100752
3bd2bab6d80f
(proced-temp-alist): Renamed from variable proced-children-alist.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
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>
diff
changeset
|
417
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
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>
diff
changeset
|
420
|
100847
883cbe72dc04
(proced-grammar-alist): Refiner can be a list (function help-echo)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
diff
changeset
|
422 "Internal variable for depth of Proced process tree.")
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
423
|
100421
0b3bb7c982eb
(proced-auto-update-interval): Renamed from proced-timer-interval.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
diff
changeset
|
425 "Stores if Proced auto update timer is already installed.")
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
426
|
98249
538f59dc1be8
(proced-grammar-alist, proced-custom-attributes)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
427 (defvar proced-log-buffer "*Proced log*"
|
538f59dc1be8
(proced-grammar-alist, proced-custom-attributes)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
428 "Name of Proced Log buffer.")
|
538f59dc1be8
(proced-grammar-alist, proced-custom-attributes)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
429
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
430 (defconst proced-help-string
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
431 "(n)ext, (p)revious, (m)ark, (u)nmark, (k)ill, (q)uit (type ? for more help)"
|
100570
|
432 "Help string for Proced.")
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
433
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
434 (defconst proced-header-help-echo
|
98162
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
435 "mouse-1, mouse-2: sort by attribute %s%s (%s)"
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
436 "Help string shown when mouse is over a sortable header.")
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
437
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
438 (defconst proced-field-help-echo
|
98162
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
439 "mouse-2, RET: refine by attribute %s %s"
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
440 "Help string shown when mouse is over a refinable field.")
|
93212
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff
changeset
|
441
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff
changeset
|
442 (defvar proced-font-lock-keywords
|
98172
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
443 `(;; (Any) proced marks.
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
444 (,proced-re-mark . 'proced-mark)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
445 ;; Processes marked with `proced-marker-char'
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
446 ;; Should we make sure that only certain attributes are font-locked?
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
447 (,(concat "^[" (char-to-string proced-marker-char) "]")
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
448 ".+" (proced-move-to-goal-column) nil (0 'proced-marked))))
|
93212
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff
changeset
|
449
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff
changeset
|
450 (defvar proced-mode-map
|
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>
diff
changeset
|
452 ;; moving
|
100743
|
453 (define-key km " " 'next-line)
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
454 (define-key km "n" 'next-line)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
455 (define-key km "p" 'previous-line)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
456 (define-key km "\C-n" 'next-line)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
457 (define-key km "\C-p" 'previous-line)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
458 (define-key km "\C-?" 'previous-line)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
459 (define-key km [down] 'next-line)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
diff
changeset
|
461 ;; marking
|
104976
|
462 (define-key km "d" 'proced-mark) ; Dired compatibility ("delete")
|
93212
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff
changeset
|
463 (define-key km "m" 'proced-mark)
|
104954
|
464 (put 'proced-mark :advertised-binding "m")
|
93212
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff
changeset
|
465 (define-key km "u" 'proced-unmark)
|
94063
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
diff
changeset
|
467 (define-key km "M" 'proced-mark-all)
|
93212
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff
changeset
|
468 (define-key km "U" 'proced-unmark-all)
|
94063
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
469 (define-key km "t" 'proced-toggle-marks)
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
470 (define-key km "C" 'proced-mark-children)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
471 (define-key km "P" 'proced-mark-parents)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
472 ;; filtering
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
473 (define-key km "f" 'proced-filter-interactive)
|
98162
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
474 (define-key km [mouse-2] 'proced-refine)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
diff
changeset
|
476 ;; sorting
|
94621
97585dd63d91
(proced-command-alist): Fix system-type values. Fix defcustom.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
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>
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>
diff
changeset
|
480 (define-key km "ss" 'proced-sort-start)
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
diff
changeset
|
482 (define-key km "st" 'proced-sort-time)
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
483 (define-key km "su" 'proced-sort-user)
|
98162
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
484 ;; similar to `Buffer-menu-sort-by-column'
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
485 (define-key km [header-line mouse-1] 'proced-sort-header)
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
diff
changeset
|
487 (define-key km "T" 'proced-toggle-tree)
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
488 ;; formatting
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
diff
changeset
|
490 ;; operate
|
97522
ce7e3551dd0e
(proced-signal-list): Add POSIX 1003.1-2001 signals.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
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>
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>
diff
changeset
|
494 ;; misc
|
33ea0b47d336
(proced-goal-header-re): Renamed from proced-procname-column-regexp.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
diff
changeset
|
496 (define-key km "?" 'proced-help)
|
93212
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff
changeset
|
497 (define-key km [remap undo] 'proced-undo)
|
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>
diff
changeset
|
499 ;; Additional keybindings are inherited from `special-mode-map'
|
93212
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff
changeset
|
500 km)
|
100570
|
501 "Keymap for Proced commands.")
|
93212
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff
changeset
|
502
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff
changeset
|
503 (easy-menu-define
|
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>
diff
changeset
|
505 `("Proced"
|
ce7e3551dd0e
(proced-signal-list): Add POSIX 1003.1-2001 signals.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
506 ["Mark" proced-mark
|
ce7e3551dd0e
(proced-signal-list): Add POSIX 1003.1-2001 signals.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
diff
changeset
|
508 ["Unmark" proced-unmark
|
ce7e3551dd0e
(proced-signal-list): Add POSIX 1003.1-2001 signals.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
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>
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>
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>
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>
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>
diff
changeset
|
515 :help "Marked Processes Become Unmarked, and Vice Versa"]
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
516 ["Mark Children" proced-mark-children
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
517 :help "Mark Current Process and its Children"]
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
518 ["Mark Parents" proced-mark-parents
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
519 :help "Mark Current Process and its Parents"]
|
94063
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
520 "--"
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
521 ("Filters"
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
522 :help "Select Filter for Process Listing"
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
523 ,@(mapcar (lambda (el)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
524 (let ((filter (car el)))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
525 `[,(symbol-name filter)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
526 (proced-filter-interactive ',filter)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
527 :style radio
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
528 :selected (eq proced-filter ',filter)]))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
529 proced-filter-alist))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
530 ("Sorting"
|
98162
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
531 :help "Select Sort Scheme"
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
532 ["Sort..." proced-sort-interactive
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
533 :help "Sort Process List"]
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
534 "--"
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
535 ["Sort by %CPU" proced-sort-pcpu]
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
536 ["Sort by %MEM" proced-sort-pmem]
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
537 ["Sort by PID" proced-sort-pid]
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
538 ["Sort by START" proced-sort-start]
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
539 ["Sort by TIME" proced-sort-time]
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
540 ["Sort by USER" proced-sort-user])
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
541 ("Formats"
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
542 :help "Select Format for Process Listing"
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
543 ,@(mapcar (lambda (el)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
544 (let ((format (car el)))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
545 `[,(symbol-name format)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
546 (proced-format-interactive ',format)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
547 :style radio
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
548 :selected (eq proced-format ',format)]))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
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>
diff
changeset
|
551 :style toggle
|
8ec0632b600c
(proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
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>
diff
changeset
|
554 "--"
|
97522
ce7e3551dd0e
(proced-signal-list): Add POSIX 1003.1-2001 signals.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
diff
changeset
|
556 :help "Omit Marked Processes in Process Listing."]
|
93212
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>
diff
changeset
|
558 ["Revert" revert-buffer
|
ce7e3551dd0e
(proced-signal-list): Add POSIX 1003.1-2001 signals.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
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>
diff
changeset
|
561 :style toggle
|
100421
0b3bb7c982eb
(proced-auto-update-interval): Renamed from proced-timer-interval.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
562 :selected (eval proced-auto-update-flag)
|
98162
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
diff
changeset
|
564 ["Send signal" proced-send-signal
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
diff
changeset
|
566
|
95135
33ea0b47d336
(proced-goal-header-re): Renamed from proced-procname-column-regexp.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
567 ;; helper functions
|
94063
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
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>
diff
changeset
|
570 ;; `proced-marker-char' must appear in column zero
|
94063
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
571 (concat "^" (regexp-quote (char-to-string proced-marker-char))))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
572
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
diff
changeset
|
574 "Display success message for ACTION performed for COUNT processes."
|
94063
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
575 (message "%s %s process%s" action count (if (= 1 count) "" "es")))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
576
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
577 ;; Unlike dired, we do not define our own commands for vertical motion.
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
578 ;; If `goal-column' is set, `next-line' and `previous-line' are fancy
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
579 ;; commands to satisfy our modest needs. If `proced-goal-attribute'
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
580 ;; and/or `goal-column' are not set, `next-line' and `previous-line'
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
581 ;; are really what we need to preserve the column of point.
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
582 ;; We use `proced-move-to-goal-column' for "non-interactive" cases only
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
583 ;; to get a well-defined position of point.
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
584
|
95135
33ea0b47d336
(proced-goal-header-re): Renamed from proced-procname-column-regexp.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
585 (defun proced-move-to-goal-column ()
|
98162
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
586 "Move to `goal-column' if non-nil. Return position of point."
|
94063
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
587 (beginning-of-line)
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
588 (unless (eobp)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
589 (if goal-column
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
590 (forward-char goal-column)
|
98162
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
591 (forward-char 2)))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
592 (point))
|
94063
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
593
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
594 (defun proced-header-line ()
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
595 "Return header line for Proced buffer."
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
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>
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>
diff
changeset
|
599 "\\(%\\)" "\\1\\1"
|
18c7189fe029
(proced-after-send-signal-hook): Use defcustom.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
600 (substring proced-header-line (window-hscroll))))))
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
601
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
602 (defun proced-pid-at-point ()
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
603 "Return pid of system process at point.
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
604 Return nil if point is not on a process line."
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
605 (save-excursion
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
606 (beginning-of-line)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
607 (if (looking-at "^. .")
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
608 (get-text-property (match-end 0) 'proced-pid))))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
609
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
610 ;; proced mode
|
94063
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
611
|
100847
883cbe72dc04
(proced-grammar-alist): Refiner can be a list (function help-echo)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
612 (define-derived-mode proced-mode special-mode "Proced"
|
104868
|
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>
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>
diff
changeset
|
615 type \\<proced-mode-map>\\[proced-mark] to mark a process for later commands.
|
94108
|
616 Type \\[proced-send-signal] to send signals to marked processes.
|
|
617
|
98162
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
618 The initial content of a listing is defined by the variable `proced-filter'
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
619 and the variable `proced-format'.
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
620 The variable `proced-filter' specifies which system processes are displayed.
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
621 The variable `proced-format' specifies which attributes are displayed for
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
622 each process. Type \\[proced-filter-interactive] and \\[proced-format-interactive]
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
623 to change the values of `proced-filter' and `proced-format'.
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
624 The current value of the variable `proced-filter' is indicated in the
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
625 mode line.
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
626
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
627 The sort order of Proced listings is defined by the variable `proced-sort'.
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
628 Type \\[proced-sort-interactive] or click on a header in the header line
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
629 to change the sort scheme. The current sort scheme is indicated in the
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
630 mode line, using \"+\" or \"-\" for ascending or descending sort order.
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
631
|
100735
8ec0632b600c
(proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
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>
diff
changeset
|
634
|
100424
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
635 An existing Proced listing can be refined by typing \\[proced-refine].
|
98162
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
636 Refining an existing listing does not update the variable `proced-filter'.
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
637
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
638 The attribute-specific rules for formatting, filtering, sorting, and refining
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
639 are defined in `proced-grammar-alist'.
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
640
|
100847
883cbe72dc04
(proced-grammar-alist): Refiner can be a list (function help-echo)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
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>
diff
changeset
|
643
|
94108
|
644 \\{proced-mode-map}"
|
|
645 (abbrev-mode 0)
|
|
646 (auto-fill-mode 0)
|
|
647 (setq buffer-read-only t
|
95168
a031e38a88d4
(proced-header-line): New variable and new function.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
648 truncate-lines t
|
a031e38a88d4
(proced-header-line): New variable and new function.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
diff
changeset
|
650 (add-hook 'post-command-hook 'force-mode-line-update nil t)
|
94108
|
651 (set (make-local-variable 'revert-buffer-function) 'proced-revert)
|
|
652 (set (make-local-variable 'font-lock-defaults)
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
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>
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>
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>
diff
changeset
|
657 'proced-auto-update-timer))))
|
99735
|
658
|
94108
|
659 ;;;###autoload
|
|
660 (defun proced (&optional arg)
|
98162
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
661 "Generate a listing of UNIX system processes.
|
93212
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff
changeset
|
662 If invoked with optional ARG the window displaying the process
|
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>
diff
changeset
|
664 Runs the normal hook `proced-post-display-hook'.
|
93212
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff
changeset
|
665
|
99726
|
666 See `proced-mode' for a description of features available in Proced buffers."
|
93212
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>
diff
changeset
|
668 (unless proced-available
|
0b3bb7c982eb
(proced-auto-update-interval): Renamed from proced-timer-interval.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
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>
diff
changeset
|
671 (set-buffer buffer)
|
93212
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>
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>
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>
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>
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>
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>
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>
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>
diff
changeset
|
680 (proced-update t))
|
93212
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>
diff
changeset
|
682 (progn
|
883cbe72dc04
(proced-grammar-alist): Refiner can be a list (function help-echo)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
diff
changeset
|
684 (with-current-buffer buffer
|
106411
|
685 (proced-update t)))
|
94621
97585dd63d91
(proced-command-alist): Fix system-type values. Fix defcustom.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
686 (pop-to-buffer buffer)
|
106411
|
687 (proced-update t)
|
96824
|
688 (message
|
|
689 (substitute-command-keys
|
|
690 "Type \\<proced-mode-map>\\[quit-window] to quit, \\[proced-help] for help")))))
|
93212
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>
diff
changeset
|
692 (defun proced-auto-update-timer ()
|
98162
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
693 "Auto-update Proced buffers using `run-at-time'."
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
694 (dolist (buf (buffer-list))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
695 (with-current-buffer buf
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
diff
changeset
|
697 proced-auto-update-flag)
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
diff
changeset
|
699
|
100421
0b3bb7c982eb
(proced-auto-update-interval): Renamed from proced-timer-interval.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
700 (defun proced-toggle-auto-update (arg)
|
98162
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
701 "Change whether this Proced buffer is updated automatically.
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
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>
diff
changeset
|
704 The time interval for updates is specified via `proced-auto-update-interval'."
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
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>
diff
changeset
|
707 (cond ((eq arg 'toggle) (not proced-auto-update-flag))
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
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>
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>
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>
diff
changeset
|
712
|
100847
883cbe72dc04
(proced-grammar-alist): Refiner can be a list (function help-echo)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
713 ;;; Mark
|
883cbe72dc04
(proced-grammar-alist): Refiner can be a list (function help-echo)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
714
|
93212
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff
changeset
|
715 (defun proced-mark (&optional count)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff
changeset
|
716 "Mark the current (or next COUNT) processes."
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff
changeset
|
717 (interactive "p")
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff
changeset
|
718 (proced-do-mark t count))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff
changeset
|
719
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff
changeset
|
720 (defun proced-unmark (&optional count)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff
changeset
|
721 "Unmark the current (or next COUNT) processes."
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff
changeset
|
722 (interactive "p")
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff
changeset
|
723 (proced-do-mark nil count))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff
changeset
|
724
|
94063
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
725 (defun proced-unmark-backward (&optional count)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
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>
diff
changeset
|
728 ;; but `ibuffer-unmark-backward' behaves different.
|
94063
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
729 (interactive "p")
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
730 (proced-do-mark nil (- (or count 1))))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
731
|
93212
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>
diff
changeset
|
733 "Mark the current (or next COUNT) processes using MARK."
|
93212
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff
changeset
|
734 (or count (setq count 1))
|
94063
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
735 (let ((backward (< count 0))
|
93212
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>
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>
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>
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>
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>
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>
diff
changeset
|
742 (proced-move-to-goal-column)))
|
93212
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff
changeset
|
743
|
94063
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
744 (defun proced-toggle-marks ()
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
745 "Toggle marks: marked processes become unmarked, and vice versa."
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
746 (interactive)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
747 (let ((mark-re (proced-marker-regexp))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
748 buffer-read-only)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
diff
changeset
|
750 (goto-char (point-min))
|
93212
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff
changeset
|
751 (while (not (eobp))
|
94063
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
752 (cond ((looking-at mark-re)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
753 (proced-insert-mark nil))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
754 ((looking-at " ")
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
755 (proced-insert-mark t))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
756 (t
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
757 (forward-line 1)))))))
|
93212
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff
changeset
|
758
|
94063
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
759 (defun proced-insert-mark (mark &optional backward)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
760 "If MARK is non-nil, insert `proced-marker-char'.
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
761 If BACKWARD is non-nil, move one line backwards before inserting the mark.
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
762 Otherwise move one line forward after inserting the mark."
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
763 (if backward (forward-line -1))
|
93212
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff
changeset
|
764 (insert (if mark proced-marker-char ?\s))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff
changeset
|
765 (delete-char 1)
|
94063
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
766 (unless backward (forward-line)))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
767
|
100847
883cbe72dc04
(proced-grammar-alist): Refiner can be a list (function help-echo)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
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>
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>
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>
diff
changeset
|
772 (interactive)
|
883cbe72dc04
(proced-grammar-alist): Refiner can be a list (function help-echo)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
diff
changeset
|
774
|
883cbe72dc04
(proced-grammar-alist): Refiner can be a list (function help-echo)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
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>
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>
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>
diff
changeset
|
779 (interactive)
|
883cbe72dc04
(proced-grammar-alist): Refiner can be a list (function help-echo)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
diff
changeset
|
781
|
883cbe72dc04
(proced-grammar-alist): Refiner can be a list (function help-echo)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
diff
changeset
|
798 (point)))
|
883cbe72dc04
(proced-grammar-alist): Refiner can be a list (function help-echo)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
diff
changeset
|
810
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
811 (defun proced-mark-children (ppid &optional omit-ppid)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
812 "Mark child processes of process PPID.
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
813 Also mark process PPID unless prefix OMIT-PPID is non-nil."
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
814 (interactive (list (proced-pid-at-point) current-prefix-arg))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
815 (proced-mark-process-alist
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
816 (proced-filter-children proced-process-alist ppid omit-ppid)))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
817
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
818 (defun proced-mark-parents (cpid &optional omit-cpid)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
819 "Mark parent processes of process CPID.
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
820 Also mark CPID unless prefix OMIT-CPID is non-nil."
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
821 (interactive (list (proced-pid-at-point) current-prefix-arg))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
822 (proced-mark-process-alist
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
823 (proced-filter-parents proced-process-alist cpid omit-cpid)))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
824
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
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>
diff
changeset
|
827 If QUIET is non-nil suppress status message."
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
828 (let ((count 0))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
829 (if process-alist
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
830 (let (buffer-read-only)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
831 (save-excursion
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
832 (goto-char (point-min))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
833 (while (not (eobp))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
834 (when (assq (proced-pid-at-point) process-alist)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
835 (insert proced-marker-char)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
836 (delete-char 1)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
837 (setq count (1+ count)))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
838 (forward-line)))))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
839 (unless quiet
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
840 (proced-success-message "Marked" count))))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
841
|
94063
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
842 ;; Mostly analog of `dired-do-kill-lines'.
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
843 ;; However, for negative args the target lines of `dired-do-kill-lines'
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
844 ;; include the current line, whereas `dired-mark' for negative args operates
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
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>
diff
changeset
|
847 "Omit marked processes.
|
ce7e3551dd0e
(proced-signal-list): Add POSIX 1003.1-2001 signals.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
diff
changeset
|
849 \(A negative argument omits backward.)
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
850 If `transient-mark-mode' is turned on and the region is active,
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
851 omit the processes in region.
|
94063
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
diff
changeset
|
853 Returns count of omitted lines."
|
94063
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
854 (interactive "P")
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
855 (let ((mark-re (proced-marker-regexp))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
856 (count 0)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
857 buffer-read-only)
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
858 (cond ((use-region-p) ;; Omit active region
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
859 (let ((lines (count-lines (region-beginning) (region-end))))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
860 (save-excursion
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
861 (goto-char (region-beginning))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
862 (while (< count lines)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
863 (proced-omit-process)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
864 (setq count (1+ count))))))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
865 ((not arg) ;; Omit marked lines
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
866 (save-excursion
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
867 (goto-char (point-min))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
868 (while (and (not (eobp))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
869 (re-search-forward mark-re nil t))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
870 (proced-omit-process)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
871 (setq count (1+ count)))))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
872 ((< 0 arg) ;; Omit forward
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
873 (while (and (not (eobp)) (< count arg))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
874 (proced-omit-process)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
875 (setq count (1+ count))))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
876 ((< arg 0) ;; Omit backward
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
877 (while (and (not (bobp)) (< count (- arg)))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
878 (forward-line -1)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
879 (proced-omit-process)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
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>
diff
changeset
|
882 (unless quiet (proced-success-message "Omitted" count))
|
94063
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
883 count))
|
93212
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff
changeset
|
884
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
885 (defun proced-omit-process ()
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
886 "Omit process from listing point is on.
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
887 Update `proced-process-alist' accordingly."
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
888 (setq proced-process-alist
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
889 (assq-delete-all (proced-pid-at-point) proced-process-alist))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
890 (delete-region (line-beginning-position)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
891 (save-excursion (forward-line) (point))))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
892
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
893 ;;; Filtering
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
894
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
895 (defun proced-filter (process-alist filter-list)
|
98162
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
896 "Apply FILTER-LIST to PROCESS-ALIST.
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
897 Return the filtered process list."
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
898 (if (symbolp filter-list)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
899 (setq filter-list (cdr (assq filter-list proced-filter-alist))))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
900 (dolist (filter filter-list)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
901 (let (new-alist)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
902 (cond ( ;; apply function to entire process list
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
903 (eq (car filter) 'fun-all)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
904 (setq new-alist (funcall (cdr filter) process-alist)))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
905 ( ;; apply predicate to each list of attributes
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
906 (eq (car filter) 'function)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
907 (dolist (process process-alist)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
908 (if (funcall (car filter) (cdr process))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
909 (push process new-alist))))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
910 (t ;; apply predicate to specified attribute
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
911 (let ((fun (if (stringp (cdr filter))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
912 `(lambda (val)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
913 (string-match ,(cdr filter) val))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
914 (cdr filter)))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
915 value)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
916 (dolist (process process-alist)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
917 (setq value (cdr (assq (car filter) (cdr process))))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
918 (if (and value (funcall fun value))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
919 (push process new-alist))))))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
920 (setq process-alist new-alist)))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
921 process-alist)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
922
|
98162
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
923 (defun proced-filter-interactive (scheme)
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
924 "Filter Proced buffer using SCHEME.
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
925 When called interactively, an empty string means nil, i.e., no filtering.
|
98162
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
926 Set variable `proced-filter' to SCHEME. Revert listing."
|
93212
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff
changeset
|
927 (interactive
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
928 (let ((scheme (completing-read "Filter: "
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
929 proced-filter-alist nil t)))
|
98162
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
930 (list (if (string= "" scheme) nil (intern scheme)))))
|
98172
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
931 ;; only update if necessary
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
932 (unless (eq proced-filter scheme)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
933 (setq proced-filter scheme)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
934 (proced-update t)))
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
935
|
100752
3bd2bab6d80f
(proced-temp-alist): Renamed from variable proced-children-alist.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
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>
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>
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>
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>
diff
changeset
|
941 ppid)
|
3bd2bab6d80f
(proced-temp-alist): Renamed from variable proced-children-alist.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
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>
diff
changeset
|
944 (/= ppid pid)
|
3bd2bab6d80f
(proced-temp-alist): Renamed from variable proced-children-alist.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
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>
diff
changeset
|
947 (setq pid ppid)
|
3bd2bab6d80f
(proced-temp-alist): Renamed from variable proced-children-alist.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
diff
changeset
|
949 parent-list))
|
3bd2bab6d80f
(proced-temp-alist): Renamed from variable proced-children-alist.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
950
|
3bd2bab6d80f
(proced-temp-alist): Renamed from variable proced-children-alist.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
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>
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>
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>
diff
changeset
|
955 new-alist)
|
3bd2bab6d80f
(proced-temp-alist): Renamed from variable proced-children-alist.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
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>
diff
changeset
|
958 (if omit-ppid
|
3bd2bab6d80f
(proced-temp-alist): Renamed from variable proced-children-alist.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
diff
changeset
|
960 new-alist)))
|
3bd2bab6d80f
(proced-temp-alist): Renamed from variable proced-children-alist.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
961
|
3bd2bab6d80f
(proced-temp-alist): Renamed from variable proced-children-alist.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
962 ;;; Process tree
|
3bd2bab6d80f
(proced-temp-alist): Renamed from variable proced-children-alist.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
963
|
100735
8ec0632b600c
(proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
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>
diff
changeset
|
966 The children alist has elements (PPID PID1 PID2 ...).
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
diff
changeset
|
968 The children alist inherits the sorting order of PROCESS-ALIST.
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
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>
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>
diff
changeset
|
972 ppid)
|
8ec0632b600c
(proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
973 (dolist (process process-alist)
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
diff
changeset
|
975 (if (and ppid
|
8ec0632b600c
(proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
diff
changeset
|
977 (/= ppid (car process))
|
8ec0632b600c
(proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
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>
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>
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>
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>
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>
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>
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>
diff
changeset
|
986 (setq process-tree
|
8ec0632b600c
(proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
diff
changeset
|
988 process-tree))))
|
8ec0632b600c
(proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
989
|
100752
3bd2bab6d80f
(proced-temp-alist): Renamed from variable proced-children-alist.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
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>
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>
diff
changeset
|
993 (if cpids
|
3bd2bab6d80f
(proced-temp-alist): Renamed from variable proced-children-alist.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
diff
changeset
|
995 (list ppid))))
|
3bd2bab6d80f
(proced-temp-alist): Renamed from variable proced-children-alist.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
996
|
100735
8ec0632b600c
(proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
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>
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>
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>
diff
changeset
|
1001 of these processes.
|
3bd2bab6d80f
(proced-temp-alist): Renamed from variable proced-children-alist.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
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>
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>
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>
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>
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>
diff
changeset
|
1008
|
8ec0632b600c
(proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
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>
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>
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>
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>
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>
diff
changeset
|
1015 ;; analyzed recursively.
|
8ec0632b600c
(proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1016 (progn
|
100752
3bd2bab6d80f
(proced-temp-alist): Renamed from variable proced-children-alist.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
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>
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>
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>
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>
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>
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>
diff
changeset
|
1024 (pop cpid-list)))
|
8ec0632b600c
(proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1025 pid-alist)
|
8ec0632b600c
(proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1026
|
8ec0632b600c
(proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
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>
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>
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>
diff
changeset
|
1031
|
3bd2bab6d80f
(proced-temp-alist): Renamed from variable proced-children-alist.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
diff
changeset
|
1045 (proced-update)
|
8ec0632b600c
(proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
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>
diff
changeset
|
1048
|
8ec0632b600c
(proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
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>
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>
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>
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>
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>
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>
diff
changeset
|
1056
|
3bd2bab6d80f
(proced-temp-alist): Renamed from variable proced-children-alist.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
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>
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>
diff
changeset
|
1060 ;; add tree attribute
|
8ec0632b600c
(proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
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>
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>
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>
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>
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>
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>
diff
changeset
|
1068 ;; remove tree attribute
|
3bd2bab6d80f
(proced-temp-alist): Renamed from variable proced-children-alist.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
diff
changeset
|
1070 (while process-alist
|
3bd2bab6d80f
(proced-temp-alist): Renamed from variable proced-children-alist.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1071 (setcar process-alist
|
3bd2bab6d80f
(proced-temp-alist): Renamed from variable proced-children-alist.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
diff
changeset
|
1073 (pop process-alist)))
|
3bd2bab6d80f
(proced-temp-alist): Renamed from variable proced-children-alist.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1074 process-alist))
|
100735
8ec0632b600c
(proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1075
|
8ec0632b600c
(proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
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>
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>
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>
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>
diff
changeset
|
1081 (cdr pprocess))
|
8ec0632b600c
(proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1082 proced-process-tree)
|
8ec0632b600c
(proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
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>
diff
changeset
|
1085 (mapc 'proced-tree-insert (cdr process-tree))))))
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1086
|
98162
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1087 ;; Refining
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1088
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1089 ;; Filters are used to select the processes in a new listing.
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1090 ;; Refiners are used to narrow down further (interactively) the processes
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1091 ;; in an existing listing.
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1092
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1093 (defun proced-refine (&optional event)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1094 "Refine Proced listing by comparing with the attribute value at point.
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1095 Optional EVENT is the location of the Proced field.
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1096
|
100422
b3edbaf87682
(proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
diff
changeset
|
1098 in `proced-grammar-alist'.
|
b3edbaf87682
(proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1099
|
100424
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1100 If REFINER is a list of flags and point is on a process's value of ATTR,
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1101 this command compares the value of ATTR of every process with the value
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1102 of ATTR of the process at the position of point.
|
98162
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1103
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1104 The predicate for the comparison of two ATTR values is defined
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
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>
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>
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>
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>
diff
changeset
|
1110 return value of the predicate is non-nil.
|
98162
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
diff
changeset
|
1112 the current values of these refine flags.
|
98162
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1113
|
100422
b3edbaf87682
(proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
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>
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>
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>
diff
changeset
|
1118
|
b3edbaf87682
(proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
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>
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>
diff
changeset
|
1122 a certain refinement, consider defining a new filter in `proced-filter-alist'."
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1123 (interactive (list last-input-event))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1124 (if event (posn-set-point (event-end event)))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1125 (let ((key (get-text-property (point) 'proced-key))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1126 (pid (get-text-property (point) 'proced-pid)))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1127 (if (and key pid)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
diff
changeset
|
1129 (refiner (nth 7 grammar)))
|
b3edbaf87682
(proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1130 (when refiner
|
b3edbaf87682
(proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1131 (cond ((functionp (car refiner))
|
b3edbaf87682
(proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
diff
changeset
|
1133 ((consp refiner)
|
b3edbaf87682
(proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1134 (let ((predicate (nth 4 grammar))
|
b3edbaf87682
(proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
diff
changeset
|
1136 val new-alist)
|
b3edbaf87682
(proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1137 (dolist (process proced-process-alist)
|
b3edbaf87682
(proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
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>
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>
diff
changeset
|
1141 (val (car refiner)))
|
b3edbaf87682
(proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1142 (push process new-alist)))
|
b3edbaf87682
(proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1143 (setq proced-process-alist new-alist))))
|
98162
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1144 ;; Do not revert listing.
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1145 (proced-update)))
|
98162
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1146 (message "No refiner defined here."))))
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1147
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1148 ;; Proced predicates for sorting and filtering are based on a three-valued
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1149 ;; logic:
|
98162
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1150 ;; Predicates take two arguments P1 and P2, the corresponding attribute
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1151 ;; values of two processes. Predicates should return 'equal if P1 has
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1152 ;; same rank like P2. Any other non-nil value says that P1 is "less than" P2,
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1153 ;; or nil if not.
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1154
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1155 (defun proced-< (num1 num2)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1156 "Return t if NUM1 less than NUM2.
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1157 Return `equal' if NUM1 equals NUM2. Return nil if NUM1 greater than NUM2."
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1158 (if (= num1 num2)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1159 'equal
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1160 (< num1 num2)))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1161
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1162 (defun proced-string-lessp (s1 s2)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1163 "Return t if string S1 is less than S2 in lexicographic order.
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1164 Return `equal' if S1 and S2 have identical contents.
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1165 Return nil otherwise."
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1166 (if (string= s1 s2)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1167 'equal
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1168 (string-lessp s1 s2)))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1169
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1170 (defun proced-time-lessp (t1 t2)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1171 "Return t if time value T1 is less than time value T2.
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1172 Return `equal' if T1 equals T2. Return nil otherwise."
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1173 (with-decoded-time-value ((high1 low1 micro1 t1)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1174 (high2 low2 micro2 t2))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1175 (cond ((< high1 high2))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1176 ((< high2 high1) nil)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1177 ((< low1 low2))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1178 ((< low2 low1) nil)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1179 ((< micro1 micro2))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1180 ((< micro2 micro1) nil)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1181 (t 'equal))))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1182
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1183 ;;; Sorting
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1184
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1185 (defsubst proced-xor (b1 b2)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1186 "Return the logical exclusive or of args B1 and B2."
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1187 (and (or b1 b2)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1188 (not (and b1 b2))))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1189
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1190 (defun proced-sort-p (p1 p2)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1191 "Predicate for sorting processes P1 and P2."
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1192 (if (not (cdr proced-sort-internal))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1193 ;; only one predicate: fast scheme
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1194 (let* ((sorter (car proced-sort-internal))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1195 (k1 (cdr (assq (car sorter) (cdr p1))))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1196 (k2 (cdr (assq (car sorter) (cdr p2)))))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1197 ;; if the attributes are undefined, we should really abort sorting
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1198 (if (and k1 k2)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1199 (proced-xor (funcall (nth 1 sorter) k1 k2)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1200 (nth 2 sorter))))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1201 (let ((sort-list proced-sort-internal) sorter predicate k1 k2)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1202 (catch 'done
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1203 (while (setq sorter (pop sort-list))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1204 (setq k1 (cdr (assq (car sorter) (cdr p1)))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1205 k2 (cdr (assq (car sorter) (cdr p2)))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1206 predicate
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1207 (if (and k1 k2)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1208 (funcall (nth 1 sorter) k1 k2)))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1209 (if (not (eq predicate 'equal))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1210 (throw 'done (proced-xor predicate (nth 2 sorter)))))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1211 (eq t predicate)))))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1212
|
100422
b3edbaf87682
(proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1213 (defun proced-sort (process-alist sorter descend)
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
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>
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>
diff
changeset
|
1217 in descending order.
|
98162
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1218 Return the sorted process list."
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1219 ;; translate SORTER into a list of lists (KEY PREDICATE REVERSE)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1220 (setq proced-sort-internal
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1221 (mapcar (lambda (arg)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
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>
diff
changeset
|
1224 (error "Attribute %s not sortable" (car grammar)))
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1225 (list arg (nth 4 grammar) (nth 5 grammar))))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1226 (cond ((listp sorter) sorter)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1227 ((and (symbolp sorter)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1228 (nth 6 (assq sorter proced-grammar-alist))))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1229 ((symbolp sorter) (list sorter))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1230 (t (error "Sorter undefined %s" sorter)))))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1231 (if proced-sort-internal
|
100422
b3edbaf87682
(proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1232 (progn
|
b3edbaf87682
(proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1233 ;; splice DESCEND into the list
|
b3edbaf87682
(proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1234 (setcar proced-sort-internal
|
b3edbaf87682
(proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1235 (list (caar proced-sort-internal)
|
b3edbaf87682
(proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
diff
changeset
|
1237 (sort process-alist 'proced-sort-p))
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1238 process-alist))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1239
|
100424
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1240 (defun proced-sort-interactive (scheme &optional arg)
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1241 "Sort Proced buffer using SCHEME.
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1242 When called interactively, an empty string means nil, i.e., no sorting.
|
98162
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1243
|
100424
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1244 Prefix ARG controls sort order:
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1245 - If prefix ARG is positive (negative), sort in ascending (descending) order.
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1246 - If ARG is nil or 'no-arg and SCHEME is equal to the previous sorting scheme,
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1247 reverse the sorting order.
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1248 - If ARG is nil or 'no-arg and SCHEME differs from the previous sorting scheme,
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
diff
changeset
|
1250
|
98162
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1251 Set variable `proced-sort' to SCHEME. The current sort scheme is displayed
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1252 in the mode line, using \"+\" or \"-\" for ascending or descending order."
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1253 (interactive
|
100735
8ec0632b600c
(proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1254 (let* (choices
|
8ec0632b600c
(proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
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>
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>
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>
diff
changeset
|
1259 nil t)))
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1260 (list (if (string= "" scheme) nil (intern scheme))
|
100424
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1261 ;; like 'toggle in `define-derived-mode'
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1262 (or current-prefix-arg 'no-arg))))
|
93212
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff
changeset
|
1263
|
100424
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1264 (setq proced-descend
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1265 ;; If `proced-sort-interactive' is called repeatedly for the same
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1266 ;; sort key, the sort order is reversed.
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1267 (cond ((and (eq arg 'no-arg) (equal proced-sort scheme))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1268 (not proced-descend))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1269 ((eq arg 'no-arg)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1270 (nth 5 (assq (if (consp scheme) (car scheme) scheme)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1271 proced-grammar-alist)))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1272 (arg (< (prefix-numeric-value arg) 0))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1273 ((equal proced-sort scheme)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1274 (not proced-descend))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1275 (t (nth 5 (assq (if (consp scheme) (car scheme) scheme)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1276 proced-grammar-alist))))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1277 proced-sort scheme)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1278 (proced-update))
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1279
|
100424
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1280 (defun proced-sort-pcpu (&optional arg)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1281 "Sort Proced buffer by percentage CPU time (%CPU).
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1282 Prefix ARG controls sort order, see `proced-sort-interactive'."
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1283 (interactive (list (or current-prefix-arg 'no-arg)))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1284 (proced-sort-interactive 'pcpu arg))
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1285
|
100424
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1286 (defun proced-sort-pmem (&optional arg)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1287 "Sort Proced buffer by percentage memory usage (%MEM).
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1288 Prefix ARG controls sort order, see `proced-sort-interactive'."
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1289 (interactive (list (or current-prefix-arg 'no-arg)))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1290 (proced-sort-interactive 'pmem arg))
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1291
|
100424
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1292 (defun proced-sort-pid (&optional arg)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1293 "Sort Proced buffer by PID.
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1294 Prefix ARG controls sort order, see `proced-sort-interactive'."
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1295 (interactive (list (or current-prefix-arg 'no-arg)))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1296 (proced-sort-interactive 'pid arg))
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1297
|
100424
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1298 (defun proced-sort-start (&optional arg)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1299 "Sort Proced buffer by time the command started (START).
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1300 Prefix ARG controls sort order, see `proced-sort-interactive'."
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1301 (interactive (list (or current-prefix-arg 'no-arg)))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1302 (proced-sort-interactive 'start arg))
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1303
|
100424
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1304 (defun proced-sort-time (&optional arg)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1305 "Sort Proced buffer by CPU time (TIME).
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1306 Prefix ARG controls sort order, see `proced-sort-interactive'."
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1307 (interactive (list (or current-prefix-arg 'no-arg)))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1308 (proced-sort-interactive 'time arg))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1309
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
diff
changeset
|
1311 "Sort Proced buffer by USER.
|
100424
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1312 Prefix ARG controls sort order, see `proced-sort-interactive'."
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1313 (interactive (list (or current-prefix-arg 'no-arg)))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1314 (proced-sort-interactive 'user arg))
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1315
|
100424
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1316 (defun proced-sort-header (event &optional arg)
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1317 "Sort Proced listing based on an attribute.
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1318 EVENT is a mouse event with starting position in the header line.
|
100570
|
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>
diff
changeset
|
1320 This command updates the variable `proced-sort'.
|
100424
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1321 Prefix ARG controls sort order, see `proced-sort-interactive'."
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1322 (interactive (list last-input-event (or last-prefix-arg 'no-arg)))
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1323 (let ((start (event-start event))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1324 col key)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1325 (save-selected-window
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1326 (select-window (posn-window start))
|
98172
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1327 (setq col (+ (1- (car (posn-actual-col-row start)))
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1328 (window-hscroll)))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1329 (when (and (<= 0 col) (< col (length proced-header-line)))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1330 (setq key (get-text-property col 'proced-key proced-header-line))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1331 (if key
|
100424
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1332 (proced-sort-interactive key arg)
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1333 (message "No sorter defined here."))))))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1334
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1335 ;;; Formating
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1336
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1337 (defun proced-format-time (time)
|
99726
|
1338 "Format time interval TIME."
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1339 (let* ((ftime (float-time time))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1340 (days (truncate ftime 86400))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1341 (ftime (mod ftime 86400))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1342 (hours (truncate ftime 3600))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1343 (ftime (mod ftime 3600))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1344 (minutes (truncate ftime 60))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1345 (seconds (mod ftime 60)))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1346 (cond ((< 0 days)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1347 (format "%d-%02d:%02d:%02d" days hours minutes seconds))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1348 ((< 0 hours)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1349 (format "%02d:%02d:%02d" hours minutes seconds))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1350 (t
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1351 (format "%02d:%02d" minutes seconds)))))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1352
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1353 (defun proced-format-start (start)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1354 "Format time START.
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1355 The return string is always 6 characters wide."
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1356 (let ((d-start (decode-time start))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1357 (d-current (decode-time)))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1358 (cond ( ;; process started in previous years
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1359 (< (nth 5 d-start) (nth 5 d-current))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1360 (format-time-string " %Y" start))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1361 ;; process started today
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1362 ((and (= (nth 3 d-start) (nth 3 d-current))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1363 (= (nth 4 d-start) (nth 4 d-current)))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1364 (format-time-string " %H:%M" start))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1365 (t ;; process started this year
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1366 (format-time-string "%b %e" start)))))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1367
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1368 (defun proced-format-ttname (ttname)
|
98162
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1369 "Format attribute TTNAME, omitting path \"/dev/\"."
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1370 ;; Does this work for all systems?
|
98162
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1371 (substring ttname (if (string-match "\\`/dev/" ttname)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1372 (match-end 0) 0)))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1373
|
100735
8ec0632b600c
(proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
diff
changeset
|
1375 "Format attribute TREE."
|
8ec0632b600c
(proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
diff
changeset
|
1377
|
100422
b3edbaf87682
(proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1378 ;; Proced assumes that every process occupies only one line in the listing.
|
98162
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1379 (defun proced-format-args (args)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1380 "Format attribute ARGS.
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1381 Replace newline characters by \"^J\" (two characters)."
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
diff
changeset
|
1383
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1384 (defun proced-format (process-alist format)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1385 "Display PROCESS-ALIST using FORMAT."
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1386 (if (symbolp format)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
diff
changeset
|
1388
|
b3edbaf87682
(proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
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>
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>
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>
diff
changeset
|
1393 ;; in the listing.
|
b3edbaf87682
(proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1394 (let ((standard-attributes
|
b3edbaf87682
(proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
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>
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>
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>
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>
diff
changeset
|
1400 (dolist (fmt format)
|
b3edbaf87682
(proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1401 (if (symbolp fmt)
|
b3edbaf87682
(proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1402 (if (assq fmt standard-attributes)
|
b3edbaf87682
(proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1403 (push fmt new-format))
|
b3edbaf87682
(proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1404 (while (setq fmi (pop fmt))
|
b3edbaf87682
(proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1405 (when (assq fmi standard-attributes)
|
b3edbaf87682
(proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1406 (push fmi new-format)
|
b3edbaf87682
(proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1407 (setq fmt nil)))))
|
b3edbaf87682
(proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1408 (setq format (nreverse new-format)))
|
b3edbaf87682
(proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1409
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
diff
changeset
|
1411 (let ((whitespace " ") (unknown "?")
|
b3edbaf87682
(proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
diff
changeset
|
1413 header-list grammar)
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1414 ;; Loop over all attributes
|
100422
b3edbaf87682
(proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1415 (while (setq grammar (assq (pop format) proced-grammar-alist))
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1416 (let* ((key (car grammar))
|
98162
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1417 (fun (cond ((stringp (nth 2 grammar))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1418 `(lambda (arg) (format ,(nth 2 grammar) arg)))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1419 ((not (nth 2 grammar)) 'identity)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1420 ( t (nth 2 grammar))))
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1421 (whitespace (if format whitespace ""))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1422 ;; Text properties:
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1423 ;; We use the text property `proced-key' to store in each
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1424 ;; field the corresponding key.
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1425 ;; Of course, the sort predicate appearing in help-echo
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
diff
changeset
|
1427 (hprops
|
8ec0632b600c
(proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
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>
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>
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>
diff
changeset
|
1432 (if descend "-" "+")
|
8ec0632b600c
(proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1433 (nth 1 grammar)
|
8ec0632b600c
(proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1434 (if descend "descending" "ascending"))))))
|
100422
b3edbaf87682
(proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1435 (refiner (nth 7 grammar))
|
b3edbaf87682
(proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1436 (fprops
|
b3edbaf87682
(proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1437 (cond ((functionp (car refiner))
|
b3edbaf87682
(proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
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>
diff
changeset
|
1440 (nth 1 refiner))))
|
100422
b3edbaf87682
(proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1441 ((consp refiner)
|
b3edbaf87682
(proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
diff
changeset
|
1443 help-echo ,(format "mouse-2, RET: refine by attribute %s %s"
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1444 (nth 1 grammar)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1445 (mapconcat (lambda (s)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1446 (if s "+" "-"))
|
100422
b3edbaf87682
(proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1447 refiner ""))))))
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1448 value)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1449
|
98162
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
diff
changeset
|
1451 (if (eq key sort-key)
|
98172
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1452 (setq hprops (append '(face proced-sort-header) hprops)))
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1453 (goto-char (point-min))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1454 (cond ( ;; fixed width of output field
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1455 (numberp (nth 3 grammar))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1456 (dolist (process process-alist)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1457 (end-of-line)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1458 (setq value (cdr (assq key (cdr process))))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1459 (insert (if value
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
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>
diff
changeset
|
1462 unknown))
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1463 whitespace)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1464 (forward-line))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1465 (push (format (concat "%" (number-to-string (nth 3 grammar)) "s")
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1466 (apply 'propertize (nth 1 grammar) hprops))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1467 header-list))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1468
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1469 ( ;; last field left-justified
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1470 (and (not format) (eq 'left (nth 3 grammar)))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1471 (dolist (process process-alist)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1472 (end-of-line)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
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>
diff
changeset
|
1475 unknown))
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1476 (forward-line))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1477 (push (apply 'propertize (nth 1 grammar) hprops) header-list))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1478
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1479 (t ;; calculated field width
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1480 (let ((width (length (nth 1 grammar)))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1481 field-list value)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1482 (dolist (process process-alist)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1483 (setq value (cdr (assq key (cdr process))))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1484 (if value
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1485 (setq value (apply 'propertize (funcall fun value) fprops)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1486 width (max width (length value))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
diff
changeset
|
1488 (push unknown field-list)
|
b3edbaf87682
(proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1489 (setq width (max width (length unknown)))))
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1490 (let ((afmt (concat "%" (if (eq 'left (nth 3 grammar)) "-" "")
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1491 (number-to-string width) "s")))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1492 (push (format afmt (apply 'propertize (nth 1 grammar) hprops))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1493 header-list)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1494 (dolist (value (nreverse field-list))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1495 (end-of-line)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1496 (insert (format afmt value) whitespace)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1497 (forward-line))))))))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1498
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1499 ;; final cleanup
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1500 (goto-char (point-min))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1501 (dolist (process process-alist)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1502 ;; We use the text property `proced-pid' to store in each line
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1503 ;; the corresponding pid
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1504 (put-text-property (point) (line-end-position) 'proced-pid (car process))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1505 (forward-line))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1506 ;; Set header line
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1507 (setq proced-header-line
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1508 (mapconcat 'identity (nreverse header-list) whitespace))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1509 (if (string-match "[ \t]+$" proced-header-line)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1510 (setq proced-header-line (substring proced-header-line 0
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1511 (match-beginning 0))))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1512 ;; (delete-trailing-whitespace)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1513 (goto-char (point-min))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1514 (while (re-search-forward "[ \t\r]+$" nil t)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1515 (delete-region (match-beginning 0) (match-end 0)))))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1516
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1517 (defun proced-format-interactive (scheme &optional revert)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1518 "Format Proced buffer using SCHEME.
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1519 When called interactively, an empty string means nil, i.e., no formatting.
|
98162
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1520 Set variable `proced-format' to SCHEME.
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1521 With prefix REVERT non-nil revert listing."
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1522 (interactive
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1523 (let ((scheme (completing-read "Format: "
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1524 proced-format-alist nil t)))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1525 (list (if (string= "" scheme) nil (intern scheme))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1526 current-prefix-arg)))
|
98172
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1527 ;; only update if necessary
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1528 (when (or (not (eq proced-format scheme)) revert)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1529 (setq proced-format scheme)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1530 (proced-update revert)))
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1531
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1532 ;; generate listing
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1533
|
100422
b3edbaf87682
(proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1534 (defun proced-process-attributes (&optional pid-list)
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
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>
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>
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>
diff
changeset
|
1539 the process is ignored."
|
b3edbaf87682
(proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
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>
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>
diff
changeset
|
1543 (dolist (pid (or pid-list (list-system-processes)) process-alist)
|
102205
|
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>
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>
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>
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>
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>
diff
changeset
|
1549 (push (cons pid attributes) process-alist)))))
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1550
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1551 (defun proced-update (&optional revert quiet)
|
100570
|
1552 "Update the Proced process information. Preserves point and marks.
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
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>
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>
diff
changeset
|
1556 `proced-post-display-hook'."
|
94063
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1557 ;; This is the main function that generates and updates the process listing.
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1558 (interactive "P")
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1559 (setq revert (or revert (not proced-process-alist)))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1560 (or quiet (message (if revert "Updating process information..."
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1561 "Updating process display...")))
|
98162
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1562 (if revert ;; evaluate all processes
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1563 (setq proced-process-alist (proced-process-attributes)))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1564 ;; filtering and sorting
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1565 (setq proced-process-alist
|
100422
b3edbaf87682
(proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
diff
changeset
|
1567 proced-sort proced-descend))
|
98162
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1568
|
100735
8ec0632b600c
(proced-grammar-alist): Allow predicate nil. New attribute tree.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
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>
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>
diff
changeset
|
1572
|
98162
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1573 ;; It is useless to keep undo information if we revert, filter, or
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1574 ;; refine the listing so that `proced-process-alist' has changed.
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1575 ;; We could keep the undo information if we only re-sort the buffer.
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1576 ;; Would that be useful? Re-re-sorting is easy, too.
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1577 (if (consp buffer-undo-list)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1578 (setq buffer-undo-list nil))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1579 (let ((buffer-undo-list t)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1580 ;; If point is on a field, we try to return point to that field.
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1581 ;; Otherwise we try to return to the same column
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1582 (old-pos (let ((pid (proced-pid-at-point))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1583 (key (get-text-property (point) 'proced-key)))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1584 (list pid key ; can both be nil
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1585 (if key
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1586 (if (get-text-property (1- (point)) 'proced-key)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1587 (- (point) (previous-single-property-change
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1588 (point) 'proced-key))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1589 0)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1590 (current-column)))))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1591 buffer-read-only mp-list)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1592 ;; remember marked processes (whatever the mark was)
|
93212
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff
changeset
|
1593 (goto-char (point-min))
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1594 (while (re-search-forward "^\\(\\S-\\)" nil t)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
diff
changeset
|
1596 (match-string-no-properties 1)) mp-list))
|
98162
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1597
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1598 ;; generate listing
|
93212
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff
changeset
|
1599 (erase-buffer)
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1600 (proced-format proced-process-alist proced-format)
|
93212
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff
changeset
|
1601 (goto-char (point-min))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff
changeset
|
1602 (while (not (eobp))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff
changeset
|
1603 (insert " ")
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff
changeset
|
1604 (forward-line))
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1605 (setq proced-header-line (concat " " proced-header-line))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1606 (if revert (set-buffer-modified-p nil))
|
98162
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1607
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1608 ;; set `goal-column'
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1609 (let ((grammar (assq proced-goal-attribute proced-grammar-alist)))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1610 (setq goal-column ;; set to nil if no match
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1611 (if (and grammar
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1612 (not (zerop (buffer-size)))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1613 (string-match (regexp-quote (nth 1 grammar))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1614 proced-header-line))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1615 (if (nth 3 grammar)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1616 (match-beginning 0)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1617 (match-end 0)))))
|
98162
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1618
|
98249
538f59dc1be8
(proced-grammar-alist, proced-custom-attributes)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
diff
changeset
|
1620 ;; Sometimes this puts point in the middle of the proced buffer
|
98162
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
diff
changeset
|
1622 (goto-char (point-min))
|
98162
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1623 (let (pid mark new-pos)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1624 (if (or mp-list (car old-pos))
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1625 (while (not (eobp))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1626 (setq pid (proced-pid-at-point))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1627 (when (setq mark (assq pid mp-list))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1628 (insert (cdr mark))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1629 (delete-char 1)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1630 (beginning-of-line))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1631 (when (eq (car old-pos) pid)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1632 (if (nth 1 old-pos)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1633 (let ((limit (line-end-position)) pos)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1634 (while (and (not new-pos)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1635 (setq pos (next-property-change (point) nil limit)))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1636 (goto-char pos)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1637 (when (eq (nth 1 old-pos)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1638 (get-text-property (point) 'proced-key))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1639 (forward-char (min (nth 2 old-pos)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1640 (- (next-property-change (point))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1641 (point))))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1642 (setq new-pos (point))))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1643 (unless new-pos
|
98162
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1644 ;; we found the process, but the field of point
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1645 ;; is not listed anymore
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1646 (setq new-pos (proced-move-to-goal-column))))
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1647 (setq new-pos (min (+ (line-beginning-position) (nth 2 old-pos))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1648 (line-end-position)))))
|
98162
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1649 (forward-line)))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1650 (if new-pos
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1651 (goto-char new-pos)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1652 (goto-char (point-min))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
diff
changeset
|
1654 ;; update modeline
|
98162
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1655 ;; Does the long `mode-name' clutter the modeline? It would be nice
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1656 ;; to have some other location for displaying the values of the various
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1657 ;; flags that affect the behavior of proced (flags one might want
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1658 ;; to change on the fly). Where??
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1659 (setq mode-name
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1660 (concat "Proced"
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1661 (if proced-filter
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1662 (concat ": " (symbol-name proced-filter))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1663 "")
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1664 (if proced-sort
|
100422
b3edbaf87682
(proced-grammar-alist): Allow refiner elements that
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1665 (let* ((key (if (consp proced-sort) (car proced-sort)
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1666 proced-sort))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
diff
changeset
|
1668 (concat " by " (if proced-descend "-" "+")
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1669 (nth 1 grammar)))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1670 "")))
|
94621
97585dd63d91
(proced-command-alist): Fix system-type values. Fix defcustom.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
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>
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>
diff
changeset
|
1674 ;; done
|
93212
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff
changeset
|
1675 (or quiet (input-pending-p)
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1676 (message (if revert "Updating process information...done."
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1677 "Updating process display...done.")))))
|
93212
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff
changeset
|
1678
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff
changeset
|
1679 (defun proced-revert (&rest args)
|
100424
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1680 "Reevaluate the process listing based on the currently running processes.
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1681 Preserves point and marks."
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1682 (proced-update t))
|
93212
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff
changeset
|
1683
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff
changeset
|
1684 (defun proced-send-signal (&optional signal)
|
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>
diff
changeset
|
1686 If no process is marked, operate on current process.
|
93212
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>
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>
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>
diff
changeset
|
1690 `proced-after-send-signal-hook'."
|
93212
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff
changeset
|
1691 (interactive)
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1692 (let ((regexp (proced-marker-regexp))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1693 process-alist)
|
93212
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff
changeset
|
1694 ;; collect marked processes
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff
changeset
|
1695 (save-excursion
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff
changeset
|
1696 (goto-char (point-min))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff
changeset
|
1697 (while (re-search-forward regexp nil t)
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1698 (push (cons (proced-pid-at-point)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
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>
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>
diff
changeset
|
1702 (line-end-position)))
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1703 process-alist)))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1704 (setq process-alist
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1705 (if process-alist
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
diff
changeset
|
1707 ;; take current process
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1708 (list (cons (proced-pid-at-point)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1709 (buffer-substring-no-properties
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1710 (+ 2 (line-beginning-position))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
diff
changeset
|
1712 (unless signal
|
ce7e3551dd0e
(proced-signal-list): Add POSIX 1003.1-2001 signals.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1713 ;; Display marked processes (code taken from `dired-mark-pop-up').
|
106411
|
1714 (let ((bufname " *Marked Processes*") ; use leading space in buffer name
|
|
1715 ; to make this buffer ephemeral
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
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>
diff
changeset
|
1718 (setq truncate-lines t
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
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>
diff
changeset
|
1721 (add-hook 'post-command-hook 'force-mode-line-update nil t)
|
104721
|
1722 (let ((inhibit-read-only t))
|
|
1723 (erase-buffer)
|
|
1724 (buffer-disable-undo)
|
|
1725 (setq buffer-read-only t)
|
|
1726 (dolist (process process-alist)
|
|
1727 (insert " " (cdr process) "\n")))
|
97522
ce7e3551dd0e
(proced-signal-list): Add POSIX 1003.1-2001 signals.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1728 (save-window-excursion
|
101880
18c7189fe029
(proced-after-send-signal-hook): Use defcustom.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
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>
diff
changeset
|
1731 (let (split-width-threshold)
|
18c7189fe029
(proced-after-send-signal-hook): Use defcustom.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
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>
diff
changeset
|
1734 (let* ((completion-ignore-case t)
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
diff
changeset
|
1736 "1 process"
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1737 (format "%d processes" (length process-alist))))
|
104721
|
1738 (completion-annotate-function
|
|
1739 (lambda (s) (cdr (assoc s proced-signal-list)))))
|
|
1740 (setq signal
|
|
1741 (completing-read (concat "Send signal [" pnum
|
|
1742 "] (default TERM): ")
|
|
1743 proced-signal-list
|
|
1744 nil nil nil nil "TERM")))))))
|
103028
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1745 ;; send signal
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1746 (let ((count 0)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1747 failures)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1748 ;; Why not always use `signal-process'? See
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1749 ;; http://lists.gnu.org/archive/html/emacs-devel/2008-03/msg02955.html
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1750 (if (functionp proced-signal-function)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1751 ;; use built-in `signal-process'
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1752 (let ((signal (if (stringp signal)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1753 (if (string-match "\\`[0-9]+\\'" signal)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1754 (string-to-number signal)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1755 (make-symbol signal))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1756 signal))) ; number
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1757 (dolist (process process-alist)
|
103028
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1758 (condition-case err
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1759 (if (zerop (funcall
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1760 proced-signal-function (car process) signal))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1761 (setq count (1+ count))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1762 (proced-log "%s\n" (cdr process))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1763 (push (cdr process) failures))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1764 (error ; catch errors from failed signals
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1765 (proced-log "%s\n" err)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1766 (proced-log "%s\n" (cdr process))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1767 (push (cdr process) failures)))))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1768 ;; use external system call
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1769 (let ((signal (concat "-" (if (numberp signal)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1770 (number-to-string signal) signal))))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1771 (dolist (process process-alist)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1772 (with-temp-buffer
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1773 (condition-case err
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1774 (if (zerop (call-process
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1775 proced-signal-function nil t nil
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1776 signal (number-to-string (car process))))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1777 (setq count (1+ count))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1778 (proced-log (current-buffer))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1779 (proced-log "%s\n" (cdr process))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1780 (push (cdr process) failures))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1781 (error ; catch errors from failed signals
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1782 (proced-log (current-buffer))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1783 (proced-log "%s\n" (cdr process))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1784 (push (cdr process) failures)))))))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1785 (if failures
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1786 ;; Proced error message are not always very precise.
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1787 ;; Can we issue a useful one-line summary in the
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1788 ;; message area (using FAILURES) if only one signal failed?
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1789 (proced-log-summary
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1790 signal
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1791 (format "%d of %d signal%s failed"
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1792 (length failures) (length process-alist)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1793 (if (= 1 (length process-alist)) "" "s")))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1794 (proced-success-message "Sent signal to" count)))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1795 ;; final clean-up
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
diff
changeset
|
1797
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
diff
changeset
|
1799 (defun proced-why ()
|
ce7e3551dd0e
(proced-signal-list): Add POSIX 1003.1-2001 signals.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
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>
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>
diff
changeset
|
1803 (interactive)
|
ce7e3551dd0e
(proced-signal-list): Add POSIX 1003.1-2001 signals.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1804 (if (get-buffer proced-log-buffer)
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1805 (save-selected-window
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1806 ;; move `proced-log-buffer' to the front of the buffer list
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1807 (select-window (display-buffer (get-buffer proced-log-buffer)))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1808 (setq truncate-lines t)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1809 (set-buffer-modified-p nil)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1810 (setq buffer-read-only t)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1811 (goto-char (point-max))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1812 (forward-line -1)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1813 (backward-page 1)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1814 (recenter 0))))
|
97522
ce7e3551dd0e
(proced-signal-list): Add POSIX 1003.1-2001 signals.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1815
|
ce7e3551dd0e
(proced-signal-list): Add POSIX 1003.1-2001 signals.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
diff
changeset
|
1826 (goto-char (point-max))
|
98064
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
diff
changeset
|
1828 (cond ((stringp log)
|
ce7e3551dd0e
(proced-signal-list): Add POSIX 1003.1-2001 signals.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1829 (insert (if args
|
ce7e3551dd0e
(proced-signal-list): Add POSIX 1003.1-2001 signals.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
diff
changeset
|
1831 log)))
|
ce7e3551dd0e
(proced-signal-list): Add POSIX 1003.1-2001 signals.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1832 ((bufferp log)
|
ce7e3551dd0e
(proced-signal-list): Add POSIX 1003.1-2001 signals.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
diff
changeset
|
1834 ((eq t log)
|
ce7e3551dd0e
(proced-signal-list): Add POSIX 1003.1-2001 signals.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1835 (backward-page 1)
|
ce7e3551dd0e
(proced-signal-list): Add POSIX 1003.1-2001 signals.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1836 (unless (bolp)
|
ce7e3551dd0e
(proced-signal-list): Add POSIX 1003.1-2001 signals.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1837 (insert "\n"))
|
ce7e3551dd0e
(proced-signal-list): Add POSIX 1003.1-2001 signals.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
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>
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>
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>
diff
changeset
|
1842 (insert "\f\n")))))))
|
ce7e3551dd0e
(proced-signal-list): Add POSIX 1003.1-2001 signals.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
diff
changeset
|
1843
|
ce7e3551dd0e
(proced-signal-list): Add POSIX 1003.1-2001 signals.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
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>
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>
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>
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>
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>
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>
diff
changeset
|
1851 (proced-log t signal))
|
93212
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff
changeset
|
1852
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff
changeset
|
1853 (defun proced-help ()
|
100570
|
1854 "Provide help for the Proced user."
|
93212
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>
diff
changeset
|
1856 (proced-why)
|
93212
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff
changeset
|
1857 (if (eq last-command 'proced-help)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff
changeset
|
1858 (describe-mode)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff
changeset
|
1859 (message proced-help-string)))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff
changeset
|
1860
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff
changeset
|
1861 (defun proced-undo ()
|
100570
|
1862 "Undo in a Proced buffer.
|
|
1863 This doesn't recover killed processes, it just undoes changes in the Proced
|
93212
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff
changeset
|
1864 buffer. You can use it to recover marks."
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff
changeset
|
1865 (interactive)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff
changeset
|
1866 (let (buffer-read-only)
|
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>
diff
changeset
|
1868 (message "Change in Proced buffer undone.
|
93212
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff
changeset
|
1869 Killed processes cannot be recovered by Emacs."))
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff
changeset
|
1870
|
105571
|
1871 (defun proced-unload-function ()
|
|
1872 "Unload the Proced library."
|
|
1873 (save-current-buffer
|
|
1874 (dolist (buf (buffer-list))
|
|
1875 (set-buffer buf)
|
|
1876 (when (eq major-mode 'proced-mode)
|
|
1877 (funcall (or (default-value 'major-mode) 'fundamental-mode)))))
|
|
1878 ;; continue standard unloading
|
|
1879 nil)
|
|
1880
|
93212
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff
changeset
|
1881 (provide 'proced)
|
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
diff
changeset
|
1882
|
93248
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
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>
diff
changeset
|
1884 ;;; proced.el ends here
|