annotate lisp/progmodes/octave-inf.el @ 63308:51d38cfbe542

Warn about using "cvs up -kb" if one intends to commit changes. Add a pointer to another site with detailed configure and build instructions. Suggest to look at config.log when configure fails. Add MinGW Make 3.80 to the list of successful combinations.
author Eli Zaretskii <eliz@gnu.org>
date Sat, 11 Jun 2005 11:31:29 +0000
parents f2892faa87d4
children 1244410f3457 01137c1fdbe9
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
17517
8f952e921136 Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 17150
diff changeset
1 ;;; octave-inf.el --- running Octave as an inferior Emacs process
16903
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2
17517
8f952e921136 Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 17150
diff changeset
3 ;; Copyright (C) 1997 Free Software Foundation, Inc.
16903
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5 ;; Author: Kurt Hornik <Kurt.Hornik@ci.tuwien.ac.at>
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6 ;; Author: John Eaton <jwe@bevo.che.wisc.edu>
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7 ;; Maintainer: Kurt Hornik <Kurt.Hornik@ci.tuwien.ac.at>
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8 ;; Keywords: languages
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
9
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
10 ;; This file is part of GNU Emacs.
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
11
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
12 ;; GNU Emacs is free software; you can redistribute it and/or modify
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
13 ;; it under the terms of the GNU General Public License as published by
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
14 ;; the Free Software Foundation; either version 2, or (at your option)
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
15 ;; any later version.
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
16
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
17 ;; GNU Emacs is distributed in the hope that it will be useful,
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
18 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
19 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
20 ;; GNU General Public License for more details.
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
21
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
22 ;; You should have received a copy of the GNU General Public License
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
23 ;; along with GNU Emacs; see the file COPYING. If not, write to the
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
24 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
25 ;; Boston, MA 02111-1307, USA.
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
26
38436
b174db545cfd Some fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents: 30902
diff changeset
27 ;;; Commentary:
b174db545cfd Some fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents: 30902
diff changeset
28
16903
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
29 ;;; Code:
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
30
16904
2bc5f76917e0 Require octave-mod, not octave.
Richard M. Stallman <rms@gnu.org>
parents: 16903
diff changeset
31 (require 'octave-mod)
16903
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
32 (require 'comint)
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
33
20781
6f55b3849106 Customized.
Andreas Schwab <schwab@suse.de>
parents: 20401
diff changeset
34 (defgroup octave-inferior nil
6f55b3849106 Customized.
Andreas Schwab <schwab@suse.de>
parents: 20401
diff changeset
35 "Running Octave as an inferior Emacs process."
6f55b3849106 Customized.
Andreas Schwab <schwab@suse.de>
parents: 20401
diff changeset
36 :group 'octave)
16903
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
37
20781
6f55b3849106 Customized.
Andreas Schwab <schwab@suse.de>
parents: 20401
diff changeset
38 (defcustom inferior-octave-program "octave"
6f55b3849106 Customized.
Andreas Schwab <schwab@suse.de>
parents: 20401
diff changeset
39 "*Program invoked by `inferior-octave'."
6f55b3849106 Customized.
Andreas Schwab <schwab@suse.de>
parents: 20401
diff changeset
40 :type 'string
6f55b3849106 Customized.
Andreas Schwab <schwab@suse.de>
parents: 20401
diff changeset
41 :group 'octave-inferior)
6f55b3849106 Customized.
Andreas Schwab <schwab@suse.de>
parents: 20401
diff changeset
42
6f55b3849106 Customized.
Andreas Schwab <schwab@suse.de>
parents: 20401
diff changeset
43 (defcustom inferior-octave-prompt
52952
03afc05bc725 (inferior-octave-prompt): Recognize version number in prompt.
Lute Kamstra <lute@gnu.org>
parents: 52401
diff changeset
44 "\\(^octave\\(\\|.bin\\)\\(-[.0-9]+\\)?\\(:[0-9]+\\)?\\|^debug\\|^\\)>+ "
20781
6f55b3849106 Customized.
Andreas Schwab <schwab@suse.de>
parents: 20401
diff changeset
45 "*Regexp to match prompts for the inferior Octave process."
6f55b3849106 Customized.
Andreas Schwab <schwab@suse.de>
parents: 20401
diff changeset
46 :type 'regexp
6f55b3849106 Customized.
Andreas Schwab <schwab@suse.de>
parents: 20401
diff changeset
47 :group 'octave-inferior)
16903
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
48
20781
6f55b3849106 Customized.
Andreas Schwab <schwab@suse.de>
parents: 20401
diff changeset
49 (defcustom inferior-octave-startup-file nil
16903
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
50 "*Name of the inferior Octave startup file.
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
51 The contents of this file are sent to the inferior Octave process on
20781
6f55b3849106 Customized.
Andreas Schwab <schwab@suse.de>
parents: 20401
diff changeset
52 startup."
6f55b3849106 Customized.
Andreas Schwab <schwab@suse.de>
parents: 20401
diff changeset
53 :type '(choice (const :tag "None" nil)
6f55b3849106 Customized.
Andreas Schwab <schwab@suse.de>
parents: 20401
diff changeset
54 file)
6f55b3849106 Customized.
Andreas Schwab <schwab@suse.de>
parents: 20401
diff changeset
55 :group 'octave-inferior)
16903
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
56
25719
f440228994ba (inferior-octave-startup): Ensure -i and --no-line-editing are passed
Stephen Eglen <stephen@gnu.org>
parents: 25568
diff changeset
57 (defcustom inferior-octave-startup-args nil
16903
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
58 "*List of command line arguments for the inferior Octave process.
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
59 For example, for suppressing the startup message and using `traditional'
20781
6f55b3849106 Customized.
Andreas Schwab <schwab@suse.de>
parents: 20401
diff changeset
60 mode, set this to (\"-q\" \"--traditional\")."
6f55b3849106 Customized.
Andreas Schwab <schwab@suse.de>
parents: 20401
diff changeset
61 :type '(repeat string)
6f55b3849106 Customized.
Andreas Schwab <schwab@suse.de>
parents: 20401
diff changeset
62 :group 'octave-inferior)
16903
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
63
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
64 (defvar inferior-octave-mode-map nil
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
65 "Keymap used in Inferior Octave mode.")
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
66 (if inferior-octave-mode-map
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
67 ()
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
68 (let ((map (copy-keymap comint-mode-map)))
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
69 (define-key map "\t" 'comint-dynamic-complete)
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
70 (define-key map "\M-?" 'comint-dynamic-list-filename-completions)
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
71 (define-key map "\C-c\C-l" 'inferior-octave-dynamic-list-input-ring)
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
72 (define-key map [menu-bar inout list-history]
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
73 '("List Input History" . inferior-octave-dynamic-list-input-ring))
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
74 (define-key map "\C-c\C-h" 'octave-help)
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
75 (setq inferior-octave-mode-map map)))
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
76
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
77 (defvar inferior-octave-mode-syntax-table nil
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
78 "Syntax table in use in inferior-octave-mode buffers.")
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
79 (if inferior-octave-mode-syntax-table
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
80 ()
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
81 (let ((table (make-syntax-table)))
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
82 (modify-syntax-entry ?\` "w" table)
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
83 (modify-syntax-entry ?\# "<" table)
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
84 (modify-syntax-entry ?\n ">" table)
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
85 (setq inferior-octave-mode-syntax-table table)))
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
86
20781
6f55b3849106 Customized.
Andreas Schwab <schwab@suse.de>
parents: 20401
diff changeset
87 (defcustom inferior-octave-mode-hook nil
6f55b3849106 Customized.
Andreas Schwab <schwab@suse.de>
parents: 20401
diff changeset
88 "*Hook to be run when Inferior Octave mode is started."
6f55b3849106 Customized.
Andreas Schwab <schwab@suse.de>
parents: 20401
diff changeset
89 :type 'hook
6f55b3849106 Customized.
Andreas Schwab <schwab@suse.de>
parents: 20401
diff changeset
90 :group 'octave-inferior)
16903
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
91
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
92 (defvar inferior-octave-font-lock-keywords
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
93 (list
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
94 (cons inferior-octave-prompt 'font-lock-type-face))
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
95 ;; Could certainly do more font locking in inferior Octave ...
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
96 "Additional expressions to highlight in Inferior Octave mode.")
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
97
30902
ffe3b5100238 Add compatibility definition of comint-line-beginning-position.
Miles Bader <miles@gnu.org>
parents: 30646
diff changeset
98
ffe3b5100238 Add compatibility definition of comint-line-beginning-position.
Miles Bader <miles@gnu.org>
parents: 30646
diff changeset
99 ;;; Compatibility functions
ffe3b5100238 Add compatibility definition of comint-line-beginning-position.
Miles Bader <miles@gnu.org>
parents: 30646
diff changeset
100 (if (not (fboundp 'comint-line-beginning-position))
ffe3b5100238 Add compatibility definition of comint-line-beginning-position.
Miles Bader <miles@gnu.org>
parents: 30646
diff changeset
101 ;; comint-line-beginning-position is defined in Emacs 21
ffe3b5100238 Add compatibility definition of comint-line-beginning-position.
Miles Bader <miles@gnu.org>
parents: 30646
diff changeset
102 (defun comint-line-beginning-position ()
ffe3b5100238 Add compatibility definition of comint-line-beginning-position.
Miles Bader <miles@gnu.org>
parents: 30646
diff changeset
103 "Returns the buffer position of the beginning of the line, after any prompt.
ffe3b5100238 Add compatibility definition of comint-line-beginning-position.
Miles Bader <miles@gnu.org>
parents: 30646
diff changeset
104 The prompt is assumed to be any text at the beginning of the line matching
ffe3b5100238 Add compatibility definition of comint-line-beginning-position.
Miles Bader <miles@gnu.org>
parents: 30646
diff changeset
105 the regular expression `comint-prompt-regexp', a buffer local variable."
ffe3b5100238 Add compatibility definition of comint-line-beginning-position.
Miles Bader <miles@gnu.org>
parents: 30646
diff changeset
106 (save-excursion (comint-bol nil) (point))))
ffe3b5100238 Add compatibility definition of comint-line-beginning-position.
Miles Bader <miles@gnu.org>
parents: 30646
diff changeset
107
ffe3b5100238 Add compatibility definition of comint-line-beginning-position.
Miles Bader <miles@gnu.org>
parents: 30646
diff changeset
108
16903
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
109 (defvar inferior-octave-output-list nil)
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
110 (defvar inferior-octave-output-string nil)
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
111 (defvar inferior-octave-receive-in-progress nil)
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
112
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
113 (defvar inferior-octave-startup-hook nil)
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
114
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
115 (defvar inferior-octave-complete-impossible nil
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
116 "Non-nil means that `inferior-octave-complete' is impossible.")
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
117
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
118 (defvar inferior-octave-dynamic-complete-functions
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 38436
diff changeset
119 '(inferior-octave-complete comint-dynamic-complete-filename)
16903
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
120 "List of functions called to perform completion for inferior Octave.
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
121 This variable is used to initialize `comint-dynamic-complete-functions'
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
122 in the Inferior Octave buffer.")
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
123
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
124 (defun inferior-octave-mode ()
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
125 "Major mode for interacting with an inferior Octave process.
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
126 Runs Octave as a subprocess of Emacs, with Octave I/O through an Emacs
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
127 buffer.
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
128
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
129 Entry to this mode successively runs the hooks `comint-mode-hook' and
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
130 `inferior-octave-mode-hook'."
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
131 (interactive)
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
132 (comint-mode)
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
133 (setq comint-prompt-regexp inferior-octave-prompt
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
134 major-mode 'inferior-octave-mode
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
135 mode-name "Inferior Octave"
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
136 mode-line-process '(":%s")
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
137 local-abbrev-table octave-abbrev-table)
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
138 (use-local-map inferior-octave-mode-map)
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
139 (set-syntax-table inferior-octave-mode-syntax-table)
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
140
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 38436
diff changeset
141 (make-local-variable 'comment-start)
16903
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
142 (setq comment-start octave-comment-start)
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
143 (make-local-variable 'comment-end)
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
144 (setq comment-end "")
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
145 (make-local-variable 'comment-column)
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 38436
diff changeset
146 (setq comment-column 32)
16903
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
147 (make-local-variable 'comment-start-skip)
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
148 (setq comment-start-skip octave-comment-start-skip)
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
149
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
150 (make-local-variable 'font-lock-defaults)
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
151 (setq font-lock-defaults '(inferior-octave-font-lock-keywords nil nil))
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
152
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
153 (setq comint-input-ring-file-name
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
154 (or (getenv "OCTAVE_HISTFILE") "~/.octave_hist")
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
155 comint-input-ring-size (or (getenv "OCTAVE_HISTSIZE") 1024)
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
156 comint-input-filter-functions '(inferior-octave-directory-tracker)
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
157 comint-dynamic-complete-functions
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
158 inferior-octave-dynamic-complete-functions)
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
159 (comint-read-input-ring t)
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
160
62772
f2892faa87d4 * progmodes/ada-mode.el (ada-mode):
Lute Kamstra <lute@gnu.org>
parents: 52952
diff changeset
161 (run-mode-hooks 'inferior-octave-mode-hook))
16903
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
162
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
163 ;;;###autoload
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
164 (defun inferior-octave (&optional arg)
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
165 "Run an inferior Octave process, I/O via `inferior-octave-buffer'.
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
166 This buffer is put in Inferior Octave mode. See `inferior-octave-mode'.
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
167
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
168 Unless ARG is non-nil, switches to this buffer.
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
169
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
170 The elements of the list `inferior-octave-startup-args' are sent as
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
171 command line arguments to the inferior Octave process on startup.
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
172
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
173 Additional commands to be executed on startup can be provided either in
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
174 the file specified by `inferior-octave-startup-file' or by the default
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
175 startup file, `~/.emacs-octave'."
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
176 (interactive "P")
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
177 (let ((buffer inferior-octave-buffer))
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
178 (get-buffer-create buffer)
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
179 (if (comint-check-proc buffer)
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
180 ()
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
181 (save-excursion
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
182 (set-buffer buffer)
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
183 (comint-mode)
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
184 (inferior-octave-startup)
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
185 (inferior-octave-mode)))
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
186 (if (not arg)
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
187 (pop-to-buffer buffer))))
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
188
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
189 ;;;###autoload
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
190 (defalias 'run-octave 'inferior-octave)
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
191
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
192 (defun inferior-octave-startup ()
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
193 "Start an inferior Octave process."
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
194 (let ((proc (comint-exec-1
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
195 (substring inferior-octave-buffer 1 -1)
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
196 inferior-octave-buffer
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
197 inferior-octave-program
25719
f440228994ba (inferior-octave-startup): Ensure -i and --no-line-editing are passed
Stephen Eglen <stephen@gnu.org>
parents: 25568
diff changeset
198 (append (list "-i" "--no-line-editing")
f440228994ba (inferior-octave-startup): Ensure -i and --no-line-editing are passed
Stephen Eglen <stephen@gnu.org>
parents: 25568
diff changeset
199 inferior-octave-startup-args))))
16903
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
200 (set-process-filter proc 'inferior-octave-output-digest)
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
201 (setq comint-ptyp process-connection-type
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
202 inferior-octave-process proc
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
203 inferior-octave-output-list nil
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
204 inferior-octave-output-string nil
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
205 inferior-octave-receive-in-progress t)
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
206
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
207 ;; This may look complicated ... However, we need to make sure that
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
208 ;; we additional startup code only AFTER Octave is ready (otherwise,
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
209 ;; output may be mixed up). Hence, we need to digest the Octave
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
210 ;; output to see when it issues a prompt.
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
211 (while inferior-octave-receive-in-progress
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
212 (accept-process-output inferior-octave-process))
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
213 (goto-char (point-max))
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
214 (set-marker (process-mark proc) (point))
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
215 (insert-before-markers
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
216 (concat
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
217 (if (not (bobp)) " \n")
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
218 (if inferior-octave-output-list
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
219 (concat (mapconcat
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
220 'identity inferior-octave-output-list "\n")
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
221 "\n"))))
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
222 ;; O.k., now we are ready for the Inferior Octave startup commands.
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
223 (let* (commands
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
224 (program (file-name-nondirectory inferior-octave-program))
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
225 (file (or inferior-octave-startup-file
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
226 (concat "~/.emacs-" program))))
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
227 (setq commands
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
228 (list "page_screen_output = 0;\n"
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
229 (if (not (string-equal
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 38436
diff changeset
230 inferior-octave-output-string ">> "))
16903
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
231 "PS1=\"\\\\s> \";\n")
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
232 (if (file-exists-p file)
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
233 (format "source (\"%s\");\n" file))))
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
234 (inferior-octave-send-list-and-digest commands))
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
235 (insert-before-markers
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
236 (concat
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
237 (if inferior-octave-output-list
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
238 (concat (mapconcat
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
239 'identity inferior-octave-output-list "\n")
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
240 "\n"))
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
241 inferior-octave-output-string))
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
242 ;; Next, we check whether Octave supports `completion_matches' ...
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
243 (inferior-octave-send-list-and-digest
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
244 (list "exist \"completion_matches\"\n"))
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
245 (setq inferior-octave-complete-impossible
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
246 (not (string-match "5$" (car inferior-octave-output-list))))
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
247
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
248 ;; And finally, everything is back to normal.
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
249 (set-process-filter proc 'inferior-octave-output-filter)
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
250 (run-hooks 'inferior-octave-startup-hook)))
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
251
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
252
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
253 (defun inferior-octave-complete ()
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
254 "Perform completion on the Octave symbol preceding point.
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
255 This is implemented using the Octave command `completion_matches' which
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
256 is NOT available with versions of Octave prior to 2.0."
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
257 (interactive)
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
258 (let* ((end (point))
30646
bb2ebaf63949 (inferior-octave-complete): Use comint-line-beginning-position.
Miles Bader <miles@gnu.org>
parents: 25719
diff changeset
259 (command
bb2ebaf63949 (inferior-octave-complete): Use comint-line-beginning-position.
Miles Bader <miles@gnu.org>
parents: 25719
diff changeset
260 (save-excursion
bb2ebaf63949 (inferior-octave-complete): Use comint-line-beginning-position.
Miles Bader <miles@gnu.org>
parents: 25719
diff changeset
261 (skip-syntax-backward "w_" (comint-line-beginning-position))
bb2ebaf63949 (inferior-octave-complete): Use comint-line-beginning-position.
Miles Bader <miles@gnu.org>
parents: 25719
diff changeset
262 (buffer-substring-no-properties (point) end)))
16903
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
263 (proc (get-buffer-process inferior-octave-buffer))
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
264 (filter (process-filter proc)))
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
265 (cond (inferior-octave-complete-impossible
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
266 (error (concat
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
267 "Your Octave does not have `completion_matches'. "
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
268 "Please upgrade to version 2.X.")))
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
269 ((string-equal command "")
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
270 (message "Cannot complete an empty string"))
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
271 (t
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
272 (inferior-octave-send-list-and-digest
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
273 (list (concat "completion_matches (\"" command "\");\n")))
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
274 ;; Sort the list
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
275 (setq inferior-octave-output-list
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
276 (sort inferior-octave-output-list 'string-lessp))
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
277 ;; Remove duplicates
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
278 (let* ((x inferior-octave-output-list)
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
279 (y (cdr x)))
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
280 (while y
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
281 (if (string-equal (car x) (car y))
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
282 (setcdr x (setq y (cdr y)))
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
283 (setq x y
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
284 y (cdr y)))))
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
285 ;; And let comint handle the rest
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
286 (comint-dynamic-simple-complete
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
287 command inferior-octave-output-list)))))
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
288
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
289 (defun inferior-octave-dynamic-list-input-ring ()
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
290 "List the buffer's input history in a help buffer"
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
291 ;; We cannot use `comint-dynamic-list-input-ring', because it replaces
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
292 ;; "completion" by "history reference" ...
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
293 (interactive)
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
294 (if (or (not (ring-p comint-input-ring))
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
295 (ring-empty-p comint-input-ring))
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
296 (message "No history")
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
297 (let ((history nil)
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
298 (history-buffer " *Input History*")
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
299 (index (1- (ring-length comint-input-ring)))
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
300 (conf (current-window-configuration)))
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
301 ;; We have to build up a list ourselves from the ring vector.
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
302 (while (>= index 0)
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
303 (setq history (cons (ring-ref comint-input-ring index) history)
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
304 index (1- index)))
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
305 ;; Change "completion" to "history reference"
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
306 ;; to make the display accurate.
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
307 (with-output-to-temp-buffer history-buffer
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
308 (display-completion-list history)
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
309 (set-buffer history-buffer))
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
310 (message "Hit space to flush")
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
311 (let ((ch (read-event)))
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
312 (if (eq ch ?\ )
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
313 (set-window-configuration conf)
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
314 (setq unread-command-events (list ch)))))))
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
315
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
316 (defun inferior-octave-strip-ctrl-g (string)
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
317 "Strip leading `^G' character.
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
318 If STRING starts with a `^G', ring the bell and strip it."
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
319 (if (string-match "^\a" string)
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
320 (progn
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
321 (ding)
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
322 (setq string (substring string 1))))
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
323 string)
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
324
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
325 (defun inferior-octave-output-filter (proc string)
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
326 "Standard output filter for the inferior Octave process.
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
327 Ring Emacs bell if process output starts with an ASCII bell, and pass
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
328 the rest to `comint-output-filter'."
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
329 (comint-output-filter proc (inferior-octave-strip-ctrl-g string)))
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
330
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
331 (defun inferior-octave-output-digest (proc string)
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
332 "Special output filter for the inferior Octave process.
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
333 Save all output between newlines into `inferior-octave-output-list', and
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
334 the rest to `inferior-octave-output-string'."
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
335 (setq string (concat inferior-octave-output-string string))
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
336 (while (string-match "\n" string)
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
337 (setq inferior-octave-output-list
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
338 (append inferior-octave-output-list
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
339 (list (substring string 0 (match-beginning 0))))
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
340 string (substring string (match-end 0))))
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
341 (if (string-match inferior-octave-prompt string)
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
342 (setq inferior-octave-receive-in-progress nil))
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
343 (setq inferior-octave-output-string string))
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
344
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
345 (defun inferior-octave-send-list-and-digest (list)
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
346 "Send LIST to the inferior Octave process and digest the output.
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
347 The elements of LIST have to be strings and are sent one by one. All
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
348 output is passed to the filter `inferior-octave-output-digest'."
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
349 (let* ((proc inferior-octave-process)
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
350 (filter (process-filter proc))
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
351 string)
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
352 (set-process-filter proc 'inferior-octave-output-digest)
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
353 (setq inferior-octave-output-list nil)
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
354 (unwind-protect
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
355 (while (setq string (car list))
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
356 (setq inferior-octave-output-string nil
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
357 inferior-octave-receive-in-progress t)
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
358 (comint-send-string proc string)
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
359 (while inferior-octave-receive-in-progress
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
360 (accept-process-output proc))
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
361 (setq list (cdr list)))
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
362 (set-process-filter proc filter))))
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
363
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
364 (defun inferior-octave-directory-tracker (string)
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
365 "Tracks `cd' commands issued to the inferior Octave process.
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
366 Use \\[inferior-octave-resync-dirs] to resync if Emacs gets confused."
24930
ea5923fcc5b2 inferior-octave-directory-tracker: Change regexp so that it doesn't
Stephen Eglen <stephen@gnu.org>
parents: 23343
diff changeset
367 (cond
ea5923fcc5b2 inferior-octave-directory-tracker: Change regexp so that it doesn't
Stephen Eglen <stephen@gnu.org>
parents: 23343
diff changeset
368 ((string-match "^[ \t]*cd[ \t;]*$" string)
ea5923fcc5b2 inferior-octave-directory-tracker: Change regexp so that it doesn't
Stephen Eglen <stephen@gnu.org>
parents: 23343
diff changeset
369 (cd "~"))
ea5923fcc5b2 inferior-octave-directory-tracker: Change regexp so that it doesn't
Stephen Eglen <stephen@gnu.org>
parents: 23343
diff changeset
370 ((string-match "^[ \t]*cd[ \t]+\\([^ \t\n;]*\\)[ \t\n;]*" string)
ea5923fcc5b2 inferior-octave-directory-tracker: Change regexp so that it doesn't
Stephen Eglen <stephen@gnu.org>
parents: 23343
diff changeset
371 (cd (substring string (match-beginning 1) (match-end 1))))))
16903
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
372
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
373 (defun inferior-octave-resync-dirs ()
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
374 "Resync the buffer's idea of the current directory.
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
375 This command queries the inferior Octave process about its current
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
376 directory and makes this the current buffer's default directory."
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
377 (interactive)
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
378 (inferior-octave-send-list-and-digest '("pwd\n"))
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
379 (cd (car inferior-octave-output-list)))
b1239a1ef6f2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
380
17150
a44a34757937 Provide octave-inf.
Karl Heuer <kwzh@gnu.org>
parents: 16906
diff changeset
381 ;;; provide ourself
a44a34757937 Provide octave-inf.
Karl Heuer <kwzh@gnu.org>
parents: 16906
diff changeset
382
a44a34757937 Provide octave-inf.
Karl Heuer <kwzh@gnu.org>
parents: 16906
diff changeset
383 (provide 'octave-inf)
a44a34757937 Provide octave-inf.
Karl Heuer <kwzh@gnu.org>
parents: 16906
diff changeset
384
52401
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 49598
diff changeset
385 ;;; arch-tag: bdce0395-24d1-4bb4-bfba-6fb1eeb1a660
16906
e4ca41bdc7fe Whitespace change.
Richard M. Stallman <rms@gnu.org>
parents: 16904
diff changeset
386 ;;; octave-inf.el ends here