-;;; gpr-skel.el --- an extension to Gpr mode for inserting statement skeletons
+;;; gpr-skel.el --- an extension to Gpr mode for inserting statement skeletons -*- lexical-binding:t -*-
-;; Copyright (C) 2013 Free Software Foundation, Inc.
+;; Copyright (C) 2013-2015 Free Software Foundation, Inc.
;; Authors: Stephen Leake <stephen_leake@stephe-leake.org>
;;;;; user variables, example skeletons intended to be overwritten
(defcustom gpr-skel-initial-string "{header}\n{project}"
- "*String to insert in empty buffer.
+ "String to insert in empty buffer.
This could end in a token recognized by `gpr-skel-expand'."
:type 'string
- :group 'gpr
- :safe 'stringp)
+ :group 'gpr ;FIXME: Unknown!
+ :safe #'stringp)
(define-skeleton gpr-skel-user-restricted
"Example copyright/license skeleton, with automatic year and owner."
(define-skeleton gpr-skel-package
"Insert a package with name from `str'."
- ()
+ "Package name: "
"package " str " is\n"
_
"end " str ";")
(define-skeleton gpr-skel-project
"Insert a project with name from `str'."
- ()
+ "Project name: "
"project " str " is\n"
_
"end " str ";")
"Expand the token or placeholder before point to a skeleton, as defined by `skeleton-token-alist'.
A token is a symbol in the current syntax.
A placeholder is a symbol enclosed in generic comment delimiters.
-If the word before point is not in `gpr-skel-token-alist', assume
+If the word before point is not in `skeleton-token-alist', assume
it is a name, and use the word before that as the token."
(interactive "*")
(if old
;; hippie is asking us to try the "next" completion; we don't have one
nil
- (let ((pos (point)))
+ (let ((pos (point))
+ (undo-len (if (sequencep pending-undo-list) (length pending-undo-list) 0)))
(undo-boundary)
(condition-case nil
(progn
(skeleton-expand)
t)
- ('error
- ;; undo hook action, motion
- (undo)
+ (error
+ ;; undo hook action if any
+ (unless (= undo-len (if (sequencep pending-undo-list) (length pending-undo-list) 0))
+ (undo))
+
+ ;; undo motion
(goto-char pos)
nil)))))
+
+(defun skeleton-next-placeholder ()
+ "Move point forward to start of next placeholder."
+ (interactive)
+ (skip-syntax-forward "^!"))
+
+(defun skeleton-prev-placeholder ()
+ "Move point forward to start of next placeholder."
+ (interactive)
+ (skip-syntax-backward "^!"))
+
;; end FIXME:
;;;;; token alist, setup
(provide 'gpr-skeletons)
(provide 'gpr-skel)
-(setq gpr-expand 'skeleton-expand)
+(setq gpr-expand #'skeleton-expand)
-(add-hook 'gpr-mode-hook 'gpr-skel-setup)
+(add-hook 'gpr-mode-hook #'gpr-skel-setup)
;;; end of file