unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
From: dan <danelliottster@gmail.com>
To: bug-gnu-emacs@gnu.org
Subject: Re: bug#1407: closed by Glenn Morris <rgm@gnu.org> (Re: bug#1407: end keyword bug)
Date: Tue, 16 Dec 2008 14:10:03 -0800 (PST)	[thread overview]
Message-ID: <5057621a-fec3-463d-a406-9bcfd494f7c3@d42g2000prb.googlegroups.com> (raw)
In-Reply-To: mailman.2459.1228926262.26697.bug-gnu-emacs@gnu.org

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://emacsbugs.donarmstrong.com/cgi-bin/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



  parent reply	other threads:[~2008-12-16 22:10 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <m163mdefer.fsf@fencepost.gnu.org>
     [not found] ` <mqzljszlb4.fsf@fencepost.gnu.org>
2008-11-24  7:55   ` bug#1407: marked as done (end keyword bug) Emacs bug Tracking System
     [not found]   ` <handler.1407.D1407.122751271831930.notifdone@emacsbugs.donarmstrong.com>
2008-12-10 16:12     ` bug#1407: closed by Glenn Morris <rgm@gnu.org> (Re: bug#1407: end " Daniel Elliott
     [not found]     ` <mailman.2459.1228926262.26697.bug-gnu-emacs@gnu.org>
2008-12-16 22:10       ` dan [this message]
2009-04-19 11:15   ` bug#1407: marked as done (end " Emacs bug Tracking System
2009-04-20 18:00   ` Emacs bug Tracking System

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=5057621a-fec3-463d-a406-9bcfd494f7c3@d42g2000prb.googlegroups.com \
    --to=danelliottster@gmail.com \
    --cc=bug-gnu-emacs@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).