1 ;;; view-process-xemacs.el --- XEmacs specific code for view-process
3 ;; Copyright (C) 1995, 1996 Heiko Muenkel
5 ;; Author: Heiko Muenkel
8 ;; This file is part of XEmacs.
10 ;; XEmacs is free software; you can redistribute it and/or modify it
11 ;; under the terms of the GNU General Public License as published by
12 ;; the Free Software Foundation; either version 2, or (at your
13 ;; option) any later version.
15 ;; XEmacs is distributed in the hope that it will be useful, but
16 ;; WITHOUT ANY WARRANTY; without even the implied warranty of
17 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 ;; General Public License for more details.
20 ;; You should have received a copy of the GNU General Public License
21 ;; along with XEmacs; see the file COPYING. If not, write to the Free
22 ;; Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
25 ;;; Synched up with: Emacs 20.1
29 ;; This file contains lisp code which works only in the XEmacs.
33 ;; Put this file in one of your lisp load directories.
38 (provide 'view-process-xemacs)
42 (defvar View-process-itimer-name "view-process"
43 "Name of the view-process itimer.")
46 ;;; special keybindings
48 (define-key View-process-mode-map '(button2) 'View-process-mouse-kill)
49 (define-key View-process-mode-map '(button3) 'View-process-popup-menu)
54 (if (not View-process-pulldown-menu)
56 View-process-pulldown-menu
57 '("View-process-pulldown-menu-name"
58 ["Rename Buffer" View-process-rename-current-output-buffer t]
59 ["Submit Bug Report" View-process-submit-bug-report t]
60 ["Quit" View-process-quit t]
63 View-process-toggle-truncate-lines
65 :selected truncate-lines]
67 View-process-toggle-motion-help
69 :selected View-process-motion-help]
71 View-process-toggle-display-with-2-windows
73 :selected View-process-display-with-2-windows]
75 View-process-toggle-hide-header
77 :selected View-process-hide-header
78 :active View-process-display-with-2-windows]
79 ["Digits Send Signals"
80 View-process-toggle-digit-bindings
82 :selected View-process-digit-bindings-send-signal]
87 (if (not View-process-region-menu)
89 View-process-region-menu
91 ["View Processes" view-processes nil]
92 ["New PS" View-process-status nil]
93 ["Update" View-process-status-update nil]
96 View-process-start-itimer
98 :selected (not (get-itimer View-process-itimer-name))
101 View-process-delete-itimer
103 :selected (get-itimer View-process-itimer-name)
108 (View-process-send-signal-to-processes-in-region "SIGHUP") t]
110 (View-process-send-signal-to-processes-in-region "SIGTERM") t]
112 (View-process-send-signal-to-processes-in-region "SIGKILL") t]
114 (View-process-send-signal-to-processes-in-region "SIGSTOP") t]
116 (View-process-send-signal-to-processes-in-region "SIGCONT") t]
118 (View-process-send-signal-to-processes-in-region "SIGQUIT") t]
120 ["Any Signal..." View-process-send-signal-to-processes-in-region t]
122 ["Alter Priority..." View-process-renice-processes-in-region t]
125 ["Mark" View-process-mark-current-line nil]
126 ["Mark Children" View-process-mark-children-in-current-line nil]
127 ["Remark Last Marks" View-process-reset-last-marks nil]
129 ["Unmark" View-process-unmark-current-line nil]
130 ["Unmark All" View-process-unmark-all nil]
133 ["Sort" View-process-sort-region-by-current-field (looking-at "[^ ]")]
134 ["Reverse" View-process-reverse-region t]
136 View-process-filter-region-by-current-field
138 ["Exclude Field Filter..."
139 (progn (setq current-prefix-arg '(-1))
141 'View-process-filter-region-by-current-field))
143 :active (looking-at "[^ ]")]
144 ["Line Filter..." View-process-filter-region t]
145 ["Exclude Line Filter..."
146 (progn (setq current-prefix-arg '(-1))
148 'View-process-filter-region))
153 ["PID and Command" View-process-show-pid-and-command nil]
154 ["Field Name" View-process-which-field-name nil]
155 ["Header Line" View-process-show-header-line nil]
156 ["Own PID" View-process-display-emacs-pid nil]
162 (if (not View-process-marked-menu)
164 View-process-marked-menu
166 ["View Processes" view-processes t]
167 ["New PS" View-process-status t]
168 ["Update" View-process-status-update t]
171 View-process-start-itimer
173 :selected (not (get-itimer View-process-itimer-name))
176 View-process-delete-itimer
178 :selected (get-itimer View-process-itimer-name)
182 ["SIGHUP" (View-process-send-signal-to-processes-with-mark "SIGHUP") t]
184 (View-process-send-signal-to-processes-with-mark "SIGTERM")
187 (View-process-send-signal-to-processes-with-mark "SIGKILL")
190 (View-process-send-signal-to-processes-with-mark "SIGSTOP")
193 (View-process-send-signal-to-processes-with-mark "SIGCONT")
196 (View-process-send-signal-to-processes-with-mark "SIGQUIT")
199 ["Any Signal..." View-process-send-signal-to-processes-with-mark t]
201 ["Alter Priority..." View-process-renice-processes-with-mark t]
204 ["Mark" View-process-mark-current-line t]
205 ["Mark Children" View-process-mark-children-in-current-line t]
206 ["Remark Last Marks" View-process-reset-last-marks t]
208 ["Unmark" View-process-unmark-current-line t]
209 ["Unmark All" View-process-unmark-all t]
212 ["Sort" View-process-sort-output-by-current-field (looking-at "[^ ]")]
213 ["Reverse" View-process-reverse-output t]
215 View-process-filter-output-by-current-field (looking-at "[^ ]")]
216 ["Exclude Field Filter..."
217 (progn (setq current-prefix-arg '(-1))
219 'View-process-filter-output-by-current-field))
221 :active (looking-at "[^ ]")]
222 ["Line Filter..." View-process-filter-output t]
223 ["Exclude Line Filter..."
224 (progn (setq current-prefix-arg '(-1))
226 'View-process-filter-output))
231 ["PID and Command" View-process-show-pid-and-command t]
232 ["Field Name" View-process-which-field-name (looking-at "[^ ]")]
233 ["Header Line" View-process-show-header-line t]
234 ["Own PID" View-process-display-emacs-pid t]
240 (if (not View-process-non-region-menu)
242 View-process-non-region-menu
243 '("PS Non Region Menu"
244 ["View Processes" view-processes t]
245 ["New PS" View-process-status t]
246 ["Update" View-process-status-update t]
249 View-process-start-itimer
251 :selected (not (get-itimer View-process-itimer-name))]
253 View-process-delete-itimer
255 :selected (get-itimer View-process-itimer-name)]
258 ["SIGHUP" (View-process-send-signal-to-process-in-line "SIGHUP") t]
259 ["SIGTERM" (View-process-send-signal-to-process-in-line "SIGTERM") t]
260 ["SIGKILL" (View-process-send-signal-to-process-in-line "SIGKILL") t]
261 ["SIGSTOP" (View-process-send-signal-to-process-in-line "SIGSTOP") t]
262 ["SIGCONT" (View-process-send-signal-to-process-in-line "SIGCONT") t]
263 ["SIGQUIT" (View-process-send-signal-to-process-in-line "SIGQUIT") t]
265 ["Any Signal..." View-process-send-signal-to-process-in-line t]
267 ["Alter Priority..." View-process-renice-process-in-line t]
270 ["Mark" View-process-mark-current-line t]
271 ["Mark Children" View-process-mark-children-in-current-line t]
272 ["Remark Last Marks" View-process-reset-last-marks t]
274 ["Unmark" View-process-unmark-current-line nil]
275 ["Unmark All" View-process-unmark-all nil]
278 ["Sort" View-process-sort-output-by-current-field (looking-at "[^ ]")]
279 ["Reverse" View-process-reverse-output t]
281 View-process-filter-output-by-current-field
283 ["Exclude Field Filter..."
284 (progn (setq current-prefix-arg '(-1))
286 'View-process-filter-output-by-current-field))
288 :active (looking-at "[^ ]")]
289 ["Line Filter..." View-process-filter-output t]
290 ["Exclude Line Filter..."
291 (progn (setq current-prefix-arg '(-1))
293 'View-process-filter-output))
298 ["PID and Command" View-process-show-pid-and-command t]
299 ["Field Name" View-process-which-field-name (looking-at "[^ ]")]
300 ["Header Line" View-process-show-header-line t]
301 ["Own PID" View-process-display-emacs-pid t]
307 (defun View-process-popup-menu (event)
308 "Pop up a menu for `View-process-mode'."
310 (mouse-set-point event)
312 (cond ((View-process-region-active-p) View-process-region-menu)
313 (View-process-pid-mark-alist View-process-marked-menu)
314 (t View-process-non-region-menu))))
316 (defun View-process-install-pulldown-menu ()
317 "Install a pulldown menu for the `View-process-mode'."
318 (if (and (featurep 'menubar)
320 (not (assoc View-process-pulldown-menu-name current-menubar)))
322 (set-buffer-menubar (copy-sequence current-menubar))
324 (cons View-process-pulldown-menu-name
325 (cdr View-process-pulldown-menu)))
326 (add-submenu (list View-process-pulldown-menu-name)
327 View-process-region-menu
329 (add-submenu (list View-process-pulldown-menu-name)
330 View-process-marked-menu
332 (add-submenu (list View-process-pulldown-menu-name)
333 View-process-non-region-menu
340 (defun View-process-mode-motion-highlight-line (event)
341 "For use as the value of `mode-motion-hook' in the `View-process-mode'.
342 It highlights the line under the mouse and displays help messages during
343 mouse motion, if `View-process-motion-help' is non nil."
344 (if (and (event-point event)
345 (> (event-point event) View-process-header-end))
347 (mode-motion-highlight-line event)
348 (if (and View-process-motion-help
349 (not View-process-stop-motion-help))
351 (mouse-set-point event)
352 (View-process-show-pid-and-command-or-field-name)
357 (defun View-process-install-mode-motion ()
358 "Install the `mode-motion-hook'."
359 (make-local-variable 'mode-motion-hook)
360 (setq mode-motion-hook 'View-process-mode-motion-highlight-line))
362 (defun View-process-toggle-motion-help (&optional arg)
363 "Change whether a help message is displayed during mouse motion.
364 With a positive ARG the variable 'View-process-motion-help' is set
365 to t and with a negative ARG it is set to nil."
368 (if (>= (prefix-numeric-value arg) 0)
369 (setq View-process-motion-help t)
370 (setq View-process-motion-help nil))
371 (if View-process-motion-help
372 (setq View-process-motion-help nil)
373 (setq View-process-motion-help t))))
375 ; necessary for the Emacs 19
376 (defalias 'View-process-insert-and-inherit 'insert)
380 (defun View-process-start-itimer ()
381 "Start or restart the itimer for updating the process output."
383 (if (get-itimer View-process-itimer-name)
385 (set-itimer-value (get-itimer View-process-itimer-name)
386 View-process-itimer-value)
387 (set-itimer-restart (get-itimer View-process-itimer-name)
388 View-process-itimer-value))
389 (start-itimer View-process-itimer-name
390 'View-process-status-itimer-function
391 View-process-itimer-value
392 View-process-itimer-value)))
394 (defun View-process-delete-itimer ()
395 "Stops (deletes) the view process itimer."
397 (if (get-itimer View-process-itimer-name)
398 (delete-itimer View-process-itimer-name)))
403 (defun View-process-region-active-p ()
404 "Return t, if a region is active.
405 If `zmacs-regions' is nil, then this return always nil."
412 (defun View-process-return-current-command-key-as-string ()
413 "Return the key, which invokes the current command as string."
414 (events-to-keys (this-command-keys)))
416 (defun View-process-redraw ()
417 "Dummy function. It does nothing in XEmacs."
421 ;;; font-lock and colors
423 (defun View-process-install-font-lock ()
424 "Install `font-lock-mode', if `View-process-use-font-lock' is t."
425 (if View-process-use-font-lock
428 (if (not (fboundp 'valid-color-name-p))
429 (defalias 'valid-color-name-p 'x-valid-color-name-p))
431 (defun View-process-search-color-in-color-list (color-list)
432 "Search a valid color in the COLOR-LIST."
433 (cond ((not color-list) nil)
435 (if (valid-color-name-p (car color-list))
437 (View-process-search-color-in-color-list (cdr color-list))))))
439 (defun View-process-search-color (color)
440 "Return a color, which can be displayed by the window manager.
441 COLOR is either a string with a color or a list with possible
443 (cond ((not color) nil)
445 (if (valid-color-name-p color) color nil))
447 (View-process-search-color-in-color-list color))
450 ;; missing function window-pixel-edges in XEmacs < 19.12
451 ;; Attention: This emulation is only valid, to test if a value
453 (if (not (fboundp 'window-pixel-edges))
454 (defalias 'window-pixel-edges 'window-edges))
459 (if (fboundp 'set-specifier)
461 (defun view-process-switch-buffer-modeline (modeline-on)
462 "Switch the current modeline on, if MODELINE-ON is t.
463 Otherwise the modeline is switched off."
464 (set-specifier has-modeline-p (cons (current-buffer) modeline-on)))
467 (defun view-process-switch-buffer-modeline (modeline-on)
469 Sorry, the modeline can't be switched off in this emacs version.
470 You have to update at least to XEmacs 19.12."
475 ;;; view-process-xemacs.el ends here.