diff options
author | RĂ¼diger Sonderfeld <ruediger@c-plusplus.de> | 2013-12-11 14:50:46 +0100 |
---|---|---|
committer | RĂ¼diger Sonderfeld <ruediger@c-plusplus.de> | 2013-12-11 14:50:46 +0100 |
commit | ed4bc201f5015aa6c4c901eca9e33036e21fdb65 (patch) | |
tree | 2c45987099b0580791dd0d4b2379ef515275049e /doc | |
parent | d94c40c1b74bcd10795fa6ea9cc1a8908486b093 (diff) | |
download | emacs-ed4bc201f5015aa6c4c901eca9e33036e21fdb65.tar.gz |
Import `octave-mode' manual from GNU Octave.
The manual was written by Kurt Hornik. He agreed to assign the
copyright for it to the FSF. I have updated and modified the manual.
* doc/misc/octave-mode.texi: Imported from GNU Octave
(doc/interpreter/emacs.txi).
* doc/misc/Makefile.in: Add octave-mode.texi.
* lisp/progmodes/octave.el (octave-mode, inferior-octave-mode): Link
to info manual and show keybindings and set `:group' keyword.
Diffstat (limited to 'doc')
-rw-r--r-- | doc/misc/Makefile.in | 14 | ||||
-rw-r--r-- | doc/misc/octave-mode.texi | 477 |
2 files changed, 490 insertions, 1 deletions
diff --git a/doc/misc/Makefile.in b/doc/misc/Makefile.in index 70fb05e23e3..4c72aaa18ff 100644 --- a/doc/misc/Makefile.in +++ b/doc/misc/Makefile.in @@ -67,7 +67,7 @@ INFO_COMMON = ada-mode auth autotype bovine calc ccmode cl \ dbus dired-x ebrowse ede ediff edt eieio \ emacs-mime epa erc ert eshell eudc efaq \ flymake forms gnus emacs-gnutls htmlfontify idlwave ido info.info \ - mairix-el message mh-e newsticker nxml-mode \ + mairix-el message mh-e newsticker nxml-mode octave-mode \ org pcl-cvs pgg rcirc remember reftex sasl \ sc semantic ses sieve smtpmail speedbar srecode todo-mode tramp \ url vip viper widget wisent woman @@ -564,6 +564,18 @@ nxml-mode.pdf: $(nxml_mode_deps) nxml-mode.html: $(nxml_mode_deps) $(MAKEINFO) $(MAKEINFO_OPTS) $(HTML_OPTS) -o $@ ${srcdir}/nxml-mode.texi +octave_mode_deps = ${srcdir}/octave-mode.texi ${gfdl} +octave-mode : $(buildinfodir)/octave-mode$(INFO_EXT) +$(buildinfodir)/octave-mode$(INFO_EXT): $(octave_mode_deps) + $(mkinfodir) + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/octave-mode.texi +octave-mode.dvi: $(octave_mode_deps) + $(ENVADD) $(TEXI2DVI) ${srcdir}/octave-mode.texi +octave-mode.pdf: $(octave_mode_deps) + $(ENVADD) $(TEXI2PDF) ${srcdir}/octave-mode.texi +octave-mode.html: $(octave_mode_deps) + $(MAKEINFO) $(MAKEINFO_OPTS) $(HTML_OPTS) -o $@ ${srcdir}/octave-mode.texi + org_deps = ${srcdir}/org.texi ${gfdl} org : $(buildinfodir)/org$(INFO_EXT) $(buildinfodir)/org$(INFO_EXT): $(org_deps) diff --git a/doc/misc/octave-mode.texi b/doc/misc/octave-mode.texi new file mode 100644 index 00000000000..2efe9f9d1c4 --- /dev/null +++ b/doc/misc/octave-mode.texi @@ -0,0 +1,477 @@ +\input texinfo @c -*-texinfo-*- +@c %**start of header +@setfilename ../../info/octave-mode +@settitle Octave Mode +@c %**end of header + +@copying +Copyright @copyright{} 1996--2013 Free Software Foundation, Inc. + +@quotation +Permission is granted to copy, distribute and/or modify this document +under the terms of the GNU Free Documentation License, Version 1.3 or +any later version published by the Free Software Foundation; with no +Invariant Sections, with the Front-Cover texts being ``A GNU Manual,'' +and with the Back-Cover Texts as in (a) below. A copy of the license +is included in the section entitled ``GNU Free Documentation License.'' + +(a) The FSF's Back-Cover Text is: ``You have the freedom to copy and +modify this GNU manual.'' +@end quotation +@end copying + +@dircategory Emacs editing modes +@direntry +* Octave mode: (octave-mode). Emacs mode for editing GNU Octave files. +@end direntry + +@finalout + +@titlepage +@title Octave Mode +@subtitle An Emacs mode for programming in GNU Octave + +@page +@vskip 0pt plus 1filll +@insertcopying +@end titlepage + +@contents + +@ifnottex +@node Top +@top Octave Mode + +@insertcopying +@end ifnottex + +@menu +* Overview:: +* Using Octave Mode:: +* Running Octave from Within Emacs:: +* GNU Free Documentation License:: +* Key Index:: +* Variable Index:: +* Lisp Function Index:: +* Concept Index:: +@end menu + +@node Overview +@chapter Overview + +The development of Octave code can greatly be facilitated using Emacs +with Octave mode, a major mode for editing Octave files which can +e.g.@: automatically indent the code, do some of the typing (with +Abbrev mode) and show keywords, comments, strings, etc.@: in different +faces (with Font-lock mode on devices that support it). + +It is also possible to run Octave from within Emacs, either by +directly entering commands at the prompt in a buffer in Inferior +Octave mode, or by interacting with Octave from within a file with +Octave code. This is useful in particular for debugging Octave code. + +@node Using Octave Mode +@chapter Using Octave Mode +@cindex Using Octave Mode + +In Octave mode, the following special Emacs commands can be used in +addition to the standard Emacs commands. + +@table @kbd +@item C-M-j +@kindex C-M-j +@findex octave-indent-new-comment-line +@vindex octave-continuation-string +Break Octave line at point, continuing comment if within one. Insert +@code{octave-continuation-string} before breaking the line unless +inside a list. Signal an error if within a single-quoted string. + +@item C-c ; +@kindex C-c ; +@findex octave-update-function-file-comment +Query replace function names in function file comment. + +@item C-c C-p +@kindex C-c C-p +@findex octave-previous-code-line +Move one line of Octave code backward, skipping empty and comment +lines (@code{octave-previous-code-line}). With numeric prefix +argument @var{n}, move that many code lines backward (forward if +@var{n} is negative). + +@item C-c C-n +@kindex C-c C-n +@findex octave-next-code-line +Move one line of Octave code forward, skipping empty and comment lines +(@code{octave-next-code-line}). With numeric prefix argument @var{n}, +move that many code lines forward (backward if @var{n} is negative). + +@item C-c C-a +@kindex C-c C-a +@findex octave-beginning-of-line +Move to the beginning of the physical line +(@code{octave-beginning-of-line}). If point is in an empty or comment +line, simply go to its beginning; otherwise, move backwards to the +beginning of the first code line which is not inside a continuation +statement, i.e., which does not follow a code line ending in +@samp{...} or @samp{\}, or is inside an open parenthesis list. + +@item C-c C-e +@kindex C-c C-e +@findex octave-end-of-line +Move to the end of the physical line (@code{octave-end-of-line}). If +point is in a code line, move forward to the end of the first Octave +code line which does not end in @samp{...} or @samp{\} or is inside an +open parenthesis list. Otherwise, simply go to the end of the current +line. + +@item C-c M-C-h +@kindex C-c M-C-h +@findex octave-mark-block +Put point at the beginning of this block, mark at the end +(@code{octave-mark-block}). The block marked is the one that contains +point or follows point. + +@item C-c ] +@kindex C-c ] +Close the current block on a separate line (@code{smie-close-block}). +An error is signaled if no block to close is found. + +@item C-c C-f +@kindex C-c C-f +@findex octave-insert-defun +Insert a function skeleton, prompting for the function's name, arguments +and return values which have to be entered without parentheses +(@code{octave-insert-defun}). +@noindent +in one of your Emacs startup files. +@end table + +A common problem is that the @key{RET} key does @emph{not} indent the +line to where the new text should go after inserting the newline. This +is because the standard Emacs convention is that @key{RET} (aka +@kbd{C-m}) just adds a newline, whereas @key{LFD} (aka @kbd{C-j}) adds a +newline and indents it. This is particularly inconvenient for users with +keyboards which do not have a special @key{LFD} key at all; in such +cases, it is typically more convenient to use @key{RET} as the @key{LFD} +key (rather than typing @kbd{C-j}). + +You can make @key{RET} do this by adding +@lisp +(define-key octave-mode-map "\C-m" + 'octave-reindent-then-newline-and-indent) +@end lisp +@noindent +to one of your Emacs startup files. Another, more generally applicable +solution is +@lisp +(defun RET-behaves-as-LFD () + (let ((x (key-binding "\C-j"))) + (local-set-key "\C-m" x))) +(add-hook 'octave-mode-hook 'RET-behaves-as-LFD) +@end lisp +@noindent +(this works for all modes by adding to the startup hooks, without +having to know the particular binding of @key{RET} in that mode!). +Similar considerations apply for using @key{M-RET} as @key{M-LFD}. As +@email{bwarsaw@@cnri.reston.va.us, Barry A. Warsaw} says in the +documentation for his @code{cc-mode}, ``This is a very common +question. @code{:-)} If you want this to be the default behavior, +don't lobby me, lobby RMS!'' + +The following variables can be used to customize Octave mode. + +@vtable @code +@item octave-blink-matching-block +Non-@code{nil} means show matching begin of block when inserting a space, +newline or @samp{;} after an else or end keyword. Default is @code{t}. +This is an extremely useful feature for automatically verifying that the +keywords match---if they don't, an error message is displayed. + +@item octave-block-offset +Extra indentation applied to statements in block structures. +Default is 2. + +@item octave-continuation-offset +Extra indentation applied to Octave continuation lines. +Default is 4. + +@item octave-font-lock-texinfo-comment +Highlight texinfo comment blocks. The default value is @code{t}. +@end vtable + +If Font Lock mode is enabled, Octave mode will display + +@itemize @bullet +@item +strings in @code{font-lock-string-face} + +@item +comments in @code{font-lock-comment-face} + +@item +the Octave reserved words (such as all block keywords) and the text +functions (such as @samp{cd} or @samp{who}) which are also reserved +using @code{font-lock-keyword-face} + +@item +the built-in operators (@samp{&&}, @samp{==}, @dots{}) using +@code{font-lock-reference-face} + +@item +and the function names in function declarations in +@code{font-lock-function-name-face}. + +@item +Function comments blocks in @code{octave-function-comment-block} +@end itemize + +@cindex Imenu Support +There is also rudimentary support for Imenu (@pxref{Imenu,,, emacs, +The GNU Emacs Manual}). Currently, function names can be indexed. + +@cindex ElDoc Mode Support +@vindex octave-eldoc-message-style +ElDoc mode (@pxref{Lisp Doc,,, emacs, The GNU Emacs Manual}) is +supported. By customizing @code{octave-eldoc-message-style} it can be +changed from displaying one or multi line hints. + +@c @cindex TAGS +@c @cindex Emacs TAGS files +@c @cindex @file{octave-tags} +@c You can generate TAGS files for Emacs from Octave @file{.m} files using +@c the shell script @file{octave-tags} that is installed alongside your copy of +@c Octave. +@c +@vindex octave-mode-hook +Customization of Octave mode can be performed by modification of the +variable @code{octave-mode-hook}. + +@node Running Octave from Within Emacs +@chapter Running Octave from Within Emacs +@cindex Inferior Octave Mode + +Octave mode provides commands for running an inferior +Octave process in a special Emacs buffer. Use +@lisp +M-x run-octave +@end lisp +@noindent +to directly start an inferior Octave process. + +@vindex inferior-octave-buffer +This will start Octave in a special buffer the name of which is +specified by the variable @code{inferior-octave-buffer} and defaults +to @file{*Inferior Octave*}. From within this buffer, you can +interact with the inferior Octave process `as usual', i.e., by +entering Octave commands at the prompt. The buffer is in Inferior +Octave mode, which is derived from the standard Comint mode, a major +mode for interacting with an inferior interpreter. See the +documentation for @code{comint-mode} for more details, and use +@kbd{C-h b} to find out about available special keybindings. + +You can also communicate with an inferior Octave process from within +files with Octave code (i.e., buffers in Octave mode), using the +following commands. + +@table @kbd +@item C-c C-i l +@kindex C-c C-i l +@findex octave-send-line +@vindex octave-send-line-auto-forward +Send the current line to the inferior Octave process +(@code{octave-send-line}). With positive prefix argument @var{n}, +send that many lines. If @code{octave-send-line-auto-forward} is +non-@code{nil}, go to the next unsent code line. + +@item C-c C-i b +@kindex C-c C-i b +@findex octave-send-block +Send the current block to the inferior Octave process +(@code{octave-send-block}). + +@item C-c C-i f +@kindex C-c C-i f +@findex octave-send-defun +Send the current function to the inferior Octave process +(@code{octave-send-defun}). + +@item C-c C-i r +@kindex C-c C-i r +@findex octave-send-region +Send the region to the inferior Octave process +(@code{octave-send-region}). + +@item C-c C-i a +@kindex C-c C-i a +@findex octave-send-buffer +Send the entire buffer to the inferior Octave process +(@code{octave-send-buffer}). If the buffer is associated with a file +then sourcing the buffer by using @kbd{C-c C-l} +(@code{octave-source-file}) should be preferred. + +@item C-c C-i s +@kindex C-c C-i s +@findex octave-show-process-buffer +Make sure that `inferior-octave-buffer' is displayed +(@code{octave-show-process-buffer}). + +@item C-c C-i q +@kindex C-c C-i q +@findex octave-hide-process-buffer +Delete all windows that display the inferior Octave buffer +(@code{octave-hide-process-buffer}). + +@item C-c C-i k +@kindex C-c C-i k +@findex octave-kill-process +Kill the inferior Octave process and its buffer +(@code{octave-kill-process}). + +@item C-c C-l +@kindex C-c C-l +@findex octave-source-file +Parse and execute the current file in the inferior Octave buffer +(@code{octave-source-file}). This is done using Octave's +@code{source} function. + +@item M-. +@kindex M-. +@findex octave-find-definition +@vindex octave-source-directories +Find the definition of a function or variable. Functions implemented +in C++ can be found if variable @code{octave-source-directories} is +set correctly (@code{octave-find-definition}). + +@item C-h d +@kindex C-h d +@findex octave-help +@vindex octave-help-buffer +Display the documentation for function (@code{octave-help}). The +buffer name can be changed by customizing @code{octave-help-buffer}. + +@item C-h a +@kindex C-h a +@findex octave-lookfor +Search for a given string in all the first sentence of function help +strings (@code{octave-lookfor}). With a @code{universal-argument} the +entire help string is searched. + +@end table + +The effect of the commands which send code to the Octave process can be +customized by the following variables. + +@vtable @code +@item octave-send-echo-input +Non-@code{nil} means echo input sent to the inferior Octave process. +Default is @code{t}. + +@item octave-send-show-buffer +Non-@code{nil} means display the buffer running the Octave process after +sending a command (but without selecting it). +Default is @code{t}. +@end vtable + +If you send code and there is no inferior Octave process yet, it will +be started automatically. + +@vindex inferior-octave-startup-args +The startup of the inferior Octave process is highly customizable. +The variable @code{inferior-octave-startup-args} can be used for +specifying command lines arguments to be passed to Octave on startup +as a list of strings. For example, to suppress the startup message +and use `traditional' mode, set this to @code{("-q" "--traditional")}. +You can also specify a startup file of Octave commands to be loaded on +startup; note that these commands will not produce any visible output +in the process buffer. Which file to use is controlled by the +variable @code{inferior-octave-startup-file}. The default is +@file{~/.emacs-octave} or if this file is not found +@file{~/.emacs.d/init_octave.m}. + +@vindex inferior-octave-prompt-read-only +By customizing @code{inferior-octave-prompt-read-only} the prompt can +be changed to be read only. The default value is the same as +@code{comint-prompt-read-only}. + +@vindex inferior-octave-mode-hook +And finally, @code{inferior-octave-mode-hook} is run after starting +the process and putting its buffer into Inferior Octave mode. Hence, +if you like the up and down arrow keys to behave in the interaction +buffer as in the shell, and you want this buffer to use nice colors, +add +@lisp +(add-hook 'inferior-octave-mode-hook + (lambda () + (define-key inferior-octave-mode-map [up] + 'comint-previous-input) + (define-key inferior-octave-mode-map [down] + 'comint-next-input))) +@end lisp +@noindent +to your @file{.emacs} or @file{init.el} file. You could also swap the +roles of @kbd{C-a} (@code{beginning-of-line}) and @code{C-c C-a} +(@code{comint-bol}) using this hook. + +@vindex inferior-octave-prompt +@quotation +@strong{Note} that if you set your Octave prompts to something different +from the defaults, make sure that @code{inferior-octave-prompt} matches +them. Otherwise, @emph{nothing} will work, because Emacs will not know +when Octave is waiting for input, or done sending output. +@end quotation + +@node GNU Free Documentation License +@chapter GNU Free Documentation License +@include doclicense.texi + +@node Key Index +@unnumbered Key Index + +@printindex ky + +@node Variable Index +@unnumbered Variable Index + +@printindex vr + +@node Lisp Function Index +@unnumbered Function Index + +@printindex fn + +@node Concept Index +@unnumbered Concept Index + +@printindex cp + + +@bye + +@c TODO Update + +@c @node Using the Emacs Info Reader for Octave +@c @chapter Using the Emacs Info Reader for Octave + +@c You may also use the Emacs Info reader with Octave's @code{doc} function. + +@c If @file{gnuserv} is installed, add the lines +@c @lisp +@c (autoload 'octave-help "octave-hlp" nil t) +@c (require 'gnuserv) +@c (gnuserv-start) +@c @end lisp +@c @noindent +@c to your @file{.emacs} file. + +@c You can use either `plain' Emacs Info or the function @code{octave-help} +@c as your Octave info reader (for @samp{help -i}). In the former case, +@c use @code{info_program ("info-emacs-info")}. +@c The latter is perhaps more attractive because it allows to look up keys +@c in the indices of @emph{several} info files related to Octave (provided +@c that the Emacs variable @code{octave-help-files} is set correctly). In +@c this case, use @code{info_program ("info-emacs-octave-help")}. + +@c If you use Octave from within Emacs, it is best to add these settings to +@c your @file{~/.emacs-octave} startup file (or the file pointed to by the +@c Emacs variable @code{inferior-octave-startup-file}). |