From 196a5a1f1e1c48482b5a173add374e4c1a5471c8 Mon Sep 17 00:00:00 2001 From: Harald Hanche-Olsen Date: Thu, 23 Jul 2015 18:09:44 +0200 Subject: [PATCH] Fix bug #20386 --- lisp/skeleton.el | 17 ++++++++++------- lisp/textmodes/sgml-mode.el | 14 +++++++++----- 2 files changed, 19 insertions(+), 12 deletions(-) diff --git a/lisp/skeleton.el b/lisp/skeleton.el index d23488b..2c017dd 100644 --- a/lisp/skeleton.el +++ b/lisp/skeleton.el @@ -277,7 +277,8 @@ When done with skeleton, but before going back to `_'-point call (defun skeleton-read (prompt &optional initial-input recursive) "Function for reading a string from the minibuffer within skeletons. -PROMPT must be a string or a form that evaluates to a string. +PROMPT must be a string or a function that evaluates to a string. +It may also be a form that evaluates to a string (deprecated). It may contain a `%s' which will be replaced by `skeleton-subprompt'. If non-nil second arg INITIAL-INPUT or variable `input' is a string or cons with index to insert before reading. If third arg RECURSIVE is non-nil @@ -306,12 +307,14 @@ automatically, and you are prompted to fill in the variable parts."))) ;; before point. (save-excursion (insert "\n"))) (unwind-protect - (setq prompt (if (stringp prompt) - (read-string (format prompt skeleton-subprompt) - (setq initial-input - (or initial-input - (symbol-value 'input)))) - (eval prompt))) + (setq prompt (cond ((stringp prompt) + (read-string (format prompt skeleton-subprompt) + (setq initial-input + (or initial-input + (symbol-value 'input))))) + ((functionp prompt) + (funcall prompt)) + (t (eval prompt)))) (or eolp (delete-char 1)))) (if (and recursive diff --git a/lisp/textmodes/sgml-mode.el b/lisp/textmodes/sgml-mode.el index 2ffe9c1..6a14b52 100644 --- a/lisp/textmodes/sgml-mode.el +++ b/lisp/textmodes/sgml-mode.el @@ -759,9 +759,10 @@ If QUIET, do not print a message when there are no attributes for TAG." (insert ?\s) (insert (funcall skeleton-transformation-function (setq attribute - (skeleton-read '(completing-read - "Attribute: " - alist))))) + (skeleton-read (lambda () + (completing-read + "Attribute: " + alist)))))) (if (string= "" attribute) (setq i 0) (sgml-value (assoc (downcase attribute) alist)) @@ -1177,13 +1178,16 @@ See `sgml-tag-alist' for info about attribute rules." (if (and (eq (car alist) t) (not sgml-xml-mode)) (when (cdr alist) (insert "=\"") - (setq alist (skeleton-read '(completing-read "Value: " (cdr alist)))) + (setq alist (skeleton-read (lambda () + (completing-read + "Value: " (cdr alist))))) (if (string< "" alist) (insert alist ?\") (delete-char -2))) (insert "=\"") (if (cdr alist) - (insert (skeleton-read '(completing-read "Value: " alist))) + (insert (skeleton-read (lambda () + (completing-read "Value: " alist)))) (when (null alist) (insert (skeleton-read '(read-string "Value: "))))) (insert ?\")))) -- 2.4.5