1 \input texinfo @c -*-texinfo-*-
3 @setfilename ../../info/octave-mode
8 Copyright @copyright{} 1996--2013 Free Software Foundation, Inc.
11 Permission is granted to copy, distribute and/or modify this document
12 under the terms of the GNU Free Documentation License, Version 1.3 or
13 any later version published by the Free Software Foundation; with no
14 Invariant Sections, with the Front-Cover texts being ``A GNU Manual,''
15 and with the Back-Cover Texts as in (a) below. A copy of the license
16 is included in the section entitled ``GNU Free Documentation License.''
18 (a) The FSF's Back-Cover Text is: ``You have the freedom to copy and
19 modify this GNU manual.''
23 @dircategory Emacs editing modes
25 * Octave mode: (octave-mode). Emacs mode for editing GNU Octave files.
32 @subtitle An Emacs mode for programming in GNU Octave
35 @vskip 0pt plus 1filll
51 * Running Octave from Within Emacs::
52 * GNU Free Documentation License::
55 * Lisp Function Index::
62 The development of Octave code can greatly be facilitated using Emacs
63 with Octave mode, a major mode for editing Octave files which can
64 e.g.@: automatically indent the code, do some of the typing (with
65 Abbrev mode) and show keywords, comments, strings, etc.@: in different
66 faces (with Font-lock mode on devices that support it).
68 It is also possible to run Octave from within Emacs, either by
69 directly entering commands at the prompt in a buffer in Inferior
70 Octave mode, or by interacting with Octave from within a file with
71 Octave code. This is useful in particular for debugging Octave code.
73 @node Using Octave Mode
74 @chapter Using Octave Mode
75 @cindex Using Octave Mode
77 In Octave mode, the following special Emacs commands can be used in
78 addition to the standard Emacs commands.
83 @findex octave-indent-new-comment-line
84 @vindex octave-continuation-string
85 Break Octave line at point, continuing comment if within one. Insert
86 @code{octave-continuation-string} before breaking the line unless
87 inside a list. Signal an error if within a single-quoted string.
91 @findex octave-update-function-file-comment
92 Query replace function names in function file comment.
96 @findex octave-previous-code-line
97 Move one line of Octave code backward, skipping empty and comment
98 lines (@code{octave-previous-code-line}). With numeric prefix
99 argument @var{n}, move that many code lines backward (forward if
100 @var{n} is negative).
104 @findex octave-next-code-line
105 Move one line of Octave code forward, skipping empty and comment lines
106 (@code{octave-next-code-line}). With numeric prefix argument @var{n},
107 move that many code lines forward (backward if @var{n} is negative).
111 @findex octave-beginning-of-line
112 Move to the beginning of the physical line
113 (@code{octave-beginning-of-line}). If point is in an empty or comment
114 line, simply go to its beginning; otherwise, move backwards to the
115 beginning of the first code line which is not inside a continuation
116 statement, i.e., which does not follow a code line ending in
117 @samp{...} or @samp{\}, or is inside an open parenthesis list.
121 @findex octave-end-of-line
122 Move to the end of the physical line (@code{octave-end-of-line}). If
123 point is in a code line, move forward to the end of the first Octave
124 code line which does not end in @samp{...} or @samp{\} or is inside an
125 open parenthesis list. Otherwise, simply go to the end of the current
130 @findex octave-mark-block
131 Put point at the beginning of this block, mark at the end
132 (@code{octave-mark-block}). The block marked is the one that contains
133 point or follows point.
137 Close the current block on a separate line (@code{smie-close-block}).
138 An error is signaled if no block to close is found.
142 @findex octave-insert-defun
143 Insert a function skeleton, prompting for the function's name, arguments
144 and return values which have to be entered without parentheses
145 (@code{octave-insert-defun}).
147 in one of your Emacs startup files.
150 A common problem is that the @key{RET} key does @emph{not} indent the
151 line to where the new text should go after inserting the newline. This
152 is because the standard Emacs convention is that @key{RET} (aka
153 @kbd{C-m}) just adds a newline, whereas @key{LFD} (aka @kbd{C-j}) adds a
154 newline and indents it. This is particularly inconvenient for users with
155 keyboards which do not have a special @key{LFD} key at all; in such
156 cases, it is typically more convenient to use @key{RET} as the @key{LFD}
157 key (rather than typing @kbd{C-j}).
159 You can make @key{RET} do this by adding
161 (define-key octave-mode-map "\C-m"
162 'octave-reindent-then-newline-and-indent)
165 to one of your Emacs startup files. Another, more generally applicable
168 (defun RET-behaves-as-LFD ()
169 (let ((x (key-binding "\C-j")))
170 (local-set-key "\C-m" x)))
171 (add-hook 'octave-mode-hook 'RET-behaves-as-LFD)
174 (this works for all modes by adding to the startup hooks, without
175 having to know the particular binding of @key{RET} in that mode!).
176 Similar considerations apply for using @key{M-RET} as @key{M-LFD}. As
177 @email{bwarsaw@@cnri.reston.va.us, Barry A. Warsaw} says in the
178 documentation for his @code{cc-mode}, ``This is a very common
179 question. @code{:-)} If you want this to be the default behavior,
180 don't lobby me, lobby RMS!''
182 The following variables can be used to customize Octave mode.
185 @item octave-blink-matching-block
186 Non-@code{nil} means show matching begin of block when inserting a space,
187 newline or @samp{;} after an else or end keyword. Default is @code{t}.
188 This is an extremely useful feature for automatically verifying that the
189 keywords match---if they don't, an error message is displayed.
191 @item octave-block-offset
192 Extra indentation applied to statements in block structures.
195 @item octave-continuation-offset
196 Extra indentation applied to Octave continuation lines.
199 @item octave-font-lock-texinfo-comment
200 Highlight texinfo comment blocks. The default value is @code{t}.
203 If Font Lock mode is enabled, Octave mode will display
207 strings in @code{font-lock-string-face}
210 comments in @code{font-lock-comment-face}
213 the Octave reserved words (such as all block keywords) and the text
214 functions (such as @samp{cd} or @samp{who}) which are also reserved
215 using @code{font-lock-keyword-face}
218 the built-in operators (@samp{&&}, @samp{==}, @dots{}) using
219 @code{font-lock-reference-face}
222 and the function names in function declarations in
223 @code{font-lock-function-name-face}.
226 Function comments blocks in @code{octave-function-comment-block}
229 @cindex Imenu Support
230 There is also rudimentary support for Imenu (@pxref{Imenu,,, emacs,
231 The GNU Emacs Manual}). Currently, function names can be indexed.
233 @cindex ElDoc Mode Support
234 @vindex octave-eldoc-message-style
235 ElDoc mode (@pxref{Lisp Doc,,, emacs, The GNU Emacs Manual}) is
236 supported. By customizing @code{octave-eldoc-message-style} it can be
237 changed from displaying one or multi line hints.
240 @c @cindex Emacs TAGS files
241 @c @cindex @file{octave-tags}
242 @c You can generate TAGS files for Emacs from Octave @file{.m} files using
243 @c the shell script @file{octave-tags} that is installed alongside your copy of
246 @vindex octave-mode-hook
247 Customization of Octave mode can be performed by modification of the
248 variable @code{octave-mode-hook}.
250 @node Running Octave from Within Emacs
251 @chapter Running Octave from Within Emacs
252 @cindex Inferior Octave Mode
254 Octave mode provides commands for running an inferior
255 Octave process in a special Emacs buffer. Use
260 to directly start an inferior Octave process.
262 @vindex inferior-octave-buffer
263 This will start Octave in a special buffer the name of which is
264 specified by the variable @code{inferior-octave-buffer} and defaults
265 to @file{*Inferior Octave*}. From within this buffer, you can
266 interact with the inferior Octave process `as usual', i.e., by
267 entering Octave commands at the prompt. The buffer is in Inferior
268 Octave mode, which is derived from the standard Comint mode, a major
269 mode for interacting with an inferior interpreter. See the
270 documentation for @code{comint-mode} for more details, and use
271 @kbd{C-h b} to find out about available special keybindings.
273 You can also communicate with an inferior Octave process from within
274 files with Octave code (i.e., buffers in Octave mode), using the
280 @findex octave-send-line
281 @vindex octave-send-line-auto-forward
282 Send the current line to the inferior Octave process
283 (@code{octave-send-line}). With positive prefix argument @var{n},
284 send that many lines. If @code{octave-send-line-auto-forward} is
285 non-@code{nil}, go to the next unsent code line.
289 @findex octave-send-block
290 Send the current block to the inferior Octave process
291 (@code{octave-send-block}).
295 @findex octave-send-defun
296 Send the current function to the inferior Octave process
297 (@code{octave-send-defun}).
301 @findex octave-send-region
302 Send the region to the inferior Octave process
303 (@code{octave-send-region}).
307 @findex octave-send-buffer
308 Send the entire buffer to the inferior Octave process
309 (@code{octave-send-buffer}). If the buffer is associated with a file
310 then sourcing the buffer by using @kbd{C-c C-l}
311 (@code{octave-source-file}) should be preferred.
315 @findex octave-show-process-buffer
316 Make sure that `inferior-octave-buffer' is displayed
317 (@code{octave-show-process-buffer}).
321 @findex octave-hide-process-buffer
322 Delete all windows that display the inferior Octave buffer
323 (@code{octave-hide-process-buffer}).
327 @findex octave-kill-process
328 Kill the inferior Octave process and its buffer
329 (@code{octave-kill-process}).
333 @findex octave-source-file
334 Parse and execute the current file in the inferior Octave buffer
335 (@code{octave-source-file}). This is done using Octave's
336 @code{source} function.
340 @findex octave-find-definition
341 @vindex octave-source-directories
342 Find the definition of a function or variable. Functions implemented
343 in C++ can be found if variable @code{octave-source-directories} is
344 set correctly (@code{octave-find-definition}).
349 @vindex octave-help-buffer
350 Display the documentation for function (@code{octave-help}). The
351 buffer name can be changed by customizing @code{octave-help-buffer}.
355 @findex octave-lookfor
356 Search for a given string in all the first sentence of function help
357 strings (@code{octave-lookfor}). With a @code{universal-argument} the
358 entire help string is searched.
362 The effect of the commands which send code to the Octave process can be
363 customized by the following variables.
366 @item octave-send-echo-input
367 Non-@code{nil} means echo input sent to the inferior Octave process.
370 @item octave-send-show-buffer
371 Non-@code{nil} means display the buffer running the Octave process after
372 sending a command (but without selecting it).
376 If you send code and there is no inferior Octave process yet, it will
377 be started automatically.
379 @vindex inferior-octave-startup-args
380 The startup of the inferior Octave process is highly customizable.
381 The variable @code{inferior-octave-startup-args} can be used for
382 specifying command lines arguments to be passed to Octave on startup
383 as a list of strings. For example, to suppress the startup message
384 and use `traditional' mode, set this to @code{("-q" "--traditional")}.
385 You can also specify a startup file of Octave commands to be loaded on
386 startup; note that these commands will not produce any visible output
387 in the process buffer. Which file to use is controlled by the
388 variable @code{inferior-octave-startup-file}. The default is
389 @file{~/.emacs-octave} or if this file is not found
390 @file{~/.emacs.d/init_octave.m}.
392 @vindex inferior-octave-prompt-read-only
393 By customizing @code{inferior-octave-prompt-read-only} the prompt can
394 be changed to be read only. The default value is the same as
395 @code{comint-prompt-read-only}.
397 @vindex inferior-octave-mode-hook
398 And finally, @code{inferior-octave-mode-hook} is run after starting
399 the process and putting its buffer into Inferior Octave mode. Hence,
400 if you like the up and down arrow keys to behave in the interaction
401 buffer as in the shell, and you want this buffer to use nice colors,
404 (add-hook 'inferior-octave-mode-hook
406 (define-key inferior-octave-mode-map [up]
407 'comint-previous-input)
408 (define-key inferior-octave-mode-map [down]
409 'comint-next-input)))
412 to your @file{.emacs} or @file{init.el} file. You could also swap the
413 roles of @kbd{C-a} (@code{beginning-of-line}) and @code{C-c C-a}
414 (@code{comint-bol}) using this hook.
416 @vindex inferior-octave-prompt
418 @strong{Note} that if you set your Octave prompts to something different
419 from the defaults, make sure that @code{inferior-octave-prompt} matches
420 them. Otherwise, @emph{nothing} will work, because Emacs will not know
421 when Octave is waiting for input, or done sending output.
424 @node GNU Free Documentation License
425 @chapter GNU Free Documentation License
426 @include doclicense.texi
429 @unnumbered Key Index
434 @unnumbered Variable Index
438 @node Lisp Function Index
439 @unnumbered Function Index
444 @unnumbered Concept Index
453 @c @node Using the Emacs Info Reader for Octave
454 @c @chapter Using the Emacs Info Reader for Octave
456 @c You may also use the Emacs Info reader with Octave's @code{doc} function.
458 @c If @file{gnuserv} is installed, add the lines
460 @c (autoload 'octave-help "octave-hlp" nil t)
461 @c (require 'gnuserv)
465 @c to your @file{.emacs} file.
467 @c You can use either `plain' Emacs Info or the function @code{octave-help}
468 @c as your Octave info reader (for @samp{help -i}). In the former case,
469 @c use @code{info_program ("info-emacs-info")}.
470 @c The latter is perhaps more attractive because it allows to look up keys
471 @c in the indices of @emph{several} info files related to Octave (provided
472 @c that the Emacs variable @code{octave-help-files} is set correctly). In
473 @c this case, use @code{info_program ("info-emacs-octave-help")}.
475 @c If you use Octave from within Emacs, it is best to add these settings to
476 @c your @file{~/.emacs-octave} startup file (or the file pointed to by the
477 @c Emacs variable @code{inferior-octave-startup-file}).