all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: "Eric M. Ludlam" <eric@siege-engine.com>
To: Stefan Monnier <monnier@iro.umontreal.ca>
Cc: emacs-devel@gnu.org, Andreas Roehler <andreas.roehler@online.de>,
	XEmacs-Beta@xemacs.org
Subject: Re: simplifying beginning-of-defun
Date: Sun, 27 Sep 2009 22:04:48 -0400	[thread overview]
Message-ID: <1254103488.6168.152.camel@projectile.siege-engine.com> (raw)
In-Reply-To: <jwvab0gau17.fsf-monnier+emacs@gnu.org>

On Sun, 2009-09-27 at 18:52 -0400, Stefan Monnier wrote:

> 
> > I think there are these variants:
> 
> > * A program wants the default behavior
> > * A major mode wants to change the interactive form
> > * A program wants use the major-mode behavior
> > * A third tool (ie - cedet) wants to change the interactive forms
> >   without breaking the above three, and without modifying the global map
> 
> I can't think of a reason why #3 wouldn't want to be affected by #4.
> Note that for #2, it's not just the interactive form, since it also
> affects #3 (e.g. mark-defun, send-defun-to-inferior-process, younameit,
> ...).

Hmmm.  A dilemma.  Given this C code:

int
main()
{
  return 0;
}

The original beginning-of-defun stops at the {.  (ie, if you unset
beginning-of-defun-function).

The c variant knows to stop at the i in int.
CEDET also knows to stop at the i in int.

In effect, cc-mode, and CEDET agree.  It doesn't matter who takes over
beginning-of-defun duty.

In this C++ example:


namespace foo {

  int myfcn() {
    return 1;
  }

}

If the cursor is on the "return", beginning-of-defun-raw gets completely
lost, cc-mode jumps to namespace, and CEDET jumps to the i in int.

For the range of interactive fcns you mentioned above, when used
interactively, the CEDET behavior is preferred.  Within cc-mode, it
likely needs to land on the namespace line because that is what it
historically has done.  The base behavior, of course, is not really
desirable.  Sure, a user could re-indent their code, but that is not
always an option.

Of course, perhaps I am wrong in thinking that stopping on 'int' is
preferred, but I do know it is preferred by me.  Would this make the
CEDET behavior as found in 'senator' completely new in some way?


> > I think of CEDET as being able to 'glitz' up functions like
> > beginning-of-defun by making them accurate.  Programs that actually want
> > to use CEDET to get the more accurate behavior will not use
> > 'beginning-of-defun' at all.
> 
> What about programs that want to use CEDET but that also want to work
> when CEDET is not available?  They would most likely want to use
> beginning-of-defun.

I had not contemplated this in the context of beginning-of-defun.
Ideally they would not need some if statement to deal with the issue.
Of course, the need here would be pretty basic stuff too if it was
robust to the actual landing place being different for different
situations, sort of the way narrow-to-defun might not care exactly where
it lands, so long as it goes somewhere.

Eric




  reply	other threads:[~2009-09-28  2:04 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-09-26 17:52 simplifying beginning-of-defun Andreas Roehler
2009-09-26 21:44 ` Stefan Monnier
2009-09-27  8:10   ` Andreas Roehler
2009-09-27 18:40     ` Stefan Monnier
2009-09-28  6:50       ` Andreas Roehler
2009-09-28 22:46         ` Stefan Monnier
2009-09-29  6:53           ` Andreas Roehler
2009-09-29  8:29           ` Andreas Roehler
2009-09-27 10:26   ` Andreas Roehler
2009-09-27 11:17     ` Eric M. Ludlam
2009-09-27 18:53       ` Stefan Monnier
2009-09-27 20:07         ` Eric M. Ludlam
2009-09-27 22:52           ` Stefan Monnier
2009-09-28  2:04             ` Eric M. Ludlam [this message]
2009-09-28  4:06               ` Stefan Monnier
2009-09-28 11:20                 ` Eric M. Ludlam
2009-09-29  6:50               ` Alan Mackenzie
2009-09-27 19:06 ` Glenn Morris

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

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

  git send-email \
    --in-reply-to=1254103488.6168.152.camel@projectile.siege-engine.com \
    --to=eric@siege-engine.com \
    --cc=XEmacs-Beta@xemacs.org \
    --cc=andreas.roehler@online.de \
    --cc=emacs-devel@gnu.org \
    --cc=monnier@iro.umontreal.ca \
    /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 external index

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

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.