annotate lisp/tempo.el @ 85682:919974c09488

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