Function: skeleton-internal-list

skeleton-internal-list is a byte-compiled function defined in skeleton.el.gz.

Signature

(skeleton-internal-list SKELETON &optional STR RECURSIVE)

Source Code

;; Defined in /usr/src/emacs/lisp/skeleton.el.gz
(defun skeleton-internal-list (skeleton &optional str recursive)
  (let* ((start (line-beginning-position))
	 (column (current-column))
	 (line (buffer-substring start (line-end-position)))
         (skeleton-il skeleton)
         opoint)
    (with-suppressed-warnings ((lexical str))
      (dlet ((str (or str
                      `(setq str
			     (skeleton-read ',(car skeleton-il)
                                            nil ,recursive))))
             resume:)
	(when (and (eq (cadr skeleton-il) '\n) (not recursive)
                   (save-excursion (skip-chars-backward " \t") (bolp)))
	  (setq skeleton-il (cons nil (cons '> (cddr skeleton-il)))))
	(while (setq skeleton-modified (eq opoint (point))
		     opoint (point)
		     skeleton-il (cdr skeleton-il))
	  (condition-case quit
	      (skeleton-internal-1 (car skeleton-il) nil recursive)
	    (quit
	     (if (eq (cdr quit) 'recursive)
		 (setq recursive 'quit
		       skeleton-il (memq 'resume: skeleton-il))
	       ;; Remove the subskeleton as far as it has been shown
	       ;; the subskeleton shouldn't have deleted outside current line.
	       (end-of-line)
	       (delete-region start (point))
	       (insert line)
	       (move-to-column column)
	       (if (cdr quit)
		   (setq skeleton-il ()
                         recursive nil)
		 (signal 'quit 'recursive)))))))))
  ;; maybe continue loop or go on to next outer resume: section
  (if (eq recursive 'quit)
      (signal 'quit 'recursive)
    recursive))