37 lines
1.2 KiB
EmacsLisp
37 lines
1.2 KiB
EmacsLisp
(defun ambrevar/skeleton-make-markers ()
|
|
"Save last skeleton markers in a list.
|
|
Hook function for skeletons."
|
|
(while skeleton-markers
|
|
(set-marker (pop skeleton-markers) nil))
|
|
(setq skeleton-markers
|
|
(mapcar 'copy-marker (reverse skeleton-positions))))
|
|
|
|
(defvar skeleton-markers nil
|
|
"Markers for locations saved in `skeleton-positions'.")
|
|
|
|
(defun ambrevar/skeleton-previous-position ()
|
|
"Move to previous skeleton placeholder.
|
|
See `skeleton-next-position'."
|
|
(skeleton-next-position t))
|
|
|
|
(defun ambrevar/skeleton-next-position (&optional reverse)
|
|
"Move to next skeleton placeholder.
|
|
If REVERSE it t, move to previous placeholder."
|
|
(interactive "P")
|
|
(let ((positions (mapcar 'marker-position skeleton-markers))
|
|
(comp (if reverse '< '<=))
|
|
pos
|
|
prev)
|
|
(when positions
|
|
(setq pos (pop positions))
|
|
(while (and pos (funcall comp pos (point)))
|
|
(setq prev pos)
|
|
(setq pos (pop positions)))
|
|
(cond
|
|
((and reverse prev) (goto-char prev))
|
|
(reverse (goto-char (car (last skeleton-markers))))
|
|
(pos (goto-char pos))
|
|
(t (goto-char (car skeleton-markers)))))))
|
|
|
|
(provide 'patch-skeletons)
|