GNU bug report logs - #1407
octave end keyword bug

Previous Next

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.

Full log


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




This bug report was last modified 15 years and 131 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.