ambevar-dotfiles/.emacs.d/lisp/patch-skeletons.el

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)