# HG changeset patch # User jwe # Date 1110863235 0 # Node ID 2a44a667da0294fecd03f9a8cd16a962beae2e4d # Parent dbeafbc0ff64e0aad4f04636a242d5ef6894c3fe [project @ 2005-03-15 05:07:15 by jwe] diff --git a/ChangeLog b/ChangeLog --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,14 @@ +2005-03-15 John W. Eaton + + * emacs/octave-inf.el, emacs/octave-mod.el, emacs/octave-hlp.el: + Import changes from Emacs. + +2005-03-14 Rafael Laboissiere + + * emacs/octave-mod.el (octave-end-keywords): Omit "end" from the list. + (octave-reserved-words): Include "end" here. + (octve-block-match-alist): Don't include "end" here. + 2005-03-14 John W. Eaton * configure.in: Check for umfpack/umfpack.h instead of just umfpack.h. diff --git a/emacs/octave-hlp.el b/emacs/octave-hlp.el --- a/emacs/octave-hlp.el +++ b/emacs/octave-hlp.el @@ -80,7 +80,7 @@ The files specified by `octave-help-files' are searched." (if octave-help-lookup-alist () - (message "Building help lookup alist...") + (message "Building help lookup alist...") (let ((files octave-help-files) file key node) (save-window-excursion (while files @@ -127,7 +127,7 @@ (add-to-list 'octave-help-completion-alist (cons (car entry) (car entry))) (setq alist (cdr alist)))) - (message "Building help completion alist...done")) + (message "Building help completion alist...done")) octave-help-completion-alist) ;;; provide ourself diff --git a/emacs/octave-inf.el b/emacs/octave-inf.el --- a/emacs/octave-inf.el +++ b/emacs/octave-inf.el @@ -24,6 +24,8 @@ ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, ;; Boston, MA 02111-1307, USA. +;;; Commentary: + ;;; Code: (require 'octave-mod) @@ -93,6 +95,17 @@ ;; Could certainly do more font locking in inferior Octave ... "Additional expressions to highlight in Inferior Octave mode.") + +;;; Compatibility functions +(if (not (fboundp 'comint-line-beginning-position)) + ;; comint-line-beginning-position is defined in Emacs 21 + (defun comint-line-beginning-position () + "Returns the buffer position of the beginning of the line, after any prompt. +The prompt is assumed to be any text at the beginning of the line matching +the regular expression `comint-prompt-regexp', a buffer local variable." + (save-excursion (comint-bol nil) (point)))) + + (defvar inferior-octave-output-list nil) (defvar inferior-octave-output-string nil) (defvar inferior-octave-receive-in-progress nil) @@ -103,7 +116,7 @@ "Non-nil means that `inferior-octave-complete' is impossible.") (defvar inferior-octave-dynamic-complete-functions - '(inferior-octave-complete comint-dynamic-complete-filename) + '(inferior-octave-complete comint-dynamic-complete-filename) "List of functions called to perform completion for inferior Octave. This variable is used to initialize `comint-dynamic-complete-functions' in the Inferior Octave buffer.") @@ -125,12 +138,12 @@ (use-local-map inferior-octave-mode-map) (set-syntax-table inferior-octave-mode-syntax-table) - (make-local-variable 'comment-start) + (make-local-variable 'comment-start) (setq comment-start octave-comment-start) (make-local-variable 'comment-end) (setq comment-end "") (make-local-variable 'comment-column) - (setq comment-column 32) + (setq comment-column 32) (make-local-variable 'comment-start-skip) (setq comment-start-skip octave-comment-start-skip) @@ -214,7 +227,7 @@ (setq commands (list "page_screen_output = 0;\n" (if (not (string-equal - inferior-octave-output-string ">> ")) + inferior-octave-output-string ">> ")) "PS1=\"\\\\s> \";\n") (if (file-exists-p file) (format "source (\"%s\");\n" file)))) @@ -243,11 +256,10 @@ is NOT available with versions of Octave prior to 2.0." (interactive) (let* ((end (point)) - (command (save-excursion - (skip-syntax-backward "w_") - (and (looking-at comint-prompt-regexp) - (goto-char (match-end 0))) - (buffer-substring-no-properties (point) end))) + (command + (save-excursion + (skip-syntax-backward "w_" (comint-line-beginning-position)) + (buffer-substring-no-properties (point) end))) (proc (get-buffer-process inferior-octave-buffer)) (filter (process-filter proc))) (cond (inferior-octave-complete-impossible diff --git a/emacs/octave-mod.el b/emacs/octave-mod.el --- a/emacs/octave-mod.el +++ b/emacs/octave-mod.el @@ -1,6 +1,6 @@ ;;; octave-mod.el --- editing Octave source files under Emacs -;; Copyright (C) 1997 Free Software Foundation, Inc. +;; Copyright (C) 1997, 2003 Free Software Foundation, Inc. ;; Author: Kurt Hornik ;; Author: John Eaton @@ -51,46 +51,45 @@ (defvar inferior-octave-receive-in-progress nil) (defconst octave-maintainer-address - "Kurt Hornik , bug-gnu-emacs@gnu.org" + "Kurt Hornik , bug-gnu-emacs@gnu.org" "Current maintainer of the Emacs Octave package.") (defvar octave-abbrev-table nil "Abbrev table for Octave's reserved words. -Used in octave-mode and inferior-octave-mode buffers. +Used in `octave-mode' and inferior-octave-mode buffers. All Octave abbrevs start with a grave accent (`).") -(if octave-abbrev-table - () +(unless octave-abbrev-table (let ((ac abbrevs-changed)) (define-abbrev-table 'octave-abbrev-table ()) - (define-abbrev octave-abbrev-table "`a" "all_va_args" nil) - (define-abbrev octave-abbrev-table "`b" "break" nil) - (define-abbrev octave-abbrev-table "`cs" "case" nil) - (define-abbrev octave-abbrev-table "`ca" "catch" nil) - (define-abbrev octave-abbrev-table "`c" "continue" nil) - (define-abbrev octave-abbrev-table "`el" "else" nil) - (define-abbrev octave-abbrev-table "`eli" "elseif" nil) - (define-abbrev octave-abbrev-table "`et" "end_try_catch" nil) - (define-abbrev octave-abbrev-table "`eu" "end_unwind_protect" nil) - (define-abbrev octave-abbrev-table "`ef" "endfor" nil) - (define-abbrev octave-abbrev-table "`efu" "endfunction" nil) - (define-abbrev octave-abbrev-table "`ei" "endif" nil) - (define-abbrev octave-abbrev-table "`es" "endswitch" nil) - (define-abbrev octave-abbrev-table "`ew" "endwhile" nil) - (define-abbrev octave-abbrev-table "`f" "for" nil) - (define-abbrev octave-abbrev-table "`fu" "function" nil) - (define-abbrev octave-abbrev-table "`gl" "global" nil) - (define-abbrev octave-abbrev-table "`gp" "gplot" nil) - (define-abbrev octave-abbrev-table "`gs" "gsplot" nil) - (define-abbrev octave-abbrev-table "`if" "if ()" nil) - (define-abbrev octave-abbrev-table "`o" "otherwise" nil) - (define-abbrev octave-abbrev-table "`rp" "replot" nil) - (define-abbrev octave-abbrev-table "`r" "return" nil) - (define-abbrev octave-abbrev-table "`s" "switch" nil) - (define-abbrev octave-abbrev-table "`t" "try" nil) - (define-abbrev octave-abbrev-table "`u" "until ()" nil) - (define-abbrev octave-abbrev-table "`up" "unwind_protect" nil) - (define-abbrev octave-abbrev-table "`upc" "unwind_protect_cleanup" nil) - (define-abbrev octave-abbrev-table "`w" "while ()" nil) + (define-abbrev octave-abbrev-table "`a" "all_va_args" nil 0 t) + (define-abbrev octave-abbrev-table "`b" "break" nil 0 t) + (define-abbrev octave-abbrev-table "`cs" "case" nil 0 t) + (define-abbrev octave-abbrev-table "`ca" "catch" nil 0 t) + (define-abbrev octave-abbrev-table "`c" "continue" nil 0 t) + (define-abbrev octave-abbrev-table "`el" "else" nil 0 t) + (define-abbrev octave-abbrev-table "`eli" "elseif" nil 0 t) + (define-abbrev octave-abbrev-table "`et" "end_try_catch" nil 0 t) + (define-abbrev octave-abbrev-table "`eu" "end_unwind_protect" nil 0 t) + (define-abbrev octave-abbrev-table "`ef" "endfor" nil 0 t) + (define-abbrev octave-abbrev-table "`efu" "endfunction" nil 0 t) + (define-abbrev octave-abbrev-table "`ei" "endif" nil 0 t) + (define-abbrev octave-abbrev-table "`es" "endswitch" nil 0 t) + (define-abbrev octave-abbrev-table "`ew" "endwhile" nil 0 t) + (define-abbrev octave-abbrev-table "`f" "for" nil 0 t) + (define-abbrev octave-abbrev-table "`fu" "function" nil 0 t) + (define-abbrev octave-abbrev-table "`gl" "global" nil 0 t) + (define-abbrev octave-abbrev-table "`gp" "gplot" nil 0 t) + (define-abbrev octave-abbrev-table "`gs" "gsplot" nil 0 t) + (define-abbrev octave-abbrev-table "`if" "if ()" nil 0 t) + (define-abbrev octave-abbrev-table "`o" "otherwise" nil 0 t) + (define-abbrev octave-abbrev-table "`rp" "replot" nil 0 t) + (define-abbrev octave-abbrev-table "`r" "return" nil 0 t) + (define-abbrev octave-abbrev-table "`s" "switch" nil 0 t) + (define-abbrev octave-abbrev-table "`t" "try" nil 0 t) + (define-abbrev octave-abbrev-table "`u" "until ()" nil 0 t) + (define-abbrev octave-abbrev-table "`up" "unwind_protect" nil 0 t) + (define-abbrev octave-abbrev-table "`upc" "unwind_protect_cleanup" nil 0 t) + (define-abbrev octave-abbrev-table "`w" "while ()" nil 0 t) (setq abbrevs-changed ac))) (defvar octave-comment-char ?# @@ -105,15 +104,18 @@ '("do" "for" "function" "if" "switch" "try" "unwind_protect" "while")) (defvar octave-else-keywords '("case" "catch" "else" "elseif" "otherwise" "unwind_protect_cleanup")) +;; Only use specific "end" tokens here to avoid confusion when "end" +;; is used in indexing (the real fix is much more complex, and is +;; probably not worth the effort). (defvar octave-end-keywords - '("end" "endfor" "endfunction" "endif" "endswitch" "end_try_catch" + '("endfor" "endfunction" "endif" "endswitch" "end_try_catch" "end_unwind_protect" "endwhile" "until")) (defvar octave-reserved-words (append octave-begin-keywords octave-else-keywords octave-end-keywords - '("all_va_args" "break" "continue" "global" "gplot" "gsplot" + '("all_va_args" "break" "continue" "end" "global" "gplot" "gsplot" "replot" "return")) "Reserved words in Octave.") @@ -212,19 +214,19 @@ (define-key map "\n" 'octave-reindent-then-newline-and-indent) (define-key map "\t" 'indent-according-to-mode) (define-key map "\e;" 'octave-indent-for-comment) - (define-key map "\e\n" 'octave-indent-new-comment-line) + (define-key map "\e\n" 'octave-indent-new-comment-line) (define-key map "\e\t" 'octave-complete-symbol) (define-key map "\M-\C-a" 'octave-beginning-of-defun) (define-key map "\M-\C-e" 'octave-end-of-defun) (define-key map "\M-\C-h" 'octave-mark-defun) - (define-key map "\M-\C-q" 'octave-indent-defun) + (define-key map "\M-\C-q" 'octave-indent-defun) (define-key map "\C-c;" 'octave-comment-region) - (define-key map "\C-c:" 'octave-uncomment-region) + (define-key map "\C-c:" 'octave-uncomment-region) (define-key map "\C-c\C-b" 'octave-submit-bug-report) (define-key map "\C-c\C-p" 'octave-previous-code-line) (define-key map "\C-c\C-n" 'octave-next-code-line) (define-key map "\C-c\C-a" 'octave-beginning-of-line) - (define-key map "\C-c\C-e" 'octave-end-of-line) + (define-key map "\C-c\C-e" 'octave-end-of-line) (define-key map "\C-c\M-\C-n" 'octave-forward-block) (define-key map "\C-c\M-\C-p" 'octave-backward-block) (define-key map "\C-c\M-\C-u" 'octave-backward-up-block) @@ -236,14 +238,14 @@ (define-key map "\C-c\C-il" 'octave-send-line) (define-key map "\C-c\C-ib" 'octave-send-block) (define-key map "\C-c\C-if" 'octave-send-defun) - (define-key map "\C-c\C-ir" 'octave-send-region) + (define-key map "\C-c\C-ir" 'octave-send-region) (define-key map "\C-c\C-is" 'octave-show-process-buffer) (define-key map "\C-c\C-ih" 'octave-hide-process-buffer) (define-key map "\C-c\C-ik" 'octave-kill-process) (define-key map "\C-c\C-i\C-l" 'octave-send-line) (define-key map "\C-c\C-i\C-b" 'octave-send-block) (define-key map "\C-c\C-i\C-f" 'octave-send-defun) - (define-key map "\C-c\C-i\C-r" 'octave-send-region) + (define-key map "\C-c\C-i\C-r" 'octave-send-region) (define-key map "\C-c\C-i\C-s" 'octave-show-process-buffer) (define-key map "\C-c\C-i\C-h" 'octave-hide-process-buffer) (define-key map "\C-c\C-i\C-k" 'octave-kill-process) @@ -354,16 +356,19 @@ (concat octave-block-begin-regexp "\\|" octave-block-end-regexp)) (defvar octave-block-else-or-end-regexp (concat octave-block-else-regexp "\\|" octave-block-end-regexp)) +;; Only use specific "end" tokens here to avoid confusion when "end" +;; is used in indexing (the real fix is much more complex, and is +;; probably not worth the effort). (defvar octave-block-match-alist '(("do" . ("until")) - ("for" . ("end" "endfor")) - ("function" . ("end" "endfunction")) - ("if" . ("else" "elseif" "end" "endif")) - ("switch" . ("case" "otherwise" "end" "endswitch")) - ("try" . ("catch" "end" "end_try_catch")) - ("unwind_protect" . ("unwind_protect_cleanup" "end" + ("for" . ("endfor")) + ("function" . ("endfunction")) + ("if" . ("else" "elseif" "endif")) + ("switch" . ("case" "otherwise" "endswitch")) + ("try" . ("catch" "end_try_catch")) + ("unwind_protect" . ("unwind_protect_cleanup" "end_unwind_protect")) - ("while" . ("end" "endwhile"))) + ("while" . ("endwhile"))) "Alist with Octave's matching block keywords. Has Octave's begin keywords as keys and a list of the matching else or end keywords as associated values.") @@ -387,7 +392,7 @@ "Alist of Octave symbols for completion in Octave mode. Each element looks like (VAR . VAR), where the car and cdr are the same symbol (an Octave command or variable name). -Currently, only builtin variables can be completed.") +Currently, only builtin variables can be completed.") (defvar octave-mode-imenu-generic-expression (list @@ -396,7 +401,7 @@ "Imenu expression for Octave mode. See `imenu-generic-expression'.") (defcustom octave-mode-startup-message t - "*Nil means do not display the Octave mode startup message." + "*nil means do not display the Octave mode startup message." :type 'boolean :group 'octave) @@ -474,7 +479,7 @@ Default is a backslash. octave-mode-startup-message - Nil means do not display the Octave mode startup message. + nil means do not display the Octave mode startup message. Default is t. octave-send-echo-input @@ -520,16 +525,16 @@ (setq mode-name "Octave") (setq local-abbrev-table octave-abbrev-table) (set-syntax-table octave-mode-syntax-table) - + (make-local-variable 'indent-line-function) (setq indent-line-function 'octave-indent-line) - (make-local-variable 'comment-start) + (make-local-variable 'comment-start) (setq comment-start octave-comment-start) (make-local-variable 'comment-end) (setq comment-end "") (make-local-variable 'comment-column) - (setq comment-column 32) + (setq comment-column 32) (make-local-variable 'comment-start-skip) (setq comment-start-skip "\\s<+\\s-*") (make-local-variable 'comment-indent-function) @@ -643,7 +648,7 @@ (interactive "r\nP") (let ((comment-start (char-to-string octave-comment-char))) (comment-region beg end arg))) - + (defun octave-uncomment-region (beg end &optional arg) "Uncomment each line in the region as Octave code." (interactive "r\nP") @@ -739,8 +744,8 @@ (defun octave-indent-for-comment () "Maybe insert and indent an Octave comment. If there is no comment already on this line, create a code-level comment -(started by two comment characters) if the line is empty, or an in-line -comment (started by one comment character) otherwise. +\(started by two comment characters) if the line is empty, or an in-line +comment (started by one comment character) otherwise. Point is left after the start of the comment which is properly aligned." (interactive) (indent-for-comment) @@ -766,8 +771,8 @@ (defun octave-indent-new-comment-line () "Break Octave line at point, continuing comment if within one. If within code, insert `octave-continuation-string' before breaking the -line. If within a string, signal an error. -The new line is properly indented." +line. If within a string, signal an error. +The new line is properly indented." (interactive) (delete-horizontal-space) (cond @@ -807,7 +812,7 @@ (setq n (forward-line inc))) (setq arg (- arg inc))) n)) - + (defun octave-previous-code-line (&optional arg) "Move ARG lines of Octave code backward (forward if ARG is negative). Skips past all empty and comment lines. Default for ARG is 1. @@ -862,7 +867,7 @@ (looking-at octave-continuation-regexp))) (zerop (forward-line 1))))) (end-of-line))) - + (defun octave-scan-blocks (from count depth) "Scan from character number FROM by COUNT Octave begin-end blocks. Returns the character number of the position thus found. @@ -1067,7 +1072,7 @@ (interactive "p") (or arg (setq arg 1)) (and (< arg 0) (skip-syntax-backward "w")) - (and (> arg 0) (skip-syntax-forward "w")) + (and (> arg 0) (skip-syntax-forward "w")) (if (octave-in-defun-p) (setq arg (- arg 1))) (if (= arg 0) (setq arg -1)) @@ -1090,7 +1095,7 @@ (exchange-point-and-mark)) (goto-char pos) (message "No function to mark found")))) - + ;;; Filling (defun octave-auto-fill () @@ -1100,7 +1105,7 @@ (let (fc give-up) (if (or (null (setq fc (current-fill-column))) (save-excursion - (beginning-of-line) + (beginning-of-line) (and auto-fill-inhibit-regexp (looking-at auto-fill-inhibit-regexp)))) nil ; Can't do anything @@ -1157,7 +1162,7 @@ (defun octave-fill-paragraph (&optional arg) "Fill paragraph of Octave code, handling Octave comments." (interactive "P") - (save-excursion + (save-excursion (let ((end (progn (forward-paragraph) (point))) (beg (progn (forward-paragraph -1) @@ -1189,7 +1194,7 @@ (beginning-of-line) (looking-at "^\\s-*\\s<+\\s-*$")))) ;; This is a nonempty comment line which does not extend - ;; past the fill column. If it is followed by an nonempty + ;; past the fill column. If it is followed by a nonempty ;; comment line with the same comment prefix, try to ;; combine them, and repeat this until either we reach the ;; fill-column or there is nothing more to combine. @@ -1262,7 +1267,7 @@ (let ((list (all-completions string octave-completion-alist)) (conf (current-window-configuration))) ;; Taken from comint.el - (message "Making completion list...") + (message "Making completion list...") (with-output-to-temp-buffer "*Completions*" (display-completion-list list)) (message "Hit space to flush") @@ -1283,7 +1288,7 @@ (set-window-configuration conf) (setq unread-command-events (listify-key-sequence key)))))))))) - + ;;; Electric characters && friends (defun octave-reindent-then-newline-and-indent () @@ -1382,21 +1387,21 @@ (indent-according-to-mode) (newline 2) (insert prefix "usage: " string) - (reindent-then-newline-and-indent) + (reindent-then-newline-and-indent) (insert prefix) - (reindent-then-newline-and-indent) + (reindent-then-newline-and-indent) (insert prefix) (indent-according-to-mode) (save-excursion (newline 2) (insert "endfunction") (indent-according-to-mode)))) - + ;;; Menu (defun octave-add-octave-menu () "Adds the `Octave' menu to the menu bar in Octave mode." - (require 'easymenu) + (require 'easymenu) (easy-menu-define octave-mode-menu-map octave-mode-map "Menu keymap for Octave mode." octave-mode-menu) (easy-menu-add octave-mode-menu-map octave-mode-map)) @@ -1430,7 +1435,7 @@ (defun octave-send-region (beg end) "Send current region to the inferior Octave process." (interactive "r") - (inferior-octave t) + (inferior-octave t) (let ((proc inferior-octave-process) (string (buffer-substring-no-properties beg end)) line) @@ -1458,7 +1463,7 @@ (display-buffer inferior-octave-buffer))) (defun octave-send-block () - "Send current Octave block to the inferior Octave process." + "Send current Octave block to the inferior Octave process." (interactive) (save-excursion (octave-mark-block) @@ -1497,7 +1502,7 @@ (print-escape-newlines nil) (opoint (point))) (terpri) - (prin1 + (prin1 (save-excursion (forward-sexp -1) (inferior-octave-send-list-and-digest