;;; tempo.el --- Flexible template insertion
+
;; Copyright (C) 1994, 1995 Free Software Foundation, Inc.
-;; Author: David K}gedal <davidk@lysator.liu.se >
+;; Author: David K}gedal <davidk@lysator.liu.se>
;; Created: 16 Feb 1994
;; K}gedal's last version number: 1.2.4
;; Keywords: extensions, languages, tools
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING. If not, write to
-;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+;; along with GNU Emacs; see the file COPYING. If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
;;; Commentary:
;; a non-nil argument).
;; More flexible templates can be created by including lisp symbols,
-;; which will be evaluated as variables, or lists, which will will be
+;; which will be evaluated as variables, or lists, which will be
;; evaluated as lisp expressions.
;; See the documentation for tempo-define-template for the different
;;; Contributors:
-;; These people have given me importand feedback and new ideas for
+;; These people have given me important feedback and new ideas for
;; tempo.el. Thanks.
;; Nelson Minar <nelson@santafe.edu>
-;; Richard Stallman <rms@gnu.ai.mit.edu>
+;; Richard Stallman <rms@gnu.org>
;; Lars Lindberg <Lars.Lindberg@sypro.cap.se>
;; Glen Whitney <Glen.Whitney@math.lsa.umich.edu>
;;; Code:
-;; (provide 'tempo)
-
;;; User options
-(defvar tempo-interactive nil
+(defgroup tempo nil
+ "Flexible template insertion."
+ :prefix "tempo-"
+ :group 'tools)
+
+(defcustom tempo-interactive nil
"*Prompt user for strings in templates.
If this variable is non-nil, `tempo-insert' prompts the
-user for text to insert in the templates")
+user for text to insert in the templates"
+ :type 'boolean
+ :group 'tempo)
-(defvar tempo-insert-region nil
+(defcustom tempo-insert-region nil
"*Automatically insert current region when there is a `r' in the template
-If this variable is NIL, `r' elements will be treated just like `p'
+If this variable is nil, `r' elements will be treated just like `p'
elements, unless the template function is given a prefix (or a non-nil
-argument). If this variable is non-NIL, the behaviour is reversed.
+argument). If this variable is non-nil, the behaviour is reversed.
-In Transient Mark mode, this option is unused.")
+In Transient Mark mode, this option is unused."
+ :type 'boolean
+ :group 'tempo)
-(defvar tempo-show-completion-buffer t
- "*If non-NIL, show a buffer with possible completions, when only
-a partial completion can be found")
+(defcustom tempo-show-completion-buffer t
+ "*If non-nil, show a buffer with possible completions, when only
+a partial completion can be found"
+ :type 'boolean
+ :group 'tempo)
-(defvar tempo-leave-completion-buffer nil
- "*If NIL, a completion buffer generated by \\[tempo-complete-tag]
-disappears at the next keypress; otherwise, it remains forever.")
+(defcustom tempo-leave-completion-buffer nil
+ "*If nil, a completion buffer generated by \\[tempo-complete-tag]
+disappears at the next keypress; otherwise, it remains forever."
+ :type 'boolean
+ :group 'tempo)
;;; Internal variables
(defvar tempo-local-tags '((tempo-tags . nil))
"A list of locally installed tag completion lists.
It is a association list where the car of every element is a symbol
-whose varable value is a template list. The cdr part, if non-nil, is a
+whose variable value is a template list. The cdr part, if non-nil, is a
function or a regexp that defines the string to match. See the
documentation for the function `tempo-complete-tag' for more info.
(defvar tempo-user-elements nil
"Element handlers for user-defined elements.
A list of symbols which are bound to functions that take one argument.
-This function should return somthing to be sent to `tempo-insert' if
-it recognizes the argument, and NIL otherwise")
+This function should return something to be sent to `tempo-insert' if
+it recognizes the argument, and nil otherwise.")
(defvar tempo-named-insertions nil
- "Temporary storage for named insertions")
+ "Temporary storage for named insertions.")
(defvar tempo-region-start (make-marker)
- "Region start when inserting around the region")
+ "Region start when inserting around the region.")
(defvar tempo-region-stop (make-marker)
- "Region stop when inserting around the region")
+ "Region stop when inserting around the region.")
;; Make some variables local to every buffer
;;; Functions
-;;; First some useful functions and macros
-
-(defun tempo-mapc (fun lst)
- (if (null lst) nil
- (funcall fun (car lst))
- (tempo-mapc fun (cdr lst))))
-
-(defmacro tempo-dolist (il &rest forms)
- (let ((i (car il))
- (l (car (cdr il))))
- (list 'tempo-mapc
- (list 'function (append (list 'lambda
- (list i))
- forms))
- l)))
-(put 'tempo-dolist 'lisp-indent-function 1)
-
;;
;; tempo-define-template
- The symbol 'r. If `tempo-insert' is called with ON-REGION non-nil
the current region is placed here. Otherwise it works like 'p.
- (p PROMPT <NAME> <NOINSERT>) If `tempo-interactive' is non-nil, the
- user is prompted in the minbuffer with PROMPT for a string to be
+ user is prompted in the minibuffer with PROMPT for a string to be
inserted. If the optional parameter NAME is non-nil, the text is
saved for later insertion with the `s' tag. If there already is
something saved under NAME that value is used instead and no
(command-name template-name))
(set template-name elements)
(fset command-name (list 'lambda (list '&optional 'arg)
- (or documentation
+ (or documentation
(concat "Insert a " name "."))
(list 'interactive "*P")
(list 'tempo-insert-template (list 'quote
"Compatibility hack for tempo-insert-prompt.
PROMPT can be either a prompt string, or a list of arguments to
tempo-insert-prompt, or nil."
- (if (consp prompt) ; not NIL either
+ (if (consp prompt) ; not nil either
(apply 'tempo-insert-prompt prompt)
(tempo-insert-prompt prompt)))
(setq string
(funcall tempo-insert-string-functions string)))
((listp tempo-insert-string-functions)
- (tempo-dolist (fn tempo-insert-string-functions)
+ (dolist (fn tempo-insert-string-functions)
(setq string (funcall fn string))))
(t
(error "Bogus value in tempo-insert-string-functions: %s"
(setq lp (cdr lp)))
(if (not (= mark (car lp)))
(setcdr lp (cons mark (cdr lp))))))))
-
+
;;;
;;; tempo-forward-mark
last))))
(if prev-mark
(goto-char prev-mark))))
-
+
;;;
;;; tempo-add-tag
TAG-LIST is a symbol whose variable value is a tag list created with
`tempo-add-tag'.
-COMPLETION-FUNCTION is an obsolete option for specifyingis an optional
+COMPLETION-FUNCTION is an obsolete option for specifying an optional
function or string that is used by `\\[tempo-complete-tag]' to find a
string to match the tag against. It has the same definition as the
variable `tempo-match-finder'. In this version, supplying a
(defun tempo-build-collection ()
"Build a collection of all the tags and return it.
-If `tempo-dirty-collection' is NIL, the old collection is reused."
+If `tempo-dirty-collection' is nil, the old collection is reused."
(prog1
(or (and (not tempo-dirty-collection)
tempo-collection)
place of the matching string.
If a partial completion or no match at all is found, and SILENT is
-non-NIL, the function will give a signal.
+non-nil, the function will give a signal.
If a partial completion is found and `tempo-show-completion-buffer' is
-non-NIL, a buffer containing possible completions is displayed."
+non-nil, a buffer containing possible completions is displayed."
;; This function may look like a hack, but this is how I want it to
;; work.
This could as an example be used in a command that is bound to the
space bar, and looks something like this:
-(defun tempo-space ()
+\(defun tempo-space ()
(interactive \"*\")
(or (tempo-expand-if-complete)
(insert \" \")))"