Package: emacs;
Reported by: "Daniel Elliott" <danelliottster <at> gmail.com>
Date: Sat, 22 Nov 2008 00:05:06 UTC
Severity: normal
Merged with 3061
Done: Chong Yidong <cyd <at> stupidchicken.com>
Bug is archived. No further changes may be made.
View this message in rfc822 format
From: dan <danelliottster <at> gmail.com> To: 1407-quiet <at> debbugs.gnu.org Subject: bug#1407: end keyword bug Date: Tue, 16 Dec 2008 14:10:03 -0800 (PST)
Hello. Here is my suggested fix for this problem. It has the negative aspect of identifying all end keywords between parens as not block-ending keywords. However, I doubt that is a problem. I've used this for a couple days and everything seems fine. I'm also not certain if we can add end as a valid keyword for things in the octave-block-match-alist. - dan elliott --- octave-mod.bak.el 2008-12-16 14:35:14.000000000 -0700 +++ octave-mod.el 2008-12-16 14:45:53.000000000 -0700 @@ -101,11 +101,9 @@ '("do" "for" "function" "if" "switch" "try" "unwind_protect" "while")) (defvar octave-else-keywords '("case" "catch" "else" "elseif" "otherwise" "unwind_protect_cleanup")) -;; FIXME: only use specific "end" tokens here to avoid confusion when "end" -;; is used in indexing (the real fix is much more complex). (defvar octave-end-keywords '("endfor" "endfunction" "endif" "endswitch" "end_try_catch" - "end_unwind_protect" "endwhile" "until")) + "end_unwind_protect" "endwhile" "until" "end")) (defvar octave-reserved-words (append octave-begin-keywords @@ -346,13 +344,13 @@ ;; is used in indexing (the real fix is much more complex). (defvar octave-block-match-alist '(("do" . ("until")) - ("for" . ("endfor")) + ("for" . ("endfor" "end")) ("function" . ("endfunction")) - ("if" . ("else" "elseif" "endif")) - ("switch" . ("case" "otherwise" "endswitch")) + ("if" . ("else" "elseif" "endif" "end")) + ("switch" . ("case" "otherwise" "endswitch" "end")) ("try" . ("catch" "end_try_catch")) ("unwind_protect" . ("unwind_protect_cleanup" "end_unwind_protect")) - ("while" . ("endwhile"))) + ("while" . ("endwhile" "end"))) "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.") @@ -680,7 +678,8 @@ (if (= bot (point)) (setq icol (+ icol octave-block-offset)))) ((octave-looking-at-kw octave-block-end-regexp) - (if (not (= bot (point))) + (if (and (not (= bot (point))) + (not (octave-end-as-array-index- p))) ;special case for end keyword but is applied to all keywords (setq icol (- icol (octave-block-end- offset))))))) (forward-char))) @@ -1525,3 +1524,14 @@ ;; arch-tag: 05f1ce09-be87-4c00-803e-4919ffa26c23 ;;; octave-mod.el ends here + + +;; TODO: this should probably also make sure we are actually looking at and "end" keyword +(defun octave-end-as-array-index-p () + "pos is the position of the end keyword (end 'e', 'n', or 'd')" + (save-excursion + (condition-case nil ;test if point is between parens + (progn + (up-list 1) + t) + (error nil)))) On Dec 10, 10:12 am, "Daniel Elliott" <danelliotts...@gmail.com> wrote: > I would say that this is definately not fixed. Now the octave mode no > longer considers end to be a valid keyword to end blocks like if, > while, for, etc. Octave mode should allow end to close these things > in the same way that it uses endif, endwhile, and endfor respectively. > > Thanks. > > - dan > > On Mon, Nov 24, 2008 at 1:55 AM, Emacs bug Tracking System > > <d...@donarmstrong.com> wrote: > > > This is an automatic notification regarding your bug report > > which was filed against the emacs,octave package: > > > #1407: end keyword bug > > > It has been closed by Glenn Morris <r...@gnu.org>. > > > Their explanation is attached below along with your original report. > > If this explanation is unsatisfactory and you have not received a > > better one in a separate message then please contact Glenn Morris <r...@gnu.org> by > > replying to this email. > > > -- > > 1407:http://debbugs.gnu.org/cgi/bugreport.cgi?bug=1407 > > Emacs Bug Tracking System > > Contact d...@donarmstrong.com with problems > > > ---------- Forwarded message ---------- > > From: Glenn Morris <r...@gnu.org> > > To: Juanma Barranquero <lek...@gmail.com> > > Date: Mon, 24 Nov 2008 02:45:00 -0500 > > Subject: Re: bug#1407: end keyword bug > > "Juanma Barranquero" wrote: > > >> Does this problem still happen with the latest Emacs code from the > >> CVS? Apparently it was fixed some time ago. > > > My mistake; I forwarded what I thought was an old unanswered bug, but > > you are right, it is fixed. (I was thinking it was about font-lock > > rather than indentation.) > > > ---------- Forwarded message ---------- > > From: "Daniel Elliott" <danelliotts...@gmail.com> > > To: qu...@emacsbugs.donarmstrong.com > > Date: Fri, 26 Oct 2007 02:35:06 +0000 > > Subject: end keyword bug > > Package: emacs,octave > > > [ resent from > > http://lists.gnu.org/archive/html/bug-gnu-emacs/2007-10/msg00166.html] > > > Hello, > > > Thank you for your work on the emacs octave-mode! > > > Has the incorrect indentation when the end keyword is used as an array > > index been fixed? Currently, any use of end other than to close a > > loop or conditional block confuses the indentation of octave-mode. > > > Example: > > > for c=1:C > > Lambda(lastGood_Lambda(c)+1:end,c) = sigma;D_c(c) = M; > > endfor > > > The octave-mode thinks that the end used as an array index is the end > > for the for loop. > > > If this has been fixed, where should I download the latest, fixed, > > stable version? > > > Thank you, > > > dan elliott
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.