[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Elisp questions... where to ask?
From: |
Johan Bockgård |
Subject: |
Re: Elisp questions... where to ask? |
Date: |
Sat, 15 Dec 2007 11:56:01 +0100 |
User-agent: |
Gnus/5.110007 (No Gnus v0.7) Emacs/23.0.50 (gnu/linux) |
Santanu <thisissantanu@gmail.com> writes:
> I wrote the following piece of code in the scratch buffer:
> ---------------------------------------------------------------------------------
> (define-skeleton test1
> "Prompt for name"
> "name:" str ? (test2)) <Ctrl+x, Ctrl+e>
>
> (define-skeleton test2
> "Prompt for surname"
> "surname:" str) <Ctrl+x, Ctrl+e>
>
> (test1) <Ctrl+x, Ctrl+e> santanu chatterjee
> ---------------------------------------------------------------------------------
> Now when I run the test1 function, and give "santanu" and
> "chatterjee" as the inputs to the two prompts, I get the result
> as shown above. But that happens in Emacs 21.x. But in
> Emacs 22.x and above, this creates some kind of infinite
> recursion, and I am placed in a debug buffer.
>
> Can you reproduce the same thing in your system? If so,
> could you let me know what exactly should be done to make
> this run in emacs 22.x and above. I tried to go through the
> emacs NEWS for 22.x and I did find some things related to
> skeleton.el, but due to my lack of knowledge of elisp, I could
> not make out much from it.
This seems to be a bug in skeleton. There was a change made to
skeleton-proxy-new
;; Return non-nil to tell expand-abbrev that expansion has happened.
;; Otherwise the no-self-insert is ignored.
t)
but skeleton-internal-1 is not prepared to handle `t' returned from a
subskeleton.
This seems to do the right thing:
*** skeleton.el.~1.51.~ 2007-08-14 19:24:04.000000000 +0200
--- skeleton.el 2007-12-15 11:28:36.000000000 +0100
***************
*** 424,429 ****
--- 424,430 ----
(skeleton-internal-list element (car literal))
(setq literal (cdr literal)))))
((null element))
+ ((eq t element))
(t (skeleton-internal-1 (eval element) t recursive))))
;; Maybe belongs into simple.el or elsewhere
--
Johan Bockgård