unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
From: "Eric M. Ludlam" <eric@siege-engine.com>
To: Juanma Barranquero <lekktu@gmail.com>
Cc: Emacs developers <emacs-devel@gnu.org>
Subject: Re: Identifying DEFUNs in which-func-mode
Date: Tue, 06 Oct 2009 22:29:47 -0400	[thread overview]
Message-ID: <1254882587.6961.281.camel@projectile.siege-engine.com> (raw)
In-Reply-To: <f7ccd24b0910061827n1cd33b5dxc212338863cd1799@mail.gmail.com>

On Wed, 2009-10-07 at 03:27 +0200, Juanma Barranquero wrote:
> IMO, defining this function somewhere
> 
> (defun which-func-identify-DEFUN ()
>   (save-excursion
>     (save-match-data
>       (beginning-of-defun)
>       (if (looking-at "DEFUN +(\"[^\"]+\", +\\(F[^,]+\\),")
>           (match-string-no-properties 1)
>         nil))))
> 
> and adding it to `which-func-functions' for C files in the Emacs tree
> would be useful.
> 
> Alas, it can't be added through .dir-locals.el, because hooks are
> unsafe as directory-local variables. One (not particularly elegant)
> way to fix it would be to add to C mode the function and a boolean
> variable to set it; that variable could be safely set in
> .dir-locals.el. Surely others can think of better ways.
> 
> But before taking the trouble, does anyone else think that it would be
> useful to have this in standard Emacs, or it is the intersection of
> Emacs developers and which-func-mode users too small?

If you enable semantic-mode in Emacs (via the recent integration) and
also enable EDE (via the integration), then Emacs will identify your
Emacs sources as a project, and setup the parsing system to recognize
DEFUN macros.  A piece of Semantic that supports which-func mode is,
AFIAK, not yet integrated as the file is waiting for papers.  The
which-func support there is, however, not dependent on that paperwork
and could be used.

Anyway, the Semantic parsers put overlays on tags, so looking up which
function you are on is very fast.

You can see how the which-func support works at the bottom of this file:

http://cedet.cvs.sourceforge.net/viewvc/*checkout*/cedet/cedet/semantic/semantic-imenu.el

This support was added a long time ago, and judging by the description
you posted, should be re-written to some new APIs anyway.  I'd be glad
to see that old code refreshed as needed, as which-func is exactly the
type of functionality that CEDET excels at.

On the flip-side, if you enable the CEDET tools, you could enable
semantic-stickyfunc-mode instead of which-func.  IMO this is a much
slicker way of doing the same thing, but only if you don't use your
header line for other tasks already.

Eric





  reply	other threads:[~2009-10-07  2:29 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-10-07  1:27 Identifying DEFUNs in which-func-mode Juanma Barranquero
2009-10-07  2:29 ` Eric M. Ludlam [this message]
2009-10-07  2:44   ` Juanma Barranquero
2009-10-07  5:38     ` Chong Yidong
2009-10-07 16:23     ` Eric M. Ludlam
2009-10-07 16:28       ` Juanma Barranquero

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=1254882587.6961.281.camel@projectile.siege-engine.com \
    --to=eric@siege-engine.com \
    --cc=emacs-devel@gnu.org \
    --cc=lekktu@gmail.com \
    /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).