Add support for auto-generating info/dir
[bpt/emacs.git] / doc / misc / octave-mode.texi
CommitLineData
ed4bc201
RS
1\input texinfo @c -*-texinfo-*-
2@c %**start of header
3@setfilename ../../info/octave-mode
4@settitle Octave Mode
5@c %**end of header
6
7@copying
8Copyright @copyright{} 1996--2013 Free Software Foundation, Inc.
9
10@quotation
11Permission is granted to copy, distribute and/or modify this document
12under the terms of the GNU Free Documentation License, Version 1.3 or
13any later version published by the Free Software Foundation; with no
14Invariant Sections, with the Front-Cover texts being ``A GNU Manual,''
15and with the Back-Cover Texts as in (a) below. A copy of the license
16is included in the section entitled ``GNU Free Documentation License.''
17
18(a) The FSF's Back-Cover Text is: ``You have the freedom to copy and
19modify this GNU manual.''
20@end quotation
21@end copying
22
23@dircategory Emacs editing modes
24@direntry
f9405d87 25* Octave mode: (octave-mode). Emacs mode for editing GNU Octave files.
ed4bc201
RS
26@end direntry
27
28@finalout
29
30@titlepage
31@title Octave Mode
32@subtitle An Emacs mode for programming in GNU Octave
33
34@page
35@vskip 0pt plus 1filll
36@insertcopying
37@end titlepage
38
39@contents
40
41@ifnottex
42@node Top
43@top Octave Mode
44
45@insertcopying
46@end ifnottex
47
48@menu
49* Overview::
50* Using Octave Mode::
51* Running Octave from Within Emacs::
52* GNU Free Documentation License::
53* Key Index::
54* Variable Index::
55* Lisp Function Index::
56* Concept Index::
57@end menu
58
59@node Overview
60@chapter Overview
61
62The development of Octave code can greatly be facilitated using Emacs
63with Octave mode, a major mode for editing Octave files which can
64e.g.@: automatically indent the code, do some of the typing (with
65Abbrev mode) and show keywords, comments, strings, etc.@: in different
66faces (with Font-lock mode on devices that support it).
67
68It is also possible to run Octave from within Emacs, either by
69directly entering commands at the prompt in a buffer in Inferior
70Octave mode, or by interacting with Octave from within a file with
71Octave code. This is useful in particular for debugging Octave code.
72
73@node Using Octave Mode
74@chapter Using Octave Mode
75@cindex Using Octave Mode
76
77In Octave mode, the following special Emacs commands can be used in
78addition to the standard Emacs commands.
79
80@table @kbd
81@item C-M-j
82@kindex C-M-j
83@findex octave-indent-new-comment-line
84@vindex octave-continuation-string
85Break Octave line at point, continuing comment if within one. Insert
86@code{octave-continuation-string} before breaking the line unless
87inside a list. Signal an error if within a single-quoted string.
88
89@item C-c ;
90@kindex C-c ;
91@findex octave-update-function-file-comment
92Query replace function names in function file comment.
93
94@item C-c C-p
95@kindex C-c C-p
96@findex octave-previous-code-line
97Move one line of Octave code backward, skipping empty and comment
98lines (@code{octave-previous-code-line}). With numeric prefix
99argument @var{n}, move that many code lines backward (forward if
100@var{n} is negative).
101
102@item C-c C-n
103@kindex C-c C-n
104@findex octave-next-code-line
105Move one line of Octave code forward, skipping empty and comment lines
106(@code{octave-next-code-line}). With numeric prefix argument @var{n},
107move that many code lines forward (backward if @var{n} is negative).
108
109@item C-c C-a
110@kindex C-c C-a
111@findex octave-beginning-of-line
112Move to the beginning of the physical line
113(@code{octave-beginning-of-line}). If point is in an empty or comment
114line, simply go to its beginning; otherwise, move backwards to the
115beginning of the first code line which is not inside a continuation
116statement, i.e., which does not follow a code line ending in
117@samp{...} or @samp{\}, or is inside an open parenthesis list.
118
119@item C-c C-e
120@kindex C-c C-e
121@findex octave-end-of-line
122Move to the end of the physical line (@code{octave-end-of-line}). If
123point is in a code line, move forward to the end of the first Octave
124code line which does not end in @samp{...} or @samp{\} or is inside an
125open parenthesis list. Otherwise, simply go to the end of the current
126line.
127
128@item C-c M-C-h
129@kindex C-c M-C-h
130@findex octave-mark-block
131Put point at the beginning of this block, mark at the end
132(@code{octave-mark-block}). The block marked is the one that contains
133point or follows point.
134
135@item C-c ]
136@kindex C-c ]
137Close the current block on a separate line (@code{smie-close-block}).
138An error is signaled if no block to close is found.
139
140@item C-c C-f
141@kindex C-c C-f
142@findex octave-insert-defun
143Insert a function skeleton, prompting for the function's name, arguments
144and return values which have to be entered without parentheses
145(@code{octave-insert-defun}).
146@noindent
147in one of your Emacs startup files.
148@end table
149
150A common problem is that the @key{RET} key does @emph{not} indent the
151line to where the new text should go after inserting the newline. This
152is 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
154newline and indents it. This is particularly inconvenient for users with
155keyboards which do not have a special @key{LFD} key at all; in such
156cases, it is typically more convenient to use @key{RET} as the @key{LFD}
157key (rather than typing @kbd{C-j}).
158
159You can make @key{RET} do this by adding
160@lisp
161(define-key octave-mode-map "\C-m"
162 'octave-reindent-then-newline-and-indent)
163@end lisp
164@noindent
165to one of your Emacs startup files. Another, more generally applicable
166solution is
167@lisp
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)
172@end lisp
173@noindent
174(this works for all modes by adding to the startup hooks, without
175having to know the particular binding of @key{RET} in that mode!).
176Similar 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
178documentation for his @code{cc-mode}, ``This is a very common
179question. @code{:-)} If you want this to be the default behavior,
180don't lobby me, lobby RMS!''
181
182The following variables can be used to customize Octave mode.
183
184@vtable @code
185@item octave-blink-matching-block
186Non-@code{nil} means show matching begin of block when inserting a space,
187newline or @samp{;} after an else or end keyword. Default is @code{t}.
188This is an extremely useful feature for automatically verifying that the
189keywords match---if they don't, an error message is displayed.
190
191@item octave-block-offset
192Extra indentation applied to statements in block structures.
193Default is 2.
194
195@item octave-continuation-offset
196Extra indentation applied to Octave continuation lines.
197Default is 4.
198
199@item octave-font-lock-texinfo-comment
200Highlight texinfo comment blocks. The default value is @code{t}.
201@end vtable
202
203If Font Lock mode is enabled, Octave mode will display
204
205@itemize @bullet
206@item
207strings in @code{font-lock-string-face}
208
209@item
210comments in @code{font-lock-comment-face}
211
212@item
213the Octave reserved words (such as all block keywords) and the text
214functions (such as @samp{cd} or @samp{who}) which are also reserved
215using @code{font-lock-keyword-face}
216
217@item
218the built-in operators (@samp{&&}, @samp{==}, @dots{}) using
219@code{font-lock-reference-face}
220
221@item
222and the function names in function declarations in
223@code{font-lock-function-name-face}.
224
225@item
226Function comments blocks in @code{octave-function-comment-block}
227@end itemize
228
229@cindex Imenu Support
230There is also rudimentary support for Imenu (@pxref{Imenu,,, emacs,
231The GNU Emacs Manual}). Currently, function names can be indexed.
232
233@cindex ElDoc Mode Support
234@vindex octave-eldoc-message-style
235ElDoc mode (@pxref{Lisp Doc,,, emacs, The GNU Emacs Manual}) is
236supported. By customizing @code{octave-eldoc-message-style} it can be
237changed from displaying one or multi line hints.
238
239@c @cindex TAGS
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
244@c Octave.
245@c
246@vindex octave-mode-hook
247Customization of Octave mode can be performed by modification of the
248variable @code{octave-mode-hook}.
249
250@node Running Octave from Within Emacs
251@chapter Running Octave from Within Emacs
252@cindex Inferior Octave Mode
253
254Octave mode provides commands for running an inferior
255Octave process in a special Emacs buffer. Use
256@lisp
257M-x run-octave
258@end lisp
259@noindent
260to directly start an inferior Octave process.
261
262@vindex inferior-octave-buffer
263This will start Octave in a special buffer the name of which is
264specified by the variable @code{inferior-octave-buffer} and defaults
265to @file{*Inferior Octave*}. From within this buffer, you can
266interact with the inferior Octave process `as usual', i.e., by
267entering Octave commands at the prompt. The buffer is in Inferior
268Octave mode, which is derived from the standard Comint mode, a major
269mode for interacting with an inferior interpreter. See the
270documentation for @code{comint-mode} for more details, and use
271@kbd{C-h b} to find out about available special keybindings.
272
273You can also communicate with an inferior Octave process from within
274files with Octave code (i.e., buffers in Octave mode), using the
275following commands.
276
277@table @kbd
278@item C-c C-i l
279@kindex C-c C-i l
280@findex octave-send-line
281@vindex octave-send-line-auto-forward
282Send the current line to the inferior Octave process
283(@code{octave-send-line}). With positive prefix argument @var{n},
284send that many lines. If @code{octave-send-line-auto-forward} is
285non-@code{nil}, go to the next unsent code line.
286
287@item C-c C-i b
288@kindex C-c C-i b
289@findex octave-send-block
290Send the current block to the inferior Octave process
291(@code{octave-send-block}).
292
293@item C-c C-i f
294@kindex C-c C-i f
295@findex octave-send-defun
296Send the current function to the inferior Octave process
297(@code{octave-send-defun}).
298
299@item C-c C-i r
300@kindex C-c C-i r
301@findex octave-send-region
302Send the region to the inferior Octave process
303(@code{octave-send-region}).
304
305@item C-c C-i a
306@kindex C-c C-i a
307@findex octave-send-buffer
308Send the entire buffer to the inferior Octave process
309(@code{octave-send-buffer}). If the buffer is associated with a file
310then sourcing the buffer by using @kbd{C-c C-l}
311(@code{octave-source-file}) should be preferred.
312
313@item C-c C-i s
314@kindex C-c C-i s
315@findex octave-show-process-buffer
316Make sure that `inferior-octave-buffer' is displayed
317(@code{octave-show-process-buffer}).
318
319@item C-c C-i q
320@kindex C-c C-i q
321@findex octave-hide-process-buffer
322Delete all windows that display the inferior Octave buffer
323(@code{octave-hide-process-buffer}).
324
325@item C-c C-i k
326@kindex C-c C-i k
327@findex octave-kill-process
328Kill the inferior Octave process and its buffer
329(@code{octave-kill-process}).
330
331@item C-c C-l
332@kindex C-c C-l
333@findex octave-source-file
334Parse 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.
337
338@item M-.
339@kindex M-.
340@findex octave-find-definition
341@vindex octave-source-directories
342Find the definition of a function or variable. Functions implemented
343in C++ can be found if variable @code{octave-source-directories} is
344set correctly (@code{octave-find-definition}).
345
346@item C-h d
347@kindex C-h d
348@findex octave-help
349@vindex octave-help-buffer
350Display the documentation for function (@code{octave-help}). The
351buffer name can be changed by customizing @code{octave-help-buffer}.
352
353@item C-h a
354@kindex C-h a
355@findex octave-lookfor
356Search for a given string in all the first sentence of function help
357strings (@code{octave-lookfor}). With a @code{universal-argument} the
358entire help string is searched.
359
360@end table
361
362The effect of the commands which send code to the Octave process can be
363customized by the following variables.
364
365@vtable @code
366@item octave-send-echo-input
367Non-@code{nil} means echo input sent to the inferior Octave process.
368Default is @code{t}.
369
370@item octave-send-show-buffer
371Non-@code{nil} means display the buffer running the Octave process after
372sending a command (but without selecting it).
373Default is @code{t}.
374@end vtable
375
376If you send code and there is no inferior Octave process yet, it will
377be started automatically.
378
379@vindex inferior-octave-startup-args
380The startup of the inferior Octave process is highly customizable.
381The variable @code{inferior-octave-startup-args} can be used for
382specifying command lines arguments to be passed to Octave on startup
383as a list of strings. For example, to suppress the startup message
384and use `traditional' mode, set this to @code{("-q" "--traditional")}.
385You can also specify a startup file of Octave commands to be loaded on
386startup; note that these commands will not produce any visible output
387in the process buffer. Which file to use is controlled by the
388variable @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}.
391
392@vindex inferior-octave-prompt-read-only
393By customizing @code{inferior-octave-prompt-read-only} the prompt can
394be changed to be read only. The default value is the same as
395@code{comint-prompt-read-only}.
396
397@vindex inferior-octave-mode-hook
398And finally, @code{inferior-octave-mode-hook} is run after starting
399the process and putting its buffer into Inferior Octave mode. Hence,
400if you like the up and down arrow keys to behave in the interaction
401buffer as in the shell, and you want this buffer to use nice colors,
402add
403@lisp
404(add-hook 'inferior-octave-mode-hook
405 (lambda ()
406 (define-key inferior-octave-mode-map [up]
407 'comint-previous-input)
408 (define-key inferior-octave-mode-map [down]
409 'comint-next-input)))
410@end lisp
411@noindent
412to your @file{.emacs} or @file{init.el} file. You could also swap the
413roles of @kbd{C-a} (@code{beginning-of-line}) and @code{C-c C-a}
414(@code{comint-bol}) using this hook.
415
416@vindex inferior-octave-prompt
417@quotation
418@strong{Note} that if you set your Octave prompts to something different
419from the defaults, make sure that @code{inferior-octave-prompt} matches
420them. Otherwise, @emph{nothing} will work, because Emacs will not know
421when Octave is waiting for input, or done sending output.
422@end quotation
423
424@node GNU Free Documentation License
425@chapter GNU Free Documentation License
426@include doclicense.texi
427
428@node Key Index
429@unnumbered Key Index
430
431@printindex ky
432
433@node Variable Index
434@unnumbered Variable Index
435
436@printindex vr
437
438@node Lisp Function Index
439@unnumbered Function Index
440
441@printindex fn
442
443@node Concept Index
444@unnumbered Concept Index
445
446@printindex cp
447
448
449@bye
450
451@c TODO Update
452
453@c @node Using the Emacs Info Reader for Octave
454@c @chapter Using the Emacs Info Reader for Octave
455
456@c You may also use the Emacs Info reader with Octave's @code{doc} function.
457
458@c If @file{gnuserv} is installed, add the lines
459@c @lisp
460@c (autoload 'octave-help "octave-hlp" nil t)
461@c (require 'gnuserv)
462@c (gnuserv-start)
463@c @end lisp
464@c @noindent
465@c to your @file{.emacs} file.
466
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")}.
474
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}).