help-gnu-emacs
[Top][All Lists]
Advanced

[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 <address@hidden> 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


reply via email to

[Prev in Thread] Current Thread [Next in Thread]