annotate lisp/expand.el @ 49506:ac9e2eeeb03d

New format of AUTHORS file; list each author name once followed by contributed and changed files. Improve selection of entries to include in list, and generate list of unrecognized entries indicating syntax errors in ChangeLog files. (authors-coding-system): New variable. (authors-many-files): Update doc string. (authors-aliases): Change format. Now one entry with multiple aliases per author. (authors-valid-file-names, authors-renamed-files-alist) (authors-renamed-files-regexps): New variables. (authors-canonical-file-name): New function. Validates that file exists or occurs in one of the above lists. Record unrecognized file names in global authors-invalid-file-names list. (authors-add): Change to record per-change counts. (authors-canonical-author-name): Handle new format of authors-aliases list. (authors-scan-change-log): Rename FILE arg to LOG-FILE. Change doc string to describe new entry format. Only add author entries for valid file names. (authors-print): Replace by authors-add-to-author-list. (authors-add-to-author-list): New function which reorders per-file entries and adds them to global authors-author-list. (authors): Instead of authors-print to insert in *Authors* buffer, use authors-add-to-author-list to reorder the list and then insert result in *Authors* buffer with new format. Generate *Authors Errors* compilation-mode buffer listing unrecognized ChangeLog entries.
author Kim F. Storm <storm@cua.dk>
date Wed, 29 Jan 2003 00:13:11 +0000
parents 83f879e86675
children 695cf19ef79e d7ddb3e565de
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
38436
b174db545cfd Some fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents: 27042
diff changeset
1 ;;; expand.el --- make abbreviations more usable
16769
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3 ;; Copyright (C) 1995, 1996 Free Software Foundation, Inc.
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5 ;; Author: Frederic Lepied <Frederic.Lepied@sugix.frmug.org>
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6 ;; Maintainer: Frederic Lepied <Frederic.Lepied@sugix.frmug.org>
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7 ;; Keywords: abbrev
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
9 ;; This file is part of GNU Emacs.
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
10
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
11 ;; GNU Emacs is free software; you can redistribute it and/or modify
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
12 ;; it under the terms of the GNU General Public License as published by
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
13 ;; the Free Software Foundation; either version 2, or (at your option)
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
14 ;; any later version.
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
15
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
16 ;; GNU Emacs is distributed in the hope that it will be useful,
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
17 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
18 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
19 ;; GNU General Public License for more details.
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
20
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
21 ;; You should have received a copy of the GNU General Public License
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
22 ;; along with GNU Emacs; see the file COPYING. If not, write to the
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
23 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
24 ;; Boston, MA 02111-1307, USA.
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
25
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
26 ;;; Commentary:
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
27 ;;
16770
26698958bd84 (expand-map): Don't define SPC.
Richard M. Stallman <rms@gnu.org>
parents: 16769
diff changeset
28 ;; This package defines abbrevs which expand into structured constructs
26698958bd84 (expand-map): Don't define SPC.
Richard M. Stallman <rms@gnu.org>
parents: 16769
diff changeset
29 ;; for certain languages. The construct is indented for you,
16838
9bcab3c812bb No longer a minor mode.
Richard M. Stallman <rms@gnu.org>
parents: 16770
diff changeset
30 ;; and contains slots for you to fill in other text.
16770
26698958bd84 (expand-map): Don't define SPC.
Richard M. Stallman <rms@gnu.org>
parents: 16769
diff changeset
31
26698958bd84 (expand-map): Don't define SPC.
Richard M. Stallman <rms@gnu.org>
parents: 16769
diff changeset
32 ;; These abbrevs expand only at the end of a line and when not in a comment
26698958bd84 (expand-map): Don't define SPC.
Richard M. Stallman <rms@gnu.org>
parents: 16769
diff changeset
33 ;; or a string.
16769
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
34 ;;
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
35 ;; Look at the Sample: section for emacs-lisp, perl and c expand lists.
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
36 ;; For example for c-mode, you could declare your abbrev table with :
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
37 ;;
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
38 ;; (defconst c-expand-list
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
39 ;; '(("if" "if () {\n \n} else {\n \n}" (5 10 21))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
40 ;; ("ifn" "if () {}" (5 8))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
41 ;; ("uns" "unsigned ")
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
42 ;; ("for" "for(; ; ) {\n\n}" (5 7 9 13))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
43 ;; ("switch" "switch () {\n\n}" (9 13))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
44 ;; ("case" "case :\n\nbreak;\n" (6 8 16))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
45 ;; ("do" "do {\n\n} while ();" (6 16))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
46 ;; ("while" "while () {\n\n}" (8 12))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
47 ;; ("default" "default:\n\nbreak;" 10)
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
48 ;; ("main" "int\nmain(int argc, char * argv[])\n{\n\n}\n" 37))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
49 ;; "Expansions for C mode")
41612
83f879e86675 Converted backquote to the new style (in a string).
Sam Steingold <sds@gnu.org>
parents: 39831
diff changeset
50 ;;
16838
9bcab3c812bb No longer a minor mode.
Richard M. Stallman <rms@gnu.org>
parents: 16770
diff changeset
51 ;; and enter Abbrev mode with the following hook :
16769
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
52 ;;
16770
26698958bd84 (expand-map): Don't define SPC.
Richard M. Stallman <rms@gnu.org>
parents: 16769
diff changeset
53 ;; (add-hook 'c-mode-hook (function (lambda ()
16769
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
54 ;; (expand-add-abbrevs c-mode-abbrev-table c-expand-list)
16838
9bcab3c812bb No longer a minor mode.
Richard M. Stallman <rms@gnu.org>
parents: 16770
diff changeset
55 ;; (abbrev-mode))))
16769
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
56 ;;
16838
9bcab3c812bb No longer a minor mode.
Richard M. Stallman <rms@gnu.org>
parents: 16770
diff changeset
57 ;; you can also init some post-process hooks :
16769
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
58 ;;
16838
9bcab3c812bb No longer a minor mode.
Richard M. Stallman <rms@gnu.org>
parents: 16770
diff changeset
59 ;; (add-hook 'expand-load-hook
16769
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
60 ;; (function
16770
26698958bd84 (expand-map): Don't define SPC.
Richard M. Stallman <rms@gnu.org>
parents: 16769
diff changeset
61 ;; (lambda ()
16769
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
62 ;; (add-hook 'expand-expand-hook 'indent-according-to-mode)
16838
9bcab3c812bb No longer a minor mode.
Richard M. Stallman <rms@gnu.org>
parents: 16770
diff changeset
63 ;; (add-hook 'expand-jump-hook 'indent-according-to-mode))))
16769
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
64 ;;
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
65 ;; Remarks:
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
66 ;;
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
67 ;; Many thanks to Heddy Boubaker <boubaker@cenatls.cena.dgac.fr>,
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
68 ;; Jerome Santini <santini@chambord.univ-orleans.fr>,
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
69 ;; Jari Aalto <jaalto@tre.tele.nokia.fi>.
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
70 ;;
16838
9bcab3c812bb No longer a minor mode.
Richard M. Stallman <rms@gnu.org>
parents: 16770
diff changeset
71 ;; Please send me a word to give me your feeling about this feature or
16769
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
72 ;; to explain me how you use it (your expansions table for example) using
16838
9bcab3c812bb No longer a minor mode.
Richard M. Stallman <rms@gnu.org>
parents: 16770
diff changeset
73 ;; the function expand-submit-report.
24218
f3a482ad0fd6 Terminate Commentary for Finder.
Dave Love <fx@gnu.org>
parents: 20597
diff changeset
74 ;;; Code:
16769
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
75
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
76 ;;; Constants:
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
77
20597
886039ba7b3e Customized.
Andreas Schwab <schwab@suse.de>
parents: 17517
diff changeset
78 (defgroup expand nil
886039ba7b3e Customized.
Andreas Schwab <schwab@suse.de>
parents: 17517
diff changeset
79 "Make abbreviations more usable."
886039ba7b3e Customized.
Andreas Schwab <schwab@suse.de>
parents: 17517
diff changeset
80 :group 'abbrev)
886039ba7b3e Customized.
Andreas Schwab <schwab@suse.de>
parents: 17517
diff changeset
81
886039ba7b3e Customized.
Andreas Schwab <schwab@suse.de>
parents: 17517
diff changeset
82 (defcustom expand-load-hook nil
886039ba7b3e Customized.
Andreas Schwab <schwab@suse.de>
parents: 17517
diff changeset
83 "Hooks run when `expand.el' is loaded."
886039ba7b3e Customized.
Andreas Schwab <schwab@suse.de>
parents: 17517
diff changeset
84 :type 'hook
886039ba7b3e Customized.
Andreas Schwab <schwab@suse.de>
parents: 17517
diff changeset
85 :group 'expand)
16769
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
86
20597
886039ba7b3e Customized.
Andreas Schwab <schwab@suse.de>
parents: 17517
diff changeset
87 (defcustom expand-expand-hook nil
886039ba7b3e Customized.
Andreas Schwab <schwab@suse.de>
parents: 17517
diff changeset
88 "Hooks run when an abbrev made by `expand-add-abbrevs' is expanded."
886039ba7b3e Customized.
Andreas Schwab <schwab@suse.de>
parents: 17517
diff changeset
89 :type 'hook
886039ba7b3e Customized.
Andreas Schwab <schwab@suse.de>
parents: 17517
diff changeset
90 :group 'expand)
16769
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
91
20597
886039ba7b3e Customized.
Andreas Schwab <schwab@suse.de>
parents: 17517
diff changeset
92 (defcustom expand-jump-hook nil
886039ba7b3e Customized.
Andreas Schwab <schwab@suse.de>
parents: 17517
diff changeset
93 "Hooks run by `expand-jump-to-previous-slot' and `expand-jump-to-next-slot'."
886039ba7b3e Customized.
Andreas Schwab <schwab@suse.de>
parents: 17517
diff changeset
94 :type 'hook
886039ba7b3e Customized.
Andreas Schwab <schwab@suse.de>
parents: 17517
diff changeset
95 :group 'expand)
16769
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
96
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
97 ;;; Samples:
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
98
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
99 (define-skeleton expand-c-for-skeleton "For loop skeleton"
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
100 "Loop var: "
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
101 "for(" str _ @ "=0; " str @ "; " str @ ") {" \n
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
102 @ _ \n
39831
ef785a6f6245 (expand-c-for-skeleton): Add explicit terminating \n.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38436
diff changeset
103 "}" > \n)
16769
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
104
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
105 (defconst expand-c-sample-expand-list
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
106 '(("if" "if () {\n \n} else {\n \n}" (5 10 21))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
107 ("ifn" "if () {}" (5 8))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
108 ("uns" "unsigned ")
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
109 ("for" expand-c-for-skeleton)
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
110 ("switch" "switch () {\n\n}" (9 13))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
111 ("case" "case :\n\nbreak;\n" (6 8 16))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
112 ("do" "do {\n\n} while ();" (6 16))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
113 ("while" "while () {\n\n}" (8 12))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
114 ("default" "default:\n\nbreak;" 10)
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
115 ("main" "int\nmain(int argc, char * argv[])\n{\n\n}\n" 37))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
116 "Expansions for C mode. See `expand-add-abbrevs'.")
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
117
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
118 ;; lisp example from Jari Aalto <jaalto@tre.tele.nokia.fi>
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
119 (defconst expand-sample-lisp-mode-expand-list
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
120 (list
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
121 (list
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
122 "defu"
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
123 (concat
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
124 "(defun ()\n"
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
125 " \"\"\n"
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
126 " (interactive)\n"
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
127 " (let* (\n"
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
128 " )\n"
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
129 " \n"
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
130 " ))")
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
131 (list 8 11 16 32 43 59))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
132
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
133 (list
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
134 "defs"
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
135 (concat
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
136 "(defsubst ()\n"
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
137 " \"\"\n"
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
138 " (interactive)\n"
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
139 " )")
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
140 (list 11 14 19 23 39))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
141
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
142 (list
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
143 "defm"
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
144 (concat
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
145 "(defmacro ()\n"
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
146 " \"\"\n"
41612
83f879e86675 Converted backquote to the new style (in a string).
Sam Steingold <sds@gnu.org>
parents: 39831
diff changeset
147 " `( \n"
16769
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
148 " ))")
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
149 (list 11 13 18 25))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
150
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
151 (list
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
152 "defa"
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
153 (concat
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
154 "(defadvice (around act)\n"
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
155 " \"\"\n"
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
156 " \n"
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
157 " )")
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
158 (list 12 22 32 36))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
159
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
160 (list
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
161 "defc"
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
162 "(defconst nil\n \"\")\n"
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
163 (list 11 13 20))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
164
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
165 (list
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
166 "defv"
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
167 "(defvar nil\n \"\")\n"
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
168 (list 9 11 18))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
169
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
170 (list
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
171 "let"
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
172 "(let* (\n)\n "
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
173 (list 8 13))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
174
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
175 (list
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
176 "sav"
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
177 "(save-excursion\n \n)"
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
178 (list 18))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
179
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
180 (list
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
181 "aut"
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
182 "(autoload ' \"\" t t)\n"
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
183 (list 12 14))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
184
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
185 )
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
186 "Expansions for Lisp mode. See `expand-add-abbrevs'.")
41612
83f879e86675 Converted backquote to the new style (in a string).
Sam Steingold <sds@gnu.org>
parents: 39831
diff changeset
187
16769
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
188 ;; perl example from Jari Aalto <jaalto@tre.tele.nokia.fi>
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
189 (defconst expand-sample-perl-mode-expand-list
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
190 (list
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
191 (list
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
192 ;; This is default perl4 subroutine template
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
193 ;;
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
194 "sub"
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
195 (concat
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
196 "#" (make-string 70 ?-) "\n"
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
197 "sub {\n"
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
198 " # DESCRIPTION\n"
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
199 " # \n"
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
200 " # \n"
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
201 " # INPUT\n"
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
202 " # \n"
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
203 " # \n"
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
204 " # RETURN\n"
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
205 " # \n"
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
206 "\n"
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
207 " local( $f ) = \"$lib.\";\n" ;; Function name AFTER period
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
208 " local() = @_;\n" ;; func arguments here
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
209 " \n"
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
210 " \n}\n"
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
211 )
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
212 (list 77 88 120 146 159 176))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
213
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
214 (list
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
215 "for" ; foreach
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
216 (concat
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
217 "for ( )\n"
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
218 "{\n\n\}"
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
219 )
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
220 (list 7 12))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
221
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
222 (list
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
223 "whi" ; foreach
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
224 (concat
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
225 "while ( )\n"
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
226 "{\n\n\}"
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
227 )
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
228 (list 9 15))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
229
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
230
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
231 ;; The normal "if" can be used like
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
232 ;; print $F "xxxxxx" if defined @arr;
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
233 ;;
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
234 (list
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
235 "iff"
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
236 (concat
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
237 "if ( )\n"
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
238 "{\n\n\}"
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
239 )
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
240 (list 6 12))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
241
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
242 (list "loc" "local( $ );" (list 9))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
243 (list "my" "my( $ );" (list 6))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
244 (list "ope" "open(,\"\")\t|| die \"$f: Can't open [$]\";" (list 6 8 36))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
245 (list "clo" "close ;" 7)
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
246 (list "def" "defined " (list 9))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
247 (list "und" "undef ;" (list 7))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
248
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
249 ;; There is no ending colon, because they can be in statement
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
250 ;; defined $REXP_NOT_NEW && (print "xxxxx" );
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
251 ;;
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
252 (list "pr" "print " 7)
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
253 (list "pf" "printf " 8)
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
254
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
255
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
256 (list "gre" "grep( //, );" (list 8 11))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
257 (list "pus" "push( , );" (list 7 9))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
258 (list "joi" "join( '', );" (list 7 11))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
259 (list "rtu" "return ;" (list 8))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
260
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
261 )
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
262 "Expansions for Perl mode. See `expand-add-abbrevs'.")
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
263
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
264 ;;; Code:
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
265
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
266 ;;;###autoload
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
267 (defun expand-add-abbrevs (table abbrevs)
16770
26698958bd84 (expand-map): Don't define SPC.
Richard M. Stallman <rms@gnu.org>
parents: 16769
diff changeset
268 "Add a list of abbrev to abbrev table TABLE.
26698958bd84 (expand-map): Don't define SPC.
Richard M. Stallman <rms@gnu.org>
parents: 16769
diff changeset
269 ABBREVS is a list of abbrev definitions; each abbrev description entry
26698958bd84 (expand-map): Don't define SPC.
Richard M. Stallman <rms@gnu.org>
parents: 16769
diff changeset
270 has the form (ABBREV EXPANSION ARG).
26698958bd84 (expand-map): Don't define SPC.
Richard M. Stallman <rms@gnu.org>
parents: 16769
diff changeset
271
26698958bd84 (expand-map): Don't define SPC.
Richard M. Stallman <rms@gnu.org>
parents: 16769
diff changeset
272 ABBREV is the abbreviation to replace.
26698958bd84 (expand-map): Don't define SPC.
Richard M. Stallman <rms@gnu.org>
parents: 16769
diff changeset
273
26698958bd84 (expand-map): Don't define SPC.
Richard M. Stallman <rms@gnu.org>
parents: 16769
diff changeset
274 EXPANSION is the replacement string or a function which will make the
26698958bd84 (expand-map): Don't define SPC.
Richard M. Stallman <rms@gnu.org>
parents: 16769
diff changeset
275 expansion. For example you, could use the DMacros or skeleton packages
16769
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
276 to generate such functions.
16770
26698958bd84 (expand-map): Don't define SPC.
Richard M. Stallman <rms@gnu.org>
parents: 16769
diff changeset
277
26698958bd84 (expand-map): Don't define SPC.
Richard M. Stallman <rms@gnu.org>
parents: 16769
diff changeset
278 ARG is an optional argument which can be a number or a list of
26698958bd84 (expand-map): Don't define SPC.
Richard M. Stallman <rms@gnu.org>
parents: 16769
diff changeset
279 numbers. If ARG is a number, point is placed ARG chars from the
26698958bd84 (expand-map): Don't define SPC.
Richard M. Stallman <rms@gnu.org>
parents: 16769
diff changeset
280 beginning of the expanded text.
26698958bd84 (expand-map): Don't define SPC.
Richard M. Stallman <rms@gnu.org>
parents: 16769
diff changeset
281
26698958bd84 (expand-map): Don't define SPC.
Richard M. Stallman <rms@gnu.org>
parents: 16769
diff changeset
282 If ARG is a list of numbers, point is placed according to the first
26698958bd84 (expand-map): Don't define SPC.
Richard M. Stallman <rms@gnu.org>
parents: 16769
diff changeset
283 member of the list, but you can visit the other specified positions
16838
9bcab3c812bb No longer a minor mode.
Richard M. Stallman <rms@gnu.org>
parents: 16770
diff changeset
284 cyclicaly with the functions `expand-jump-to-previous-slot' and
9bcab3c812bb No longer a minor mode.
Richard M. Stallman <rms@gnu.org>
parents: 16770
diff changeset
285 `expand-jump-to-next-slot'.
16770
26698958bd84 (expand-map): Don't define SPC.
Richard M. Stallman <rms@gnu.org>
parents: 16769
diff changeset
286
26698958bd84 (expand-map): Don't define SPC.
Richard M. Stallman <rms@gnu.org>
parents: 16769
diff changeset
287 If ARG is omitted, point is placed at the end of the expanded text."
26698958bd84 (expand-map): Don't define SPC.
Richard M. Stallman <rms@gnu.org>
parents: 16769
diff changeset
288
16769
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
289 (if (null abbrevs)
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
290 table
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
291 (expand-add-abbrev table (nth 0 (car abbrevs)) (nth 1 (car abbrevs))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
292 (nth 2 (car abbrevs)))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
293 (expand-add-abbrevs table (cdr abbrevs))))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
294
16838
9bcab3c812bb No longer a minor mode.
Richard M. Stallman <rms@gnu.org>
parents: 16770
diff changeset
295 (defvar expand-list nil "Temporary variable used by the Expand package.")
16769
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
296
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
297 (defvar expand-pos nil
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
298 "If non nil, stores a vector containing markers to positions defined by the last expansion.
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
299 This variable is local to a buffer.")
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
300 (make-variable-buffer-local 'expand-pos)
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
301
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
302 (defvar expand-index 0
16770
26698958bd84 (expand-map): Don't define SPC.
Richard M. Stallman <rms@gnu.org>
parents: 16769
diff changeset
303 "Index of the last marker used in `expand-pos'.
16769
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
304 This variable is local to a buffer.")
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
305 (make-variable-buffer-local 'expand-index)
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
306
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
307 (defvar expand-point nil
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
308 "End of the expanded region.
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
309 This variable is local to a buffer.")
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
310 (make-variable-buffer-local 'expand-point)
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
311
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
312 (defun expand-add-abbrev (table abbrev expansion arg)
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
313 "Add one abbreviation and provide the hook to move to the specified positions."
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
314 (let* ((string-exp (if (and (symbolp expansion) (fboundp expansion))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
315 nil
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
316 expansion))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
317 (position (if (and arg string-exp)
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
318 (if (listp arg)
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
319 (- (length expansion) (1- (car arg)))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
320 (- (length expansion) (1- arg)))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
321 0)))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
322 (define-abbrev
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
323 table
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
324 abbrev
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
325 (vector string-exp
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
326 position
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
327 (if (and (listp arg)
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
328 (not (null arg)))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
329 (cons (length string-exp) arg)
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
330 nil)
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
331 (if (and (symbolp expansion) (fboundp expansion))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
332 expansion
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
333 nil)
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
334 )
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
335 'expand-abbrev-hook)))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
336
16770
26698958bd84 (expand-map): Don't define SPC.
Richard M. Stallman <rms@gnu.org>
parents: 16769
diff changeset
337 (put 'expand-abbrev-hook 'no-self-insert t)
26698958bd84 (expand-map): Don't define SPC.
Richard M. Stallman <rms@gnu.org>
parents: 16769
diff changeset
338 (defun expand-abbrev-hook ()
26698958bd84 (expand-map): Don't define SPC.
Richard M. Stallman <rms@gnu.org>
parents: 16769
diff changeset
339 "Abbrev hook used to do the expansion job of expand abbrevs.
27042
fe88ae65ed75 (expand-abbrev-hook): Return t if expansion was
Gerd Moellmann <gerd@gnu.org>
parents: 24218
diff changeset
340 See `expand-add-abbrevs'. Value is non-nil if expansion was done."
16769
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
341 ;; Expand only at the end of a line if we are near a word that has
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
342 ;; an abbrev built from expand-add-abbrev.
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
343 (if (and (eolp)
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
344 (not (expand-in-literal)))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
345 (let ((p (point)))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
346 (setq expand-point nil)
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
347 ;; don't expand if the preceding char isn't a word constituent
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
348 (if (and (eq (char-syntax (preceding-char))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
349 ?w)
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
350 (expand-do-expansion))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
351 (progn
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
352 ;; expand-point tells us if we have inserted the text
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
353 ;; ourself or if it is the hook which has done the job.
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
354 (if expand-point
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
355 (progn
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
356 (if (vectorp expand-list)
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
357 (expand-build-marks expand-point))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
358 (indent-region p expand-point nil))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
359 ;; an outside function can set expand-list to a list of
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
360 ;; markers in reverse order.
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
361 (if (listp expand-list)
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
362 (setq expand-index 0
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
363 expand-pos (expand-list-to-markers expand-list)
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
364 expand-list nil)))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
365 (run-hooks 'expand-expand-hook)
27042
fe88ae65ed75 (expand-abbrev-hook): Return t if expansion was
Gerd Moellmann <gerd@gnu.org>
parents: 24218
diff changeset
366 t)
fe88ae65ed75 (expand-abbrev-hook): Return t if expansion was
Gerd Moellmann <gerd@gnu.org>
parents: 24218
diff changeset
367 nil))
fe88ae65ed75 (expand-abbrev-hook): Return t if expansion was
Gerd Moellmann <gerd@gnu.org>
parents: 24218
diff changeset
368 nil))
16769
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
369
16770
26698958bd84 (expand-map): Don't define SPC.
Richard M. Stallman <rms@gnu.org>
parents: 16769
diff changeset
370 (defun expand-do-expansion ()
16769
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
371 (delete-backward-char (length last-abbrev-text))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
372 (let* ((vect (symbol-value last-abbrev))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
373 (text (aref vect 0))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
374 (position (aref vect 1))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
375 (jump-args (aref vect 2))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
376 (hook (aref vect 3)))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
377 (cond (text
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
378 (insert text)
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
379 (setq expand-point (point))))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
380 (if jump-args
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
381 (funcall 'expand-build-list (car jump-args) (cdr jump-args)))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
382 (if position
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
383 (backward-char position))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
384 (if hook
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
385 (funcall hook))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
386 t)
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
387 )
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
388
16770
26698958bd84 (expand-map): Don't define SPC.
Richard M. Stallman <rms@gnu.org>
parents: 16769
diff changeset
389 (defun expand-abbrev-from-expand (word)
16769
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
390 "Test if an abbrev has a hook."
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
391 (or
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
392 (and (intern-soft word local-abbrev-table)
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
393 (symbol-function (intern-soft word local-abbrev-table)))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
394 (and (intern-soft word global-abbrev-table)
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
395 (symbol-function (intern-soft word global-abbrev-table)))))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
396
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
397 (defun expand-previous-word ()
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
398 "Return the previous word."
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
399 (save-excursion
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
400 (let ((p (point)))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
401 (backward-word 1)
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
402 (buffer-substring p (point)))))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
403
16838
9bcab3c812bb No longer a minor mode.
Richard M. Stallman <rms@gnu.org>
parents: 16770
diff changeset
404 ;;;###autoload
9bcab3c812bb No longer a minor mode.
Richard M. Stallman <rms@gnu.org>
parents: 16770
diff changeset
405 (defun expand-jump-to-previous-slot ()
9bcab3c812bb No longer a minor mode.
Richard M. Stallman <rms@gnu.org>
parents: 16770
diff changeset
406 "Move the cursor to the previous slot in the last abbrev expansion.
9bcab3c812bb No longer a minor mode.
Richard M. Stallman <rms@gnu.org>
parents: 16770
diff changeset
407 This is used only in conjunction with `expand-add-abbrevs'."
16769
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
408 (interactive)
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
409 (if expand-pos
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
410 (progn
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
411 (setq expand-index (1- expand-index))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
412 (if (< expand-index 0)
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
413 (setq expand-index (1- (length expand-pos))))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
414 (goto-char (aref expand-pos expand-index))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
415 (run-hooks 'expand-jump-hook))))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
416
16838
9bcab3c812bb No longer a minor mode.
Richard M. Stallman <rms@gnu.org>
parents: 16770
diff changeset
417 ;;;###autoload
9bcab3c812bb No longer a minor mode.
Richard M. Stallman <rms@gnu.org>
parents: 16770
diff changeset
418 (defun expand-jump-to-next-slot ()
9bcab3c812bb No longer a minor mode.
Richard M. Stallman <rms@gnu.org>
parents: 16770
diff changeset
419 "Move the cursor to the next slot in the last abbrev expansion.
9bcab3c812bb No longer a minor mode.
Richard M. Stallman <rms@gnu.org>
parents: 16770
diff changeset
420 This is used only in conjunction with `expand-add-abbrevs'."
16769
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
421 (interactive)
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
422 (if expand-pos
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
423 (progn
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
424 (setq expand-index (1+ expand-index))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
425 (if (>= expand-index (length expand-pos))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
426 (setq expand-index 0))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
427 (goto-char (aref expand-pos expand-index))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
428 (run-hooks 'expand-jump-hook))))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
429
16838
9bcab3c812bb No longer a minor mode.
Richard M. Stallman <rms@gnu.org>
parents: 16770
diff changeset
430 ;;;###autoload (define-key ctl-x-map "ap" 'expand-jump-to-previous-slot)
9bcab3c812bb No longer a minor mode.
Richard M. Stallman <rms@gnu.org>
parents: 16770
diff changeset
431 ;;;###autoload (define-key ctl-x-map "an" 'expand-jump-to-next-slot)
9bcab3c812bb No longer a minor mode.
Richard M. Stallman <rms@gnu.org>
parents: 16770
diff changeset
432
16769
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
433 (defun expand-build-list (len l)
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
434 "Build a vector of offset positions from the list of positions."
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
435 (expand-clear-markers)
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
436 (setq expand-list (vconcat l))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
437 (let ((i 0)
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
438 (lenlist (length expand-list)))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
439 (while (< i lenlist)
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
440 (aset expand-list i (- len (1- (aref expand-list i))))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
441 (setq i (1+ i))))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
442 )
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
443
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
444 (defun expand-build-marks (p)
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
445 "Transform the offsets vector into a marker vector."
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
446 (if expand-list
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
447 (progn
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
448 (setq expand-index 0)
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
449 (setq expand-pos (make-vector (length expand-list) nil))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
450 (let ((i (1- (length expand-list))))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
451 (while (>= i 0)
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
452 (aset expand-pos i (copy-marker (- p (aref expand-list i))))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
453 (setq i (1- i))))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
454 (setq expand-list nil))))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
455
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
456 (defun expand-clear-markers ()
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
457 "Make the markers point nowhere."
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
458 (if expand-pos
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
459 (progn
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
460 (let ((i (1- (length expand-pos))))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
461 (while (>= i 0)
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
462 (set-marker (aref expand-pos i) nil)
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
463 (setq i (1- i))))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
464 (setq expand-pos nil))))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
465
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
466 (defun expand-in-literal ()
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
467 "Test if we are in a comment or in a string."
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
468 (save-excursion
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
469 (let* ((lim (or (save-excursion
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
470 (beginning-of-defun)
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
471 (point))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
472 (point-min)))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
473 (here (point))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
474 (state (parse-partial-sexp lim (point))))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
475 (cond
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
476 ((nth 3 state) 'string)
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
477 ((nth 4 state) 'comment)
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
478 (t nil)))))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
479
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
480 ;; support functions to add marks to jump from outside function
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
481
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
482 (defun expand-list-to-markers (l)
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
483 "Transform a list of markers in reverse order into a vector in the correct order."
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
484 (let* ((len (1- (length l)))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
485 (loop len)
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
486 (v (make-vector (+ len 1) nil)))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
487 (while (>= loop 0)
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
488 (aset v loop (if (markerp (car l)) (car l) (copy-marker (car l))))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
489 (setq l (cdr l)
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
490 loop (1- loop)))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
491 v))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
492
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
493 ;; integration with skeleton.el
16770
26698958bd84 (expand-map): Don't define SPC.
Richard M. Stallman <rms@gnu.org>
parents: 16769
diff changeset
494 ;; Used in `skeleton-end-hook' to fetch the positions for @ skeleton tags.
26698958bd84 (expand-map): Don't define SPC.
Richard M. Stallman <rms@gnu.org>
parents: 16769
diff changeset
495 ;; See `skeleton-insert'.
16769
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
496 (defun expand-skeleton-end-hook ()
16770
26698958bd84 (expand-map): Don't define SPC.
Richard M. Stallman <rms@gnu.org>
parents: 16769
diff changeset
497 (if skeleton-positions
26698958bd84 (expand-map): Don't define SPC.
Richard M. Stallman <rms@gnu.org>
parents: 16769
diff changeset
498 (setq expand-list skeleton-positions)))
41612
83f879e86675 Converted backquote to the new style (in a string).
Sam Steingold <sds@gnu.org>
parents: 39831
diff changeset
499
16769
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
500 (add-hook 'skeleton-end-hook (function expand-skeleton-end-hook))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
501
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
502 (provide 'expand)
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
503
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
504 ;; run load hooks
16838
9bcab3c812bb No longer a minor mode.
Richard M. Stallman <rms@gnu.org>
parents: 16770
diff changeset
505 (run-hooks 'expand-load-hook)
16769
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
506
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
507 ;;; expand.el ends here