mirror of
https://github.com/joaotavora/yasnippet.git
synced 2025-10-14 05:23:04 +00:00
wip: in the green!
This commit is contained in:
parent
98946135a9
commit
891c76fa71
90
snippet.el
90
snippet.el
@ -128,8 +128,8 @@
|
|||||||
append (pcase form
|
append (pcase form
|
||||||
(`(&field ,name ,_expr (&parent ,parent))
|
(`(&field ,name ,_expr (&parent ,parent))
|
||||||
`((,(snippet--make-field-sym name)
|
`((,(snippet--make-field-sym name)
|
||||||
(snippet--make-field :parent
|
(snippet--make-field :parent ,parent
|
||||||
,parent))))))
|
:name ',name))))))
|
||||||
(region-string (and (region-active-p)
|
(region-string (and (region-active-p)
|
||||||
(buffer-substring-no-properties
|
(buffer-substring-no-properties
|
||||||
(region-beginning)
|
(region-beginning)
|
||||||
@ -330,11 +330,17 @@ meaning is not decided yet"
|
|||||||
(cl-assert (null (snippet--object-next prev)) nil
|
(cl-assert (null (snippet--object-next prev)) nil
|
||||||
"previous object already has another sucessor")
|
"previous object already has another sucessor")
|
||||||
(setf (snippet--object-next prev) object))
|
(setf (snippet--object-next prev) object))
|
||||||
|
|
||||||
(setf (snippet--object-start object)
|
(setf (snippet--object-start object)
|
||||||
(if (and prev
|
(let ((parent (snippet--object-parent object)))
|
||||||
(= (point) (snippet--object-end prev)))
|
(cond ((and parent
|
||||||
(snippet--object-end prev)
|
(= (point) (snippet--object-start parent)))
|
||||||
(point-marker)))
|
(snippet--object-start parent))
|
||||||
|
((and prev
|
||||||
|
(= (point) (snippet--object-end prev)))
|
||||||
|
(snippet--object-end prev))
|
||||||
|
(t
|
||||||
|
(point-marker)))))
|
||||||
(funcall fn)
|
(funcall fn)
|
||||||
(setf (snippet--object-end object)
|
(setf (snippet--object-end object)
|
||||||
(point-marker))
|
(point-marker))
|
||||||
@ -342,6 +348,7 @@ meaning is not decided yet"
|
|||||||
(setf (snippet--object-end
|
(setf (snippet--object-end
|
||||||
(snippet--object-parent object))
|
(snippet--object-parent object))
|
||||||
(snippet--object-end object)))
|
(snippet--object-end object)))
|
||||||
|
(snippet--open-object object 'close)
|
||||||
object)
|
object)
|
||||||
|
|
||||||
(defmacro snippet--inserting-object (object prev &rest body)
|
(defmacro snippet--inserting-object (object prev &rest body)
|
||||||
@ -360,8 +367,7 @@ meaning is not decided yet"
|
|||||||
:source source
|
:source source
|
||||||
:transform (snippet--transform-lambda transform))))
|
:transform (snippet--transform-lambda transform))))
|
||||||
(snippet--inserting-object mirror prev
|
(snippet--inserting-object mirror prev
|
||||||
(pushnew mirror (snippet--field-mirrors source)))
|
(pushnew mirror (snippet--field-mirrors source)))))
|
||||||
mirror))
|
|
||||||
|
|
||||||
(defun snippet--make-and-insert-exit (parent prev constant)
|
(defun snippet--make-and-insert-exit (parent prev constant)
|
||||||
(let ((exit (snippet--make-exit :parent parent :prev prev)))
|
(let ((exit (snippet--make-exit :parent parent :prev prev)))
|
||||||
@ -375,35 +381,35 @@ meaning is not decided yet"
|
|||||||
(when parent
|
(when parent
|
||||||
(setf (snippet--object-end parent) (point-marker))))
|
(setf (snippet--object-end parent) (point-marker))))
|
||||||
|
|
||||||
(defun snippet--describe-field (field)
|
(defun snippet--describe-object (object)
|
||||||
(with-current-buffer (snippet--object-buffer field)
|
(with-current-buffer (snippet--object-buffer object)
|
||||||
(format "field %s from %s to %s covering \"%s\""
|
(format "from %s to %s covering \"%s\""
|
||||||
(snippet--field-name field)
|
(snippet--object-start object)
|
||||||
(marker-position (snippet--object-start field))
|
(snippet--object-end object)
|
||||||
(marker-position (snippet--object-end field))
|
|
||||||
(buffer-substring-no-properties
|
(buffer-substring-no-properties
|
||||||
(snippet--object-start field)
|
(snippet--object-start object)
|
||||||
(snippet--object-end field)))))
|
(snippet--object-end object)))))
|
||||||
|
|
||||||
|
(defun snippet--describe-field (field)
|
||||||
|
(let ((active-field
|
||||||
|
(overlay-get snippet--field-overlay 'snippet--field)))
|
||||||
|
(with-current-buffer (snippet--object-buffer field)
|
||||||
|
(format "field %s %s%s"
|
||||||
|
(snippet--field-name field)
|
||||||
|
(snippet--describe-object field)
|
||||||
|
(if (eq field active-field)
|
||||||
|
" *active*"
|
||||||
|
"")))))
|
||||||
|
|
||||||
(defun snippet--describe-mirror (mirror)
|
(defun snippet--describe-mirror (mirror)
|
||||||
(with-current-buffer (snippet--object-buffer mirror)
|
(with-current-buffer (snippet--object-buffer mirror)
|
||||||
(format "mirror from %s to %s covering \"%s\""
|
(format "mirror of %s %s"
|
||||||
(marker-position (snippet--object-start mirror))
|
(snippet--field-name (snippet--mirror-source mirror))
|
||||||
(marker-position (snippet--object-end mirror))
|
(snippet--describe-object mirror))))
|
||||||
(buffer-substring-no-properties
|
|
||||||
(snippet--object-start mirror)
|
|
||||||
(snippet--object-end mirror)))))
|
|
||||||
|
|
||||||
|
|
||||||
(defun snippet--describe-exit (exit)
|
(defun snippet--describe-exit (exit)
|
||||||
(with-current-buffer (snippet--object-buffer exit)
|
(with-current-buffer (snippet--object-buffer exit)
|
||||||
(format "exit from %s to %s covering \"%s\""
|
(format "exit %s" (snippet--describe-object exit))))
|
||||||
(marker-position (snippet--object-start exit))
|
|
||||||
(marker-position (snippet--object-end exit))
|
|
||||||
(buffer-substring-no-properties
|
|
||||||
(snippet--object-start exit)
|
|
||||||
(snippet--object-end exit)))))
|
|
||||||
|
|
||||||
(defgroup snippet nil
|
(defgroup snippet nil
|
||||||
"Customize snippet features"
|
"Customize snippet features"
|
||||||
@ -589,22 +595,16 @@ meaning is not decided yet"
|
|||||||
(with-current-buffer (get-buffer-create "*snippet-debug*")
|
(with-current-buffer (get-buffer-create "*snippet-debug*")
|
||||||
(let ((inhibit-read-only t))
|
(let ((inhibit-read-only t))
|
||||||
(erase-buffer)
|
(erase-buffer)
|
||||||
(let ((active-field (overlay-get field-overlay 'snippet--field)))
|
(cl-loop for object in
|
||||||
(cl-loop for object in
|
(cl-sort (cl-copy-list
|
||||||
(cl-sort (cl-copy-list
|
(overlay-get field-overlay 'snippet--objects)) #'<
|
||||||
(overlay-get field-overlay 'snippet--objects)) #'<
|
:key #'snippet--object-start)
|
||||||
:key #'snippet--object-start)
|
do (cond ((snippet--field-p object)
|
||||||
do (cond ((snippet--field-p object)
|
(insert (snippet--describe-field object) "\n"))
|
||||||
(insert (snippet--describe-field object))
|
((snippet--mirror-p object)
|
||||||
(when (eq object active-field) (insert " (active)"))
|
(insert (snippet--describe-mirror object) "\n"))
|
||||||
(insert "\n")
|
((snippet--exit-p object)
|
||||||
(cl-loop for mirror in (snippet--field-mirrors object)
|
(insert (snippet--describe-exit object) "\n")))))
|
||||||
do (insert " " (snippet--describe-mirror mirror)
|
|
||||||
"\n")))
|
|
||||||
((snippet--mirror-p object)
|
|
||||||
(insert (snippet--describe-mirror object) "\n"))
|
|
||||||
((snippet--exit-p object)
|
|
||||||
(insert (snippet--describe-exit object) "\n"))))))
|
|
||||||
(display-buffer (current-buffer))))
|
(display-buffer (current-buffer))))
|
||||||
|
|
||||||
(provide 'snippet)
|
(provide 'snippet)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user