unofficial mirror of emacs-devel@gnu.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

  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=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 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).