diff lisp/modes/view-process-xemacs.el @ 165:5a88923fcbfe r20-3b9

Import from CVS: tag r20-3b9
author cvs
date Mon, 13 Aug 2007 09:44:42 +0200
parents
children 41ff10fd062f
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lisp/modes/view-process-xemacs.el	Mon Aug 13 09:44:42 2007 +0200
@@ -0,0 +1,474 @@
+;;; view-process-xemacs.el --- XEmacs specific code for view-process
+
+;; Copyright (C) 1995, 1996 Heiko Muenkel
+
+;; AUthor: Heiko Muenkel
+;; Keywords: processes
+
+;; This file is part of XEmacs.
+
+;;  XEmacs is free software; you can redistribute it and/or modify it
+;;  under the terms of the GNU General Public License as published by
+;;  the Free Software Foundation; either version 2, or (at your
+;;  option) any later version.
+
+;;  XEmacs is distributed in the hope that it will be useful, but
+;;  WITHOUT ANY WARRANTY; without even the implied warranty of
+;;  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+;;  General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with XEmacs; see the file COPYING.  If not, write to the Free
+;; Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+;; 02111-1307, USA.
+
+;;; Synched up with:  Emacs 20.1
+
+;;; Commentary:
+
+;;	This file contains lisp code, which works only in the XEmacs.
+
+;; Installation: 
+
+;;	Put this file in one of your lisp load directories.
+;;
+
+;;; Code:
+
+(provide 'view-process-xemacs)
+
+;;; variables
+
+(defvar View-process-itimer-name "view-process"
+  "Name of the view process itimer.")
+
+
+;;; special keybindings
+
+(define-key View-process-mode-map '(button2) 'View-process-mouse-kill)
+(define-key View-process-mode-map '(button3) 'View-process-popup-menu)
+
+
+;;; menus
+
+(if (not View-process-pulldown-menu)
+    (setq
+     View-process-pulldown-menu
+     '("View-process-pulldown-menu-name"
+       ["Rename Buffer" View-process-rename-current-output-buffer t]
+       ["Submit Bug Report" View-process-submit-bug-report t]
+       ["Quit" View-process-quit t]
+       ("Options"
+	["Truncate Lines" 
+	 View-process-toggle-truncate-lines 
+	 :style toggle
+	 :selected truncate-lines]
+	["Motion Help"
+	 View-process-toggle-motion-help
+	 :style toggle
+	 :selected View-process-motion-help]
+	["Two Windows"
+	 View-process-toggle-display-with-2-windows
+	 :style toggle
+	 :selected View-process-display-with-2-windows]
+	["Hide Header"
+	 View-process-toggle-hide-header
+	 :style toggle
+	 :selected View-process-hide-header
+	 :active View-process-display-with-2-windows]
+	["Digits Send Signals"
+	 View-process-toggle-digit-bindings
+	 :style toggle
+	 :selected View-process-digit-bindings-send-signal]
+	)
+       )))
+
+
+(if (not View-process-region-menu)
+    (setq 
+     View-process-region-menu
+     '("PS Region Menu"
+       ["View Processes" view-processes nil]
+       ["New PS" View-process-status nil]
+       ["Update" View-process-status-update nil]
+       ("Periodic Output"
+	["Start " 
+	 View-process-start-itimer 
+	 :style radio 
+	 :selected (not (get-itimer View-process-itimer-name))
+	 :active nil]	
+	["Stop" 
+	 View-process-delete-itimer 
+	 :style radio 
+	 :selected (get-itimer View-process-itimer-name)
+	 :active nil]
+	)
+       ("Send Signal"
+	["SIGHUP" 
+	 (View-process-send-signal-to-processes-in-region "SIGHUP") t]
+	["SIGTERM" 
+	 (View-process-send-signal-to-processes-in-region "SIGTERM") t]
+	["SIGKILL" 
+	 (View-process-send-signal-to-processes-in-region "SIGKILL") t]
+	["SIGSTOP" 
+	 (View-process-send-signal-to-processes-in-region "SIGSTOP") t]
+	["SIGCONT" 
+	 (View-process-send-signal-to-processes-in-region "SIGCONT") t]
+	["SIGQUIT" 
+	 (View-process-send-signal-to-processes-in-region "SIGQUIT") t]
+	"----"
+	["Any Signal..." View-process-send-signal-to-processes-in-region t]
+	"----"
+	["Alter Priority..." View-process-renice-processes-in-region t]
+	)
+       ("Mark"
+	["Mark" View-process-mark-current-line nil]
+	["Mark Childs" View-process-mark-childs-in-current-line nil]
+	["Remark Last Marks" View-process-reset-last-marks nil]
+	"----"
+	["Unmark" View-process-unmark-current-line nil]
+	["Unmark All" View-process-unmark-all nil]
+	)
+       "----"
+       ["Sort" View-process-sort-region-by-current-field (looking-at "[^ ]")]
+       ["Reverse" View-process-reverse-region t]
+       ["Field Filter..." 
+	View-process-filter-region-by-current-field 
+	(looking-at "[^ ]")]
+       ["Exlude Field Filter..." 
+	(progn (setq current-prefix-arg '(-1))
+	       (call-interactively 
+		'View-process-filter-region-by-current-field))
+	:keys "C-u -1 M-c f"
+	:active (looking-at "[^ ]")]	    
+       ["Line Filter..." View-process-filter-region t]
+       ["Exclude Line Filter..." 
+	(progn (setq current-prefix-arg '(-1))
+	       (call-interactively 
+		'View-process-filter-region))
+	:keys "C-u -1 M-c g"
+	:active t]
+       "----"
+       ("Help"
+	["PID and Command" View-process-show-pid-and-command nil]
+	["Field Name" View-process-which-field-name nil]
+	["Header Line" View-process-show-header-line nil]
+	["Own PID" View-process-display-emacs-pid nil]
+	)
+       )
+     )
+  )
+
+(if (not View-process-marked-menu)
+    (setq 
+     View-process-marked-menu
+     '("PS Marked Menu"
+       ["View Processes" view-processes t]
+       ["New PS" View-process-status t]
+       ["Update" View-process-status-update t]
+       ("Periodic Output"
+	["Start " 
+	 View-process-start-itimer 
+	 :style radio 
+	 :selected (not (get-itimer View-process-itimer-name))
+	 :active nil]
+	["Stop" 
+	 View-process-delete-itimer 
+	 :style radio 
+	 :selected (get-itimer View-process-itimer-name)
+	 :active nil]
+	)
+       ("Send Signal"
+	["SIGHUP" (View-process-send-signal-to-processes-with-mark "SIGHUP") t]
+	["SIGTERM" 
+	 (View-process-send-signal-to-processes-with-mark "SIGTERM") 
+	 t]
+	["SIGKILL" 
+	 (View-process-send-signal-to-processes-with-mark "SIGKILL") 
+	 t]
+	["SIGSTOP" 
+	 (View-process-send-signal-to-processes-with-mark "SIGSTOP") 
+	 t]
+	["SIGCONT" 
+	 (View-process-send-signal-to-processes-with-mark "SIGCONT") 
+	 t]
+	["SIGQUIT" 
+	 (View-process-send-signal-to-processes-with-mark "SIGQUIT") 
+	 t]
+	"----"
+	["Any Signal..." View-process-send-signal-to-processes-with-mark t]
+	"----"
+	["Alter Priority..." View-process-renice-processes-with-mark t]
+	)
+       ("Mark"
+	["Mark" View-process-mark-current-line t]
+	["Mark Childs" View-process-mark-childs-in-current-line t]
+	["Remark Last Marks" View-process-reset-last-marks t]
+	"----"
+	["Unmark" View-process-unmark-current-line t]
+	["Unmark All" View-process-unmark-all t]
+	)
+       "----"
+       ["Sort" View-process-sort-output-by-current-field (looking-at "[^ ]")]
+       ["Reverse" View-process-reverse-output t]
+       ["Field Filter..." 
+	View-process-filter-output-by-current-field (looking-at "[^ ]")]
+       ["Exlude Field Filter..." 
+	(progn (setq current-prefix-arg '(-1))
+	       (call-interactively 
+		'View-process-filter-output-by-current-field))
+	:keys "C-u -1 F"
+	:active (looking-at "[^ ]")]	    
+       ["Line Filter..." View-process-filter-output t]
+       ["Exclude Line Filter..." 
+	(progn (setq current-prefix-arg '(-1))
+	       (call-interactively 
+		'View-process-filter-output))
+	:keys "C-u -1 G"
+	:active t]	    
+       "----"
+       ("Help"
+	["PID and Command" View-process-show-pid-and-command t]
+	["Field Name" View-process-which-field-name (looking-at "[^ ]")]
+	["Header Line" View-process-show-header-line t]
+	["Own PID" View-process-display-emacs-pid t]
+	)
+       )
+     )
+  )
+
+(if (not View-process-non-region-menu)
+    (setq 
+     View-process-non-region-menu
+     '("PS Non Region Menu"
+       ["View Processes" view-processes t]
+       ["New PS" View-process-status t]
+       ["Update" View-process-status-update t]
+       ("Periodic Output"
+	["Start " 
+	 View-process-start-itimer 
+	 :style radio 
+	 :selected (not (get-itimer View-process-itimer-name))]
+	["Stop" 
+	 View-process-delete-itimer 
+	 :style radio 
+	 :selected (get-itimer View-process-itimer-name)]
+	)
+       ("Send Signal"
+	["SIGHUP" (View-process-send-signal-to-process-in-line "SIGHUP") t]
+	["SIGTERM" (View-process-send-signal-to-process-in-line "SIGTERM") t]
+	["SIGKILL" (View-process-send-signal-to-process-in-line "SIGKILL") t]
+	["SIGSTOP" (View-process-send-signal-to-process-in-line "SIGSTOP") t]
+	["SIGCONT" (View-process-send-signal-to-process-in-line "SIGCONT") t]
+	["SIGQUIT" (View-process-send-signal-to-process-in-line "SIGQUIT") t]
+	"----"
+	["Any Signal..." View-process-send-signal-to-process-in-line t]
+	"----"
+	["Alter Priority..." View-process-renice-process-in-line t]
+	)
+       ("Mark"
+	["Mark" View-process-mark-current-line t]
+	["Mark Childs" View-process-mark-childs-in-current-line t]
+	["Remark Last Marks" View-process-reset-last-marks t]
+	"----"
+	["Unmark" View-process-unmark-current-line nil]
+	["Unmark All" View-process-unmark-all nil]
+	)
+       "----"
+       ["Sort" View-process-sort-output-by-current-field (looking-at "[^ ]")]
+       ["Reverse" View-process-reverse-output t]
+       ["Field Filter..." 
+	View-process-filter-output-by-current-field 
+	(looking-at "[^ ]")]
+       ["Exlude Field Filter..." 
+	(progn (setq current-prefix-arg '(-1))
+	       (call-interactively 
+		'View-process-filter-output-by-current-field))
+	:keys "C-u -1 F"
+	:active (looking-at "[^ ]")]	    
+       ["Line Filter..." View-process-filter-output t]
+       ["Exclude Line Filter..." 
+	(progn (setq current-prefix-arg '(-1))
+	       (call-interactively 
+		'View-process-filter-output))
+	:keys "C-u -1 G"
+	:active t]	    
+       "----"
+       ("Help"
+	["PID and Command" View-process-show-pid-and-command t]
+	["Field Name" View-process-which-field-name (looking-at "[^ ]")]
+	["Header Line" View-process-show-header-line t]
+	["Own PID" View-process-display-emacs-pid t]
+	)
+       )
+     )
+  )
+
+(defun View-process-popup-menu (event)
+  "Pops up a menu for the `View-process-mode'."
+  (interactive "e")
+  (mouse-set-point event)
+  (popup-menu
+   (cond ((View-process-region-active-p) View-process-region-menu)
+	 (View-process-pid-mark-alist View-process-marked-menu)
+	 (t View-process-non-region-menu))))
+
+(defun View-process-install-pulldown-menu ()
+  "Installs a pulldown menu for the `View-process-mode'."
+  (if (and current-menubar 
+	   (not (assoc View-process-pulldown-menu-name current-menubar)))
+      (progn
+	(set-buffer-menubar (copy-sequence current-menubar))
+	(add-submenu nil
+		     (cons View-process-pulldown-menu-name
+			   (cdr View-process-pulldown-menu)))
+	(add-submenu (list View-process-pulldown-menu-name)
+		     View-process-region-menu
+		     "Submit Bug Report")
+	(add-submenu (list View-process-pulldown-menu-name)
+		     View-process-marked-menu
+		     "Submit Bug Report")
+	(add-submenu (list View-process-pulldown-menu-name)
+		     View-process-non-region-menu
+		     "Submit Bug Report")
+	)))
+
+
+;;; mode motion
+
+(defun View-process-mode-motion-highlight-line (event)
+  "For use as the value of `mode-motion-hook' in the `View-process-mode'.
+It highlights the line under the mouse and displays help messages during
+mouse motion, if `View-process-motion-help' is non nil."
+  (if (and (event-point event)
+	   (> (event-point event) View-process-header-end))
+      (progn
+	(mode-motion-highlight-line event)
+	(if (and View-process-motion-help
+		 (not View-process-stop-motion-help))
+	    (save-excursion
+		(mouse-set-point event)
+		(View-process-show-pid-and-command-or-field-name)
+		)))
+    (message "")
+    ))
+
+(defun View-process-install-mode-motion ()
+  "Installs the `mode-motion-hook'."
+  (make-local-variable 'mode-motion-hook)
+  (setq mode-motion-hook 'View-process-mode-motion-highlight-line))
+
+(defun View-process-toggle-motion-help (&optional arg)
+  "Change whether a help message is displayed during mouse motion.
+With a positive ARG the variable 'View-process-motion-help' is set
+to t and with a negative ARG it is set to nil."
+  (interactive "P")
+  (if arg
+      (if (>= (prefix-numeric-value arg) 0)
+	  (setq View-process-motion-help t)
+	(setq View-process-motion-help nil))
+    (if View-process-motion-help
+	(setq View-process-motion-help nil)
+      (setq View-process-motion-help t))))
+
+; necessary for the Emacs 19
+(defalias 'View-process-insert-and-inherit 'insert)
+
+;;; timer functions
+
+(defun View-process-start-itimer ()
+  "Starts or restarts the itimer for updating the process output."
+  (interactive)
+  (if (get-itimer View-process-itimer-name)
+      (progn 
+	(set-itimer-value (get-itimer View-process-itimer-name) 
+			  View-process-itimer-value)
+	(set-itimer-restart (get-itimer View-process-itimer-name)
+			    View-process-itimer-value))
+    (start-itimer View-process-itimer-name
+		  'View-process-status-itimer-function
+		  View-process-itimer-value
+		  View-process-itimer-value)))
+
+(defun View-process-delete-itimer ()
+  "Stops (deletes) the view process itimer."
+  (interactive)
+  (if (get-itimer View-process-itimer-name)
+      (delete-itimer View-process-itimer-name)))
+
+
+;;; region
+
+(defun View-process-region-active-p ()
+  "Returns t, if a region is active.
+If `zmacs-regions' is nil, then this return always nil."
+  (if zmacs-regions
+      (mark)))
+
+
+;;; Misc
+
+(defun View-process-return-current-command-key-as-string ()
+  "Returns the key, which invokes the current command as string."
+  (events-to-keys (this-command-keys)))
+
+(defun View-process-redraw ()
+  "Dummy function. It does nothing in the XEmacs."
+  )
+
+
+;;; font-lock and colors
+
+(defun View-process-install-font-lock ()
+  "Installs the `font-lock-mode', if `View-process-use-font-lock' is t."
+  (if View-process-use-font-lock
+      (font-lock-mode 1)))
+
+(if (not (fboundp 'valid-color-name-p))
+    (defalias 'valid-color-name-p 'x-valid-color-name-p))
+
+(defun View-process-search-color-in-color-list (color-list)
+  "Searches a valid color in the COLOR-LIST."
+  (cond ((not color-list) nil)
+	((listp color-list)
+	 (if (valid-color-name-p (car color-list))
+	     (car color-list)
+	   (View-process-search-color-in-color-list (cdr color-list))))))
+
+(defun View-process-search-color (color)
+  "It returns a color, which could be displayed by the window manager.
+COLOR is either a string with a color or a list with possible
+colors."
+  (cond ((not color) nil)
+	((stringp color)
+	 (if (valid-color-name-p color) color nil))
+	((listp color)
+	 (View-process-search-color-in-color-list color))
+	(t nil)))
+  
+;;; missing function window-pixel-edges in XEmacs < 19.12
+;;; Attention: This emulation is only valid, to test if a value 
+;;; is 0 or not.
+(if (not (fboundp 'window-pixel-edges))
+    (defalias 'window-pixel-edges 'window-edges))
+
+
+;;; Modeline 
+
+(if (fboundp 'set-specifier)
+
+(defun view-process-switch-buffer-modeline (modeline-on)
+  "Switches the current modeline on, if MODELINE-ON is t.
+Otherwise the modeline is switched off."
+  (set-specifier has-modeline-p (cons (current-buffer) modeline-on)))
+
+
+(defun view-process-switch-buffer-modeline (modeline-on)
+  "Dummy function. 
+Sorry, the modeline can't be switched off in this emacs version.
+You have to update at least to XEmacs 19.12."
+  )
+
+)
+
+;;; view-process-xemacs.el ends here.