unofficial mirror of help-gnu-emacs@gnu.org
 help / color / mirror / Atom feed
From: Ian Zimmerman <bayard@newsguy.com>
Subject: Re: Browse skeleton positions
Date: 18 Oct 2003 10:58:19 -0700	[thread overview]
Message-ID: <877k32jumc.fsf@newsguy.com> (raw)
In-Reply-To: jwvy8vjoc18.fsf-monnier+gnu.emacs.sources@vor.iro.umontreal.ca


>> (define-key kmap [ return ] 'skeleton-position-exit)

Stefan> Please use [?\C-m] (or "\C-m"), unless you really mean that this
Stefan> binding should not work in a tty.

Good point.

>> (defsubst turn-on-skeleton-position-mode ()

Stefan> I recommend you use `defun' here, since it's unlikely that the
Stefan> advantages of defsubst will outweigh its disadvantages in this
Stefan> case.

I think both advantages and disadvantages are small here, but I'll take
your recommendation.

>> (defvar skeleton-position-marker-list nil "Global list of markers
>> pointing to skeleton positions.")  (make-variable-buffer-local
>> 'skeleton-position-marker-list)

Stefan> "Global" for a defvarred variable in elisp generally means
Stefan> "non-local to any buffer".

Yes, this is a typo; I have changed the code, but not the doc :-)
Thanks for spotting it.

>> (defvar skeleton-position-push-mark nil
>> "\\<skeleton-position-mode-map>\ When set, causes
>> \\[skeleton-position-next] and \\[skeleton-position-prev] \ in
>> Skeleton Position mode to push a mark at point.")

Stefan> Instead of using this state variable, you could maybe push the
Stefan> mark directly when you enter skeleton-position-mode ?

Yes, but it isn't exactly the same.  That way it would be pushed even if
users never move to any of the points.

>> (defvar skeleton-position-current nil
>> "\\<skeleton-position-mode-map>\ The last position visited by
>> \\[skeleton-position-next] or \\[skeleton-position-prev] \ in
>> Skeleton Position mode, as a pointer into
>> `skeleton-position-marker-list'.")

Stefan> Maybe it would be better to just use (point) instead, and when
Stefan> you do `next' or `prev', go through the list looking for the
Stefan> nearest marker in the requested direction ?

Hmmmm.  Again, interesting suggestion, but the behavior could be
significantly different in case there are multiple overlapping skeletons.

Stefan> It's generally preferable to only add function symbols onto
Stefan> hooks, so it's easier to remove and so there's less/no risk of
Stefan> adding it a second time.

Stefan> As for the behavior, the above has the nasty side effect that
Stefan> just loading "skelposn" into your Emacs will cause all your
Stefan> skeleton positions to accumulate in the form of markers (at
Stefan> least until you finally call skeleton-position-exit which will
Stefan> likely be never if you don't actually use skelposn).  This can
Stefan> lead to a significant slowdown because of the way markers are
Stefan> implemented.

Note the kill-buffer-hook.

Stefan> Maybe it's better to process skeleton-positions only when
Stefan> requested, i.e. in skeleton-position-mode (or maybe in
Stefan> skeleton-position-next if you want to do it JIT-style).

Won't do.  Much editing can happen between inserting the skeleton and
starting to browse, and then the positions will be all wrong.  In
particular, I fully intend to keep _multiple_ preceding skeletons'
positions available until explicitly discarded.

Stefan> How about a less in-yuor-face mode that lets you edit the text
Stefan> at the same time as you navigate between the different markers ?

But then you'd need more complicated, harder to type (and to retype, in
particular) keybindings.  This is a general dilemma which I have
resolved for myself in favor of special modes like this one.  See also
wmanip.el which I have posted some time ago, similar idea.

-- 
Wer Schoenheit angeschaut mit Augen, hat dem Tode schon Anheim gegeben.
Von Platen.

  reply	other threads:[~2003-10-18 17:58 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <87vfqnygi7.fsf@newsguy.com>
2003-10-17 20:42 ` Browse skeleton positions Stefan Monnier
2003-10-18 17:58   ` Ian Zimmerman [this message]
2003-10-19 23:36     ` Stefan Monnier
2003-10-30 23:57       ` Ian Zimmerman
2003-10-31 17:28         ` Stefan Monnier
2003-11-02 16:10           ` Ian Zimmerman
2003-11-11 17:49             ` Ian Zimmerman

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=877k32jumc.fsf@newsguy.com \
    --to=bayard@newsguy.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.
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).