123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447 |
- \input texinfo @c -*-texinfo-*-
- @c %**start of header
- @setfilename ../../info/octave-mode.info
- @settitle Octave Mode
- @include docstyle.texi
- @c %**end of header
- @copying
- Copyright @copyright{} 1996--2017 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
- 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 @code{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 you 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}).
|