]> code.delx.au - gnu-emacs/blobdiff - lisp/progmodes/ps-mode.el
Merge from trunk; add Bug#.
[gnu-emacs] / lisp / progmodes / ps-mode.el
index b6af168a1673819f8880104fecf88bb203eb9c44..bf52eff8f9a17b0ccde113d107e0a2af903a03f6 100644 (file)
@@ -1,12 +1,11 @@
 ;;; ps-mode.el --- PostScript mode for GNU Emacs
 
 ;;; ps-mode.el --- PostScript mode for GNU Emacs
 
-;; Copyright (C) 1999, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
-;; Free Software Foundation, Inc.
+;; Copyright (C) 1999, 2001-2012  Free Software Foundation, Inc.
 
 ;; Author:     Peter Kleiweg <p.c.j.kleiweg@rug.nl>
 ;; Maintainer: Peter Kleiweg <p.c.j.kleiweg@rug.nl>
 ;; Created:    20 Aug 1997
 
 ;; Author:     Peter Kleiweg <p.c.j.kleiweg@rug.nl>
 ;; Maintainer: Peter Kleiweg <p.c.j.kleiweg@rug.nl>
 ;; Created:    20 Aug 1997
-;; Version:    1.1h, 16 Jun 2005
+;; Version:    1.1h
 ;; Keywords:   PostScript, languages
 
 ;; Yoni Rabkin <yoni@rabkins.net> contacted the maintainer of this
 ;; Keywords:   PostScript, languages
 
 ;; Yoni Rabkin <yoni@rabkins.net> contacted the maintainer of this
@@ -39,6 +38,7 @@
 (defconst ps-mode-version "1.1h, 16 Jun 2005")
 (defconst ps-mode-maintainer-address "Peter Kleiweg <p.c.j.kleiweg@rug.nl>")
 
 (defconst ps-mode-version "1.1h, 16 Jun 2005")
 (defconst ps-mode-maintainer-address "Peter Kleiweg <p.c.j.kleiweg@rug.nl>")
 
