1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2025-12-10 00:00:39 -08:00

* lisp/skeleton.el: Use lexical-binding

(skeleton-proxy-new): Use `use-region`.
This commit is contained in:
Stefan Monnier 2020-08-06 18:45:33 -04:00
parent 33b293b41b
commit e038a7571d

View file

@ -1,4 +1,4 @@
;;; skeleton.el --- Lisp language extension for writing statement skeletons ;;; skeleton.el --- Lisp language extension for writing statement skeletons -*- lexical-binding: t; -*-
;; Copyright (C) 1993-1996, 2001-2020 Free Software Foundation, Inc. ;; Copyright (C) 1993-1996, 2001-2020 Free Software Foundation, Inc.
@ -155,8 +155,7 @@ of `str' whereas the skeleton's interactor is then ignored."
(prefix-numeric-value (or arg (prefix-numeric-value (or arg
current-prefix-arg)) current-prefix-arg))
(and skeleton-autowrap (and skeleton-autowrap
(or (eq last-command 'mouse-drag-region) (use-region-p)
(and transient-mark-mode mark-active))
;; Deactivate the mark, in case one of the ;; Deactivate the mark, in case one of the
;; elements of the skeleton is sensitive ;; elements of the skeleton is sensitive
;; to such situations (e.g. it is itself a ;; to such situations (e.g. it is itself a
@ -259,23 +258,25 @@ available:
(goto-char (car skeleton-regions)) (goto-char (car skeleton-regions))
(setq skeleton-regions (cdr skeleton-regions))) (setq skeleton-regions (cdr skeleton-regions)))
(let ((beg (point)) (let ((beg (point))
skeleton-modified skeleton-point resume: help input v1 v2) skeleton-modified skeleton-point) ;; resume:
(setq skeleton-positions nil) (with-suppressed-warnings ((lexical help input v1 v2))
(unwind-protect (dlet (help input v1 v2)
(cl-progv (setq skeleton-positions nil)
(mapcar #'car skeleton-further-elements) (unwind-protect
(mapcar (lambda (x) (eval (cadr x))) skeleton-further-elements) (cl-progv
(skeleton-internal-list skeleton str)) (mapcar #'car skeleton-further-elements)
(or (eolp) (not skeleton-end-newline) (newline-and-indent)) (mapcar (lambda (x) (eval (cadr x) t)) skeleton-further-elements)
(run-hooks 'skeleton-end-hook) (skeleton-internal-list skeleton str))
(sit-for 0) (or (eolp) (not skeleton-end-newline) (newline-and-indent))
(or (not (eq (window-buffer) (current-buffer))) (run-hooks 'skeleton-end-hook)
(pos-visible-in-window-p beg) (sit-for 0)
(progn (or (not (eq (window-buffer) (current-buffer)))
(goto-char beg) (pos-visible-in-window-p beg)
(recenter 0))) (progn
(if skeleton-point (goto-char beg)
(goto-char skeleton-point)))))) (recenter 0)))
(if skeleton-point
(goto-char skeleton-point))))))))
(defun skeleton-read (prompt &optional initial-input recursive) (defun skeleton-read (prompt &optional initial-input recursive)
"Function for reading a string from the minibuffer within skeletons. "Function for reading a string from the minibuffer within skeletons.
@ -328,36 +329,39 @@ automatically, and you are prompted to fill in the variable parts.")))
(signal 'quit t) (signal 'quit t)
prompt)) prompt))
(defun skeleton-internal-list (skeleton-il &optional str recursive) (defun skeleton-internal-list (skeleton &optional str recursive)
(let* ((start (line-beginning-position)) (let* ((start (line-beginning-position))
(column (current-column)) (column (current-column))
(line (buffer-substring start (line-end-position))) (line (buffer-substring start (line-end-position)))
opoint) (skeleton-il skeleton)
(or str opoint)
(setq str `(setq str (with-suppressed-warnings ((lexical str))
(skeleton-read ',(car skeleton-il) nil ,recursive)))) (dlet ((str (or str
(when (and (eq (cadr skeleton-il) '\n) (not recursive) `(setq str
(save-excursion (skip-chars-backward " \t") (bolp))) (skeleton-read ',(car skeleton-il)
(setq skeleton-il (cons nil (cons '> (cddr skeleton-il))))) nil ,recursive)))))
(while (setq skeleton-modified (eq opoint (point)) (when (and (eq (cadr skeleton-il) '\n) (not recursive)
opoint (point) (save-excursion (skip-chars-backward " \t") (bolp)))
skeleton-il (cdr skeleton-il)) (setq skeleton-il (cons nil (cons '> (cddr skeleton-il)))))
(condition-case quit (while (setq skeleton-modified (eq opoint (point))
(skeleton-internal-1 (car skeleton-il) nil recursive) opoint (point)
(quit skeleton-il (cdr skeleton-il))
(if (eq (cdr quit) 'recursive) (condition-case quit
(setq recursive 'quit (skeleton-internal-1 (car skeleton-il) nil recursive)
skeleton-il (memq 'resume: skeleton-il)) (quit
;; Remove the subskeleton as far as it has been shown (if (eq (cdr quit) 'recursive)
;; the subskeleton shouldn't have deleted outside current line. (setq recursive 'quit
(end-of-line) skeleton-il (memq 'resume: skeleton-il))
(delete-region start (point)) ;; Remove the subskeleton as far as it has been shown
(insert line) ;; the subskeleton shouldn't have deleted outside current line.
(move-to-column column) (end-of-line)
(if (cdr quit) (delete-region start (point))
(setq skeleton-il () (insert line)
recursive nil) (move-to-column column)
(signal 'quit 'recursive))))))) (if (cdr quit)
(setq skeleton-il ()
recursive nil)
(signal 'quit 'recursive)))))))))
;; maybe continue loop or go on to next outer resume: section ;; maybe continue loop or go on to next outer resume: section
(if (eq recursive 'quit) (if (eq recursive 'quit)
(signal 'quit 'recursive) (signal 'quit 'recursive)