annotate lisp/tempo.el @ 110410:f2e111723c3a

Merge changes made in Gnus trunk. Reimplement nnimap, and do tweaks to the rest of the code to support that. * gnus-int.el (gnus-finish-retrieve-group-infos) (gnus-retrieve-group-data-early): New functions. * gnus-range.el (gnus-range-nconcat): New function. * gnus-start.el (gnus-get-unread-articles): Support early retrieval of data. (gnus-read-active-for-groups): Support finishing the early retrieval of data. * gnus-sum.el (gnus-summary-move-article): Pass the move-to group name if the move is internal, so that nnimap can do fast internal moves. * gnus.el (gnus-article-special-mark-lists): Add uid/active tuples, for nnimap usage. * nnimap.el: Rewritten. * nnmail.el (nnmail-inhibit-default-split-group): New internal variable to allow the mail splitting to not return a default group. This is useful for nnimap, which will leave unmatched mail in the inbox. * utf7.el (utf7-encode): Autoload. Implement shell connection. * nnimap.el (nnimap-open-shell-stream): New function. (nnimap-open-connection): Use it. Get the number of lines by using BODYSTRUCTURE. (nnimap-transform-headers): Get the number of lines in each message. (nnimap-retrieve-headers): Query for BODYSTRUCTURE so that we get the number of lines. Not all servers return UIDNEXT. Work past this problem. Remove junk from end of file. Fix typo in "bogus" section. Make capabilties be case-insensitive. Require cl when compiling. Don't bug out if the LIST command doesn't have any parameters. 2010-09-17 Knut Anders Hatlen <kahatlen@gmail.com> (tiny change) * nnimap.el (nnimap-get-groups): Don't bug out if the LIST command doesn't have any parameters. (mm-text-html-renderer): Document gnus-article-html. 2010-09-17 Julien Danjou <julien@danjou.info> (tiny fix) * mm-decode.el (mm-text-html-renderer): Document gnus-article-html. * dgnushack.el: Define netrc-credentials. If the user doesn't have a /etc/services, supply some sensible port defaults. Have `unseen-or-unread' select an unread unseen article first. (nntp-open-server): Return whether the open was successful or not. Throughout all files, replace (save-excursion (set-buffer ...)) with (with-current-buffer ... ). Save result so that it doesn't say "failed" all the time. Add ~/.authinfo to the default, since that's probably most useful for users. Don't use the "finish" method when we're reading from the agent. Add some more nnimap-relevant agent stuff to nnagent.el. * nnimap.el (nnimap-with-process-buffer): Removed. Revert one line that was changed by mistake in the last checkin. (nnimap-open-connection): Don't error out when we can't make a connection nnimap-related changes to avoid bugging out if we can't contact a server. * gnus-start.el (gnus-get-unread-articles): Don't try to scan groups from methods that are denied. * nnimap.el (nnimap-possibly-change-group): Return nil if we can't log in. (nnimap-finish-retrieve-group-infos): Make sure we're not waiting for nothing. * gnus-sum.el (gnus-select-newsgroup): Indent.
author Katsumi Yamaoka <yamaoka@jpl.org>
date Sat, 18 Sep 2010 10:02:19 +0000
parents 1d1d5d9bd884
children 376148b31b5e
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,
106815
1d1d5d9bd884 Add 2010 to copyright years.
Glenn Morris <rgm@gnu.org>
parents: 100908
diff changeset
4 ;; 2005, 2006, 2007, 2008, 2009, 2010 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
94678
ee5932bf781d Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 93975
diff changeset
13 ;; GNU Emacs is free software: you can redistribute it and/or modify
7267
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
94678
ee5932bf781d Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 93975
diff changeset
15 ;; the Free Software Foundation, either version 3 of the License, or
ee5932bf781d Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 93975
diff changeset
16 ;; (at your option) any later version.
7267
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
94678
ee5932bf781d Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 93975
diff changeset
24 ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
25
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
26 ;;; Commentary:
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 ;; This file provides a simple way to define powerful templates, or
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
29 ;; 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
30 ;; other programmers to be used for creating shortcuts for editing
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
31 ;; certain kind of documents. It was originally written to be used by
11196
a74358cc05c6 (tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents: 10516
diff changeset
32 ;; a HTML editing mode written by Nelson Minar <nelson@santafe.edu>,
a74358cc05c6 (tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents: 10516
diff changeset
33 ;; and his html-helper-mode.el is probably the best example of how to
a74358cc05c6 (tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents: 10516
diff changeset
34 ;; use this program.
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
35
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
36 ;; 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
37 ;; current buffer at point. Some of the items can be simple strings,
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
38 ;; while other can control formatting or define special points of
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
39 ;; interest in the inserted text.
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
40
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
41 ;; If a template defines a "point of interest" that point is inserted
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
42 ;; 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
43 ;; jump between with the commands `tempo-backward-mark' and
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
44 ;; `tempo-forward-mark'. If the template definer provides a prompt for
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
45 ;; the point, and the variable `tempo-interactive' is non-nil, the
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
46 ;; 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
47 ;; using the minibuffer.
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
48
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
49 ;; The template can also define one point to be replaced with the
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
50 ;; current region if the template command is called with a prefix (or
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
51 ;; a non-nil argument).
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
52
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
53 ;; More flexible templates can be created by including lisp symbols,
31657
58e2bb13d72e (tempo-expand-if-complete): Quote paren in docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27684
diff changeset
54 ;; which will be evaluated as variables, or lists, which will be
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
55 ;; evaluated as lisp expressions.
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
56
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
57 ;; See the documentation for tempo-define-template for the different
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
58 ;; items that can be used to define a tempo template.
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
59
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
60 ;; One of the more powerful features of tempo templates are automatic
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
61 ;; completion. With every template can be assigned a special tag that
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
62 ;; should be recognized by `tempo-complete-tag' and expanded to the
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
63 ;; complete template. By default the tags are added to a global list
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
64 ;; of template tags, and are matched against the last word before
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
65 ;; 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
66 ;; specify another method for matching text in the buffer against the
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
67 ;; tags. In the HTML mode, for instance, the tags are matched against
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
68 ;; the text between the last `<' and point.
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
69
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
70 ;; When defining a template named `foo', a symbol named
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
71 ;; `tempo-template-foo' will be created whose value as a variable will
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
72 ;; be the template definition, and its function value will be an
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
73 ;; interactive function that inserts the template at the point.
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
74
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
75 ;; The latest tempo.el distribution can be fetched from
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
76 ;; ftp.lysator.liu.se in the directory /pub/emacs
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
77
12321
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
78 ;; There is also a WWW page at
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
79 ;; http://www.lysator.liu.se/~davidk/elisp/ which has some information
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
80
10516
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
81 ;;; Known bugs:
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
82
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
83 ;; If the 'o is the first element in a template, strange things can
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
84 ;; happen when the template is inserted at the beginning of a
96376
c3309dba6542 American English spelling fix.
Glenn Morris <rgm@gnu.org>
parents: 94678
diff changeset
85 ;; line. This is due to strange behavior in open-line. But it should
10516
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
86 ;; be easily avoided.
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
87
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
88 ;; The 'o tag is also a problem when including the region. This will
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
89 ;; be looked into.
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
90
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
91 ;; Clicking mouse-2 in the completion buffer gives strange results.
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
92
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
93 ;; There is a bug in some emacs versions that prevents completion from
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
94 ;; working. If it doesn't work for you, send me a note indicating your
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
95 ;; emacs version and your problems.
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
96
11196
a74358cc05c6 (tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents: 10516
diff changeset
97 ;;; Contributors:
a74358cc05c6 (tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents: 10516
diff changeset
98
14008
f8a4126da2c8 (tempo-local-tags, tempo-user-elements, tempo-use-tag-list):
Karl Heuer <kwzh@gnu.org>
parents: 12333
diff changeset
99 ;; These people have given me important feedback and new ideas for
11196
a74358cc05c6 (tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents: 10516
diff changeset
100 ;; tempo.el. Thanks.
a74358cc05c6 (tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents: 10516
diff changeset
101
a74358cc05c6 (tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents: 10516
diff changeset
102 ;; Nelson Minar <nelson@santafe.edu>
25278
cbe304a26771 Fix maintainer address.
Karl Heuer <kwzh@gnu.org>
parents: 21088
diff changeset
103 ;; Richard Stallman <rms@gnu.org>
11196
a74358cc05c6 (tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents: 10516
diff changeset
104 ;; Lars Lindberg <Lars.Lindberg@sypro.cap.se>
a74358cc05c6 (tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents: 10516
diff changeset
105 ;; Glen Whitney <Glen.Whitney@math.lsa.umich.edu>
a74358cc05c6 (tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents: 10516
diff changeset
106
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
107 ;;; Code:
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
108
10516
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
109 ;;; User options
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
110
21088
ac1673121774 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 14169
diff changeset
111 (defgroup tempo nil
ac1673121774 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 14169
diff changeset
112 "Flexible template insertion."
ac1673121774 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 14169
diff changeset
113 :prefix "tempo-"
ac1673121774 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 14169
diff changeset
114 :group 'tools)
ac1673121774 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 14169
diff changeset
115
ac1673121774 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 14169
diff changeset
116 (defcustom tempo-interactive nil
100171
d42aff5ca541 * align.el:
Lute Kamstra <lute@gnu.org>
parents: 96376
diff changeset
117 "Prompt user for strings in templates.
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
118 If this variable is non-nil, `tempo-insert' prompts the
64561
dc9ffd263776 (tempo-insert-prompt, tempo-interactive, tempo-show-completion-buffer,
Juanma Barranquero <lekktu@gmail.com>
parents: 64377
diff changeset
119 user for text to insert in the templates."
21088
ac1673121774 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 14169
diff changeset
120 :type 'boolean
ac1673121774 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 14169
diff changeset
121 :group 'tempo)
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
122
21088
ac1673121774 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 14169
diff changeset
123 (defcustom tempo-insert-region nil
100171
d42aff5ca541 * align.el:
Lute Kamstra <lute@gnu.org>
parents: 96376
diff changeset
124 "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
125 If this variable is nil, `r' elements will be treated just like `p'
7410
4eca60cb3c4d (tempo-insert-region, tempo-show-completion-buffer,
Richard M. Stallman <rms@gnu.org>
parents: 7296
diff changeset
126 elements, unless the template function is given a prefix (or a non-nil
63259
fa1c7a31ac5d (tempo-insert-region): Fix spellings in docstrings.
Juanma Barranquero <lekktu@gmail.com>
parents: 57980
diff changeset
127 argument). If this variable is non-nil, the behavior is reversed.
10516
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
128
21088
ac1673121774 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 14169
diff changeset
129 In Transient Mark mode, this option is unused."
ac1673121774 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 14169
diff changeset
130 :type 'boolean
ac1673121774 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 14169
diff changeset
131 :group 'tempo)
7410
4eca60cb3c4d (tempo-insert-region, tempo-show-completion-buffer,
Richard M. Stallman <rms@gnu.org>
parents: 7296
diff changeset
132
21088
ac1673121774 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 14169
diff changeset
133 (defcustom tempo-show-completion-buffer t
100171
d42aff5ca541 * align.el:
Lute Kamstra <lute@gnu.org>
parents: 96376
diff changeset
134 "If non-nil, show a buffer with possible completions, when only
64561
dc9ffd263776 (tempo-insert-prompt, tempo-interactive, tempo-show-completion-buffer,
Juanma Barranquero <lekktu@gmail.com>
parents: 64377
diff changeset
135 a partial completion can be found."
21088
ac1673121774 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 14169
diff changeset
136 :type 'boolean
ac1673121774 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 14169
diff changeset
137 :group 'tempo)
7410
4eca60cb3c4d (tempo-insert-region, tempo-show-completion-buffer,
Richard M. Stallman <rms@gnu.org>
parents: 7296
diff changeset
138
21088
ac1673121774 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 14169
diff changeset
139 (defcustom tempo-leave-completion-buffer nil
100171
d42aff5ca541 * align.el:
Lute Kamstra <lute@gnu.org>
parents: 96376
diff changeset
140 "If nil, a completion buffer generated by \\[tempo-complete-tag]
21088
ac1673121774 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 14169
diff changeset
141 disappears at the next keypress; otherwise, it remains forever."
ac1673121774 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 14169
diff changeset
142 :type 'boolean
ac1673121774 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 14169
diff changeset
143 :group 'tempo)
7410
4eca60cb3c4d (tempo-insert-region, tempo-show-completion-buffer,
Richard M. Stallman <rms@gnu.org>
parents: 7296
diff changeset
144
10516
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
145 ;;; Internal variables
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
146
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
147 (defvar tempo-insert-string-functions nil
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
148 "List of functions to run when inserting a string.
12321
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
149 Each function is called with a single arg, STRING and should return
64561
dc9ffd263776 (tempo-insert-prompt, tempo-interactive, tempo-show-completion-buffer,
Juanma Barranquero <lekktu@gmail.com>
parents: 64377
diff changeset
150 another string. This could be used for making all strings upcase by
12321
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
151 setting it to '(upcase), for example.")
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
152
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
153 (defvar tempo-tags nil
64561
dc9ffd263776 (tempo-insert-prompt, tempo-interactive, tempo-show-completion-buffer,
Juanma Barranquero <lekktu@gmail.com>
parents: 64377
diff changeset
154 "An association list with tags and corresponding templates.")
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
155
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
156 (defvar tempo-local-tags '((tempo-tags . nil))
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
157 "A list of locally installed tag completion lists.
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
158 It is a association list where the car of every element is a symbol
64561
dc9ffd263776 (tempo-insert-prompt, tempo-interactive, tempo-show-completion-buffer,
Juanma Barranquero <lekktu@gmail.com>
parents: 64377
diff changeset
159 whose variable value is a template list. The cdr part, if non-nil,
dc9ffd263776 (tempo-insert-prompt, tempo-interactive, tempo-show-completion-buffer,
Juanma Barranquero <lekktu@gmail.com>
parents: 64377
diff changeset
160 is a function or a regexp that defines the string to match. See the
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
161 documentation for the function `tempo-complete-tag' for more info.
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
162
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
163 `tempo-tags' is always in the last position in this list.")
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
164
10516
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
165 (defvar tempo-collection nil
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
166 "A collection of all the tags defined for the current buffer.")
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
167
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
168 (defvar tempo-dirty-collection t
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
169 "Indicates if the tag collection needs to be rebuilt.")
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
170
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
171 (defvar tempo-marks nil
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
172 "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
173
57967
5c8dcdd5f8bc (tempo-match-finder): Use [:word:] instead of "^\\b",
Eli Zaretskii <eliz@gnu.org>
parents: 52401
diff changeset
174 (defvar tempo-match-finder "\\b\\([[:word:]]+\\)\\="
10516
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
175 "The regexp or function used to find the string to match against tags.
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
176
64561
dc9ffd263776 (tempo-insert-prompt, tempo-interactive, tempo-show-completion-buffer,
Juanma Barranquero <lekktu@gmail.com>
parents: 64377
diff changeset
177 If `tempo-match-finder' is a string, it should contain a regular
dc9ffd263776 (tempo-insert-prompt, tempo-interactive, tempo-show-completion-buffer,
Juanma Barranquero <lekktu@gmail.com>
parents: 64377
diff changeset
178 expression with at least one \\( \\) pair. When searching for tags,
10516
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
179 `tempo-complete-tag' calls `re-search-backward' with this string, and
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
180 the string between the first \\( and \\) is used for matching against
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
181 each string in the tag list. If one is found, the whole text between
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
182 the first \\( and the point is replaced with the inserted template.
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
183
57980
7863c0adc838 (tempo-match-finder): Doc fix.
Andreas Schwab <schwab@suse.de>
parents: 57967
diff changeset
184 You will probably want to include \\=\\= at the end of the regexp to
10516
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
185 make sure that the string is matched only against text adjacent to the
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
186 point.
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
187
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
188 If `tempo-match-finder' is a symbol, it should be a function that
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
189 returns a pair of the form (STRING . POS), where STRING is the string
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
190 used for matching and POS is the buffer position after which text
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
191 should be replaced with a template.")
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
192
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
193 (defvar tempo-user-elements nil
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
194 "Element handlers for user-defined elements.
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
195 A list of symbols which are bound to functions that take one argument.
14008
f8a4126da2c8 (tempo-local-tags, tempo-user-elements, tempo-use-tag-list):
Karl Heuer <kwzh@gnu.org>
parents: 12333
diff changeset
196 This function should return something to be sent to `tempo-insert' if
42205
7308bbc423d5 Doc fixes.
Pavel Janík <Pavel@Janik.cz>
parents: 31657
diff changeset
197 it recognizes the argument, and nil otherwise.")
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
198
7410
4eca60cb3c4d (tempo-insert-region, tempo-show-completion-buffer,
Richard M. Stallman <rms@gnu.org>
parents: 7296
diff changeset
199 (defvar tempo-named-insertions nil
42205
7308bbc423d5 Doc fixes.
Pavel Janík <Pavel@Janik.cz>
parents: 31657
diff changeset
200 "Temporary storage for named insertions.")
7410
4eca60cb3c4d (tempo-insert-region, tempo-show-completion-buffer,
Richard M. Stallman <rms@gnu.org>
parents: 7296
diff changeset
201
10516
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
202 (defvar tempo-region-start (make-marker)
42205
7308bbc423d5 Doc fixes.
Pavel Janík <Pavel@Janik.cz>
parents: 31657
diff changeset
203 "Region start when inserting around the region.")
10516
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
204
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
205 (defvar tempo-region-stop (make-marker)
42205
7308bbc423d5 Doc fixes.
Pavel Janík <Pavel@Janik.cz>
parents: 31657
diff changeset
206 "Region stop when inserting around the region.")
10516
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
207
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
208 ;; Make some variables local to every buffer
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
209
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
210 (make-variable-buffer-local 'tempo-marks)
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
211 (make-variable-buffer-local 'tempo-local-tags)
10516
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
212 (make-variable-buffer-local 'tempo-match-finder)
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
213 (make-variable-buffer-local 'tempo-collection)
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
214 (make-variable-buffer-local 'tempo-dirty-collection)
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
215
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
216 ;;; Functions
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 ;;
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
219 ;; tempo-define-template
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 (defun tempo-define-template (name elements &optional tag documentation taglist)
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
222 "Define a template.
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
223 This function creates a template variable `tempo-template-NAME' and an
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
224 interactive function `tempo-template-NAME' that inserts the template
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
225 at the point. The created function is returned.
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
226
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
227 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
228 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
229 DOCUMENTATION is the documentation string for the insertion command
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
230 created, and TAGLIST (a symbol) is the tag list that TAG (if provided)
64561
dc9ffd263776 (tempo-insert-prompt, tempo-interactive, tempo-show-completion-buffer,
Juanma Barranquero <lekktu@gmail.com>
parents: 64377
diff changeset
231 should be added to. If TAGLIST is nil and TAG is non-nil, TAG is
dc9ffd263776 (tempo-insert-prompt, tempo-interactive, tempo-show-completion-buffer,
Juanma Barranquero <lekktu@gmail.com>
parents: 64377
diff changeset
232 added to `tempo-tags'.
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
233
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
234 The elements in ELEMENTS can be of several types:
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
235
64561
dc9ffd263776 (tempo-insert-prompt, tempo-interactive, tempo-show-completion-buffer,
Juanma Barranquero <lekktu@gmail.com>
parents: 64377
diff changeset
236 - A string: It is sent to the hooks in `tempo-insert-string-functions',
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
237 and the result is inserted.
64561
dc9ffd263776 (tempo-insert-prompt, tempo-interactive, tempo-show-completion-buffer,
Juanma Barranquero <lekktu@gmail.com>
parents: 64377
diff changeset
238 - The symbol `p': This position is saved in `tempo-marks'.
dc9ffd263776 (tempo-insert-prompt, tempo-interactive, tempo-show-completion-buffer,
Juanma Barranquero <lekktu@gmail.com>
parents: 64377
diff changeset
239 - The symbol `r': If `tempo-insert' is called with ON-REGION non-nil
dc9ffd263776 (tempo-insert-prompt, tempo-interactive, tempo-show-completion-buffer,
Juanma Barranquero <lekktu@gmail.com>
parents: 64377
diff changeset
240 the current region is placed here. Otherwise it works like `p'.
dc9ffd263776 (tempo-insert-prompt, tempo-interactive, tempo-show-completion-buffer,
Juanma Barranquero <lekktu@gmail.com>
parents: 64377
diff changeset
241 - (p PROMPT <NAME> <NOINSERT>): If `tempo-interactive' is non-nil, the
42855
d20e97a1bd5a (tempo-define-template): Doc fix.
Pavel Janík <Pavel@Janik.cz>
parents: 42205
diff changeset
242 user is prompted in the minibuffer with PROMPT for a string to be
64561
dc9ffd263776 (tempo-insert-prompt, tempo-interactive, tempo-show-completion-buffer,
Juanma Barranquero <lekktu@gmail.com>
parents: 64377
diff changeset
243 inserted. If the optional parameter NAME is non-nil, the text is
dc9ffd263776 (tempo-insert-prompt, tempo-interactive, tempo-show-completion-buffer,
Juanma Barranquero <lekktu@gmail.com>
parents: 64377
diff changeset
244 saved for later insertion with the `s' tag. If there already is
12321
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
245 something saved under NAME that value is used instead and no
64561
dc9ffd263776 (tempo-insert-prompt, tempo-interactive, tempo-show-completion-buffer,
Juanma Barranquero <lekktu@gmail.com>
parents: 64377
diff changeset
246 prompting is made. If NOINSERT is provided and non-nil, nothing is
dc9ffd263776 (tempo-insert-prompt, tempo-interactive, tempo-show-completion-buffer,
Juanma Barranquero <lekktu@gmail.com>
parents: 64377
diff changeset
247 inserted, but text is still saved when a NAME is provided. For
dc9ffd263776 (tempo-insert-prompt, tempo-interactive, tempo-show-completion-buffer,
Juanma Barranquero <lekktu@gmail.com>
parents: 64377
diff changeset
248 clarity, the symbol `noinsert' should be used as argument.
dc9ffd263776 (tempo-insert-prompt, tempo-interactive, tempo-show-completion-buffer,
Juanma Barranquero <lekktu@gmail.com>
parents: 64377
diff changeset
249 - (P PROMPT <NAME> <NOINSERT>): Works just like the previous tag, but
dc9ffd263776 (tempo-insert-prompt, tempo-interactive, tempo-show-completion-buffer,
Juanma Barranquero <lekktu@gmail.com>
parents: 64377
diff changeset
250 forces `tempo-interactive' to be true.
dc9ffd263776 (tempo-insert-prompt, tempo-interactive, tempo-show-completion-buffer,
Juanma Barranquero <lekktu@gmail.com>
parents: 64377
diff changeset
251 - (r PROMPT <NAME> <NOINSERT>): Like the previous tag, but if
12321
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
252 `tempo-interactive' is nil and `tempo-insert' is called with
64561
dc9ffd263776 (tempo-insert-prompt, tempo-interactive, tempo-show-completion-buffer,
Juanma Barranquero <lekktu@gmail.com>
parents: 64377
diff changeset
253 ON-REGION non-nil, the current region is placed here. This usually
12321
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
254 happens when you call the template function with a prefix argument.
64561
dc9ffd263776 (tempo-insert-prompt, tempo-interactive, tempo-show-completion-buffer,
Juanma Barranquero <lekktu@gmail.com>
parents: 64377
diff changeset
255 - (s NAME): Inserts text previously read with the (p ..) construct.
dc9ffd263776 (tempo-insert-prompt, tempo-interactive, tempo-show-completion-buffer,
Juanma Barranquero <lekktu@gmail.com>
parents: 64377
diff changeset
256 Finds the insertion saved under NAME and inserts it. Acts like `p'
7410
4eca60cb3c4d (tempo-insert-region, tempo-show-completion-buffer,
Richard M. Stallman <rms@gnu.org>
parents: 7296
diff changeset
257 if tempo-interactive is nil.
64561
dc9ffd263776 (tempo-insert-prompt, tempo-interactive, tempo-show-completion-buffer,
Juanma Barranquero <lekktu@gmail.com>
parents: 64377
diff changeset
258 - `&': If there is only whitespace between the line start and point,
dc9ffd263776 (tempo-insert-prompt, tempo-interactive, tempo-show-completion-buffer,
Juanma Barranquero <lekktu@gmail.com>
parents: 64377
diff changeset
259 nothing happens. Otherwise a newline is inserted.
dc9ffd263776 (tempo-insert-prompt, tempo-interactive, tempo-show-completion-buffer,
Juanma Barranquero <lekktu@gmail.com>
parents: 64377
diff changeset
260 - `%': If there is only whitespace between point and end of line,
dc9ffd263776 (tempo-insert-prompt, tempo-interactive, tempo-show-completion-buffer,
Juanma Barranquero <lekktu@gmail.com>
parents: 64377
diff changeset
261 nothing happens. Otherwise a newline is inserted.
dc9ffd263776 (tempo-insert-prompt, tempo-interactive, tempo-show-completion-buffer,
Juanma Barranquero <lekktu@gmail.com>
parents: 64377
diff changeset
262 - `n': Inserts a newline.
dc9ffd263776 (tempo-insert-prompt, tempo-interactive, tempo-show-completion-buffer,
Juanma Barranquero <lekktu@gmail.com>
parents: 64377
diff changeset
263 - `>': The line is indented using `indent-according-to-mode'. Note
dc9ffd263776 (tempo-insert-prompt, tempo-interactive, tempo-show-completion-buffer,
Juanma Barranquero <lekktu@gmail.com>
parents: 64377
diff changeset
264 that you often should place this item after the text you want on
dc9ffd263776 (tempo-insert-prompt, tempo-interactive, tempo-show-completion-buffer,
Juanma Barranquero <lekktu@gmail.com>
parents: 64377
diff changeset
265 the line.
dc9ffd263776 (tempo-insert-prompt, tempo-interactive, tempo-show-completion-buffer,
Juanma Barranquero <lekktu@gmail.com>
parents: 64377
diff changeset
266 - `r>': Like `r', but it also indents the region.
76487
8730dda8a05b (tempo-insert): Deal with 'r> if it appears specified with a prompt
Chong Yidong <cyd@stupidchicken.com>
parents: 75347
diff changeset
267 - (r> PROMPT <NAME> <NOINSERT>): Like (r ...), but is also indents
8730dda8a05b (tempo-insert): Deal with 'r> if it appears specified with a prompt
Chong Yidong <cyd@stupidchicken.com>
parents: 75347
diff changeset
268 the region.
64561
dc9ffd263776 (tempo-insert-prompt, tempo-interactive, tempo-show-completion-buffer,
Juanma Barranquero <lekktu@gmail.com>
parents: 64377
diff changeset
269 - `n>': Inserts a newline and indents line.
dc9ffd263776 (tempo-insert-prompt, tempo-interactive, tempo-show-completion-buffer,
Juanma Barranquero <lekktu@gmail.com>
parents: 64377
diff changeset
270 - `o': Like `%' but leaves the point before the newline.
dc9ffd263776 (tempo-insert-prompt, tempo-interactive, tempo-show-completion-buffer,
Juanma Barranquero <lekktu@gmail.com>
parents: 64377
diff changeset
271 - nil: It is ignored.
dc9ffd263776 (tempo-insert-prompt, tempo-interactive, tempo-show-completion-buffer,
Juanma Barranquero <lekktu@gmail.com>
parents: 64377
diff changeset
272 - Anything else: It is evaluated and the result is treated as an
dc9ffd263776 (tempo-insert-prompt, tempo-interactive, tempo-show-completion-buffer,
Juanma Barranquero <lekktu@gmail.com>
parents: 64377
diff changeset
273 element to be inserted. One additional tag is useful for these
dc9ffd263776 (tempo-insert-prompt, tempo-interactive, tempo-show-completion-buffer,
Juanma Barranquero <lekktu@gmail.com>
parents: 64377
diff changeset
274 cases. If an expression returns a list '(l foo bar), the elements
dc9ffd263776 (tempo-insert-prompt, tempo-interactive, tempo-show-completion-buffer,
Juanma Barranquero <lekktu@gmail.com>
parents: 64377
diff changeset
275 after `l' will be inserted according to the usual rules. This makes
12321
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
276 it possible to return several elements from one expression."
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
277 (let* ((template-name (intern (concat "tempo-template-"
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
278 name)))
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
279 (command-name template-name))
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
280 (set template-name elements)
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
281 (fset command-name (list 'lambda (list '&optional 'arg)
49597
e88404e8f2cf Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 43349
diff changeset
282 (or documentation
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
283 (concat "Insert a " name "."))
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
284 (list 'interactive "*P")
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
285 (list 'tempo-insert-template (list 'quote
7410
4eca60cb3c4d (tempo-insert-region, tempo-show-completion-buffer,
Richard M. Stallman <rms@gnu.org>
parents: 7296
diff changeset
286 template-name)
4eca60cb3c4d (tempo-insert-region, tempo-show-completion-buffer,
Richard M. Stallman <rms@gnu.org>
parents: 7296
diff changeset
287 (list 'if 'tempo-insert-region
4eca60cb3c4d (tempo-insert-region, tempo-show-completion-buffer,
Richard M. Stallman <rms@gnu.org>
parents: 7296
diff changeset
288 (list 'not 'arg) 'arg))))
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
289 (and tag
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
290 (tempo-add-tag tag template-name taglist))
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
291 command-name))
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
292
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
293 ;;;
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
294 ;;; tempo-insert-template
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 (defun tempo-insert-template (template on-region)
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
297 "Insert a template.
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
298 TEMPLATE is the template to be inserted. If ON-REGION is non-nil the
64561
dc9ffd263776 (tempo-insert-prompt, tempo-interactive, tempo-show-completion-buffer,
Juanma Barranquero <lekktu@gmail.com>
parents: 64377
diff changeset
299 `r' elements are replaced with the current region. In Transient Mark
10516
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
300 mode, ON-REGION is ignored and assumed true if the region is active."
12321
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
301 (unwind-protect
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
302 (progn
12333
5364f0b969f3 Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 12321
diff changeset
303 (if (or (and (boundp 'transient-mark-mode) ; For Emacs
12321
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
304 transient-mark-mode
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
305 mark-active)
64377
8b63c8dfb728 (tempo-insert-template): Suppress warning.
Richard M. Stallman <rms@gnu.org>
parents: 64091
diff changeset
306 (if (featurep 'xemacs)
64600
07e5e0169359 (tempo-insert-template): Fix 2005-07-16 change.
Juri Linkov <juri@jurta.org>
parents: 64561
diff changeset
307 (and zmacs-regions (mark))))
12321
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
308 (setq on-region t))
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
309 (and on-region
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
310 (set-marker tempo-region-start (min (mark) (point)))
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
311 (set-marker tempo-region-stop (max (mark) (point))))
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
312 (if on-region
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
313 (goto-char tempo-region-start))
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
314 (save-excursion
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
315 (tempo-insert-mark (point-marker))
84880
edcc591dc3a4 (tempo-insert-template, tempo-is-user-element, tempo-forward-mark,
Juanma Barranquero <lekktu@gmail.com>
parents: 78236
diff changeset
316 (mapc (function (lambda (elt)
edcc591dc3a4 (tempo-insert-template, tempo-is-user-element, tempo-forward-mark,
Juanma Barranquero <lekktu@gmail.com>
parents: 78236
diff changeset
317 (tempo-insert elt on-region)))
edcc591dc3a4 (tempo-insert-template, tempo-is-user-element, tempo-forward-mark,
Juanma Barranquero <lekktu@gmail.com>
parents: 78236
diff changeset
318 (symbol-value template))
12321
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
319 (tempo-insert-mark (point-marker)))
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
320 (tempo-forward-mark))
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
321 (tempo-forget-insertions)
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
322 ;; Should I check for zmacs here too???
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
323 (and (boundp 'transient-mark-mode)
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
324 transient-mark-mode
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
325 (deactivate-mark))))
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
326
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
327 ;;;
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
328 ;;; tempo-insert
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
329
10516
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
330 (defun tempo-insert (element on-region)
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
331 "Insert a template element.
10516
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
332 Insert one element from a template. If ON-REGION is non-nil the `r'
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
333 elements are replaced with the current region.
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
334
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
335 See documentation for `tempo-define-template' for the kind of elements
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
336 possible."
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
337 (cond ((stringp element) (tempo-process-and-insert-string element))
12321
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
338 ((and (consp element)
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
339 (eq (car element) 'p)) (tempo-insert-prompt-compat
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
340 (cdr element)))
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
341 ((and (consp element)
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
342 (eq (car element) 'P)) (let ((tempo-interactive t))
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
343 (tempo-insert-prompt-compat
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
344 (cdr element))))
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
345 ;;; ((and (consp element)
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
346 ;;; (eq (car element) 'v)) (tempo-save-named
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
347 ;;; (nth 1 element)
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
348 ;;; nil
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
349 ;;; (nth 2 element)))
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
350 ((and (consp element)
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
351 (eq (car element) 'r)) (if on-region
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
352 (goto-char tempo-region-stop)
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
353 (tempo-insert-prompt-compat
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
354 (cdr element))))
76487
8730dda8a05b (tempo-insert): Deal with 'r> if it appears specified with a prompt
Chong Yidong <cyd@stupidchicken.com>
parents: 75347
diff changeset
355 ((and (consp element)
8730dda8a05b (tempo-insert): Deal with 'r> if it appears specified with a prompt
Chong Yidong <cyd@stupidchicken.com>
parents: 75347
diff changeset
356 (eq (car element) 'r>)) (if on-region
8730dda8a05b (tempo-insert): Deal with 'r> if it appears specified with a prompt
Chong Yidong <cyd@stupidchicken.com>
parents: 75347
diff changeset
357 (progn
8730dda8a05b (tempo-insert): Deal with 'r> if it appears specified with a prompt
Chong Yidong <cyd@stupidchicken.com>
parents: 75347
diff changeset
358 (goto-char tempo-region-stop)
8730dda8a05b (tempo-insert): Deal with 'r> if it appears specified with a prompt
Chong Yidong <cyd@stupidchicken.com>
parents: 75347
diff changeset
359 (indent-region (mark) (point) nil))
8730dda8a05b (tempo-insert): Deal with 'r> if it appears specified with a prompt
Chong Yidong <cyd@stupidchicken.com>
parents: 75347
diff changeset
360 (tempo-insert-prompt-compat
8730dda8a05b (tempo-insert): Deal with 'r> if it appears specified with a prompt
Chong Yidong <cyd@stupidchicken.com>
parents: 75347
diff changeset
361 (cdr element))))
12321
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
362 ((and (consp element)
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
363 (eq (car element) 's)) (tempo-insert-named (car (cdr element))))
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
364 ((and (consp element)
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
365 (eq (car element) 'l)) (mapcar (function
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
366 (lambda (elt)
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
367 (tempo-insert elt on-region)))
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
368 (cdr element)))
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
369 ((eq element 'p) (tempo-insert-mark (point-marker)))
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
370 ((eq element 'r) (if on-region
10516
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
371 (goto-char tempo-region-stop)
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
372 (tempo-insert-mark (point-marker))))
10516
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
373 ((eq element 'r>) (if on-region
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
374 (progn
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
375 (goto-char tempo-region-stop)
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
376 (indent-region (mark) (point) nil))
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
377 (tempo-insert-mark (point-marker))))
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
378 ((eq element '>) (indent-according-to-mode))
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
379 ((eq element '&) (if (not (or (= (current-column) 0)
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
380 (save-excursion
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
381 (re-search-backward
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
382 "^\\s-*\\=" nil t))))
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
383 (insert "\n")))
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
384 ((eq element '%) (if (not (or (eolp)
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
385 (save-excursion
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
386 (re-search-forward
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
387 "\\=\\s-*$" nil t))))
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
388 (insert "\n")))
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
389 ((eq element 'n) (insert "\n"))
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
390 ((eq element 'n>) (insert "\n") (indent-according-to-mode))
10516
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
391 ;; Bug: If the 'o is the first element in a template, strange
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
392 ;; things can happen when the template is inserted at the
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
393 ;; beginning of a line.
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
394 ((eq element 'o) (if (not (or on-region
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
395 (eolp)
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
396 (save-excursion
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
397 (re-search-forward
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
398 "\\=\\s-*$" nil t))))
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
399 (open-line 1)))
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
400 ((null element))
10516
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
401 (t (tempo-insert (or (tempo-is-user-element element)
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
402 (eval element))
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
403 on-region))))
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
404
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
405 ;;;
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
406 ;;; tempo-insert-prompt
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
407
12321
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
408 (defun tempo-insert-prompt-compat (prompt)
64561
dc9ffd263776 (tempo-insert-prompt, tempo-interactive, tempo-show-completion-buffer,
Juanma Barranquero <lekktu@gmail.com>
parents: 64377
diff changeset
409 "Compatibility hack for `tempo-insert-prompt'.
12321
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
410 PROMPT can be either a prompt string, or a list of arguments to
64561
dc9ffd263776 (tempo-insert-prompt, tempo-interactive, tempo-show-completion-buffer,
Juanma Barranquero <lekktu@gmail.com>
parents: 64377
diff changeset
411 `tempo-insert-prompt', or nil."
42205
7308bbc423d5 Doc fixes.
Pavel Janík <Pavel@Janik.cz>
parents: 31657
diff changeset
412 (if (consp prompt) ; not nil either
12321
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
413 (apply 'tempo-insert-prompt prompt)
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
414 (tempo-insert-prompt prompt)))
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
415
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
416 (defun tempo-insert-prompt (prompt &optional save-name no-insert)
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
417 "Prompt for a text string and insert it in the current buffer.
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
418 If the variable `tempo-interactive' is non-nil the user is prompted
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
419 for a string in the minibuffer, which is then inserted in the current
64561
dc9ffd263776 (tempo-insert-prompt, tempo-interactive, tempo-show-completion-buffer,
Juanma Barranquero <lekktu@gmail.com>
parents: 64377
diff changeset
420 buffer. If `tempo-interactive' is nil, the current point is placed on
7410
4eca60cb3c4d (tempo-insert-region, tempo-show-completion-buffer,
Richard M. Stallman <rms@gnu.org>
parents: 7296
diff changeset
421 `tempo-mark'.
4eca60cb3c4d (tempo-insert-region, tempo-show-completion-buffer,
Richard M. Stallman <rms@gnu.org>
parents: 7296
diff changeset
422
12321
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
423 PROMPT is the prompt string, SAVE-NAME is a name to save the inserted
64561
dc9ffd263776 (tempo-insert-prompt, tempo-interactive, tempo-show-completion-buffer,
Juanma Barranquero <lekktu@gmail.com>
parents: 64377
diff changeset
424 text under. If the optional argument NO-INSERT is non-nil, no text is
dc9ffd263776 (tempo-insert-prompt, tempo-interactive, tempo-show-completion-buffer,
Juanma Barranquero <lekktu@gmail.com>
parents: 64377
diff changeset
425 inserted. This can be useful when there is a SAVE-NAME.
7410
4eca60cb3c4d (tempo-insert-region, tempo-show-completion-buffer,
Richard M. Stallman <rms@gnu.org>
parents: 7296
diff changeset
426
12321
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
427 If there already is a value for SAVE-NAME, it is used and the user is
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
428 never prompted."
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
429 (let (insertion
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
430 (previous (and save-name
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
431 (tempo-lookup-named save-name))))
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
432 (cond
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
433 ;; Insert previous value, unless no-insert is non-nil
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
434 ((and previous
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
435 (not no-insert))
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
436 (tempo-insert-named save-name)) ; A double lookup here, but who
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
437 ; cares
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
438 ;; If no-insert is non-nil, don't insert the previous value. Just
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
439 ;; keep it
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
440 (previous
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
441 nil)
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
442 ;; No previous value. Prompt or insert mark
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
443 (tempo-interactive
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
444 (if (not (stringp prompt))
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
445 (error "tempo: The prompt (%s) is not a string" prompt))
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
446 (setq insertion (read-string prompt))
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
447 (or no-insert
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
448 (insert insertion))
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
449 (if save-name
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
450 (tempo-save-named save-name insertion)))
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
451 (t
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
452 (tempo-insert-mark (point-marker))))))
7410
4eca60cb3c4d (tempo-insert-region, tempo-show-completion-buffer,
Richard M. Stallman <rms@gnu.org>
parents: 7296
diff changeset
453
4eca60cb3c4d (tempo-insert-region, tempo-show-completion-buffer,
Richard M. Stallman <rms@gnu.org>
parents: 7296
diff changeset
454 ;;;
10516
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
455 ;;; tempo-is-user-element
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
456
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
457 (defun tempo-is-user-element (element)
64561
dc9ffd263776 (tempo-insert-prompt, tempo-interactive, tempo-show-completion-buffer,
Juanma Barranquero <lekktu@gmail.com>
parents: 64377
diff changeset
458 "Tries all the user-defined element handlers in `tempo-user-elements'."
10516
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
459 ;; Sigh... I need (some list)
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
460 (catch 'found
84880
edcc591dc3a4 (tempo-insert-template, tempo-is-user-element, tempo-forward-mark,
Juanma Barranquero <lekktu@gmail.com>
parents: 78236
diff changeset
461 (mapc (function (lambda (handler)
edcc591dc3a4 (tempo-insert-template, tempo-is-user-element, tempo-forward-mark,
Juanma Barranquero <lekktu@gmail.com>
parents: 78236
diff changeset
462 (let ((result (funcall handler element)))
edcc591dc3a4 (tempo-insert-template, tempo-is-user-element, tempo-forward-mark,
Juanma Barranquero <lekktu@gmail.com>
parents: 78236
diff changeset
463 (if result (throw 'found result)))))
edcc591dc3a4 (tempo-insert-template, tempo-is-user-element, tempo-forward-mark,
Juanma Barranquero <lekktu@gmail.com>
parents: 78236
diff changeset
464 tempo-user-elements)
10516
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
465 (throw 'found nil)))
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
466
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
467 ;;;
7410
4eca60cb3c4d (tempo-insert-region, tempo-show-completion-buffer,
Richard M. Stallman <rms@gnu.org>
parents: 7296
diff changeset
468 ;;; tempo-forget-insertions
4eca60cb3c4d (tempo-insert-region, tempo-show-completion-buffer,
Richard M. Stallman <rms@gnu.org>
parents: 7296
diff changeset
469
4eca60cb3c4d (tempo-insert-region, tempo-show-completion-buffer,
Richard M. Stallman <rms@gnu.org>
parents: 7296
diff changeset
470 (defun tempo-forget-insertions ()
4eca60cb3c4d (tempo-insert-region, tempo-show-completion-buffer,
Richard M. Stallman <rms@gnu.org>
parents: 7296
diff changeset
471 "Forget all the saved named insertions."
4eca60cb3c4d (tempo-insert-region, tempo-show-completion-buffer,
Richard M. Stallman <rms@gnu.org>
parents: 7296
diff changeset
472 (setq tempo-named-insertions nil))
4eca60cb3c4d (tempo-insert-region, tempo-show-completion-buffer,
Richard M. Stallman <rms@gnu.org>
parents: 7296
diff changeset
473
4eca60cb3c4d (tempo-insert-region, tempo-show-completion-buffer,
Richard M. Stallman <rms@gnu.org>
parents: 7296
diff changeset
474 ;;;
12321
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
475 ;;; tempo-save-named
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
476
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
477 (defun tempo-save-named (name data) ; Had an optional prompt for 'v
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
478 "Save some data for later insertion
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
479 The contents of DATA is saved under the name NAME.
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
480
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
481 The data can later be retrieved with `tempo-lookup-named'.
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
482
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
483 This function returns nil, so it can be used in a template without
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
484 inserting anything."
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
485 (setq tempo-named-insertions
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
486 (cons (cons name data)
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
487 tempo-named-insertions))
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
488 nil)
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
489
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
490 ;;;
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
491 ;;; tempo-lookup-named
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
492
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
493 (defun tempo-lookup-named (name)
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
494 "Lookup some saved data under the name NAME.
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
495 Returns the data if NAME was found, and nil otherwise."
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
496 (cdr (assq name tempo-named-insertions)))
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
497
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
498 ;;;
7410
4eca60cb3c4d (tempo-insert-region, tempo-show-completion-buffer,
Richard M. Stallman <rms@gnu.org>
parents: 7296
diff changeset
499 ;;; tempo-insert-named
4eca60cb3c4d (tempo-insert-region, tempo-show-completion-buffer,
Richard M. Stallman <rms@gnu.org>
parents: 7296
diff changeset
500
11196
a74358cc05c6 (tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents: 10516
diff changeset
501 (defun tempo-insert-named (name)
a74358cc05c6 (tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents: 10516
diff changeset
502 "Insert the previous insertion saved under a named specified in NAME.
12321
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
503 If there is no such name saved, a tempo mark is inserted.
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
504
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
505 Note that if the data is a string, it will not be run through the string
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
506 processor."
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
507 (let* ((insertion (tempo-lookup-named name)))
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
508 (cond ((null insertion)
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
509 (tempo-insert-mark (point-marker)))
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
510 ((stringp insertion)
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
511 (insert insertion))
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
512 (t
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
513 (tempo-insert insertion nil)))))
35899872cb3f Documented the `l' tag.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
514
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
515
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
516 ;;;
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
517 ;;; tempo-process-and-insert-string
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 (defun tempo-process-and-insert-string (string)
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
520 "Insert a string from a template.
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
521 Run a string through the preprocessors in `tempo-insert-string-functions'
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
522 and insert the results."
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
523 (cond ((null tempo-insert-string-functions)
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
524 nil)
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
525 ((symbolp tempo-insert-string-functions)
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
526 (setq string
11196
a74358cc05c6 (tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents: 10516
diff changeset
527 (funcall tempo-insert-string-functions string)))
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
528 ((listp tempo-insert-string-functions)
27684
db5b16cdb88d (tempo-dolist, tempo-mapc): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 25278
diff changeset
529 (dolist (fn tempo-insert-string-functions)
11196
a74358cc05c6 (tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents: 10516
diff changeset
530 (setq string (funcall fn string))))
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
531 (t
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
532 (error "Bogus value in tempo-insert-string-functions: %s"
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
533 tempo-insert-string-functions)))
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
534 (insert string))
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
535
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
536 ;;;
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
537 ;;; tempo-insert-mark
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 (defun tempo-insert-mark (mark)
64561
dc9ffd263776 (tempo-insert-prompt, tempo-interactive, tempo-show-completion-buffer,
Juanma Barranquero <lekktu@gmail.com>
parents: 64377
diff changeset
540 "Insert a mark `tempo-marks' while keeping it sorted."
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
541 (cond ((null tempo-marks) (setq tempo-marks (list mark)))
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
542 ((< mark (car tempo-marks)) (setq tempo-marks (cons mark tempo-marks)))
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
543 (t (let ((lp tempo-marks))
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
544 (while (and (cdr lp)
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
545 (<= (car (cdr lp)) mark))
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
546 (setq lp (cdr lp)))
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
547 (if (not (= mark (car lp)))
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
548 (setcdr lp (cons mark (cdr lp))))))))
49597
e88404e8f2cf Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 43349
diff changeset
549
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
550 ;;;
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
551 ;;; tempo-forward-mark
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 (defun tempo-forward-mark ()
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
554 "Jump to the next mark in `tempo-forward-mark-list'."
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
555 (interactive)
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
556 (let ((next-mark (catch 'found
84880
edcc591dc3a4 (tempo-insert-template, tempo-is-user-element, tempo-forward-mark,
Juanma Barranquero <lekktu@gmail.com>
parents: 78236
diff changeset
557 (mapc
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
558 (function
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
559 (lambda (mark)
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
560 (if (< (point) mark)
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
561 (throw 'found mark))))
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
562 tempo-marks)
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
563 ;; return nil if not found
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
564 nil)))
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
565 (if next-mark
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
566 (goto-char next-mark))))
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
567
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
568 ;;;
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
569 ;;; tempo-backward-mark
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 (defun tempo-backward-mark ()
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
572 "Jump to the previous mark in `tempo-back-mark-list'."
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
573 (interactive)
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
574 (let ((prev-mark (catch 'found
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
575 (let (last)
84880
edcc591dc3a4 (tempo-insert-template, tempo-is-user-element, tempo-forward-mark,
Juanma Barranquero <lekktu@gmail.com>
parents: 78236
diff changeset
576 (mapc
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
577 (function
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
578 (lambda (mark)
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
579 (if (<= (point) mark)
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
580 (throw 'found last))
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
581 (setq last mark)))
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
582 tempo-marks)
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
583 last))))
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
584 (if prev-mark
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
585 (goto-char prev-mark))))
49597
e88404e8f2cf Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 43349
diff changeset
586
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
587 ;;;
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
588 ;;; tempo-add-tag
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 (defun tempo-add-tag (tag template &optional tag-list)
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
591 "Add a template tag.
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
592 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
593 or to `tempo-tags' if TAG-LIST is nil."
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
594
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
595 (interactive "sTag: \nCTemplate: ")
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
596 (if (null tag-list)
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
597 (setq tag-list 'tempo-tags))
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
598 (if (not (assoc tag (symbol-value tag-list)))
10516
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
599 (set tag-list (cons (cons tag template) (symbol-value tag-list))))
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
600 (tempo-invalidate-collection))
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
601
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
602 ;;;
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
603 ;;; tempo-use-tag-list
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 (defun tempo-use-tag-list (tag-list &optional completion-function)
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
606 "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
607 TAG-LIST is a symbol whose variable value is a tag list created with
10516
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
608 `tempo-add-tag'.
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
609
14008
f8a4126da2c8 (tempo-local-tags, tempo-user-elements, tempo-use-tag-list):
Karl Heuer <kwzh@gnu.org>
parents: 12333
diff changeset
610 COMPLETION-FUNCTION is an obsolete option for specifying an optional
10516
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
611 function or string that is used by `\\[tempo-complete-tag]' to find a
64561
dc9ffd263776 (tempo-insert-prompt, tempo-interactive, tempo-show-completion-buffer,
Juanma Barranquero <lekktu@gmail.com>
parents: 64377
diff changeset
612 string to match the tag against. It has the same definition as the
dc9ffd263776 (tempo-insert-prompt, tempo-interactive, tempo-show-completion-buffer,
Juanma Barranquero <lekktu@gmail.com>
parents: 64377
diff changeset
613 variable `tempo-match-finder'. In this version, supplying a
10516
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
614 COMPLETION-FUNCTION just sets `tempo-match-finder' locally."
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
615 (let ((old (assq tag-list tempo-local-tags)))
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
616 (if old
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
617 (setcdr old completion-function)
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
618 (setq tempo-local-tags (cons (cons tag-list completion-function)
10516
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
619 tempo-local-tags))))
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
620 (if completion-function
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
621 (setq tempo-match-finder completion-function))
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
622 (tempo-invalidate-collection))
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
623
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
624 ;;;
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
625 ;;; tempo-invalidate-collection
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
626
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
627 (defun tempo-invalidate-collection ()
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
628 "Marks the tag collection as obsolete.
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
629 Whenever it is needed again it will be rebuilt."
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
630 (setq tempo-dirty-collection t))
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
631
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
632 ;;;
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
633 ;;; tempo-build-collection
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
634
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
635 (defun tempo-build-collection ()
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
636 "Build a collection of all the tags and return it.
42205
7308bbc423d5 Doc fixes.
Pavel Janík <Pavel@Janik.cz>
parents: 31657
diff changeset
637 If `tempo-dirty-collection' is nil, the old collection is reused."
11208
18107abf5df3 (tempo-build-collection): Clear flag after computing
Karl Heuer <kwzh@gnu.org>
parents: 11202
diff changeset
638 (prog1
18107abf5df3 (tempo-build-collection): Clear flag after computing
Karl Heuer <kwzh@gnu.org>
parents: 11202
diff changeset
639 (or (and (not tempo-dirty-collection)
18107abf5df3 (tempo-build-collection): Clear flag after computing
Karl Heuer <kwzh@gnu.org>
parents: 11202
diff changeset
640 tempo-collection)
18107abf5df3 (tempo-build-collection): Clear flag after computing
Karl Heuer <kwzh@gnu.org>
parents: 11202
diff changeset
641 (setq tempo-collection
18107abf5df3 (tempo-build-collection): Clear flag after computing
Karl Heuer <kwzh@gnu.org>
parents: 11202
diff changeset
642 (apply (function append)
18107abf5df3 (tempo-build-collection): Clear flag after computing
Karl Heuer <kwzh@gnu.org>
parents: 11202
diff changeset
643 (mapcar (function (lambda (tag-list)
10516
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
644 ; If the format for
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
645 ; tempo-local-tags changes,
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
646 ; change this
11208
18107abf5df3 (tempo-build-collection): Clear flag after computing
Karl Heuer <kwzh@gnu.org>
parents: 11202
diff changeset
647 (eval (car tag-list))))
18107abf5df3 (tempo-build-collection): Clear flag after computing
Karl Heuer <kwzh@gnu.org>
parents: 11202
diff changeset
648 tempo-local-tags))))
18107abf5df3 (tempo-build-collection): Clear flag after computing
Karl Heuer <kwzh@gnu.org>
parents: 11202
diff changeset
649 (setq tempo-dirty-collection nil)))
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
650
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
651 ;;;
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
652 ;;; tempo-find-match-string
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 (defun tempo-find-match-string (finder)
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
655 "Find a string to be matched against a tag list.
64561
dc9ffd263776 (tempo-insert-prompt, tempo-interactive, tempo-show-completion-buffer,
Juanma Barranquero <lekktu@gmail.com>
parents: 64377
diff changeset
656 FINDER is a function or a string. Returns (STRING . POS), or nil
11196
a74358cc05c6 (tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents: 10516
diff changeset
657 if no reasonable string is found."
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
658 (cond ((stringp finder)
11196
a74358cc05c6 (tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents: 10516
diff changeset
659 (let (successful)
a74358cc05c6 (tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents: 10516
diff changeset
660 (save-excursion
a74358cc05c6 (tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents: 10516
diff changeset
661 (or (setq successful (re-search-backward finder nil t))
a74358cc05c6 (tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents: 10516
diff changeset
662 0))
a74358cc05c6 (tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents: 10516
diff changeset
663 (if successful
a74358cc05c6 (tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents: 10516
diff changeset
664 (cons (buffer-substring (match-beginning 1)
a74358cc05c6 (tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents: 10516
diff changeset
665 (match-end 1)) ; This seems to be a
a74358cc05c6 (tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents: 10516
diff changeset
666 ; bug in emacs
a74358cc05c6 (tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents: 10516
diff changeset
667 (match-beginning 1))
a74358cc05c6 (tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents: 10516
diff changeset
668 nil)))
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
669 (t
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
670 (funcall finder))))
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
671
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
672 ;;;
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
673 ;;; tempo-complete-tag
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 (defun tempo-complete-tag (&optional silent)
7410
4eca60cb3c4d (tempo-insert-region, tempo-show-completion-buffer,
Richard M. Stallman <rms@gnu.org>
parents: 7296
diff changeset
676 "Look for a tag and expand it.
11196
a74358cc05c6 (tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents: 10516
diff changeset
677 All the tags in the tag lists in `tempo-local-tags'
11208
18107abf5df3 (tempo-build-collection): Clear flag after computing
Karl Heuer <kwzh@gnu.org>
parents: 11202
diff changeset
678 \(this includes `tempo-tags') are searched for a match for the text
11196
a74358cc05c6 (tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents: 10516
diff changeset
679 before the point. The way the string to match for is determined can
64561
dc9ffd263776 (tempo-insert-prompt, tempo-interactive, tempo-show-completion-buffer,
Juanma Barranquero <lekktu@gmail.com>
parents: 64377
diff changeset
680 be altered with the variable `tempo-match-finder'. If
11196
a74358cc05c6 (tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents: 10516
diff changeset
681 `tempo-match-finder' returns nil, then the results are the same as
a74358cc05c6 (tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents: 10516
diff changeset
682 no match at all.
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
683
10516
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
684 If a single match is found, the corresponding template is expanded in
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
685 place of the matching string.
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
686
10516
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
687 If a partial completion or no match at all is found, and SILENT is
42205
7308bbc423d5 Doc fixes.
Pavel Janík <Pavel@Janik.cz>
parents: 31657
diff changeset
688 non-nil, the function will give a signal.
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
689
10516
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
690 If a partial completion is found and `tempo-show-completion-buffer' is
42205
7308bbc423d5 Doc fixes.
Pavel Janík <Pavel@Janik.cz>
parents: 31657
diff changeset
691 non-nil, a buffer containing possible completions is displayed."
7410
4eca60cb3c4d (tempo-insert-region, tempo-show-completion-buffer,
Richard M. Stallman <rms@gnu.org>
parents: 7296
diff changeset
692
10516
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
693 ;; This function may look like a hack, but this is how I want it to
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
694 ;; work.
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
695 (interactive "*")
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
696 (let* ((collection (tempo-build-collection))
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
697 (match-info (tempo-find-match-string tempo-match-finder))
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
698 (match-string (car match-info))
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
699 (match-start (cdr match-info))
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
700 (exact (assoc match-string collection))
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
701 (compl (or (car exact)
11196
a74358cc05c6 (tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents: 10516
diff changeset
702 (and match-info (try-completion match-string collection)))))
10516
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
703 (if compl (delete-region match-start (point)))
11196
a74358cc05c6 (tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents: 10516
diff changeset
704 (cond ((null match-info) (or silent (ding)))
a74358cc05c6 (tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents: 10516
diff changeset
705 ((null compl) (or silent (ding)))
10516
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
706 ((eq compl t) (tempo-insert-template
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
707 (cdr (assoc match-string
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
708 collection))
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
709 nil))
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
710 (t (if (setq exact (assoc compl collection))
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
711 (tempo-insert-template (cdr exact) nil)
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
712 (insert compl)
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
713 (or silent (ding))
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
714 (if tempo-show-completion-buffer
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
715 (tempo-display-completions match-string
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
716 collection)))))))
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
717
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
718
7410
4eca60cb3c4d (tempo-insert-region, tempo-show-completion-buffer,
Richard M. Stallman <rms@gnu.org>
parents: 7296
diff changeset
719 ;;;
4eca60cb3c4d (tempo-insert-region, tempo-show-completion-buffer,
Richard M. Stallman <rms@gnu.org>
parents: 7296
diff changeset
720 ;;; tempo-display-completions
4eca60cb3c4d (tempo-insert-region, tempo-show-completion-buffer,
Richard M. Stallman <rms@gnu.org>
parents: 7296
diff changeset
721
4eca60cb3c4d (tempo-insert-region, tempo-show-completion-buffer,
Richard M. Stallman <rms@gnu.org>
parents: 7296
diff changeset
722 (defun tempo-display-completions (string tag-list)
4eca60cb3c4d (tempo-insert-region, tempo-show-completion-buffer,
Richard M. Stallman <rms@gnu.org>
parents: 7296
diff changeset
723 "Show a buffer containing possible completions for STRING."
4eca60cb3c4d (tempo-insert-region, tempo-show-completion-buffer,
Richard M. Stallman <rms@gnu.org>
parents: 7296
diff changeset
724 (if tempo-leave-completion-buffer
4eca60cb3c4d (tempo-insert-region, tempo-show-completion-buffer,
Richard M. Stallman <rms@gnu.org>
parents: 7296
diff changeset
725 (with-output-to-temp-buffer "*Completions*"
4eca60cb3c4d (tempo-insert-region, tempo-show-completion-buffer,
Richard M. Stallman <rms@gnu.org>
parents: 7296
diff changeset
726 (display-completion-list
66114
13abee3a9bc6 * message.el (message-expand-group): Pass the common
Masatake YAMATO <jet@gyve.org>
parents: 64762
diff changeset
727 (all-completions string tag-list)
13abee3a9bc6 * message.el (message-expand-group): Pass the common
Masatake YAMATO <jet@gyve.org>
parents: 64762
diff changeset
728 string))
7410
4eca60cb3c4d (tempo-insert-region, tempo-show-completion-buffer,
Richard M. Stallman <rms@gnu.org>
parents: 7296
diff changeset
729 (save-window-excursion
4eca60cb3c4d (tempo-insert-region, tempo-show-completion-buffer,
Richard M. Stallman <rms@gnu.org>
parents: 7296
diff changeset
730 (with-output-to-temp-buffer "*Completions*"
4eca60cb3c4d (tempo-insert-region, tempo-show-completion-buffer,
Richard M. Stallman <rms@gnu.org>
parents: 7296
diff changeset
731 (display-completion-list
66114
13abee3a9bc6 * message.el (message-expand-group): Pass the common
Masatake YAMATO <jet@gyve.org>
parents: 64762
diff changeset
732 (all-completions string tag-list)
13abee3a9bc6 * message.el (message-expand-group): Pass the common
Masatake YAMATO <jet@gyve.org>
parents: 64762
diff changeset
733 string))
7410
4eca60cb3c4d (tempo-insert-region, tempo-show-completion-buffer,
Richard M. Stallman <rms@gnu.org>
parents: 7296
diff changeset
734 (sit-for 32767))))
4eca60cb3c4d (tempo-insert-region, tempo-show-completion-buffer,
Richard M. Stallman <rms@gnu.org>
parents: 7296
diff changeset
735
11196
a74358cc05c6 (tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents: 10516
diff changeset
736 ;;;
a74358cc05c6 (tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents: 10516
diff changeset
737 ;;; tempo-expand-if-complete
a74358cc05c6 (tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents: 10516
diff changeset
738
a74358cc05c6 (tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents: 10516
diff changeset
739 (defun tempo-expand-if-complete ()
a74358cc05c6 (tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents: 10516
diff changeset
740 "Expand the tag before point if it is complete.
a74358cc05c6 (tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents: 10516
diff changeset
741 Returns non-nil if an expansion was made and nil otherwise.
a74358cc05c6 (tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents: 10516
diff changeset
742
a74358cc05c6 (tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents: 10516
diff changeset
743 This could as an example be used in a command that is bound to the
a74358cc05c6 (tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents: 10516
diff changeset
744 space bar, and looks something like this:
a74358cc05c6 (tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents: 10516
diff changeset
745
31657
58e2bb13d72e (tempo-expand-if-complete): Quote paren in docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27684
diff changeset
746 \(defun tempo-space ()
11196
a74358cc05c6 (tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents: 10516
diff changeset
747 (interactive \"*\")
a74358cc05c6 (tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents: 10516
diff changeset
748 (or (tempo-expand-if-complete)
a74358cc05c6 (tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents: 10516
diff changeset
749 (insert \" \")))"
a74358cc05c6 (tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents: 10516
diff changeset
750
a74358cc05c6 (tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents: 10516
diff changeset
751 (interactive "*")
a74358cc05c6 (tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents: 10516
diff changeset
752 (let* ((collection (tempo-build-collection))
a74358cc05c6 (tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents: 10516
diff changeset
753 (match-info (tempo-find-match-string tempo-match-finder))
a74358cc05c6 (tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents: 10516
diff changeset
754 (match-string (car match-info))
a74358cc05c6 (tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents: 10516
diff changeset
755 (match-start (cdr match-info))
a74358cc05c6 (tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents: 10516
diff changeset
756 (exact (assoc match-string collection)))
a74358cc05c6 (tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents: 10516
diff changeset
757 (if exact
a74358cc05c6 (tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents: 10516
diff changeset
758 (progn
a74358cc05c6 (tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents: 10516
diff changeset
759 (delete-region match-start (point))
a74358cc05c6 (tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents: 10516
diff changeset
760 (tempo-insert-template (cdr exact) nil)
a74358cc05c6 (tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents: 10516
diff changeset
761 t)
a74358cc05c6 (tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents: 10516
diff changeset
762 nil)))
a74358cc05c6 (tempo-insert): Added the P tag and modified the s tag accordingly
Richard M. Stallman <rms@gnu.org>
parents: 10516
diff changeset
763
10516
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
764 (provide 'tempo)
488c5be866c3 (tempo-insert-template): Quoted transient-mark-mode
Richard M. Stallman <rms@gnu.org>
parents: 7410
diff changeset
765
93975
1e3a407766b9 Fix up comment convention on the arch-tag lines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 87649
diff changeset
766 ;; arch-tag: b3c0ee36-db3b-47bc-875f-091b4e27a063
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
767 ;;; tempo.el ends here