ZIZORUH6UNA67S6DRRGGCTSOCYENTHGODHJ5JP3UUPLIKGYU5UVAC
;;; lisp-skeletons.el --- Skeletons for generating Common Lisp code -*- lexical-binding: t; -*-
;; Copyright (C) 2017 Edward Langley
;; Author: Edward Langley <fwoar@elangley.org>
;; Keywords: lisp
;; Version: 0.0.1
;; This program is free software; you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation, either version 3 of the License, or
;; (at your option) any later version.
;; This program is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
;; along with this program. If not, see <http://www.gnu.org/licenses/>.
;;; Commentary:
;; Put a description of the package here
;;; Code:
;; code goes here
(require 'skeleton)
(require 'evil)
(defvar *skeleton-markers* nil
"Markers for locations saved in skeleton-positions.")
(defun skeleton-make-markers ()
"..."
(while *skeleton-markers*
(set-marker (pop *skeleton-markers*) nil))
(setq *skeleton-markers*
(mapcar 'copy-marker (reverse skeleton-positions))))
(defun skeleton-next-position (&optional reverse)
"Jump to next position in skeleton.
REVERSE - Jump to previous position in skeleton"
(interactive "P")
(let* ((positions (mapcar 'marker-position *skeleton-markers*))
(positions (if reverse (reverse positions) positions))
(comp (if reverse '> '<))
pos)
(when positions
(if (catch 'break
(while (setq pos (pop positions))
(when (funcall comp (point) pos)
(throw 'break t))))
(goto-char pos)
(goto-char (marker-position
(car *skeleton-markers*))))))
(when (fboundp 'evil-insert)
(evil-insert 1)))
(define-skeleton skel-defun
"Insert a defun template."
"Name: "
"(defun " str " (" @ - ")" \n
@ _ ")" \n
'(when (fboundp 'evil-insert)
(evil-insert 1)))
(define-skeleton skel-defmacro
"Insert a defmacro template."
"Name: "
"(defmacro " str " (" @ - ")" \n
@ _ ")" \n
'(evil-insert 1))
(define-skeleton skel-defparameter
"Insert a defmacro template."
"Name: "
"(defparameter " str @ _ ")" \n
'(evil-insert 1))
(define-skeleton skel-defvar
"Insert a defmacro template."
"Name: "
"(defvar " str @ _ ")" \n
'(evil-insert 1))
(provide 'lisp-skeletons)
;;; lisp-skeletons.el ends here
;;; lisp-skeletons.el --- Skeletons for generating Common Lisp code -*- lexical-binding: t; -*-
;; Copyright (C) 2017 Edward Langley
;; Author: Edward Langley <fwoar@elangley.org>
;; Keywords: lisp
;; Version: 0.0.1
;; This program is free software; you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation, either version 3 of the License, or
;; (at your option) any later version.
;; This program is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
;; along with this program. If not, see <http://www.gnu.org/licenses/>.
;;; Commentary:
;; Put a description of the package here
;;; Code:
;; code goes here
(require 'skeleton)
(require 'evil)
(defvar *skeleton-markers* nil
"Markers for locations saved in skeleton-positions.")
(defun skeleton-make-markers ()
"..."
(while *skeleton-markers*
(set-marker (pop *skeleton-markers*) nil))
(setq *skeleton-markers*
(mapcar 'copy-marker (reverse skeleton-positions))))
(defun skeleton-next-position (&optional reverse)
"Jump to next position in skeleton.
REVERSE - Jump to previous position in skeleton"
(interactive "P")
(let* ((positions (mapcar 'marker-position *skeleton-markers*))
(positions (if reverse (reverse positions) positions))
(comp (if reverse '> '<))
pos)
(when positions
(if (catch 'break
(while (setq pos (pop positions))
(when (funcall comp (point) pos)
(throw 'break t))))
(goto-char pos)
(goto-char (marker-position
(car *skeleton-markers*))))))
(when (fboundp 'evil-insert)
(evil-insert 1)))
(define-skeleton skel-defun
"Insert a defun template."
"Name: "
"(defun " str " (" @ - ")" \n
@ _ ")" \n
'(when (fboundp 'evil-insert)
(evil-insert 1)))
(define-skeleton skel-defmacro
"Insert a defmacro template."
"Name: "
"(defmacro " str " (" @ - ")" \n
@ _ ")" \n
'(evil-insert 1))
(define-skeleton skel-defparameter
"Insert a defmacro template."
"Name: "
"(defparameter " str @ _ ")" \n
'(evil-insert 1))
(define-skeleton skel-defvar
"Insert a defmacro template."
"Name: "
"(defvar " str @ _ ")" \n
'(evil-insert 1))
(provide 'lisp-skeletons)
;;; lisp-skeletons.el ends here