+(require 'comint)
 (require 'easymenu)
 
 ;; Define core `PostScript' group.
 (require 'easymenu)
 
 ;; Define core `PostScript' group.
 ;; User variables.
 
 (defcustom ps-mode-auto-indent t
 ;; User variables.
 
 (defcustom ps-mode-auto-indent t
-  "*Should we use autoindent?"
+  "Should we use autoindent?"
   :group 'PostScript-edit
   :type 'boolean)
 
 (defcustom ps-mode-tab 4
   :group 'PostScript-edit
   :type 'boolean)
 
 (defcustom ps-mode-tab 4
-  "*Number of spaces to use when indenting."
+  "Number of spaces to use when indenting."
   :group 'PostScript-edit
   :type 'integer)
 
 (defcustom ps-mode-paper-size '(595 842)
   :group 'PostScript-edit
   :type 'integer)
 
 (defcustom ps-mode-paper-size '(595 842)
-  "*Default paper size.
+  "Default paper size.
 
 When inserting an EPSF template these values are used
 to set the boundingbox to include the whole page.
 
 When inserting an EPSF template these values are used
 to set the boundingbox to include the whole page.
@@ -117,12 +117,12 @@ When the figure is finished these values should be replaced."
           (lpr-command (if (memq system-type '(usg-unix-v hpux irix))
                            "lp" "lpr")))
        (lpr-buffer)))
           (lpr-command (if (memq system-type '(usg-unix-v hpux irix))
                            "lp" "lpr")))
        (lpr-buffer)))
-  "*Lisp function to print current buffer as PostScript."
+  "Lisp function to print current buffer as PostScript."
   :group 'PostScript-edit
   :type 'function)
 
 (defcustom ps-run-prompt "\\(GS\\(<[0-9]+\\)?>\\)+"
   :group 'PostScript-edit
   :type 'function)
 
 (defcustom ps-run-prompt "\\(GS\\(<[0-9]+\\)?>\\)+"
-  "*Regexp to match prompt in interactive PostScript."
+  "Regexp to match prompt in interactive PostScript."
   :group 'PostScript-interaction
   :type 'regexp)
 
   :group 'PostScript-interaction
   :type 'regexp)
 
@@ -139,7 +139,7 @@ When the figure is finished these values should be replaced."
            ("^\\(Current file position is\\) \\([0-9]+\\)"
             (1 font-lock-comment-face nil nil)
             (2 font-lock-warning-face nil nil))))
            ("^\\(Current file position is\\) \\([0-9]+\\)"
             (1 font-lock-comment-face nil nil)
             (2 font-lock-warning-face nil nil))))
-  "*Medium level highlighting of messages from the PostScript interpreter.
+  "Medium level highlighting of messages from the PostScript interpreter.
 
 See documentation on font-lock for details."
   :group 'PostScript-interaction
 
 See documentation on font-lock for details."
   :group 'PostScript-interaction
@@ -155,17 +155,17 @@ See documentation on font-lock for details."
                                     (boolean :tag "Laxmatch" :value t))))))
 
 (defcustom ps-run-x '("gs" "-r72" "-sPAPERSIZE=a4")
                                     (boolean :tag "Laxmatch" :value t))))))
 
 (defcustom ps-run-x '("gs" "-r72" "-sPAPERSIZE=a4")
-  "*Command as list to run PostScript with graphic display."
+  "Command as list to run PostScript with graphic display."
   :group 'PostScript-interaction
   :type '(repeat string))
 
 (defcustom ps-run-dumb '("gs" "-dNODISPLAY")
   :group 'PostScript-interaction
   :type '(repeat string))
 
 (defcustom ps-run-dumb '("gs" "-dNODISPLAY")
-  "*Command as list to run PostScript without graphic display."
+  "Command as list to run PostScript without graphic display."
   :group 'PostScript-interaction
   :type '(repeat string))
 
 (defcustom ps-run-init nil
   :group 'PostScript-interaction
   :type '(repeat string))
 
 (defcustom ps-run-init nil
-  "*String of commands to send to PostScript to start interactive.
+  "String of commands to send to PostScript to start interactive.
 
 Example: \"executive\"
 
 
 Example: \"executive\"
 
@@ -174,13 +174,13 @@ You won't need to set this option for Ghostscript."
   :type '(choice (const nil) string))
 
 (defcustom ps-run-error-line-numbers nil
   :type '(choice (const nil) string))
 
 (defcustom ps-run-error-line-numbers nil
-  "*What values are used by the PostScript interpreter in error messages?"
+  "What values are used by the PostScript interpreter in error messages?"
   :group 'PostScript-interaction
   :type '(choice (const :tag "line numbers" t)
                  (const :tag "byte counts" nil)))
 
 (defcustom ps-run-tmp-dir nil
   :group 'PostScript-interaction
   :type '(choice (const :tag "line numbers" t)
                  (const :tag "byte counts" nil)))
 
 (defcustom ps-run-tmp-dir nil
-  "*Name of directory to place temporary file.
+  "Name of directory to place temporary file.
 If nil, use `temporary-file-directory'."
   :group 'PostScript-interaction
   :type '(choice (const nil) directory))
 If nil, use `temporary-file-directory'."
   :group 'PostScript-interaction
   :type '(choice (const nil) directory))
@@ -267,7 +267,7 @@ If nil, use `temporary-file-directory'."
       . (1 font-lock-function-name-face))
     '("/\\w+" . font-lock-variable-name-face)
     (cons ps-mode-operators 'font-lock-keyword-face)))
       . (1 font-lock-function-name-face))
     '("/\\w+" . font-lock-variable-name-face)
     (cons ps-mode-operators 'font-lock-keyword-face)))
-  "High level highliting for PostScript mode.")
+  "High level highlighting for PostScript mode.")
 
 (defconst ps-mode-font-lock-keywords ps-mode-font-lock-keywords-1
   "Default expressions to highlight in PostScript mode.")
 
 (defconst ps-mode-font-lock-keywords ps-mode-font-lock-keywords-1
   "Default expressions to highlight in PostScript mode.")
@@ -431,12 +431,11 @@ If nil, use `temporary-file-directory'."
 
 (unless ps-run-mode-map
   (setq ps-run-mode-map (make-sparse-keymap))
 
 (unless ps-run-mode-map
   (setq ps-run-mode-map (make-sparse-keymap))
+  (set-keymap-parent ps-run-mode-map comint-mode-map)
   (define-key ps-run-mode-map "\C-c\C-q" 'ps-run-quit)
   (define-key ps-run-mode-map "\C-c\C-k" 'ps-run-kill)
   (define-key ps-run-mode-map "\C-c\C-e" 'ps-run-goto-error)
   (define-key ps-run-mode-map "\C-c\C-q" 'ps-run-quit)
   (define-key ps-run-mode-map "\C-c\C-k" 'ps-run-kill)
   (define-key ps-run-mode-map "\C-c\C-e" 'ps-run-goto-error)
-  (define-key ps-run-mode-map [mouse-2] 'ps-run-mouse-goto-error)
-  (define-key ps-run-mode-map "\r" 'ps-run-newline)
-  (define-key ps-run-mode-map [return] 'ps-run-newline))
+  (define-key ps-run-mode-map [mouse-2] 'ps-run-mouse-goto-error))
 
 \f
 ;; Syntax table.
 
 \f
 ;; Syntax table.
@@ -486,7 +485,7 @@ If nil, use `temporary-file-directory'."
 ;; PostScript mode.
 
 ;;;###autoload
 ;; PostScript mode.
 
 ;;;###autoload
-(define-derived-mode ps-mode fundamental-mode "PostScript"
+(define-derived-mode ps-mode prog-mode "PostScript"
   "Major mode for editing PostScript with GNU Emacs.
 
 Entry to this mode calls `ps-mode-hook'.
   "Major mode for editing PostScript with GNU Emacs.
 
 Entry to this mode calls `ps-mode-hook'.
@@ -542,6 +541,10 @@ Typing \\<ps-run-mode-map>\\[ps-run-goto-error] when the cursor is at the number
   (interactive)
   (message " *** PostScript Mode (ps-mode) Version %s *** " ps-mode-version))
 
   (interactive)
   (message " *** PostScript Mode (ps-mode) Version %s *** " ps-mode-version))
 
+;; From reporter.el
+(defvar reporter-prompt-for-summary-p)
+(defvar reporter-dont-compact-list)
+
 (defun ps-mode-submit-bug-report ()
   "Submit via mail a bug report on PostScript mode."
   (interactive)
 (defun ps-mode-submit-bug-report ()
   "Submit via mail a bug report on PostScript mode."
   (interactive)
@@ -621,7 +624,7 @@ Typing \\<ps-run-mode-map>\\[ps-run-goto-error] when the cursor is at the number
 (defun ps-mode-target-column ()
   "To what column should text on current line be indented?
 
 (defun ps-mode-target-column ()
   "To what column should text on current line be indented?
 
-Identation is increased if the last token on the current line
+Indentation is increased if the last token on the current line
 defines the beginning of a group. These tokens are:  {  [  <<"
   (save-excursion
     (beginning-of-line)
 defines the beginning of a group. These tokens are:  {  [  <<"
   (save-excursion
     (beginning-of-line)
@@ -681,7 +684,7 @@ defines the beginning of a group. These tokens are:  {  [  <<"
     (if (or (not ps-mode-auto-indent)
            (< ps-mode-tab 1)
            (not (re-search-backward "^[ \t]+\\=" nil t)))
     (if (or (not ps-mode-auto-indent)
            (< ps-mode-tab 1)
            (not (re-search-backward "^[ \t]+\\=" nil t)))
-       (delete-backward-char 1)
+       (call-interactively 'delete-backward-char)
       (setq target (ps-mode-target-column))
       (while (> column target)
        (setq target (+ target ps-mode-tab)))
       (setq target (ps-mode-target-column))
       (while (> column target)
        (setq target (+ target ps-mode-tab)))
@@ -710,7 +713,7 @@ defines the beginning of a group. These tokens are:  {  [  <<"
   (ps-mode-r-balance ">>"))
 
 (defun ps-mode-r-balance (right)
   (ps-mode-r-balance ">>"))
 
 (defun ps-mode-r-balance (right)
-  "Adjust indentification if point after RIGHT."
+  "Adjust indenting if point after RIGHT."
   (if ps-mode-auto-indent
       (save-excursion
        (when (re-search-backward (concat "^[ \t]*" (regexp-quote right) "\\=") nil t)
   (if ps-mode-auto-indent
       (save-excursion
        (when (re-search-backward (concat "^[ \t]*" (regexp-quote right) "\\=") nil t)
@@ -718,12 +721,9 @@ defines the beginning of a group. These tokens are:  {  [  <<"
   (blink-matching-open))
 
 (defun ps-mode-other-newline ()
   (blink-matching-open))
 
 (defun ps-mode-other-newline ()
-  "Perform newline in `*ps run*' buffer."
+  "Perform newline in `*ps-run*' buffer."
   (interactive)
   (interactive)
-  (let ((buf (current-buffer)))
-    (set-buffer "*ps run*")
-    (ps-run-newline)
-    (set-buffer buf)))
+  (ps-run-send-string ""))
 
 \f
 ;; Print PostScript.
 
 \f
 ;; Print PostScript.
@@ -980,11 +980,9 @@ plus the usually uncoded characters inserted on positions 1 through 28."
 \f
 ;; Interactive PostScript interpreter.
 
 \f
 ;; Interactive PostScript interpreter.
 
-(define-derived-mode ps-run-mode fundamental-mode "Interactive PS"
+(define-derived-mode ps-run-mode comint-mode "Interactive PS"
   "Major mode in interactive PostScript window.
   "Major mode in interactive PostScript window.
-This mode is invoked from `ps-mode' and should not be called directly.
-
-\\{ps-run-mode-map}"
+This mode is invoked from `ps-mode' and should not be called directly."
   (set (make-local-variable 'font-lock-defaults)
        '((ps-run-font-lock-keywords
          ps-run-font-lock-keywords-1
   (set (make-local-variable 'font-lock-defaults)
        '((ps-run-font-lock-keywords
          ps-run-font-lock-keywords-1
@@ -994,7 +992,7 @@ This mode is invoked from `ps-mode' and should not be called directly.
 
 (defun ps-run-running ()
   "Error if not in `ps-mode' or not running PostScript."
 
 (defun ps-run-running ()
   "Error if not in `ps-mode' or not running PostScript."
-  (unless (equal major-mode 'ps-mode)
+  (unless (derived-mode-p 'ps-mode)
     (error "This function can only be called from PostScript mode"))
   (unless (equal (process-status "ps-run") 'run)
     (error "No PostScript process running")))
     (error "This function can only be called from PostScript mode"))
   (unless (equal (process-status "ps-run") 'run)
     (error "No PostScript process running")))
@@ -1014,20 +1012,23 @@ This mode is invoked from `ps-mode' and should not be called directly.
       (setq init-file (ps-run-make-tmp-filename))
       (write-region (concat ps-run-init "\n") 0 init-file)
       (setq init-file (list init-file)))
       (setq init-file (ps-run-make-tmp-filename))
       (write-region (concat ps-run-init "\n") 0 init-file)
       (setq init-file (list init-file)))
-    (pop-to-buffer "*ps run*")
+    (pop-to-buffer "*ps-run*")
     (ps-run-mode)
     (when (process-status "ps-run")
       (delete-process "ps-run"))
     (erase-buffer)
     (setq command (append command init-file))
     (insert (mapconcat 'identity command " ") "\n")
     (ps-run-mode)
     (when (process-status "ps-run")
       (delete-process "ps-run"))
     (erase-buffer)
     (setq command (append command init-file))
     (insert (mapconcat 'identity command " ") "\n")
-    (apply 'start-process "ps-run" "*ps run*" command)
+    (apply 'make-comint "ps-run" (car command) nil (cdr command))
+    (with-current-buffer "*ps-run*"
+      (use-local-map ps-run-mode-map)
+      (setq comint-prompt-regexp ps-run-prompt))
     (select-window oldwin)))
 
 (defun ps-run-quit ()
   "Quit interactive PostScript."
   (interactive)
     (select-window oldwin)))
 
 (defun ps-run-quit ()
   "Quit interactive PostScript."
   (interactive)
-  (ps-run-send-string "quit" t)
+  (ps-run-send-string "quit")
   (ps-run-cleanup))
 
 (defun ps-run-kill ()
   (ps-run-cleanup))
 
 (defun ps-run-kill ()
@@ -1039,9 +1040,9 @@ This mode is invoked from `ps-mode' and should not be called directly.
 (defun ps-run-clear ()
   "Clear/reset PostScript graphics."
   (interactive)
 (defun ps-run-clear ()
   "Clear/reset PostScript graphics."
   (interactive)
-  (ps-run-send-string "showpage" t)
+  (ps-run-send-string "showpage")
   (sit-for 1)
   (sit-for 1)
-  (ps-run-send-string "" t))
+  (ps-run-send-string ""))
 
 (defun ps-run-buffer ()
   "Send buffer to PostScript interpreter."
 
 (defun ps-run-buffer ()
   "Send buffer to PostScript interpreter."
@@ -1056,7 +1057,7 @@ This mode is invoked from `ps-mode' and should not be called directly.
   (let ((f (ps-run-make-tmp-filename)))
     (set-marker ps-run-mark begin)
     (write-region begin end f)
   (let ((f (ps-run-make-tmp-filename)))
     (set-marker ps-run-mark begin)
     (write-region begin end f)
-    (ps-run-send-string (format "(%s) run" f) t)))
+    (ps-run-send-string (format "(%s) run" f))))
 
 (defun ps-run-boundingbox ()
   "View BoundingBox."
 
 (defun ps-run-boundingbox ()
   "View BoundingBox."
@@ -1104,17 +1105,15 @@ grestore
 " x1 y1 x2 y1 x2 y2 x1 y2)
      0
      f)
 " x1 y1 x2 y1 x2 y2 x1 y2)
      0
      f)
-    (ps-run-send-string (format "(%s) run" f) t)
+    (ps-run-send-string (format "(%s) run" f))
     (set-buffer buf)))
 
     (set-buffer buf)))
 
-(defun ps-run-send-string (string &optional echo)
+(defun ps-run-send-string (string)
   (let ((oldwin (selected-window)))
   (let ((oldwin (selected-window)))
-    (pop-to-buffer "*ps run*")
-    (goto-char (point-max))
-    (when echo
-      (insert string "\n"))
-    (set-marker (process-mark (get-process "ps-run")) (point))
-    (process-send-string "ps-run" (concat string "\n"))
+    (pop-to-buffer "*ps-run*")
+    (comint-goto-process-mark)
+    (insert string)
+    (comint-send-input)
     (select-window oldwin)))
 
 (defun ps-run-make-tmp-filename ()
     (select-window oldwin)))
 
 (defun ps-run-make-tmp-filename ()
@@ -1140,18 +1139,6 @@ grestore
   (mouse-set-point event)
   (ps-run-goto-error))
 
   (mouse-set-point event)
   (ps-run-goto-error))
 
-(defun ps-run-newline ()
-  "Process newline in PostScript interpreter window."
-  (interactive)
-  (end-of-line)
-  (insert "\n")
-  (forward-line -1)
-  (when (looking-at ps-run-prompt)
-    (goto-char (match-end 0)))
-  (looking-at ".*")
-  (goto-char (1+ (match-end 0)))
-  (ps-run-send-string (buffer-substring (match-beginning 0) (match-end 0))))
-
 (defun ps-run-goto-error ()
   "Jump to buffer position read as integer at point.
 Use line numbers if `ps-run-error-line-numbers' is not nil"
 (defun ps-run-goto-error ()
   "Jump to buffer position read as integer at point.
 Use line numbers if `ps-run-error-line-numbers' is not nil"
@@ -1183,5 +1170,4 @@ Use line numbers if `ps-run-error-line-numbers' is not nil"
 
 (provide 'ps-mode)
 
 
 (provide 'ps-mode)
 
-;; arch-tag: dce13d2d-69fb-4ec4-9d5d-6dd29c3f0e6e
 ;;; ps-mode.el ends here
 ;;; ps-mode.el ends here