Mercurial > emacs
annotate lisp/tempo.el @ 107777:13c077500eb3
2010-04-04 John Wiegley <jwiegley@gmail.com>
* ido.el (ido-use-virtual-buffers): New variable to indicate
whether "virtual buffer" support is enabled for IDO. Essentially
it works as follows: Say you are visiting a file and the buffer
gets cleaned up by mignight.el. Later, you want to switch to that
buffer, but find it's no longer open. With virtual buffers
enabled, the buffer name stays in the buffer list (using the
ido-virtual face, and always at the end), and if you select it, it
opens the file back up again. This allows you to think less about
whether recently opened files are still open or not. Most of the
time you can quit Emacs, restart, and then switch to a file buffer
that was previously open as if it still were. NOTE: This feature
has been present in iswitchb for several years now, and I'm
porting the same logic to IDO.
(ido-virtual): Face used to indicate virtual buffers in the list.
(ido-buffer-internal): If a buffer is chosen, and no such buffer
exists, but a virtual buffer of that name does (which would be why
it was in the list), recreate the buffer by reopening the file.
(ido-make-buffer-list): If virtual buffers are being used, call
`ido-add-virtual-buffers-to-list' before the make list hook.
(ido-virtual-buffers): New variable which contains a copy of the
current contents of the `recentf-list', albeit pared down for the
sake of speed, and with proper faces applied.
(ido-add-virtual-buffers-to-list): Using the `recentf-list',
create a list of "virtual buffers" to present to the user in
addition to the currently open set. Note that this logic could
get rather slow if that list is too large. With the default
`recentf-max-saved-items' of 200, there is little speed penalty.
author | jwiegley@gmail.com |
---|---|
date | Sun, 04 Apr 2010 02:55:19 -0400 |
parents | 1d1d5d9bd884 |
children | 376148b31b5e |
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 | 2 |
74442 | 3 ;; Copyright (C) 1994, 1995, 2001, 2002, 2003, 2004, |
106815 | 4 ;; 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. |
7267 | 5 |
43349
53fdd9b8a568
Remove commented provide statement.
Pavel Janík <Pavel@Janik.cz>
parents:
42855
diff
changeset
|
6 ;; Author: David K}gedal <davidk@lysator.liu.se> |
7267 | 7 ;; Created: 16 Feb 1994 |
12333 | 8 ;; K}gedal's last version number: 1.2.4 |
7267 | 9 ;; Keywords: extensions, languages, tools |
10 | |
11 ;; This file is part of GNU Emacs. | |
12 | |
94678
ee5932bf781d
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
93975
diff
changeset
|
13 ;; GNU Emacs is free software: you can redistribute it and/or modify |
7267 | 14 ;; it under the terms of the GNU General Public License as published by |
94678
ee5932bf781d
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
93975
diff
changeset
|
15 ;; the Free Software Foundation, either version 3 of the License, or |
ee5932bf781d
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
93975
diff
changeset
|
16 ;; (at your option) any later version. |
7267 | 17 |
18 ;; GNU Emacs is distributed in the hope that it will be useful, | |
19 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of | |
20 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
21 ;; GNU General Public License for more details. | |
22 | |
23 ;; You should have received a copy of the GNU General Public License | |
94678
ee5932bf781d
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
93975
diff
changeset
|
24 ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. |
7267 | 25 |
26 ;;; Commentary: | |
27 | |
28 ;; This file provides a simple way to define powerful templates, or | |
29 ;; macros, if you wish. It is mainly intended for, but not limited to, | |
30 ;; other programmers to be used for creating shortcuts for editing | |
31 ;; 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
|
32 ;; 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
|
33 ;; 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
|
34 ;; use this program. |
7267 | 35 |
36 ;; A template is defined as a list of items to be inserted in the | |
37 ;; current buffer at point. Some of the items can be simple strings, | |
38 ;; while other can control formatting or define special points of | |
39 ;; interest in the inserted text. | |
40 | |
41 ;; If a template defines a "point of interest" that point is inserted | |
42 ;; in a buffer-local list of "points of interest" that the user can | |
43 ;; jump between with the commands `tempo-backward-mark' and | |
44 ;; `tempo-forward-mark'. If the template definer provides a prompt for | |
45 ;; the point, and the variable `tempo-interactive' is non-nil, the | |
46 ;; user will be prompted for a string to be inserted in the buffer, | |
47 ;; using the minibuffer. | |
48 | |
49 ;; The template can also define one point to be replaced with the | |
50 ;; current region if the template command is called with a prefix (or | |
51 ;; a non-nil argument). | |
52 | |
53 ;; More flexible templates can be created by including lisp symbols, | |
31657
58e2bb13d72e
(tempo-expand-if-complete): Quote paren in docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
27684
diff
changeset
|
54 ;; which will be evaluated as variables, or lists, which will be |
7267 | 55 ;; evaluated as lisp expressions. |
56 | |
57 ;; See the documentation for tempo-define-template for the different | |
58 ;; items that can be used to define a tempo template. | |
59 | |
60 ;; One of the more powerful features of tempo templates are automatic | |
61 ;; completion. With every template can be assigned a special tag that | |
62 ;; should be recognized by `tempo-complete-tag' and expanded to the | |
63 ;; complete template. By default the tags are added to a global list | |
64 ;; of template tags, and are matched against the last word before | |
65 ;; point. But if you assign your tags to a specific list, you can also | |
66 ;; specify another method for matching text in the buffer against the | |
67 ;; tags. In the HTML mode, for instance, the tags are matched against | |
68 ;; the text between the last `<' and point. | |
69 | |
70 ;; When defining a template named `foo', a symbol named | |
71 ;; `tempo-template-foo' will be created whose value as a variable will | |
72 ;; be the template definition, and its function value will be an | |
73 ;; interactive function that inserts the template at the point. | |
74 | |
75 ;; The latest tempo.el distribution can be fetched from | |
76 ;; ftp.lysator.liu.se in the directory /pub/emacs | |
77 | |
12321
35899872cb3f
Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
78 ;; There is also a WWW page at |
35899872cb3f
Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
79 ;; 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
|
80 |
10516
488c5be866c3
(tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents:
7410
diff
changeset
|
81 ;;; Known bugs: |
488c5be866c3
(tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents:
7410
diff
changeset
|
82 |
488c5be866c3
(tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents:
7410
diff
changeset
|
83 ;; 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
|
84 ;; happen when the template is inserted at the beginning of a |
96376
c3309dba6542
American English spelling fix.
Glenn Morris <rgm@gnu.org>
parents:
94678
diff
changeset
|
85 ;; line. This is due to strange behavior in open-line. But it should |
10516
488c5be866c3
(tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents:
7410
diff
changeset
|
86 ;; be easily avoided. |
488c5be866c3
(tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents:
7410
diff
changeset
|
87 |
488c5be866c3
(tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents:
7410
diff
changeset
|
88 ;; 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
|
89 ;; be looked into. |
488c5be866c3
(tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents:
7410
diff
changeset
|
90 |
488c5be866c3
(tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents:
7410
diff
changeset
|
91 ;; 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
|
92 |
488c5be866c3
(tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents:
7410
diff
changeset
|
93 ;; 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
|
94 ;; 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
|
95 ;; emacs version and your problems. |
488c5be866c3
(tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents:
7410
diff
changeset
|
96 |
11196
a74358cc05c6
(tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents:
10516
diff
changeset
|
97 ;;; Contributors: |
a74358cc05c6
(tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents:
10516
diff
changeset
|
98 |
14008
f8a4126da2c8
(tempo-local-tags, tempo-user-elements, tempo-use-tag-list):
Karl Heuer <kwzh@gnu.org>
parents:
12333
diff
changeset
|
99 ;; 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
|
100 ;; 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
|
101 |
a74358cc05c6
(tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents:
10516
diff
changeset
|
102 ;; Nelson Minar <nelson@santafe.edu> |
25278 | 103 ;; 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
|
104 ;; 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
|
105 ;; 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
|
106 |
7267 | 107 ;;; Code: |
108 | |
10516
488c5be866c3
(tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents:
7410
diff
changeset
|
109 ;;; User options |
7267 | 110 |
21088 | 111 (defgroup tempo nil |
112 "Flexible template insertion." | |
113 :prefix "tempo-" | |
114 :group 'tools) | |
115 | |
116 (defcustom tempo-interactive nil | |
100171 | 117 "Prompt user for strings in templates. |
7267 | 118 If this variable is non-nil, `tempo-insert' prompts the |
64561
dc9ffd263776
(tempo-insert-prompt, tempo-interactive, tempo-show-completion-buffer,
Juanma Barranquero <lekktu@gmail.com>
parents:
64377
diff
changeset
|
119 user for text to insert in the templates." |
21088 | 120 :type 'boolean |
121 :group 'tempo) | |
7267 | 122 |
21088 | 123 (defcustom tempo-insert-region nil |
100171 | 124 "Automatically insert current region when there is a `r' in the template |
42205 | 125 If this variable is nil, `r' elements will be treated just like `p' |
7410
4eca60cb3c4d
(tempo-insert-region, tempo-show-completion-buffer,
Richard M. Stallman <rms@gnu.org>
parents:
7296
diff
changeset
|
126 elements, unless the template function is given a prefix (or a non-nil |
63259
fa1c7a31ac5d
(tempo-insert-region): Fix spellings in docstrings.
Juanma Barranquero <lekktu@gmail.com>
parents:
57980
diff
changeset
|
127 argument). If this variable is non-nil, the behavior is reversed. |
10516
488c5be866c3
(tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents:
7410
diff
changeset
|
128 |
21088 | 129 In Transient Mark mode, this option is unused." |
130 :type 'boolean | |
131 :group 'tempo) | |
7410
4eca60cb3c4d
(tempo-insert-region, tempo-show-completion-buffer,
Richard M. Stallman <rms@gnu.org>
parents:
7296
diff
changeset
|
132 |
21088 | 133 (defcustom tempo-show-completion-buffer t |
100171 | 134 "If non-nil, show a buffer with possible completions, when only |
64561
dc9ffd263776
(tempo-insert-prompt, tempo-interactive, tempo-show-completion-buffer,
Juanma Barranquero <lekktu@gmail.com>
parents:
64377
diff
changeset
|
135 a partial completion can be found." |
21088 | 136 :type 'boolean |
137 :group 'tempo) | |
7410
4eca60cb3c4d
(tempo-insert-region, tempo-show-completion-buffer,
Richard M. Stallman <rms@gnu.org>
parents:
7296
diff
changeset
|
138 |
21088 | 139 (defcustom tempo-leave-completion-buffer nil |
100171 | 140 "If nil, a completion buffer generated by \\[tempo-complete-tag] |
21088 | 141 disappears at the next keypress; otherwise, it remains forever." |
142 :type 'boolean | |
143 :group 'tempo) | |
7410
4eca60cb3c4d
(tempo-insert-region, tempo-show-completion-buffer,
Richard M. Stallman <rms@gnu.org>
parents:
7296
diff
changeset
|
144 |
10516
488c5be866c3
(tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents:
7410
diff
changeset
|
145 ;;; Internal variables |
488c5be866c3
(tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents:
7410
diff
changeset
|
146 |
7267 | 147 (defvar tempo-insert-string-functions nil |
148 "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
|
149 Each function is called with a single arg, STRING and should return |
64561
dc9ffd263776
(tempo-insert-prompt, tempo-interactive, tempo-show-completion-buffer,
Juanma Barranquero <lekktu@gmail.com>
parents:
64377
diff
changeset
|
150 another string. This could be used for making all strings upcase by |
12321
35899872cb3f
Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
151 setting it to '(upcase), for example.") |
7267 | 152 |
153 (defvar tempo-tags nil | |
64561
dc9ffd263776
(tempo-insert-prompt, tempo-interactive, tempo-show-completion-buffer,
Juanma Barranquero <lekktu@gmail.com>
parents:
64377
diff
changeset
|
154 "An association list with tags and corresponding templates.") |
7267 | 155 |
156 (defvar tempo-local-tags '((tempo-tags . nil)) | |
157 "A list of locally installed tag completion lists. | |
158 It is a association list where the car of every element is a symbol | |
64561
dc9ffd263776
(tempo-insert-prompt, tempo-interactive, tempo-show-completion-buffer,
Juanma Barranquero <lekktu@gmail.com>
parents:
64377
diff
changeset
|
159 whose variable value is a template list. The cdr part, if non-nil, |
dc9ffd263776
(tempo-insert-prompt, tempo-interactive, tempo-show-completion-buffer,
Juanma Barranquero <lekktu@gmail.com>
parents:
64377
diff
changeset
|
160 is a function or a regexp that defines the string to match. See the |
7267 | 161 documentation for the function `tempo-complete-tag' for more info. |
162 | |
163 `tempo-tags' is always in the last position in this list.") | |
164 | |
10516
488c5be866c3
(tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents:
7410
diff
changeset
|
165 (defvar tempo-collection nil |
488c5be866c3
(tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents:
7410
diff
changeset
|
166 "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
|
167 |
488c5be866c3
(tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents:
7410
diff
changeset
|
168 (defvar tempo-dirty-collection t |
488c5be866c3
(tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents:
7410
diff
changeset
|
169 "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
|
170 |
7267 | 171 (defvar tempo-marks nil |
172 "A list of marks to jump to with `\\[tempo-forward-mark]' and `\\[tempo-backward-mark]'.") | |
173 | |
57967
5c8dcdd5f8bc
(tempo-match-finder): Use [:word:] instead of "^\\b",
Eli Zaretskii <eliz@gnu.org>
parents:
52401
diff
changeset
|
174 (defvar tempo-match-finder "\\b\\([[:word:]]+\\)\\=" |
10516
488c5be866c3
(tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents:
7410
diff
changeset
|
175 "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
|
176 |
64561
dc9ffd263776
(tempo-insert-prompt, tempo-interactive, tempo-show-completion-buffer,
Juanma Barranquero <lekktu@gmail.com>
parents:
64377
diff
changeset
|
177 If `tempo-match-finder' is a string, it should contain a regular |
dc9ffd263776
(tempo-insert-prompt, tempo-interactive, tempo-show-completion-buffer,
Juanma Barranquero <lekktu@gmail.com>
parents:
64377
diff
changeset
|
178 expression with at least one \\( \\) pair. When searching for tags, |
10516
488c5be866c3
(tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents:
7410
diff
changeset
|
179 `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
|
180 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
|
181 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
|
182 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
|
183 |
57980
7863c0adc838
(tempo-match-finder): Doc fix.
Andreas Schwab <schwab@suse.de>
parents:
57967
diff
changeset
|
184 You will probably want to include \\=\\= at the end of the regexp to |
10516
488c5be866c3
(tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents:
7410
diff
changeset
|
185 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
|
186 point. |
488c5be866c3
(tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents:
7410
diff
changeset
|
187 |
488c5be866c3
(tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents:
7410
diff
changeset
|
188 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
|
189 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
|
190 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
|
191 should be replaced with a template.") |
488c5be866c3
(tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents:
7410
diff
changeset
|
192 |
488c5be866c3
(tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents:
7410
diff
changeset
|
193 (defvar tempo-user-elements nil |
488c5be866c3
(tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents:
7410
diff
changeset
|
194 "Element handlers for user-defined elements. |
488c5be866c3
(tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents:
7410
diff
changeset
|
195 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
|
196 This function should return something to be sent to `tempo-insert' if |
42205 | 197 it recognizes the argument, and nil otherwise.") |
7267 | 198 |
7410
4eca60cb3c4d
(tempo-insert-region, tempo-show-completion-buffer,
Richard M. Stallman <rms@gnu.org>
parents:
7296
diff
changeset
|
199 (defvar tempo-named-insertions nil |
42205 | 200 "Temporary storage for named insertions.") |
7410
4eca60cb3c4d
(tempo-insert-region, tempo-show-completion-buffer,
Richard M. Stallman <rms@gnu.org>
parents:
7296
diff
changeset
|
201 |
10516
488c5be866c3
(tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents:
7410
diff
changeset
|
202 (defvar tempo-region-start (make-marker) |
42205 | 203 "Region start when inserting around the region.") |
10516
488c5be866c3
(tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents:
7410
diff
changeset
|
204 |
488c5be866c3
(tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents:
7410
diff
changeset
|
205 (defvar tempo-region-stop (make-marker) |
42205 | 206 "Region stop when inserting around the region.") |
10516
488c5be866c3
(tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents:
7410
diff
changeset
|
207 |
7267 | 208 ;; Make some variables local to every buffer |
209 | |
210 (make-variable-buffer-local 'tempo-marks) | |
211 (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
|
212 (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
|
213 (make-variable-buffer-local 'tempo-collection) |
488c5be866c3
(tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents:
7410
diff
changeset
|
214 (make-variable-buffer-local 'tempo-dirty-collection) |
7267 | 215 |
216 ;;; Functions | |
217 | |
218 ;; | |
219 ;; tempo-define-template | |
220 | |
221 (defun tempo-define-template (name elements &optional tag documentation taglist) | |
222 "Define a template. | |
223 This function creates a template variable `tempo-template-NAME' and an | |
224 interactive function `tempo-template-NAME' that inserts the template | |
225 at the point. The created function is returned. | |
226 | |
227 NAME is a string that contains the name of the template, ELEMENTS is a | |
228 list of elements in the template, TAG is the tag used for completion, | |
229 DOCUMENTATION is the documentation string for the insertion command | |
230 created, and TAGLIST (a symbol) is the tag list that TAG (if provided) | |
64561
dc9ffd263776
(tempo-insert-prompt, tempo-interactive, tempo-show-completion-buffer,
Juanma Barranquero <lekktu@gmail.com>
parents:
64377
diff
changeset
|
231 should be added to. If TAGLIST is nil and TAG is non-nil, TAG is |
dc9ffd263776
(tempo-insert-prompt, tempo-interactive, tempo-show-completion-buffer,
Juanma Barranquero <lekktu@gmail.com>
parents:
64377
diff
changeset
|
232 added to `tempo-tags'. |
7267 | 233 |
234 The elements in ELEMENTS can be of several types: | |
235 | |
64561
dc9ffd263776
(tempo-insert-prompt, tempo-interactive, tempo-show-completion-buffer,
Juanma Barranquero <lekktu@gmail.com>
parents:
64377
diff
changeset
|
236 - A string: It is sent to the hooks in `tempo-insert-string-functions', |
7267 | 237 and the result is inserted. |
64561
dc9ffd263776
(tempo-insert-prompt, tempo-interactive, tempo-show-completion-buffer,
Juanma Barranquero <lekktu@gmail.com>
parents:
64377
diff
changeset
|
238 - The symbol `p': This position is saved in `tempo-marks'. |
dc9ffd263776
(tempo-insert-prompt, tempo-interactive, tempo-show-completion-buffer,
Juanma Barranquero <lekktu@gmail.com>
parents:
64377
diff
changeset
|
239 - The symbol `r': If `tempo-insert' is called with ON-REGION non-nil |
dc9ffd263776
(tempo-insert-prompt, tempo-interactive, tempo-show-completion-buffer,
Juanma Barranquero <lekktu@gmail.com>
parents:
64377
diff
changeset
|
240 the current region is placed here. Otherwise it works like `p'. |
dc9ffd263776
(tempo-insert-prompt, tempo-interactive, tempo-show-completion-buffer,
Juanma Barranquero <lekktu@gmail.com>
parents:
64377
diff
changeset
|
241 - (p PROMPT <NAME> <NOINSERT>): If `tempo-interactive' is non-nil, the |
42855
d20e97a1bd5a
(tempo-define-template): Doc fix.
Pavel Janík <Pavel@Janik.cz>
parents:
42205
diff
changeset
|
242 user is prompted in the minibuffer with PROMPT for a string to be |
64561
dc9ffd263776
(tempo-insert-prompt, tempo-interactive, tempo-show-completion-buffer,
Juanma Barranquero <lekktu@gmail.com>
parents:
64377
diff
changeset
|
243 inserted. If the optional parameter NAME is non-nil, the text is |
dc9ffd263776
(tempo-insert-prompt, tempo-interactive, tempo-show-completion-buffer,
Juanma Barranquero <lekktu@gmail.com>
parents:
64377
diff
changeset
|
244 saved for later insertion with the `s' tag. If there already is |
12321
35899872cb3f
Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
245 something saved under NAME that value is used instead and no |
64561
dc9ffd263776
(tempo-insert-prompt, tempo-interactive, tempo-show-completion-buffer,
Juanma Barranquero <lekktu@gmail.com>
parents:
64377
diff
changeset
|
246 prompting is made. If NOINSERT is provided and non-nil, nothing is |
dc9ffd263776
(tempo-insert-prompt, tempo-interactive, tempo-show-completion-buffer,
Juanma Barranquero <lekktu@gmail.com>
parents:
64377
diff
changeset
|
247 inserted, but text is still saved when a NAME is provided. For |
dc9ffd263776
(tempo-insert-prompt, tempo-interactive, tempo-show-completion-buffer,
Juanma Barranquero <lekktu@gmail.com>
parents:
64377
diff
changeset
|
248 clarity, the symbol `noinsert' should be used as argument. |
dc9ffd263776
(tempo-insert-prompt, tempo-interactive, tempo-show-completion-buffer,
Juanma Barranquero <lekktu@gmail.com>
parents:
64377
diff
changeset
|
249 - (P PROMPT <NAME> <NOINSERT>): Works just like the previous tag, but |
dc9ffd263776
(tempo-insert-prompt, tempo-interactive, tempo-show-completion-buffer,
Juanma Barranquero <lekktu@gmail.com>
parents:
64377
diff
changeset
|
250 forces `tempo-interactive' to be true. |
dc9ffd263776
(tempo-insert-prompt, tempo-interactive, tempo-show-completion-buffer,
Juanma Barranquero <lekktu@gmail.com>
parents:
64377
diff
changeset
|
251 - (r PROMPT <NAME> <NOINSERT>): Like the previous tag, but if |
12321
35899872cb3f
Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
252 `tempo-interactive' is nil and `tempo-insert' is called with |
64561
dc9ffd263776
(tempo-insert-prompt, tempo-interactive, tempo-show-completion-buffer,
Juanma Barranquero <lekktu@gmail.com>
parents:
64377
diff
changeset
|
253 ON-REGION non-nil, the current region is placed here. This usually |
12321
35899872cb3f
Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
254 happens when you call the template function with a prefix argument. |
64561
dc9ffd263776
(tempo-insert-prompt, tempo-interactive, tempo-show-completion-buffer,
Juanma Barranquero <lekktu@gmail.com>
parents:
64377
diff
changeset
|
255 - (s NAME): Inserts text previously read with the (p ..) construct. |
dc9ffd263776
(tempo-insert-prompt, tempo-interactive, tempo-show-completion-buffer,
Juanma Barranquero <lekktu@gmail.com>
parents:
64377
diff
changeset
|
256 Finds the insertion saved under NAME and inserts it. Acts like `p' |
7410
4eca60cb3c4d
(tempo-insert-region, tempo-show-completion-buffer,
Richard M. Stallman <rms@gnu.org>
parents:
7296
diff
changeset
|
257 if tempo-interactive is nil. |
64561
dc9ffd263776
(tempo-insert-prompt, tempo-interactive, tempo-show-completion-buffer,
Juanma Barranquero <lekktu@gmail.com>
parents:
64377
diff
changeset
|
258 - `&': If there is only whitespace between the line start and point, |
dc9ffd263776
(tempo-insert-prompt, tempo-interactive, tempo-show-completion-buffer,
Juanma Barranquero <lekktu@gmail.com>
parents:
64377
diff
changeset
|
259 nothing happens. Otherwise a newline is inserted. |
dc9ffd263776
(tempo-insert-prompt, tempo-interactive, tempo-show-completion-buffer,
Juanma Barranquero <lekktu@gmail.com>
parents:
64377
diff
changeset
|
260 - `%': If there is only whitespace between point and end of line, |
dc9ffd263776
(tempo-insert-prompt, tempo-interactive, tempo-show-completion-buffer,
Juanma Barranquero <lekktu@gmail.com>
parents:
64377
diff
changeset
|
261 nothing happens. Otherwise a newline is inserted. |
dc9ffd263776
(tempo-insert-prompt, tempo-interactive, tempo-show-completion-buffer,
Juanma Barranquero <lekktu@gmail.com>
parents:
64377
diff
changeset
|
262 - `n': Inserts a newline. |
dc9ffd263776
(tempo-insert-prompt, tempo-interactive, tempo-show-completion-buffer,
Juanma Barranquero <lekktu@gmail.com>
parents:
64377
diff
changeset
|
263 - `>': The line is indented using `indent-according-to-mode'. Note |
dc9ffd263776
(tempo-insert-prompt, tempo-interactive, tempo-show-completion-buffer,
Juanma Barranquero <lekktu@gmail.com>
parents:
64377
diff
changeset
|
264 that you often should place this item after the text you want on |
dc9ffd263776
(tempo-insert-prompt, tempo-interactive, tempo-show-completion-buffer,
Juanma Barranquero <lekktu@gmail.com>
parents:
64377
diff
changeset
|
265 the line. |
dc9ffd263776
(tempo-insert-prompt, tempo-interactive, tempo-show-completion-buffer,
Juanma Barranquero <lekktu@gmail.com>
parents:
64377
diff
changeset
|
266 - `r>': Like `r', but it also indents the region. |
76487
8730dda8a05b
(tempo-insert): Deal with 'r> if it appears specified with a prompt
Chong Yidong <cyd@stupidchicken.com>
parents:
75347
diff
changeset
|
267 - (r> PROMPT <NAME> <NOINSERT>): Like (r ...), but is also indents |
8730dda8a05b
(tempo-insert): Deal with 'r> if it appears specified with a prompt
Chong Yidong <cyd@stupidchicken.com>
parents:
75347
diff
changeset
|
268 the region. |
64561
dc9ffd263776
(tempo-insert-prompt, tempo-interactive, tempo-show-completion-buffer,
Juanma Barranquero <lekktu@gmail.com>
parents:
64377
diff
changeset
|
269 - `n>': Inserts a newline and indents line. |
dc9ffd263776
(tempo-insert-prompt, tempo-interactive, tempo-show-completion-buffer,
Juanma Barranquero <lekktu@gmail.com>
parents:
64377
diff
changeset
|
270 - `o': Like `%' but leaves the point before the newline. |
dc9ffd263776
(tempo-insert-prompt, tempo-interactive, tempo-show-completion-buffer,
Juanma Barranquero <lekktu@gmail.com>
parents:
64377
diff
changeset
|
271 - nil: It is ignored. |
dc9ffd263776
(tempo-insert-prompt, tempo-interactive, tempo-show-completion-buffer,
Juanma Barranquero <lekktu@gmail.com>
parents:
64377
diff
changeset
|
272 - Anything else: It is evaluated and the result is treated as an |
dc9ffd263776
(tempo-insert-prompt, tempo-interactive, tempo-show-completion-buffer,
Juanma Barranquero <lekktu@gmail.com>
parents:
64377
diff
changeset
|
273 element to be inserted. One additional tag is useful for these |
dc9ffd263776
(tempo-insert-prompt, tempo-interactive, tempo-show-completion-buffer,
Juanma Barranquero <lekktu@gmail.com>
parents:
64377
diff
changeset
|
274 cases. If an expression returns a list '(l foo bar), the elements |
dc9ffd263776
(tempo-insert-prompt, tempo-interactive, tempo-show-completion-buffer,
Juanma Barranquero <lekktu@gmail.com>
parents:
64377
diff
changeset
|
275 after `l' will be inserted according to the usual rules. This makes |
12321
35899872cb3f
Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
276 it possible to return several elements from one expression." |
7267 | 277 (let* ((template-name (intern (concat "tempo-template-" |
278 name))) | |
279 (command-name template-name)) | |
280 (set template-name elements) | |
281 (fset command-name (list 'lambda (list '&optional 'arg) | |
49597
e88404e8f2cf
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
43349
diff
changeset
|
282 (or documentation |
7267 | 283 (concat "Insert a " name ".")) |
284 (list 'interactive "*P") | |
285 (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
|
286 template-name) |
4eca60cb3c4d
(tempo-insert-region, tempo-show-completion-buffer,
Richard M. Stallman <rms@gnu.org>
parents:
7296
diff
changeset
|
287 (list 'if 'tempo-insert-region |
4eca60cb3c4d
(tempo-insert-region, tempo-show-completion-buffer,
Richard M. Stallman <rms@gnu.org>
parents:
7296
diff
changeset
|
288 (list 'not 'arg) 'arg)))) |
7267 | 289 (and tag |
290 (tempo-add-tag tag template-name taglist)) | |
291 command-name)) | |
292 | |
293 ;;; | |
294 ;;; tempo-insert-template | |
295 | |
296 (defun tempo-insert-template (template on-region) | |
297 "Insert a template. | |
298 TEMPLATE is the template to be inserted. If ON-REGION is non-nil the | |
64561
dc9ffd263776
(tempo-insert-prompt, tempo-interactive, tempo-show-completion-buffer,
Juanma Barranquero <lekktu@gmail.com>
parents:
64377
diff
changeset
|
299 `r' elements are replaced with the current region. In Transient Mark |
10516
488c5be866c3
(tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents:
7410
diff
changeset
|
300 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
|
301 (unwind-protect |
35899872cb3f
Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
302 (progn |
12333 | 303 (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
|
304 transient-mark-mode |
35899872cb3f
Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
305 mark-active) |
64377
8b63c8dfb728
(tempo-insert-template): Suppress warning.
Richard M. Stallman <rms@gnu.org>
parents:
64091
diff
changeset
|
306 (if (featurep 'xemacs) |
64600
07e5e0169359
(tempo-insert-template): Fix 2005-07-16 change.
Juri Linkov <juri@jurta.org>
parents:
64561
diff
changeset
|
307 (and zmacs-regions (mark)))) |
12321
35899872cb3f
Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
308 (setq on-region t)) |
35899872cb3f
Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
309 (and on-region |
35899872cb3f
Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
310 (set-marker tempo-region-start (min (mark) (point))) |
35899872cb3f
Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
311 (set-marker tempo-region-stop (max (mark) (point)))) |
35899872cb3f
Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
312 (if on-region |
35899872cb3f
Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
313 (goto-char tempo-region-start)) |
35899872cb3f
Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
314 (save-excursion |
35899872cb3f
Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
315 (tempo-insert-mark (point-marker)) |
84880
edcc591dc3a4
(tempo-insert-template, tempo-is-user-element, tempo-forward-mark,
Juanma Barranquero <lekktu@gmail.com>
parents:
78236
diff
changeset
|
316 (mapc (function (lambda (elt) |
edcc591dc3a4
(tempo-insert-template, tempo-is-user-element, tempo-forward-mark,
Juanma Barranquero <lekktu@gmail.com>
parents:
78236
diff
changeset
|
317 (tempo-insert elt on-region))) |
edcc591dc3a4
(tempo-insert-template, tempo-is-user-element, tempo-forward-mark,
Juanma Barranquero <lekktu@gmail.com>
parents:
78236
diff
changeset
|
318 (symbol-value template)) |
12321
35899872cb3f
Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
319 (tempo-insert-mark (point-marker))) |
35899872cb3f
Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
320 (tempo-forward-mark)) |
35899872cb3f
Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
321 (tempo-forget-insertions) |
35899872cb3f
Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
322 ;; Should I check for zmacs here too??? |
35899872cb3f
Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
323 (and (boundp 'transient-mark-mode) |
35899872cb3f
Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
324 transient-mark-mode |
35899872cb3f
Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
325 (deactivate-mark)))) |
7267 | 326 |
327 ;;; | |
328 ;;; tempo-insert | |
329 | |
10516
488c5be866c3
(tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents:
7410
diff
changeset
|
330 (defun tempo-insert (element on-region) |
7267 | 331 "Insert a template element. |
10516
488c5be866c3
(tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents:
7410
diff
changeset
|
332 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
|
333 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
|
334 |
488c5be866c3
(tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents:
7410
diff
changeset
|
335 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
|
336 possible." |
7267 | 337 (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
|
338 ((and (consp element) |
35899872cb3f
Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
339 (eq (car element) 'p)) (tempo-insert-prompt-compat |
35899872cb3f
Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
340 (cdr element))) |
35899872cb3f
Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
341 ((and (consp element) |
35899872cb3f
Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
342 (eq (car element) 'P)) (let ((tempo-interactive t)) |
35899872cb3f
Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
343 (tempo-insert-prompt-compat |
35899872cb3f
Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
344 (cdr element)))) |
35899872cb3f
Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
345 ;;; ((and (consp element) |
35899872cb3f
Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
346 ;;; (eq (car element) 'v)) (tempo-save-named |
35899872cb3f
Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
347 ;;; (nth 1 element) |
35899872cb3f
Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
348 ;;; nil |
35899872cb3f
Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
349 ;;; (nth 2 element))) |
35899872cb3f
Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
350 ((and (consp element) |
35899872cb3f
Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
351 (eq (car element) 'r)) (if on-region |
35899872cb3f
Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
352 (goto-char tempo-region-stop) |
35899872cb3f
Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
353 (tempo-insert-prompt-compat |
35899872cb3f
Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
354 (cdr element)))) |
76487
8730dda8a05b
(tempo-insert): Deal with 'r> if it appears specified with a prompt
Chong Yidong <cyd@stupidchicken.com>
parents:
75347
diff
changeset
|
355 ((and (consp element) |
8730dda8a05b
(tempo-insert): Deal with 'r> if it appears specified with a prompt
Chong Yidong <cyd@stupidchicken.com>
parents:
75347
diff
changeset
|
356 (eq (car element) 'r>)) (if on-region |
8730dda8a05b
(tempo-insert): Deal with 'r> if it appears specified with a prompt
Chong Yidong <cyd@stupidchicken.com>
parents:
75347
diff
changeset
|
357 (progn |
8730dda8a05b
(tempo-insert): Deal with 'r> if it appears specified with a prompt
Chong Yidong <cyd@stupidchicken.com>
parents:
75347
diff
changeset
|
358 (goto-char tempo-region-stop) |
8730dda8a05b
(tempo-insert): Deal with 'r> if it appears specified with a prompt
Chong Yidong <cyd@stupidchicken.com>
parents:
75347
diff
changeset
|
359 (indent-region (mark) (point) nil)) |
8730dda8a05b
(tempo-insert): Deal with 'r> if it appears specified with a prompt
Chong Yidong <cyd@stupidchicken.com>
parents:
75347
diff
changeset
|
360 (tempo-insert-prompt-compat |
8730dda8a05b
(tempo-insert): Deal with 'r> if it appears specified with a prompt
Chong Yidong <cyd@stupidchicken.com>
parents:
75347
diff
changeset
|
361 (cdr element)))) |
12321
35899872cb3f
Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
362 ((and (consp element) |
35899872cb3f
Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
363 (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
|
364 ((and (consp element) |
35899872cb3f
Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
365 (eq (car element) 'l)) (mapcar (function |
35899872cb3f
Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
366 (lambda (elt) |
35899872cb3f
Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
367 (tempo-insert elt on-region))) |
35899872cb3f
Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
368 (cdr element))) |
7267 | 369 ((eq element 'p) (tempo-insert-mark (point-marker))) |
370 ((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
|
371 (goto-char tempo-region-stop) |
7267 | 372 (tempo-insert-mark (point-marker)))) |
10516
488c5be866c3
(tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents:
7410
diff
changeset
|
373 ((eq element 'r>) (if on-region |
488c5be866c3
(tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents:
7410
diff
changeset
|
374 (progn |
488c5be866c3
(tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents:
7410
diff
changeset
|
375 (goto-char tempo-region-stop) |
488c5be866c3
(tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents:
7410
diff
changeset
|
376 (indent-region (mark) (point) nil)) |
488c5be866c3
(tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents:
7410
diff
changeset
|
377 (tempo-insert-mark (point-marker)))) |
7267 | 378 ((eq element '>) (indent-according-to-mode)) |
379 ((eq element '&) (if (not (or (= (current-column) 0) | |
380 (save-excursion | |
381 (re-search-backward | |
382 "^\\s-*\\=" nil t)))) | |
383 (insert "\n"))) | |
384 ((eq element '%) (if (not (or (eolp) | |
385 (save-excursion | |
386 (re-search-forward | |
387 "\\=\\s-*$" nil t)))) | |
388 (insert "\n"))) | |
389 ((eq element 'n) (insert "\n")) | |
390 ((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
|
391 ;; 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
|
392 ;; 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
|
393 ;; beginning of a line. |
488c5be866c3
(tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents:
7410
diff
changeset
|
394 ((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
|
395 (eolp) |
488c5be866c3
(tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents:
7410
diff
changeset
|
396 (save-excursion |
488c5be866c3
(tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents:
7410
diff
changeset
|
397 (re-search-forward |
488c5be866c3
(tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents:
7410
diff
changeset
|
398 "\\=\\s-*$" nil t)))) |
488c5be866c3
(tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents:
7410
diff
changeset
|
399 (open-line 1))) |
7267 | 400 ((null element)) |
10516
488c5be866c3
(tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents:
7410
diff
changeset
|
401 (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
|
402 (eval element)) |
488c5be866c3
(tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents:
7410
diff
changeset
|
403 on-region)))) |
7267 | 404 |
405 ;;; | |
406 ;;; tempo-insert-prompt | |
407 | |
12321
35899872cb3f
Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
408 (defun tempo-insert-prompt-compat (prompt) |
64561
dc9ffd263776
(tempo-insert-prompt, tempo-interactive, tempo-show-completion-buffer,
Juanma Barranquero <lekktu@gmail.com>
parents:
64377
diff
changeset
|
409 "Compatibility hack for `tempo-insert-prompt'. |
12321
35899872cb3f
Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
410 PROMPT can be either a prompt string, or a list of arguments to |
64561
dc9ffd263776
(tempo-insert-prompt, tempo-interactive, tempo-show-completion-buffer,
Juanma Barranquero <lekktu@gmail.com>
parents:
64377
diff
changeset
|
411 `tempo-insert-prompt', or nil." |
42205 | 412 (if (consp prompt) ; not nil either |
12321
35899872cb3f
Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
413 (apply 'tempo-insert-prompt prompt) |
35899872cb3f
Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
414 (tempo-insert-prompt prompt))) |
35899872cb3f
Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
415 |
35899872cb3f
Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
416 (defun tempo-insert-prompt (prompt &optional save-name no-insert) |
7267 | 417 "Prompt for a text string and insert it in the current buffer. |
418 If the variable `tempo-interactive' is non-nil the user is prompted | |
419 for a string in the minibuffer, which is then inserted in the current | |
64561
dc9ffd263776
(tempo-insert-prompt, tempo-interactive, tempo-show-completion-buffer,
Juanma Barranquero <lekktu@gmail.com>
parents:
64377
diff
changeset
|
420 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
|
421 `tempo-mark'. |
4eca60cb3c4d
(tempo-insert-region, tempo-show-completion-buffer,
Richard M. Stallman <rms@gnu.org>
parents:
7296
diff
changeset
|
422 |
12321
35899872cb3f
Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
423 PROMPT is the prompt string, SAVE-NAME is a name to save the inserted |
64561
dc9ffd263776
(tempo-insert-prompt, tempo-interactive, tempo-show-completion-buffer,
Juanma Barranquero <lekktu@gmail.com>
parents:
64377
diff
changeset
|
424 text under. If the optional argument NO-INSERT is non-nil, no text is |
dc9ffd263776
(tempo-insert-prompt, tempo-interactive, tempo-show-completion-buffer,
Juanma Barranquero <lekktu@gmail.com>
parents:
64377
diff
changeset
|
425 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
|
426 |
12321
35899872cb3f
Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
427 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
|
428 never prompted." |
35899872cb3f
Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
429 (let (insertion |
35899872cb3f
Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
430 (previous (and save-name |
35899872cb3f
Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
431 (tempo-lookup-named save-name)))) |
35899872cb3f
Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
432 (cond |
35899872cb3f
Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
433 ;; Insert previous value, unless no-insert is non-nil |
35899872cb3f
Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
434 ((and previous |
35899872cb3f
Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
435 (not no-insert)) |
35899872cb3f
Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
436 (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
|
437 ; cares |
35899872cb3f
Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
438 ;; 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
|
439 ;; keep it |
35899872cb3f
Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
440 (previous |
35899872cb3f
Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
441 nil) |
35899872cb3f
Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
442 ;; No previous value. Prompt or insert mark |
35899872cb3f
Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
443 (tempo-interactive |
35899872cb3f
Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
444 (if (not (stringp prompt)) |
35899872cb3f
Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
445 (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
|
446 (setq insertion (read-string prompt)) |
35899872cb3f
Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
447 (or no-insert |
35899872cb3f
Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
448 (insert insertion)) |
35899872cb3f
Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
449 (if save-name |
35899872cb3f
Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
450 (tempo-save-named save-name insertion))) |
35899872cb3f
Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
451 (t |
35899872cb3f
Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
452 (tempo-insert-mark (point-marker)))))) |
7410
4eca60cb3c4d
(tempo-insert-region, tempo-show-completion-buffer,
Richard M. Stallman <rms@gnu.org>
parents:
7296
diff
changeset
|
453 |
4eca60cb3c4d
(tempo-insert-region, tempo-show-completion-buffer,
Richard M. Stallman <rms@gnu.org>
parents:
7296
diff
changeset
|
454 ;;; |
10516
488c5be866c3
(tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents:
7410
diff
changeset
|
455 ;;; tempo-is-user-element |
488c5be866c3
(tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents:
7410
diff
changeset
|
456 |
488c5be866c3
(tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents:
7410
diff
changeset
|
457 (defun tempo-is-user-element (element) |
64561
dc9ffd263776
(tempo-insert-prompt, tempo-interactive, tempo-show-completion-buffer,
Juanma Barranquero <lekktu@gmail.com>
parents:
64377
diff
changeset
|
458 "Tries all the user-defined element handlers in `tempo-user-elements'." |
10516
488c5be866c3
(tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents:
7410
diff
changeset
|
459 ;; Sigh... I need (some list) |
488c5be866c3
(tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents:
7410
diff
changeset
|
460 (catch 'found |
84880
edcc591dc3a4
(tempo-insert-template, tempo-is-user-element, tempo-forward-mark,
Juanma Barranquero <lekktu@gmail.com>
parents:
78236
diff
changeset
|
461 (mapc (function (lambda (handler) |
edcc591dc3a4
(tempo-insert-template, tempo-is-user-element, tempo-forward-mark,
Juanma Barranquero <lekktu@gmail.com>
parents:
78236
diff
changeset
|
462 (let ((result (funcall handler element))) |
edcc591dc3a4
(tempo-insert-template, tempo-is-user-element, tempo-forward-mark,
Juanma Barranquero <lekktu@gmail.com>
parents:
78236
diff
changeset
|
463 (if result (throw 'found result))))) |
edcc591dc3a4
(tempo-insert-template, tempo-is-user-element, tempo-forward-mark,
Juanma Barranquero <lekktu@gmail.com>
parents:
78236
diff
changeset
|
464 tempo-user-elements) |
10516
488c5be866c3
(tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents:
7410
diff
changeset
|
465 (throw 'found nil))) |
488c5be866c3
(tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents:
7410
diff
changeset
|
466 |
488c5be866c3
(tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents:
7410
diff
changeset
|
467 ;;; |
7410
4eca60cb3c4d
(tempo-insert-region, tempo-show-completion-buffer,
Richard M. Stallman <rms@gnu.org>
parents:
7296
diff
changeset
|
468 ;;; tempo-forget-insertions |
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 (defun tempo-forget-insertions () |
4eca60cb3c4d
(tempo-insert-region, tempo-show-completion-buffer,
Richard M. Stallman <rms@gnu.org>
parents:
7296
diff
changeset
|
471 "Forget all the saved named insertions." |
4eca60cb3c4d
(tempo-insert-region, tempo-show-completion-buffer,
Richard M. Stallman <rms@gnu.org>
parents:
7296
diff
changeset
|
472 (setq tempo-named-insertions nil)) |
4eca60cb3c4d
(tempo-insert-region, tempo-show-completion-buffer,
Richard M. Stallman <rms@gnu.org>
parents:
7296
diff
changeset
|
473 |
4eca60cb3c4d
(tempo-insert-region, tempo-show-completion-buffer,
Richard M. Stallman <rms@gnu.org>
parents:
7296
diff
changeset
|
474 ;;; |
12321
35899872cb3f
Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
475 ;;; tempo-save-named |
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 (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
|
478 "Save some data for later insertion |
35899872cb3f
Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
479 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
|
480 |
35899872cb3f
Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
481 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
|
482 |
35899872cb3f
Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
483 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
|
484 inserting anything." |
35899872cb3f
Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
485 (setq tempo-named-insertions |
35899872cb3f
Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
486 (cons (cons name data) |
35899872cb3f
Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
487 tempo-named-insertions)) |
35899872cb3f
Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
488 nil) |
35899872cb3f
Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
489 |
35899872cb3f
Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
490 ;;; |
35899872cb3f
Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
491 ;;; tempo-lookup-named |
35899872cb3f
Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
492 |
35899872cb3f
Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
493 (defun tempo-lookup-named (name) |
35899872cb3f
Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
494 "Lookup some saved data under the name NAME. |
35899872cb3f
Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
495 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
|
496 (cdr (assq name tempo-named-insertions))) |
35899872cb3f
Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
497 |
35899872cb3f
Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
498 ;;; |
7410
4eca60cb3c4d
(tempo-insert-region, tempo-show-completion-buffer,
Richard M. Stallman <rms@gnu.org>
parents:
7296
diff
changeset
|
499 ;;; tempo-insert-named |
4eca60cb3c4d
(tempo-insert-region, tempo-show-completion-buffer,
Richard M. Stallman <rms@gnu.org>
parents:
7296
diff
changeset
|
500 |
11196
a74358cc05c6
(tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents:
10516
diff
changeset
|
501 (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
|
502 "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
|
503 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
|
504 |
35899872cb3f
Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
505 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
|
506 processor." |
35899872cb3f
Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
507 (let* ((insertion (tempo-lookup-named name))) |
35899872cb3f
Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
508 (cond ((null insertion) |
35899872cb3f
Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
509 (tempo-insert-mark (point-marker))) |
35899872cb3f
Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
510 ((stringp insertion) |
35899872cb3f
Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
511 (insert insertion)) |
35899872cb3f
Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
512 (t |
35899872cb3f
Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
513 (tempo-insert insertion nil))))) |
35899872cb3f
Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
514 |
7267 | 515 |
516 ;;; | |
517 ;;; tempo-process-and-insert-string | |
518 | |
519 (defun tempo-process-and-insert-string (string) | |
520 "Insert a string from a template. | |
521 Run a string through the preprocessors in `tempo-insert-string-functions' | |
522 and insert the results." | |
523 (cond ((null tempo-insert-string-functions) | |
524 nil) | |
525 ((symbolp tempo-insert-string-functions) | |
526 (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
|
527 (funcall tempo-insert-string-functions string))) |
7267 | 528 ((listp tempo-insert-string-functions) |
27684
db5b16cdb88d
(tempo-dolist, tempo-mapc): Removed.
Gerd Moellmann <gerd@gnu.org>
parents:
25278
diff
changeset
|
529 (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
|
530 (setq string (funcall fn string)))) |
7267 | 531 (t |
532 (error "Bogus value in tempo-insert-string-functions: %s" | |
533 tempo-insert-string-functions))) | |
534 (insert string)) | |
535 | |
536 ;;; | |
537 ;;; tempo-insert-mark | |
538 | |
539 (defun tempo-insert-mark (mark) | |
64561
dc9ffd263776
(tempo-insert-prompt, tempo-interactive, tempo-show-completion-buffer,
Juanma Barranquero <lekktu@gmail.com>
parents:
64377
diff
changeset
|
540 "Insert a mark `tempo-marks' while keeping it sorted." |
7267 | 541 (cond ((null tempo-marks) (setq tempo-marks (list mark))) |
542 ((< mark (car tempo-marks)) (setq tempo-marks (cons mark tempo-marks))) | |
543 (t (let ((lp tempo-marks)) | |
544 (while (and (cdr lp) | |
545 (<= (car (cdr lp)) mark)) | |
546 (setq lp (cdr lp))) | |
547 (if (not (= mark (car lp))) | |
548 (setcdr lp (cons mark (cdr lp)))))))) | |
49597
e88404e8f2cf
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
43349
diff
changeset
|
549 |
7267 | 550 ;;; |
551 ;;; tempo-forward-mark | |
552 | |
553 (defun tempo-forward-mark () | |
554 "Jump to the next mark in `tempo-forward-mark-list'." | |
555 (interactive) | |
556 (let ((next-mark (catch 'found | |
84880
edcc591dc3a4
(tempo-insert-template, tempo-is-user-element, tempo-forward-mark,
Juanma Barranquero <lekktu@gmail.com>
parents:
78236
diff
changeset
|
557 (mapc |
7267 | 558 (function |
559 (lambda (mark) | |
560 (if (< (point) mark) | |
561 (throw 'found mark)))) | |
562 tempo-marks) | |
563 ;; return nil if not found | |
564 nil))) | |
565 (if next-mark | |
566 (goto-char next-mark)))) | |
567 | |
568 ;;; | |
569 ;;; tempo-backward-mark | |
570 | |
571 (defun tempo-backward-mark () | |
572 "Jump to the previous mark in `tempo-back-mark-list'." | |
573 (interactive) | |
574 (let ((prev-mark (catch 'found | |
575 (let (last) | |
84880
edcc591dc3a4
(tempo-insert-template, tempo-is-user-element, tempo-forward-mark,
Juanma Barranquero <lekktu@gmail.com>
parents:
78236
diff
changeset
|
576 (mapc |
7267 | 577 (function |
578 (lambda (mark) | |
579 (if (<= (point) mark) | |
580 (throw 'found last)) | |
581 (setq last mark))) | |
582 tempo-marks) | |
583 last)))) | |
584 (if prev-mark | |
585 (goto-char prev-mark)))) | |
49597
e88404e8f2cf
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
43349
diff
changeset
|
586 |
7267 | 587 ;;; |
588 ;;; tempo-add-tag | |
589 | |
590 (defun tempo-add-tag (tag template &optional tag-list) | |
591 "Add a template tag. | |
592 Add the TAG, that should complete to TEMPLATE to the list in TAG-LIST, | |
593 or to `tempo-tags' if TAG-LIST is nil." | |
594 | |
595 (interactive "sTag: \nCTemplate: ") | |
596 (if (null tag-list) | |
597 (setq tag-list 'tempo-tags)) | |
598 (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
|
599 (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
|
600 (tempo-invalidate-collection)) |
7267 | 601 |
602 ;;; | |
603 ;;; tempo-use-tag-list | |
604 | |
605 (defun tempo-use-tag-list (tag-list &optional completion-function) | |
606 "Install TAG-LIST to be used for template completion in the current buffer. | |
607 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
|
608 `tempo-add-tag'. |
7267 | 609 |
14008
f8a4126da2c8
(tempo-local-tags, tempo-user-elements, tempo-use-tag-list):
Karl Heuer <kwzh@gnu.org>
parents:
12333
diff
changeset
|
610 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
|
611 function or string that is used by `\\[tempo-complete-tag]' to find a |
64561
dc9ffd263776
(tempo-insert-prompt, tempo-interactive, tempo-show-completion-buffer,
Juanma Barranquero <lekktu@gmail.com>
parents:
64377
diff
changeset
|
612 string to match the tag against. It has the same definition as the |
dc9ffd263776
(tempo-insert-prompt, tempo-interactive, tempo-show-completion-buffer,
Juanma Barranquero <lekktu@gmail.com>
parents:
64377
diff
changeset
|
613 variable `tempo-match-finder'. In this version, supplying a |
10516
488c5be866c3
(tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents:
7410
diff
changeset
|
614 COMPLETION-FUNCTION just sets `tempo-match-finder' locally." |
7267 | 615 (let ((old (assq tag-list tempo-local-tags))) |
616 (if old | |
617 (setcdr old completion-function) | |
618 (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
|
619 tempo-local-tags)))) |
488c5be866c3
(tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents:
7410
diff
changeset
|
620 (if completion-function |
488c5be866c3
(tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents:
7410
diff
changeset
|
621 (setq tempo-match-finder completion-function)) |
488c5be866c3
(tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents:
7410
diff
changeset
|
622 (tempo-invalidate-collection)) |
488c5be866c3
(tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents:
7410
diff
changeset
|
623 |
488c5be866c3
(tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents:
7410
diff
changeset
|
624 ;;; |
488c5be866c3
(tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents:
7410
diff
changeset
|
625 ;;; tempo-invalidate-collection |
488c5be866c3
(tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents:
7410
diff
changeset
|
626 |
488c5be866c3
(tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents:
7410
diff
changeset
|
627 (defun tempo-invalidate-collection () |
488c5be866c3
(tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents:
7410
diff
changeset
|
628 "Marks the tag collection as obsolete. |
488c5be866c3
(tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents:
7410
diff
changeset
|
629 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
|
630 (setq tempo-dirty-collection t)) |
488c5be866c3
(tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents:
7410
diff
changeset
|
631 |
488c5be866c3
(tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents:
7410
diff
changeset
|
632 ;;; |
488c5be866c3
(tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents:
7410
diff
changeset
|
633 ;;; tempo-build-collection |
488c5be866c3
(tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents:
7410
diff
changeset
|
634 |
488c5be866c3
(tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents:
7410
diff
changeset
|
635 (defun tempo-build-collection () |
488c5be866c3
(tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents:
7410
diff
changeset
|
636 "Build a collection of all the tags and return it. |
42205 | 637 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
|
638 (prog1 |
18107abf5df3
(tempo-build-collection): Clear flag after computing
Karl Heuer <kwzh@gnu.org>
parents:
11202
diff
changeset
|
639 (or (and (not tempo-dirty-collection) |
18107abf5df3
(tempo-build-collection): Clear flag after computing
Karl Heuer <kwzh@gnu.org>
parents:
11202
diff
changeset
|
640 tempo-collection) |
18107abf5df3
(tempo-build-collection): Clear flag after computing
Karl Heuer <kwzh@gnu.org>
parents:
11202
diff
changeset
|
641 (setq tempo-collection |
18107abf5df3
(tempo-build-collection): Clear flag after computing
Karl Heuer <kwzh@gnu.org>
parents:
11202
diff
changeset
|
642 (apply (function append) |
18107abf5df3
(tempo-build-collection): Clear flag after computing
Karl Heuer <kwzh@gnu.org>
parents:
11202
diff
changeset
|
643 (mapcar (function (lambda (tag-list) |
10516
488c5be866c3
(tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents:
7410
diff
changeset
|
644 ; If the format for |
488c5be866c3
(tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents:
7410
diff
changeset
|
645 ; tempo-local-tags changes, |
488c5be866c3
(tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents:
7410
diff
changeset
|
646 ; change this |
11208
18107abf5df3
(tempo-build-collection): Clear flag after computing
Karl Heuer <kwzh@gnu.org>
parents:
11202
diff
changeset
|
647 (eval (car tag-list)))) |
18107abf5df3
(tempo-build-collection): Clear flag after computing
Karl Heuer <kwzh@gnu.org>
parents:
11202
diff
changeset
|
648 tempo-local-tags)))) |
18107abf5df3
(tempo-build-collection): Clear flag after computing
Karl Heuer <kwzh@gnu.org>
parents:
11202
diff
changeset
|
649 (setq tempo-dirty-collection nil))) |
7267 | 650 |
651 ;;; | |
652 ;;; tempo-find-match-string | |
653 | |
654 (defun tempo-find-match-string (finder) | |
655 "Find a string to be matched against a tag list. | |
64561
dc9ffd263776
(tempo-insert-prompt, tempo-interactive, tempo-show-completion-buffer,
Juanma Barranquero <lekktu@gmail.com>
parents:
64377
diff
changeset
|
656 FINDER is a function or a string. Returns (STRING . POS), or nil |
11196
a74358cc05c6
(tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents:
10516
diff
changeset
|
657 if no reasonable string is found." |
7267 | 658 (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
|
659 (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
|
660 (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
|
661 (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
|
662 0)) |
a74358cc05c6
(tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents:
10516
diff
changeset
|
663 (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
|
664 (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
|
665 (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
|
666 ; 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
|
667 (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
|
668 nil))) |
7267 | 669 (t |
670 (funcall finder)))) | |
671 | |
672 ;;; | |
673 ;;; tempo-complete-tag | |
674 | |
675 (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
|
676 "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
|
677 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
|
678 \(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
|
679 before the point. The way the string to match for is determined can |
64561
dc9ffd263776
(tempo-insert-prompt, tempo-interactive, tempo-show-completion-buffer,
Juanma Barranquero <lekktu@gmail.com>
parents:
64377
diff
changeset
|
680 be altered with the variable `tempo-match-finder'. If |
11196
a74358cc05c6
(tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents:
10516
diff
changeset
|
681 `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
|
682 no match at all. |
7267 | 683 |
10516
488c5be866c3
(tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents:
7410
diff
changeset
|
684 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
|
685 place of the matching string. |
7267 | 686 |
10516
488c5be866c3
(tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents:
7410
diff
changeset
|
687 If a partial completion or no match at all is found, and SILENT is |
42205 | 688 non-nil, the function will give a signal. |
7267 | 689 |
10516
488c5be866c3
(tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents:
7410
diff
changeset
|
690 If a partial completion is found and `tempo-show-completion-buffer' is |
42205 | 691 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
|
692 |
10516
488c5be866c3
(tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents:
7410
diff
changeset
|
693 ;; 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
|
694 ;; work. |
488c5be866c3
(tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents:
7410
diff
changeset
|
695 (interactive "*") |
488c5be866c3
(tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents:
7410
diff
changeset
|
696 (let* ((collection (tempo-build-collection)) |
488c5be866c3
(tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents:
7410
diff
changeset
|
697 (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
|
698 (match-string (car match-info)) |
488c5be866c3
(tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents:
7410
diff
changeset
|
699 (match-start (cdr match-info)) |
488c5be866c3
(tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents:
7410
diff
changeset
|
700 (exact (assoc match-string collection)) |
488c5be866c3
(tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents:
7410
diff
changeset
|
701 (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
|
702 (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
|
703 (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
|
704 (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
|
705 ((null compl) (or silent (ding))) |
10516
488c5be866c3
(tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents:
7410
diff
changeset
|
706 ((eq compl t) (tempo-insert-template |
488c5be866c3
(tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents:
7410
diff
changeset
|
707 (cdr (assoc match-string |
488c5be866c3
(tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents:
7410
diff
changeset
|
708 collection)) |
488c5be866c3
(tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents:
7410
diff
changeset
|
709 nil)) |
488c5be866c3
(tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents:
7410
diff
changeset
|
710 (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
|
711 (tempo-insert-template (cdr exact) nil) |
488c5be866c3
(tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents:
7410
diff
changeset
|
712 (insert compl) |
488c5be866c3
(tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents:
7410
diff
changeset
|
713 (or silent (ding)) |
488c5be866c3
(tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents:
7410
diff
changeset
|
714 (if tempo-show-completion-buffer |
488c5be866c3
(tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents:
7410
diff
changeset
|
715 (tempo-display-completions match-string |
488c5be866c3
(tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents:
7410
diff
changeset
|
716 collection))))))) |
7267 | 717 |
718 | |
7410
4eca60cb3c4d
(tempo-insert-region, tempo-show-completion-buffer,
Richard M. Stallman <rms@gnu.org>
parents:
7296
diff
changeset
|
719 ;;; |
4eca60cb3c4d
(tempo-insert-region, tempo-show-completion-buffer,
Richard M. Stallman <rms@gnu.org>
parents:
7296
diff
changeset
|
720 ;;; tempo-display-completions |
4eca60cb3c4d
(tempo-insert-region, tempo-show-completion-buffer,
Richard M. Stallman <rms@gnu.org>
parents:
7296
diff
changeset
|
721 |
4eca60cb3c4d
(tempo-insert-region, tempo-show-completion-buffer,
Richard M. Stallman <rms@gnu.org>
parents:
7296
diff
changeset
|
722 (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
|
723 "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
|
724 (if tempo-leave-completion-buffer |
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 |
66114
13abee3a9bc6
* message.el (message-expand-group): Pass the common
Masatake YAMATO <jet@gyve.org>
parents:
64762
diff
changeset
|
727 (all-completions string tag-list) |
13abee3a9bc6
* message.el (message-expand-group): Pass the common
Masatake YAMATO <jet@gyve.org>
parents:
64762
diff
changeset
|
728 string)) |
7410
4eca60cb3c4d
(tempo-insert-region, tempo-show-completion-buffer,
Richard M. Stallman <rms@gnu.org>
parents:
7296
diff
changeset
|
729 (save-window-excursion |
4eca60cb3c4d
(tempo-insert-region, tempo-show-completion-buffer,
Richard M. Stallman <rms@gnu.org>
parents:
7296
diff
changeset
|
730 (with-output-to-temp-buffer "*Completions*" |
4eca60cb3c4d
(tempo-insert-region, tempo-show-completion-buffer,
Richard M. Stallman <rms@gnu.org>
parents:
7296
diff
changeset
|
731 (display-completion-list |
66114
13abee3a9bc6
* message.el (message-expand-group): Pass the common
Masatake YAMATO <jet@gyve.org>
parents:
64762
diff
changeset
|
732 (all-completions string tag-list) |
13abee3a9bc6
* message.el (message-expand-group): Pass the common
Masatake YAMATO <jet@gyve.org>
parents:
64762
diff
changeset
|
733 string)) |
7410
4eca60cb3c4d
(tempo-insert-region, tempo-show-completion-buffer,
Richard M. Stallman <rms@gnu.org>
parents:
7296
diff
changeset
|
734 (sit-for 32767)))) |
4eca60cb3c4d
(tempo-insert-region, tempo-show-completion-buffer,
Richard M. Stallman <rms@gnu.org>
parents:
7296
diff
changeset
|
735 |
11196
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 ;;; 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
|
738 |
a74358cc05c6
(tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents:
10516
diff
changeset
|
739 (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
|
740 "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
|
741 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
|
742 |
a74358cc05c6
(tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents:
10516
diff
changeset
|
743 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
|
744 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
|
745 |
31657
58e2bb13d72e
(tempo-expand-if-complete): Quote paren in docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
27684
diff
changeset
|
746 \(defun tempo-space () |
11196
a74358cc05c6
(tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents:
10516
diff
changeset
|
747 (interactive \"*\") |
a74358cc05c6
(tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents:
10516
diff
changeset
|
748 (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
|
749 (insert \" \")))" |
a74358cc05c6
(tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents:
10516
diff
changeset
|
750 |
a74358cc05c6
(tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents:
10516
diff
changeset
|
751 (interactive "*") |
a74358cc05c6
(tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents:
10516
diff
changeset
|
752 (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
|
753 (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
|
754 (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
|
755 (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
|
756 (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
|
757 (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
|
758 (progn |
a74358cc05c6
(tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents:
10516
diff
changeset
|
759 (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
|
760 (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
|
761 t) |
a74358cc05c6
(tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents:
10516
diff
changeset
|
762 nil))) |
a74358cc05c6
(tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents:
10516
diff
changeset
|
763 |
10516
488c5be866c3
(tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents:
7410
diff
changeset
|
764 (provide 'tempo) |
488c5be866c3
(tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents:
7410
diff
changeset
|
765 |
93975
1e3a407766b9
Fix up comment convention on the arch-tag lines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
87649
diff
changeset
|
766 ;; arch-tag: b3c0ee36-db3b-47bc-875f-091b4e27a063 |
7267 | 767 ;;; tempo.el ends here |