annotate lisp/tempo.el @ 28285:c54d62415e91

Changed the type of parameter passed to the function defined by `quickurl-format-function'. Before only the text of the URL was passed. Now the whole URL structure is passed and the function is responsible for extracting the parts it requires. Changed the default of `quickurl-format-function' accordingly. (quickurl-insert): Changed the `funcall' of `quickurl-format-function' to match the above change. (quickurl-list-insert): Changed the `url' case so that it makes use of `quickurl-format-function', previous to this the format was hard wired.
author Gerd Moellmann <gerd@gnu.org>
date Thu, 23 Mar 2000 13:53:14 +0000
parents db5b16cdb88d
children 58e2bb13d72e
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
10516
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
1 ;;; tempo.el --- Flexible template insertion
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14008
diff changeset
2
11235
e6bdaaa6ce1b Update copyright.
Karl Heuer <kwzh@gnu.org>
parents: 11208
diff changeset
3 ;; Copyright (C) 1994, 1995 Free Software Foundation, Inc.
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4
7296
eb888748ca9b Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 7267
diff changeset
5 ;; Author: David K}gedal <davidk@lysator.liu.se >
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6 ;; Created: 16 Feb 1994
12333
5364f0b969f3 Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 12321
diff changeset
7 ;; K}gedal's last version number: 1.2.4
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8 ;; Keywords: extensions, languages, tools
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
9
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
10 ;; This file is part of GNU Emacs.
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
11
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
12 ;; GNU Emacs is free software; you can redistribute it and/or modify
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
13 ;; it under the terms of the GNU General Public License as published by
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
14 ;; the Free Software Foundation; either version 2, or (at your option)
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
15 ;; any later version.
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
16
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
17 ;; GNU Emacs is distributed in the hope that it will be useful,
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
18 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
19 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
20 ;; GNU General Public License for more details.
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
21
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
22 ;; You should have received a copy of the GNU General Public License
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14008
diff changeset
23 ;; along with GNU Emacs; see the file COPYING. If not, write to the
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14008
diff changeset
24 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14008
diff changeset
25 ;; Boston, MA 02111-1307, USA.
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
26
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
27 ;;; Commentary:
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
28
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
29 ;; This file provides a simple way to define powerful templates, or
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
30 ;; macros, if you wish. It is mainly intended for, but not limited to,
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
31 ;; other programmers to be used for creating shortcuts for editing
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
32 ;; certain kind of documents. It was originally written to be used by
11196
a74358cc05c6 (tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents: 10516
diff changeset
33 ;; a HTML editing mode written by Nelson Minar <nelson@santafe.edu>,
a74358cc05c6 (tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents: 10516
diff changeset
34 ;; and his html-helper-mode.el is probably the best example of how to
a74358cc05c6 (tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents: 10516
diff changeset
35 ;; use this program.
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
36
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
37 ;; A template is defined as a list of items to be inserted in the
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
38 ;; current buffer at point. Some of the items can be simple strings,
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
39 ;; while other can control formatting or define special points of
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
40 ;; interest in the inserted text.
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
41
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
42 ;; If a template defines a "point of interest" that point is inserted
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
43 ;; in a buffer-local list of "points of interest" that the user can
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
44 ;; jump between with the commands `tempo-backward-mark' and
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
45 ;; `tempo-forward-mark'. If the template definer provides a prompt for
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
46 ;; the point, and the variable `tempo-interactive' is non-nil, the
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
47 ;; user will be prompted for a string to be inserted in the buffer,
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
48 ;; using the minibuffer.
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
49
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
50 ;; The template can also define one point to be replaced with the
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
51 ;; current region if the template command is called with a prefix (or
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
52 ;; a non-nil argument).
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
53
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
54 ;; More flexible templates can be created by including lisp symbols,
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
55 ;; which will be evaluated as variables, or lists, which will will be
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
56 ;; evaluated as lisp expressions.
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
57
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
58 ;; See the documentation for tempo-define-template for the different
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
59 ;; items that can be used to define a tempo template.
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
60
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
61 ;; One of the more powerful features of tempo templates are automatic
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
62 ;; completion. With every template can be assigned a special tag that
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
63 ;; should be recognized by `tempo-complete-tag' and expanded to the
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
64 ;; complete template. By default the tags are added to a global list
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
65 ;; of template tags, and are matched against the last word before
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
66 ;; point. But if you assign your tags to a specific list, you can also
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
67 ;; specify another method for matching text in the buffer against the
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
68 ;; tags. In the HTML mode, for instance, the tags are matched against
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
69 ;; the text between the last `<' and point.
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
70
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
71 ;; When defining a template named `foo', a symbol named
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
72 ;; `tempo-template-foo' will be created whose value as a variable will
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
73 ;; be the template definition, and its function value will be an
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
74 ;; interactive function that inserts the template at the point.
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
75
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
76 ;; The latest tempo.el distribution can be fetched from
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
77 ;; ftp.lysator.liu.se in the directory /pub/emacs
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
78
12321
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
79 ;; There is also a WWW page at
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
80 ;; http://www.lysator.liu.se/~davidk/elisp/ which has some information
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
81
10516
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
82 ;;; Known bugs:
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
83
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
84 ;; If the 'o is the first element in a template, strange things can
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
85 ;; happen when the template is inserted at the beginning of a
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
86 ;; line. This is due to strange behaviour in open-line. But it should
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
87 ;; be easily avoided.
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
88
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
89 ;; The 'o tag is also a problem when including the region. This will
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
90 ;; be looked into.
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
91
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
92 ;; Clicking mouse-2 in the completion buffer gives strange results.
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
93
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
94 ;; There is a bug in some emacs versions that prevents completion from
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
95 ;; working. If it doesn't work for you, send me a note indicating your
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
96 ;; emacs version and your problems.
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
97
11196
a74358cc05c6 (tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents: 10516
diff changeset
98 ;;; Contributors:
a74358cc05c6 (tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents: 10516
diff changeset
99
14008
f8a4126da2c8 (tempo-local-tags, tempo-user-elements, tempo-use-tag-list):
Karl Heuer <kwzh@gnu.org>
parents: 12333
diff changeset
100 ;; These people have given me important feedback and new ideas for
11196
a74358cc05c6 (tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents: 10516
diff changeset
101 ;; tempo.el. Thanks.
a74358cc05c6 (tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents: 10516
diff changeset
102
a74358cc05c6 (tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents: 10516
diff changeset
103 ;; Nelson Minar <nelson@santafe.edu>
25278
cbe304a26771 Fix maintainer address.
Karl Heuer <kwzh@gnu.org>
parents: 21088
diff changeset
104 ;; Richard Stallman <rms@gnu.org>
11196
a74358cc05c6 (tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents: 10516
diff changeset
105 ;; Lars Lindberg <Lars.Lindberg@sypro.cap.se>
a74358cc05c6 (tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents: 10516
diff changeset
106 ;; Glen Whitney <Glen.Whitney@math.lsa.umich.edu>
a74358cc05c6 (tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents: 10516
diff changeset
107
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
108 ;;; Code:
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
109
10516
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
110 ;; (provide 'tempo)
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
111
10516
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
112 ;;; User options
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
113
21088
ac1673121774 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 14169
diff changeset
114 (defgroup tempo nil
ac1673121774 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 14169
diff changeset
115 "Flexible template insertion."
ac1673121774 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 14169
diff changeset
116 :prefix "tempo-"
ac1673121774 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 14169
diff changeset
117 :group 'tools)
ac1673121774 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 14169
diff changeset
118
ac1673121774 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 14169
diff changeset
119 (defcustom tempo-interactive nil
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
120 "*Prompt user for strings in templates.
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
121 If this variable is non-nil, `tempo-insert' prompts the
21088
ac1673121774 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 14169
diff changeset
122 user for text to insert in the templates"
ac1673121774 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 14169
diff changeset
123 :type 'boolean
ac1673121774 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 14169
diff changeset
124 :group 'tempo)
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
125
21088
ac1673121774 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 14169
diff changeset
126 (defcustom tempo-insert-region nil
7410
4eca60cb3c4d (tempo-insert-region, tempo-show-completion-buffer,
Richard M. Stallman <rms@gnu.org>
parents: 7296
diff changeset
127 "*Automatically insert current region when there is a `r' in the template
4eca60cb3c4d (tempo-insert-region, tempo-show-completion-buffer,
Richard M. Stallman <rms@gnu.org>
parents: 7296
diff changeset
128 If this variable is NIL, `r' elements will be treated just like `p'
4eca60cb3c4d (tempo-insert-region, tempo-show-completion-buffer,
Richard M. Stallman <rms@gnu.org>
parents: 7296
diff changeset
129 elements, unless the template function is given a prefix (or a non-nil
10516
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
130 argument). If this variable is non-NIL, the behaviour is reversed.
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
131
21088
ac1673121774 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 14169
diff changeset
132 In Transient Mark mode, this option is unused."
ac1673121774 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 14169
diff changeset
133 :type 'boolean
ac1673121774 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 14169
diff changeset
134 :group 'tempo)
7410
4eca60cb3c4d (tempo-insert-region, tempo-show-completion-buffer,
Richard M. Stallman <rms@gnu.org>
parents: 7296
diff changeset
135
21088
ac1673121774 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 14169
diff changeset
136 (defcustom tempo-show-completion-buffer t
7410
4eca60cb3c4d (tempo-insert-region, tempo-show-completion-buffer,
Richard M. Stallman <rms@gnu.org>
parents: 7296
diff changeset
137 "*If non-NIL, show a buffer with possible completions, when only
21088
ac1673121774 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 14169
diff changeset
138 a partial completion can be found"
ac1673121774 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 14169
diff changeset
139 :type 'boolean
ac1673121774 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 14169
diff changeset
140 :group 'tempo)
7410
4eca60cb3c4d (tempo-insert-region, tempo-show-completion-buffer,
Richard M. Stallman <rms@gnu.org>
parents: 7296
diff changeset
141
21088
ac1673121774 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 14169
diff changeset
142 (defcustom tempo-leave-completion-buffer nil
7410
4eca60cb3c4d (tempo-insert-region, tempo-show-completion-buffer,
Richard M. Stallman <rms@gnu.org>
parents: 7296
diff changeset
143 "*If NIL, a completion buffer generated by \\[tempo-complete-tag]
21088
ac1673121774 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 14169
diff changeset
144 disappears at the next keypress; otherwise, it remains forever."
ac1673121774 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 14169
diff changeset
145 :type 'boolean
ac1673121774 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 14169
diff changeset
146 :group 'tempo)
7410
4eca60cb3c4d (tempo-insert-region, tempo-show-completion-buffer,
Richard M. Stallman <rms@gnu.org>
parents: 7296
diff changeset
147
10516
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
148 ;;; Internal variables
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
149
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
150 (defvar tempo-insert-string-functions nil
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
151 "List of functions to run when inserting a string.
12321
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
152 Each function is called with a single arg, STRING and should return
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
153 another string. This could be used for making all strings upcase by
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
154 setting it to '(upcase), for example.")
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
155
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
156 (defvar tempo-tags nil
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
157 "An association list with tags and corresponding templates")
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
158
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
159 (defvar tempo-local-tags '((tempo-tags . nil))
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
160 "A list of locally installed tag completion lists.
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
161 It is a association list where the car of every element is a symbol
14008
f8a4126da2c8 (tempo-local-tags, tempo-user-elements, tempo-use-tag-list):
Karl Heuer <kwzh@gnu.org>
parents: 12333
diff changeset
162 whose variable value is a template list. The cdr part, if non-nil, is a
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
163 function or a regexp that defines the string to match. See the
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
164 documentation for the function `tempo-complete-tag' for more info.
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
165
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
166 `tempo-tags' is always in the last position in this list.")
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
167
10516
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
168 (defvar tempo-collection nil
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
169 "A collection of all the tags defined for the current buffer.")
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
170
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
171 (defvar tempo-dirty-collection t
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
172 "Indicates if the tag collection needs to be rebuilt.")
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
173
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
174 (defvar tempo-marks nil
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
175 "A list of marks to jump to with `\\[tempo-forward-mark]' and `\\[tempo-backward-mark]'.")
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
176
10516
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
177 (defvar tempo-match-finder "\\b\\([^\\b]+\\)\\="
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
178 "The regexp or function used to find the string to match against tags.
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
179
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
180 If `tempo-match-finder is a string, it should contain a regular
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
181 expression with at least one \\( \\) pair. When searching for tags,
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
182 `tempo-complete-tag' calls `re-search-backward' with this string, and
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
183 the string between the first \\( and \\) is used for matching against
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
184 each string in the tag list. If one is found, the whole text between
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
185 the first \\( and the point is replaced with the inserted template.
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
186
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
187 You will probably want to include \\ \= at the end of the regexp to
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
188 make sure that the string is matched only against text adjacent to the
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
189 point.
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
190
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
191 If `tempo-match-finder' is a symbol, it should be a function that
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
192 returns a pair of the form (STRING . POS), where STRING is the string
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
193 used for matching and POS is the buffer position after which text
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
194 should be replaced with a template.")
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
195
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
196 (defvar tempo-user-elements nil
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
197 "Element handlers for user-defined elements.
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
198 A list of symbols which are bound to functions that take one argument.
14008
f8a4126da2c8 (tempo-local-tags, tempo-user-elements, tempo-use-tag-list):
Karl Heuer <kwzh@gnu.org>
parents: 12333
diff changeset
199 This function should return something to be sent to `tempo-insert' if
10516
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
200 it recognizes the argument, and NIL otherwise")
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
201
7410
4eca60cb3c4d (tempo-insert-region, tempo-show-completion-buffer,
Richard M. Stallman <rms@gnu.org>
parents: 7296
diff changeset
202 (defvar tempo-named-insertions nil
4eca60cb3c4d (tempo-insert-region, tempo-show-completion-buffer,
Richard M. Stallman <rms@gnu.org>
parents: 7296
diff changeset
203 "Temporary storage for named insertions")
4eca60cb3c4d (tempo-insert-region, tempo-show-completion-buffer,
Richard M. Stallman <rms@gnu.org>
parents: 7296
diff changeset
204
10516
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
205 (defvar tempo-region-start (make-marker)
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
206 "Region start when inserting around the region")
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
207
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
208 (defvar tempo-region-stop (make-marker)
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
209 "Region stop when inserting around the region")
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
210
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
211 ;; Make some variables local to every buffer
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
212
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
213 (make-variable-buffer-local 'tempo-marks)
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
214 (make-variable-buffer-local 'tempo-local-tags)
10516
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
215 (make-variable-buffer-local 'tempo-match-finder)
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
216 (make-variable-buffer-local 'tempo-collection)
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
217 (make-variable-buffer-local 'tempo-dirty-collection)
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
218
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
219 ;;; Functions
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
220
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
221 ;;
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
222 ;; tempo-define-template
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
223
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
224 (defun tempo-define-template (name elements &optional tag documentation taglist)
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
225 "Define a template.
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
226 This function creates a template variable `tempo-template-NAME' and an
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
227 interactive function `tempo-template-NAME' that inserts the template
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
228 at the point. The created function is returned.
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
229
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
230 NAME is a string that contains the name of the template, ELEMENTS is a
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
231 list of elements in the template, TAG is the tag used for completion,
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
232 DOCUMENTATION is the documentation string for the insertion command
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
233 created, and TAGLIST (a symbol) is the tag list that TAG (if provided)
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
234 should be added to). If TAGLIST is nil and TAG is non-nil, TAG is
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
235 added to `tempo-tags'
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
236
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
237 The elements in ELEMENTS can be of several types:
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
238
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
239 - A string. It is sent to the hooks in `tempo-insert-string-functions',
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
240 and the result is inserted.
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
241 - The symbol 'p. This position is saved in `tempo-marks'.
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
242 - The symbol 'r. If `tempo-insert' is called with ON-REGION non-nil
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
243 the current region is placed here. Otherwise it works like 'p.
12321
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
244 - (p PROMPT <NAME> <NOINSERT>) If `tempo-interactive' is non-nil, the
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
245 user is prompted in the minbuffer with PROMPT for a string to be
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
246 inserted. If the optional parameter NAME is non-nil, the text is
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
247 saved for later insertion with the `s' tag. If there already is
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
248 something saved under NAME that value is used instead and no
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
249 prompting is made. If NOINSERT is provided and non-nil, nothing is
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
250 inserted, but text is still saved when a NAME is provided. For
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
251 clarity, the symbol 'noinsert should be used as argument.
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
252 - (P PROMPT <NAME> <NOINSERT>) Works just like the previous tag, but
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
253 forces tempo-interactive to be true.
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
254 - (r PROMPT <NAME> <NOINSERT>) like the previous, but if
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
255 `tempo-interactive' is nil and `tempo-insert' is called with
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
256 ON-REGION non-nil, the current region is placed here. This usually
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
257 happens when you call the template function with a prefix argument.
7410
4eca60cb3c4d (tempo-insert-region, tempo-show-completion-buffer,
Richard M. Stallman <rms@gnu.org>
parents: 7296
diff changeset
258 - (s NAME) Inserts text previously read with the (p ..) construct.
4eca60cb3c4d (tempo-insert-region, tempo-show-completion-buffer,
Richard M. Stallman <rms@gnu.org>
parents: 7296
diff changeset
259 Finds the insertion saved under NAME and inserts it. Acts like 'p
4eca60cb3c4d (tempo-insert-region, tempo-show-completion-buffer,
Richard M. Stallman <rms@gnu.org>
parents: 7296
diff changeset
260 if tempo-interactive is nil.
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
261 - '& If there is only whitespace between the line start and point,
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
262 nothing happens. Otherwise a newline is inserted.
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
263 - '% If there is only whitespace between point and end-of-line
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
264 nothing happens. Otherwise a newline is inserted.
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
265 - 'n inserts a newline.
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
266 - '> The line is indented using `indent-according-to-mode'. Note that
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
267 you often should place this item after the text you want on the
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
268 line.
12321
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
269 - 'r> Like r, but it also indents the region.
10516
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
270 - 'n> Inserts a newline and indents line.
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
271 - 'o Like '% but leaves the point before the newline.
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
272 - nil. It is ignored.
12321
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
273 - Anything else. It is evaluated and the result is treated as an
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
274 element to be inserted. One additional tag is useful for these
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
275 cases. If an expression returns a list '(l foo bar), the elements
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
276 after 'l will be inserted according to the usual rules. This makes
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
277 it possible to return several elements from one expression."
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
278
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
279 (let* ((template-name (intern (concat "tempo-template-"
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
280 name)))
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
281 (command-name template-name))
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
282 (set template-name elements)
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
283 (fset command-name (list 'lambda (list '&optional 'arg)
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
284 (or documentation
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
285 (concat "Insert a " name "."))
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
286 (list 'interactive "*P")
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
287 (list 'tempo-insert-template (list 'quote
7410
4eca60cb3c4d (tempo-insert-region, tempo-show-completion-buffer,
Richard M. Stallman <rms@gnu.org>
parents: 7296
diff changeset
288 template-name)
4eca60cb3c4d (tempo-insert-region, tempo-show-completion-buffer,
Richard M. Stallman <rms@gnu.org>
parents: 7296
diff changeset
289 (list 'if 'tempo-insert-region
4eca60cb3c4d (tempo-insert-region, tempo-show-completion-buffer,
Richard M. Stallman <rms@gnu.org>
parents: 7296
diff changeset
290 (list 'not 'arg) 'arg))))
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
291 (and tag
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
292 (tempo-add-tag tag template-name taglist))
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
293 command-name))
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
294
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
295 ;;;
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
296 ;;; tempo-insert-template
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
297
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
298 (defun tempo-insert-template (template on-region)
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
299 "Insert a template.
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
300 TEMPLATE is the template to be inserted. If ON-REGION is non-nil the
10516
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
301 `r' elements are replaced with the current region. In Transient Mark
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
302 mode, ON-REGION is ignored and assumed true if the region is active."
12321
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
303 (unwind-protect
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
304 (progn
12333
5364f0b969f3 Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 12321
diff changeset
305 (if (or (and (boundp 'transient-mark-mode) ; For Emacs
12321
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
306 transient-mark-mode
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
307 mark-active)
12333
5364f0b969f3 Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 12321
diff changeset
308 (and (boundp 'zmacs-regions) ; For XEmacs
12321
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
309 zmacs-regions (mark)))
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
310 (setq on-region t))
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
311 (and on-region
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
312 (set-marker tempo-region-start (min (mark) (point)))
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
313 (set-marker tempo-region-stop (max (mark) (point))))
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
314 (if on-region
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
315 (goto-char tempo-region-start))
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
316 (save-excursion
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
317 (tempo-insert-mark (point-marker))
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
318 (mapcar (function (lambda (elt)
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
319 (tempo-insert elt on-region)))
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
320 (symbol-value template))
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
321 (tempo-insert-mark (point-marker)))
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
322 (tempo-forward-mark))
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
323 (tempo-forget-insertions)
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
324 ;; Should I check for zmacs here too???
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
325 (and (boundp 'transient-mark-mode)
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
326 transient-mark-mode
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
327 (deactivate-mark))))
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
328
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
329 ;;;
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
330 ;;; tempo-insert
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
331
10516
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
332 (defun tempo-insert (element on-region)
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
333 "Insert a template element.
10516
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
334 Insert one element from a template. If ON-REGION is non-nil the `r'
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
335 elements are replaced with the current region.
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
336
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
337 See documentation for `tempo-define-template' for the kind of elements
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
338 possible."
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
339 (cond ((stringp element) (tempo-process-and-insert-string element))
12321
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
340 ((and (consp element)
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
341 (eq (car element) 'p)) (tempo-insert-prompt-compat
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
342 (cdr element)))
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
343 ((and (consp element)
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
344 (eq (car element) 'P)) (let ((tempo-interactive t))
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
345 (tempo-insert-prompt-compat
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
346 (cdr element))))
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
347 ;;; ((and (consp element)
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
348 ;;; (eq (car element) 'v)) (tempo-save-named
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
349 ;;; (nth 1 element)
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
350 ;;; nil
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
351 ;;; (nth 2 element)))
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
352 ((and (consp element)
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
353 (eq (car element) 'r)) (if on-region
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
354 (goto-char tempo-region-stop)
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
355 (tempo-insert-prompt-compat
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
356 (cdr element))))
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
357 ((and (consp element)
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
358 (eq (car element) 's)) (tempo-insert-named (car (cdr element))))
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
359 ((and (consp element)
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
360 (eq (car element) 'l)) (mapcar (function
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
361 (lambda (elt)
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
362 (tempo-insert elt on-region)))
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
363 (cdr element)))
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
364 ((eq element 'p) (tempo-insert-mark (point-marker)))
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
365 ((eq element 'r) (if on-region
10516
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
366 (goto-char tempo-region-stop)
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
367 (tempo-insert-mark (point-marker))))
10516
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
368 ((eq element 'r>) (if on-region
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
369 (progn
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
370 (goto-char tempo-region-stop)
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
371 (indent-region (mark) (point) nil))
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
372 (tempo-insert-mark (point-marker))))
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
373 ((eq element '>) (indent-according-to-mode))
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
374 ((eq element '&) (if (not (or (= (current-column) 0)
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
375 (save-excursion
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
376 (re-search-backward
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
377 "^\\s-*\\=" nil t))))
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
378 (insert "\n")))
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
379 ((eq element '%) (if (not (or (eolp)
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
380 (save-excursion
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
381 (re-search-forward
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
382 "\\=\\s-*$" nil t))))
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
383 (insert "\n")))
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
384 ((eq element 'n) (insert "\n"))
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
385 ((eq element 'n>) (insert "\n") (indent-according-to-mode))
10516
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
386 ;; Bug: If the 'o is the first element in a template, strange
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
387 ;; things can happen when the template is inserted at the
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
388 ;; beginning of a line.
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
389 ((eq element 'o) (if (not (or on-region
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
390 (eolp)
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
391 (save-excursion
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
392 (re-search-forward
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
393 "\\=\\s-*$" nil t))))
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
394 (open-line 1)))
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
395 ((null element))
10516
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
396 (t (tempo-insert (or (tempo-is-user-element element)
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
397 (eval element))
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
398 on-region))))
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
399
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
400 ;;;
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
401 ;;; tempo-insert-prompt
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
402
12321
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
403 (defun tempo-insert-prompt-compat (prompt)
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
404 "Compatibility hack for tempo-insert-prompt.
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
405 PROMPT can be either a prompt string, or a list of arguments to
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
406 tempo-insert-prompt, or nil."
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
407 (if (consp prompt) ; not NIL either
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
408 (apply 'tempo-insert-prompt prompt)
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
409 (tempo-insert-prompt prompt)))
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
410
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
411 (defun tempo-insert-prompt (prompt &optional save-name no-insert)
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
412 "Prompt for a text string and insert it in the current buffer.
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
413 If the variable `tempo-interactive' is non-nil the user is prompted
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
414 for a string in the minibuffer, which is then inserted in the current
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
415 buffer. If `tempo-interactive' is nil, the current point is placed on
7410
4eca60cb3c4d (tempo-insert-region, tempo-show-completion-buffer,
Richard M. Stallman <rms@gnu.org>
parents: 7296
diff changeset
416 `tempo-mark'.
4eca60cb3c4d (tempo-insert-region, tempo-show-completion-buffer,
Richard M. Stallman <rms@gnu.org>
parents: 7296
diff changeset
417
12321
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
418 PROMPT is the prompt string, SAVE-NAME is a name to save the inserted
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
419 text under. If the optional argument NO-INSERT is non-nil, no text i
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
420 inserted. This can be useful when there is a SAVE-NAME.
7410
4eca60cb3c4d (tempo-insert-region, tempo-show-completion-buffer,
Richard M. Stallman <rms@gnu.org>
parents: 7296
diff changeset
421
12321
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
422 If there already is a value for SAVE-NAME, it is used and the user is
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
423 never prompted."
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
424 (let (insertion
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
425 (previous (and save-name
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
426 (tempo-lookup-named save-name))))
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
427 (cond
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
428 ;; Insert previous value, unless no-insert is non-nil
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
429 ((and previous
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
430 (not no-insert))
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
431 (tempo-insert-named save-name)) ; A double lookup here, but who
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
432 ; cares
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
433 ;; If no-insert is non-nil, don't insert the previous value. Just
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
434 ;; keep it
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
435 (previous
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
436 nil)
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
437 ;; No previous value. Prompt or insert mark
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
438 (tempo-interactive
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
439 (if (not (stringp prompt))
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
440 (error "tempo: The prompt (%s) is not a string" prompt))
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
441 (setq insertion (read-string prompt))
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
442 (or no-insert
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
443 (insert insertion))
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
444 (if save-name
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
445 (tempo-save-named save-name insertion)))
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
446 (t
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
447 (tempo-insert-mark (point-marker))))))
7410
4eca60cb3c4d (tempo-insert-region, tempo-show-completion-buffer,
Richard M. Stallman <rms@gnu.org>
parents: 7296
diff changeset
448
4eca60cb3c4d (tempo-insert-region, tempo-show-completion-buffer,
Richard M. Stallman <rms@gnu.org>
parents: 7296
diff changeset
449 ;;;
10516
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
450 ;;; tempo-is-user-element
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
451
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
452 (defun tempo-is-user-element (element)
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
453 "Tries all the user-defined element handlers in
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
454 `tempo-user-elements'"
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
455 ;; Sigh... I need (some list)
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
456 (catch 'found
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
457 (mapcar (function (lambda (handler)
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
458 (let ((result (funcall handler element)))
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
459 (if result (throw 'found result)))))
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
460 tempo-user-elements)
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
461 (throw 'found nil)))
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
462
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
463 ;;;
7410
4eca60cb3c4d (tempo-insert-region, tempo-show-completion-buffer,
Richard M. Stallman <rms@gnu.org>
parents: 7296
diff changeset
464 ;;; tempo-forget-insertions
4eca60cb3c4d (tempo-insert-region, tempo-show-completion-buffer,
Richard M. Stallman <rms@gnu.org>
parents: 7296
diff changeset
465
4eca60cb3c4d (tempo-insert-region, tempo-show-completion-buffer,
Richard M. Stallman <rms@gnu.org>
parents: 7296
diff changeset
466 (defun tempo-forget-insertions ()
4eca60cb3c4d (tempo-insert-region, tempo-show-completion-buffer,
Richard M. Stallman <rms@gnu.org>
parents: 7296
diff changeset
467 "Forget all the saved named insertions."
4eca60cb3c4d (tempo-insert-region, tempo-show-completion-buffer,
Richard M. Stallman <rms@gnu.org>
parents: 7296
diff changeset
468 (setq tempo-named-insertions nil))
4eca60cb3c4d (tempo-insert-region, tempo-show-completion-buffer,
Richard M. Stallman <rms@gnu.org>
parents: 7296
diff changeset
469
4eca60cb3c4d (tempo-insert-region, tempo-show-completion-buffer,
Richard M. Stallman <rms@gnu.org>
parents: 7296
diff changeset
470 ;;;
12321
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
471 ;;; tempo-save-named
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
472
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
473 (defun tempo-save-named (name data) ; Had an optional prompt for 'v
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
474 "Save some data for later insertion
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
475 The contents of DATA is saved under the name NAME.
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
476
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
477 The data can later be retrieved with `tempo-lookup-named'.
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
478
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
479 This function returns nil, so it can be used in a template without
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
480 inserting anything."
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
481 (setq tempo-named-insertions
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
482 (cons (cons name data)
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
483 tempo-named-insertions))
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
484 nil)
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
485
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
486 ;;;
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
487 ;;; tempo-lookup-named
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
488
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
489 (defun tempo-lookup-named (name)
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
490 "Lookup some saved data under the name NAME.
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
491 Returns the data if NAME was found, and nil otherwise."
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
492 (cdr (assq name tempo-named-insertions)))
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
493
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
494 ;;;
7410
4eca60cb3c4d (tempo-insert-region, tempo-show-completion-buffer,
Richard M. Stallman <rms@gnu.org>
parents: 7296
diff changeset
495 ;;; tempo-insert-named
4eca60cb3c4d (tempo-insert-region, tempo-show-completion-buffer,
Richard M. Stallman <rms@gnu.org>
parents: 7296
diff changeset
496
11196
a74358cc05c6 (tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents: 10516
diff changeset
497 (defun tempo-insert-named (name)
a74358cc05c6 (tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents: 10516
diff changeset
498 "Insert the previous insertion saved under a named specified in NAME.
12321
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
499 If there is no such name saved, a tempo mark is inserted.
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
500
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
501 Note that if the data is a string, it will not be run through the string
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
502 processor."
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
503 (let* ((insertion (tempo-lookup-named name)))
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
504 (cond ((null insertion)
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
505 (tempo-insert-mark (point-marker)))
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
506 ((stringp insertion)
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
507 (insert insertion))
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
508 (t
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
509 (tempo-insert insertion nil)))))
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
510
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
511
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
512 ;;;
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
513 ;;; tempo-process-and-insert-string
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
514
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
515 (defun tempo-process-and-insert-string (string)
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
516 "Insert a string from a template.
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
517 Run a string through the preprocessors in `tempo-insert-string-functions'
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
518 and insert the results."
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
519 (cond ((null tempo-insert-string-functions)
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
520 nil)
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
521 ((symbolp tempo-insert-string-functions)
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
522 (setq string
11196
a74358cc05c6 (tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents: 10516
diff changeset
523 (funcall tempo-insert-string-functions string)))
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
524 ((listp tempo-insert-string-functions)
27684
db5b16cdb88d (tempo-dolist, tempo-mapc): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 25278
diff changeset
525 (dolist (fn tempo-insert-string-functions)
11196
a74358cc05c6 (tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents: 10516
diff changeset
526 (setq string (funcall fn string))))
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
527 (t
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
528 (error "Bogus value in tempo-insert-string-functions: %s"
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
529 tempo-insert-string-functions)))
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
530 (insert string))
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
531
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
532 ;;;
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
533 ;;; tempo-insert-mark
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
534
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
535 (defun tempo-insert-mark (mark)
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
536 "Insert a mark `tempo-marks' while keeping it sorted"
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
537 (cond ((null tempo-marks) (setq tempo-marks (list mark)))
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
538 ((< mark (car tempo-marks)) (setq tempo-marks (cons mark tempo-marks)))
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
539 (t (let ((lp tempo-marks))
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
540 (while (and (cdr lp)
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
541 (<= (car (cdr lp)) mark))
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
542 (setq lp (cdr lp)))
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
543 (if (not (= mark (car lp)))
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
544 (setcdr lp (cons mark (cdr lp))))))))
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
545
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
546 ;;;
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
547 ;;; tempo-forward-mark
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
548
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
549 (defun tempo-forward-mark ()
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
550 "Jump to the next mark in `tempo-forward-mark-list'."
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
551 (interactive)
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
552 (let ((next-mark (catch 'found
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
553 (mapcar
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
554 (function
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
555 (lambda (mark)
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
556 (if (< (point) mark)
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
557 (throw 'found mark))))
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
558 tempo-marks)
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
559 ;; return nil if not found
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
560 nil)))
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
561 (if next-mark
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
562 (goto-char next-mark))))
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
563
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
564 ;;;
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
565 ;;; tempo-backward-mark
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
566
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
567 (defun tempo-backward-mark ()
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
568 "Jump to the previous mark in `tempo-back-mark-list'."
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
569 (interactive)
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
570 (let ((prev-mark (catch 'found
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
571 (let (last)
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
572 (mapcar
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
573 (function
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
574 (lambda (mark)
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
575 (if (<= (point) mark)
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
576 (throw 'found last))
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
577 (setq last mark)))
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
578 tempo-marks)
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
579 last))))
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
580 (if prev-mark
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
581 (goto-char prev-mark))))
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
582
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
583 ;;;
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
584 ;;; tempo-add-tag
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
585
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
586 (defun tempo-add-tag (tag template &optional tag-list)
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
587 "Add a template tag.
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
588 Add the TAG, that should complete to TEMPLATE to the list in TAG-LIST,
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
589 or to `tempo-tags' if TAG-LIST is nil."
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
590
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
591 (interactive "sTag: \nCTemplate: ")
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
592 (if (null tag-list)
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
593 (setq tag-list 'tempo-tags))
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
594 (if (not (assoc tag (symbol-value tag-list)))
10516
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
595 (set tag-list (cons (cons tag template) (symbol-value tag-list))))
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
596 (tempo-invalidate-collection))
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
597
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
598 ;;;
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
599 ;;; tempo-use-tag-list
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
600
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
601 (defun tempo-use-tag-list (tag-list &optional completion-function)
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
602 "Install TAG-LIST to be used for template completion in the current buffer.
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
603 TAG-LIST is a symbol whose variable value is a tag list created with
10516
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
604 `tempo-add-tag'.
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
605
14008
f8a4126da2c8 (tempo-local-tags, tempo-user-elements, tempo-use-tag-list):
Karl Heuer <kwzh@gnu.org>
parents: 12333
diff changeset
606 COMPLETION-FUNCTION is an obsolete option for specifying an optional
10516
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
607 function or string that is used by `\\[tempo-complete-tag]' to find a
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
608 string to match the tag against. It has the same definition as the
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
609 variable `tempo-match-finder'. In this version, supplying a
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
610 COMPLETION-FUNCTION just sets `tempo-match-finder' locally."
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
611 (let ((old (assq tag-list tempo-local-tags)))
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
612 (if old
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
613 (setcdr old completion-function)
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
614 (setq tempo-local-tags (cons (cons tag-list completion-function)
10516
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
615 tempo-local-tags))))
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
616 (if completion-function
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
617 (setq tempo-match-finder completion-function))
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
618 (tempo-invalidate-collection))
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
619
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
620 ;;;
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
621 ;;; tempo-invalidate-collection
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
622
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
623 (defun tempo-invalidate-collection ()
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
624 "Marks the tag collection as obsolete.
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
625 Whenever it is needed again it will be rebuilt."
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
626 (setq tempo-dirty-collection t))
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
627
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
628 ;;;
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
629 ;;; tempo-build-collection
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
630
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
631 (defun tempo-build-collection ()
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
632 "Build a collection of all the tags and return it.
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
633 If `tempo-dirty-collection' is NIL, the old collection is reused."
11208
18107abf5df3 (tempo-build-collection): Clear flag after computing
Karl Heuer <kwzh@gnu.org>
parents: 11202
diff changeset
634 (prog1
18107abf5df3 (tempo-build-collection): Clear flag after computing
Karl Heuer <kwzh@gnu.org>
parents: 11202
diff changeset
635 (or (and (not tempo-dirty-collection)
18107abf5df3 (tempo-build-collection): Clear flag after computing
Karl Heuer <kwzh@gnu.org>
parents: 11202
diff changeset
636 tempo-collection)
18107abf5df3 (tempo-build-collection): Clear flag after computing
Karl Heuer <kwzh@gnu.org>
parents: 11202
diff changeset
637 (setq tempo-collection
18107abf5df3 (tempo-build-collection): Clear flag after computing
Karl Heuer <kwzh@gnu.org>
parents: 11202
diff changeset
638 (apply (function append)
18107abf5df3 (tempo-build-collection): Clear flag after computing
Karl Heuer <kwzh@gnu.org>
parents: 11202
diff changeset
639 (mapcar (function (lambda (tag-list)
10516
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
640 ; If the format for
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
641 ; tempo-local-tags changes,
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
642 ; change this
11208
18107abf5df3 (tempo-build-collection): Clear flag after computing
Karl Heuer <kwzh@gnu.org>
parents: 11202
diff changeset
643 (eval (car tag-list))))
18107abf5df3 (tempo-build-collection): Clear flag after computing
Karl Heuer <kwzh@gnu.org>
parents: 11202
diff changeset
644 tempo-local-tags))))
18107abf5df3 (tempo-build-collection): Clear flag after computing
Karl Heuer <kwzh@gnu.org>
parents: 11202
diff changeset
645 (setq tempo-dirty-collection nil)))
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
646
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
647 ;;;
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
648 ;;; tempo-find-match-string
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
649
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
650 (defun tempo-find-match-string (finder)
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
651 "Find a string to be matched against a tag list.
11196
a74358cc05c6 (tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents: 10516
diff changeset
652 FINDER is a function or a string. Returns (STRING . POS), or nil
a74358cc05c6 (tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents: 10516
diff changeset
653 if no reasonable string is found."
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
654 (cond ((stringp finder)
11196
a74358cc05c6 (tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents: 10516
diff changeset
655 (let (successful)
a74358cc05c6 (tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents: 10516
diff changeset
656 (save-excursion
a74358cc05c6 (tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents: 10516
diff changeset
657 (or (setq successful (re-search-backward finder nil t))
a74358cc05c6 (tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents: 10516
diff changeset
658 0))
a74358cc05c6 (tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents: 10516
diff changeset
659 (if successful
a74358cc05c6 (tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents: 10516
diff changeset
660 (cons (buffer-substring (match-beginning 1)
a74358cc05c6 (tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents: 10516
diff changeset
661 (match-end 1)) ; This seems to be a
a74358cc05c6 (tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents: 10516
diff changeset
662 ; bug in emacs
a74358cc05c6 (tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents: 10516
diff changeset
663 (match-beginning 1))
a74358cc05c6 (tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents: 10516
diff changeset
664 nil)))
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
665 (t
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
666 (funcall finder))))
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
667
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
668 ;;;
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
669 ;;; tempo-complete-tag
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
670
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
671 (defun tempo-complete-tag (&optional silent)
7410
4eca60cb3c4d (tempo-insert-region, tempo-show-completion-buffer,
Richard M. Stallman <rms@gnu.org>
parents: 7296
diff changeset
672 "Look for a tag and expand it.
11196
a74358cc05c6 (tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents: 10516
diff changeset
673 All the tags in the tag lists in `tempo-local-tags'
11208
18107abf5df3 (tempo-build-collection): Clear flag after computing
Karl Heuer <kwzh@gnu.org>
parents: 11202
diff changeset
674 \(this includes `tempo-tags') are searched for a match for the text
11196
a74358cc05c6 (tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents: 10516
diff changeset
675 before the point. The way the string to match for is determined can
a74358cc05c6 (tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents: 10516
diff changeset
676 be altered with the variable `tempo-match-finder'. If
a74358cc05c6 (tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents: 10516
diff changeset
677 `tempo-match-finder' returns nil, then the results are the same as
a74358cc05c6 (tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents: 10516
diff changeset
678 no match at all.
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
679
10516
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
680 If a single match is found, the corresponding template is expanded in
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
681 place of the matching string.
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
682
10516
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
683 If a partial completion or no match at all is found, and SILENT is
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
684 non-NIL, the function will give a signal.
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
685
10516
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
686 If a partial completion is found and `tempo-show-completion-buffer' is
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
687 non-NIL, a buffer containing possible completions is displayed."
7410
4eca60cb3c4d (tempo-insert-region, tempo-show-completion-buffer,
Richard M. Stallman <rms@gnu.org>
parents: 7296
diff changeset
688
10516
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
689 ;; This function may look like a hack, but this is how I want it to
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
690 ;; work.
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
691 (interactive "*")
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
692 (let* ((collection (tempo-build-collection))
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
693 (match-info (tempo-find-match-string tempo-match-finder))
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
694 (match-string (car match-info))
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
695 (match-start (cdr match-info))
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
696 (exact (assoc match-string collection))
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
697 (compl (or (car exact)
11196
a74358cc05c6 (tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents: 10516
diff changeset
698 (and match-info (try-completion match-string collection)))))
10516
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
699 (if compl (delete-region match-start (point)))
11196
a74358cc05c6 (tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents: 10516
diff changeset
700 (cond ((null match-info) (or silent (ding)))
a74358cc05c6 (tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents: 10516
diff changeset
701 ((null compl) (or silent (ding)))
10516
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
702 ((eq compl t) (tempo-insert-template
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
703 (cdr (assoc match-string
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
704 collection))
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
705 nil))
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
706 (t (if (setq exact (assoc compl collection))
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
707 (tempo-insert-template (cdr exact) nil)
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
708 (insert compl)
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
709 (or silent (ding))
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
710 (if tempo-show-completion-buffer
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
711 (tempo-display-completions match-string
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
712 collection)))))))
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
713
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
714
7410
4eca60cb3c4d (tempo-insert-region, tempo-show-completion-buffer,
Richard M. Stallman <rms@gnu.org>
parents: 7296
diff changeset
715 ;;;
4eca60cb3c4d (tempo-insert-region, tempo-show-completion-buffer,
Richard M. Stallman <rms@gnu.org>
parents: 7296
diff changeset
716 ;;; tempo-display-completions
4eca60cb3c4d (tempo-insert-region, tempo-show-completion-buffer,
Richard M. Stallman <rms@gnu.org>
parents: 7296
diff changeset
717
4eca60cb3c4d (tempo-insert-region, tempo-show-completion-buffer,
Richard M. Stallman <rms@gnu.org>
parents: 7296
diff changeset
718 (defun tempo-display-completions (string tag-list)
4eca60cb3c4d (tempo-insert-region, tempo-show-completion-buffer,
Richard M. Stallman <rms@gnu.org>
parents: 7296
diff changeset
719 "Show a buffer containing possible completions for STRING."
4eca60cb3c4d (tempo-insert-region, tempo-show-completion-buffer,
Richard M. Stallman <rms@gnu.org>
parents: 7296
diff changeset
720 (if tempo-leave-completion-buffer
4eca60cb3c4d (tempo-insert-region, tempo-show-completion-buffer,
Richard M. Stallman <rms@gnu.org>
parents: 7296
diff changeset
721 (with-output-to-temp-buffer "*Completions*"
4eca60cb3c4d (tempo-insert-region, tempo-show-completion-buffer,
Richard M. Stallman <rms@gnu.org>
parents: 7296
diff changeset
722 (display-completion-list
4eca60cb3c4d (tempo-insert-region, tempo-show-completion-buffer,
Richard M. Stallman <rms@gnu.org>
parents: 7296
diff changeset
723 (all-completions string tag-list)))
4eca60cb3c4d (tempo-insert-region, tempo-show-completion-buffer,
Richard M. Stallman <rms@gnu.org>
parents: 7296
diff changeset
724 (save-window-excursion
4eca60cb3c4d (tempo-insert-region, tempo-show-completion-buffer,
Richard M. Stallman <rms@gnu.org>
parents: 7296
diff changeset
725 (with-output-to-temp-buffer "*Completions*"
4eca60cb3c4d (tempo-insert-region, tempo-show-completion-buffer,
Richard M. Stallman <rms@gnu.org>
parents: 7296
diff changeset
726 (display-completion-list
4eca60cb3c4d (tempo-insert-region, tempo-show-completion-buffer,
Richard M. Stallman <rms@gnu.org>
parents: 7296
diff changeset
727 (all-completions string tag-list)))
4eca60cb3c4d (tempo-insert-region, tempo-show-completion-buffer,
Richard M. Stallman <rms@gnu.org>
parents: 7296
diff changeset
728 (sit-for 32767))))
4eca60cb3c4d (tempo-insert-region, tempo-show-completion-buffer,
Richard M. Stallman <rms@gnu.org>
parents: 7296
diff changeset
729
11196
a74358cc05c6 (tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents: 10516
diff changeset
730 ;;;
a74358cc05c6 (tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents: 10516
diff changeset
731 ;;; tempo-expand-if-complete
a74358cc05c6 (tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents: 10516
diff changeset
732
a74358cc05c6 (tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents: 10516
diff changeset
733 (defun tempo-expand-if-complete ()
a74358cc05c6 (tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents: 10516
diff changeset
734 "Expand the tag before point if it is complete.
a74358cc05c6 (tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents: 10516
diff changeset
735 Returns non-nil if an expansion was made and nil otherwise.
a74358cc05c6 (tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents: 10516
diff changeset
736
a74358cc05c6 (tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents: 10516
diff changeset
737 This could as an example be used in a command that is bound to the
a74358cc05c6 (tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents: 10516
diff changeset
738 space bar, and looks something like this:
a74358cc05c6 (tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents: 10516
diff changeset
739
a74358cc05c6 (tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents: 10516
diff changeset
740 (defun tempo-space ()
a74358cc05c6 (tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents: 10516
diff changeset
741 (interactive \"*\")
a74358cc05c6 (tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents: 10516
diff changeset
742 (or (tempo-expand-if-complete)
a74358cc05c6 (tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents: 10516
diff changeset
743 (insert \" \")))"
a74358cc05c6 (tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents: 10516
diff changeset
744
a74358cc05c6 (tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents: 10516
diff changeset
745 (interactive "*")
a74358cc05c6 (tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents: 10516
diff changeset
746 (let* ((collection (tempo-build-collection))
a74358cc05c6 (tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents: 10516
diff changeset
747 (match-info (tempo-find-match-string tempo-match-finder))
a74358cc05c6 (tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents: 10516
diff changeset
748 (match-string (car match-info))
a74358cc05c6 (tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents: 10516
diff changeset
749 (match-start (cdr match-info))
a74358cc05c6 (tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents: 10516
diff changeset
750 (exact (assoc match-string collection)))
a74358cc05c6 (tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents: 10516
diff changeset
751 (if exact
a74358cc05c6 (tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents: 10516
diff changeset
752 (progn
a74358cc05c6 (tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents: 10516
diff changeset
753 (delete-region match-start (point))
a74358cc05c6 (tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents: 10516
diff changeset
754 (tempo-insert-template (cdr exact) nil)
a74358cc05c6 (tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents: 10516
diff changeset
755 t)
a74358cc05c6 (tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents: 10516
diff changeset
756 nil)))
a74358cc05c6 (tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents: 10516
diff changeset
757
10516
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
758 (provide 'tempo)
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
759
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
760 ;;; tempo.el ends here