annotate lisp/expand.el @ 24419:30e478cd167e

(shell-command-default-error-buffer): Renamed from shell-command-on-region-default-error-buffer. (shell-command-on-region): Mention in echo area when there is some error output. Mention success or failure, too. Accumulate multiple error outputs going forward, with formfeed in between. Display the error buffer when we have put something in it. (shell-command): Add the ERROR-BUFFER argument feature.
author Karl Heuer <kwzh@gnu.org>
date Mon, 01 Mar 1999 03:19:32 +0000
parents f3a482ad0fd6
children fe88ae65ed75
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
17517
8f952e921136 Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 16838
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")
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
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
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
103 "}" >
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
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
106 (defconst expand-c-sample-expand-list
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
107 '(("if" "if () {\n \n} else {\n \n}" (5 10 21))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
108 ("ifn" "if () {}" (5 8))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
109 ("uns" "unsigned ")
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
110 ("for" expand-c-for-skeleton)
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
111 ("switch" "switch () {\n\n}" (9 13))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
112 ("case" "case :\n\nbreak;\n" (6 8 16))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
113 ("do" "do {\n\n} while ();" (6 16))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
114 ("while" "while () {\n\n}" (8 12))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
115 ("default" "default:\n\nbreak;" 10)
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
116 ("main" "int\nmain(int argc, char * argv[])\n{\n\n}\n" 37))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
117 "Expansions for C mode. See `expand-add-abbrevs'.")
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
118
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
119 ;; lisp example from Jari Aalto <jaalto@tre.tele.nokia.fi>
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
120 (defconst expand-sample-lisp-mode-expand-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 (list
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
123 "defu"
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
124 (concat
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
125 "(defun ()\n"
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
126 " \"\"\n"
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
127 " (interactive)\n"
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
128 " (let* (\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 " \n"
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
131 " ))")
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
132 (list 8 11 16 32 43 59))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
133
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
134 (list
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
135 "defs"
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
136 (concat
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
137 "(defsubst ()\n"
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
138 " \"\"\n"
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
139 " (interactive)\n"
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
140 " )")
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
141 (list 11 14 19 23 39))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
142
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
143 (list
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
144 "defm"
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
145 (concat
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
146 "(defmacro ()\n"
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
147 " \"\"\n"
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
148 " (` \n"
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
149 " ))")
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
150 (list 11 13 18 25))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
151
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
152 (list
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
153 "defa"
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
154 (concat
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
155 "(defadvice (around act)\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 " \n"
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
158 " )")
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
159 (list 12 22 32 36))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
160
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
161 (list
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
162 "defc"
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
163 "(defconst nil\n \"\")\n"
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
164 (list 11 13 20))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
165
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
166 (list
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
167 "defv"
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
168 "(defvar nil\n \"\")\n"
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
169 (list 9 11 18))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
170
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
171 (list
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
172 "let"
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
173 "(let* (\n)\n "
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
174 (list 8 13))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
175
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
176 (list
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
177 "sav"
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
178 "(save-excursion\n \n)"
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
179 (list 18))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
180
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
181 (list
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
182 "aut"
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
183 "(autoload ' \"\" t t)\n"
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
184 (list 12 14))
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 )
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
187 "Expansions for Lisp mode. See `expand-add-abbrevs'.")
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
188
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
189 ;; perl example from Jari Aalto <jaalto@tre.tele.nokia.fi>
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
190 (defconst expand-sample-perl-mode-expand-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 (list
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
193 ;; This is default perl4 subroutine template
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
194 ;;
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
195 "sub"
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
196 (concat
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
197 "#" (make-string 70 ?-) "\n"
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
198 "sub {\n"
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
199 " # DESCRIPTION\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 " # \n"
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
202 " # INPUT\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 " # \n"
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
205 " # RETURN\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 "\n"
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
208 " local( $f ) = \"$lib.\";\n" ;; Function name AFTER period
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
209 " local() = @_;\n" ;; func arguments here
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
210 " \n"
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
211 " \n}\n"
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
212 )
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
213 (list 77 88 120 146 159 176))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
214
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
215 (list
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
216 "for" ; foreach
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
217 (concat
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
218 "for ( )\n"
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
219 "{\n\n\}"
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
220 )
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
221 (list 7 12))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
222
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
223 (list
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
224 "whi" ; foreach
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
225 (concat
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
226 "while ( )\n"
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
227 "{\n\n\}"
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
228 )
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
229 (list 9 15))
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
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
232 ;; The normal "if" can be used like
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
233 ;; print $F "xxxxxx" if defined @arr;
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
234 ;;
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
235 (list
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
236 "iff"
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
237 (concat
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
238 "if ( )\n"
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
239 "{\n\n\}"
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
240 )
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
241 (list 6 12))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
242
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
243 (list "loc" "local( $ );" (list 9))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
244 (list "my" "my( $ );" (list 6))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
245 (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
246 (list "clo" "close ;" 7)
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
247 (list "def" "defined " (list 9))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
248 (list "und" "undef ;" (list 7))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
249
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
250 ;; There is no ending colon, because they can be in statement
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
251 ;; defined $REXP_NOT_NEW && (print "xxxxx" );
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
252 ;;
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
253 (list "pr" "print " 7)
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
254 (list "pf" "printf " 8)
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
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
257 (list "gre" "grep( //, );" (list 8 11))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
258 (list "pus" "push( , );" (list 7 9))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
259 (list "joi" "join( '', );" (list 7 11))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
260 (list "rtu" "return ;" (list 8))
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 )
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
263 "Expansions for Perl mode. See `expand-add-abbrevs'.")
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
264
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
265 ;;; Code:
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
266
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
267 ;;;###autoload
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
268 (defun expand-add-abbrevs (table abbrevs)
16770
26698958bd84 (expand-map): Don't define SPC.
Richard M. Stallman <rms@gnu.org>
parents: 16769
diff changeset
269 "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
270 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
271 has the form (ABBREV EXPANSION ARG).
26698958bd84 (expand-map): Don't define SPC.
Richard M. Stallman <rms@gnu.org>
parents: 16769
diff changeset
272
26698958bd84 (expand-map): Don't define SPC.
Richard M. Stallman <rms@gnu.org>
parents: 16769
diff changeset
273 ABBREV is the abbreviation to replace.
26698958bd84 (expand-map): Don't define SPC.
Richard M. Stallman <rms@gnu.org>
parents: 16769
diff changeset
274
26698958bd84 (expand-map): Don't define SPC.
Richard M. Stallman <rms@gnu.org>
parents: 16769
diff changeset
275 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
276 expansion. For example you, could use the DMacros or skeleton packages
16769
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
277 to generate such functions.
16770
26698958bd84 (expand-map): Don't define SPC.
Richard M. Stallman <rms@gnu.org>
parents: 16769
diff changeset
278
26698958bd84 (expand-map): Don't define SPC.
Richard M. Stallman <rms@gnu.org>
parents: 16769
diff changeset
279 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
280 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
281 beginning of the expanded text.
26698958bd84 (expand-map): Don't define SPC.
Richard M. Stallman <rms@gnu.org>
parents: 16769
diff changeset
282
26698958bd84 (expand-map): Don't define SPC.
Richard M. Stallman <rms@gnu.org>
parents: 16769
diff changeset
283 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
284 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
285 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
286 `expand-jump-to-next-slot'.
16770
26698958bd84 (expand-map): Don't define SPC.
Richard M. Stallman <rms@gnu.org>
parents: 16769
diff changeset
287
26698958bd84 (expand-map): Don't define SPC.
Richard M. Stallman <rms@gnu.org>
parents: 16769
diff changeset
288 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
289
16769
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
290 (if (null abbrevs)
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
291 table
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
292 (expand-add-abbrev table (nth 0 (car abbrevs)) (nth 1 (car abbrevs))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
293 (nth 2 (car abbrevs)))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
294 (expand-add-abbrevs table (cdr abbrevs))))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
295
16838
9bcab3c812bb No longer a minor mode.
Richard M. Stallman <rms@gnu.org>
parents: 16770
diff changeset
296 (defvar expand-list nil "Temporary variable used by the Expand package.")
16769
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
297
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
298 (defvar expand-pos nil
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
299 "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
300 This variable is local to a buffer.")
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
301 (make-variable-buffer-local 'expand-pos)
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
302
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
303 (defvar expand-index 0
16770
26698958bd84 (expand-map): Don't define SPC.
Richard M. Stallman <rms@gnu.org>
parents: 16769
diff changeset
304 "Index of the last marker used in `expand-pos'.
16769
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
305 This variable is local to a buffer.")
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
306 (make-variable-buffer-local 'expand-index)
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
307
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
308 (defvar expand-point nil
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
309 "End of the expanded region.
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
310 This variable is local to a buffer.")
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
311 (make-variable-buffer-local 'expand-point)
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
312
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
313 (defun expand-add-abbrev (table abbrev expansion arg)
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
314 "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
315 (let* ((string-exp (if (and (symbolp expansion) (fboundp expansion))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
316 nil
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
317 expansion))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
318 (position (if (and arg string-exp)
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
319 (if (listp arg)
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
320 (- (length expansion) (1- (car arg)))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
321 (- (length expansion) (1- arg)))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
322 0)))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
323 (define-abbrev
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
324 table
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
325 abbrev
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
326 (vector string-exp
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
327 position
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
328 (if (and (listp arg)
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
329 (not (null arg)))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
330 (cons (length string-exp) arg)
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
331 nil)
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
332 (if (and (symbolp expansion) (fboundp expansion))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
333 expansion
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
334 nil)
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
335 )
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
336 'expand-abbrev-hook)))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
337
16770
26698958bd84 (expand-map): Don't define SPC.
Richard M. Stallman <rms@gnu.org>
parents: 16769
diff changeset
338 (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
339 (defun expand-abbrev-hook ()
26698958bd84 (expand-map): Don't define SPC.
Richard M. Stallman <rms@gnu.org>
parents: 16769
diff changeset
340 "Abbrev hook used to do the expansion job of expand abbrevs.
26698958bd84 (expand-map): Don't define SPC.
Richard M. Stallman <rms@gnu.org>
parents: 16769
diff changeset
341 See `expand-add-abbrevs'."
16769
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
342 ;; 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
343 ;; an abbrev built from expand-add-abbrev.
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
344 (if (and (eolp)
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
345 (not (expand-in-literal)))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
346 (let ((p (point)))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
347 (setq expand-point nil)
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
348 ;; don't expand if the preceding char isn't a word constituent
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
349 (if (and (eq (char-syntax (preceding-char))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
350 ?w)
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
351 (expand-do-expansion))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
352 (progn
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
353 ;; expand-point tells us if we have inserted the text
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
354 ;; ourself or if it is the hook which has done the job.
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
355 (if expand-point
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
356 (progn
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
357 (if (vectorp expand-list)
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
358 (expand-build-marks expand-point))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
359 (indent-region p expand-point nil))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
360 ;; an outside function can set expand-list to a list of
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
361 ;; markers in reverse order.
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
362 (if (listp expand-list)
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
363 (setq expand-index 0
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
364 expand-pos (expand-list-to-markers expand-list)
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
365 expand-list nil)))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
366 (run-hooks 'expand-expand-hook)
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
367 t))))
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
368 )
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)))
16769
077577e8946b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
499
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