annotate lisp/dabbrev.el @ 4413:5a00cec8e9b0

(fill-region-as-paragraph): When we take one word after the fill column, don't stop at period with just one space. When checking whether at beginning of line, if no fill prefix, ignore intervening whitespace.
author Richard M. Stallman <rms@gnu.org>
date Mon, 02 Aug 1993 05:55:56 +0000
parents ca1e006fff42
children 069c54e77fd1
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
662
8a533acedb77 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 584
diff changeset
1 ;;; dabbrev.el --- dynamic abbreviation package for GNU Emacs.
8a533acedb77 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 584
diff changeset
2
846
20674ae6bf52 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 807
diff changeset
3 ;; Copyright (C) 1985, 1986 Free Software Foundation, Inc.
20674ae6bf52 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 807
diff changeset
4
20674ae6bf52 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 807
diff changeset
5 ;; Last-Modified: 16 Mar 1992
20674ae6bf52 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 807
diff changeset
6 ;; Copyright (C) 1985, 1986 Free Software Foundation, Inc.
20674ae6bf52 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 807
diff changeset
7
807
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 793
diff changeset
8 ;; Maintainer: FSF
2247
2c7997f249eb Add or correct keywords
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 1144
diff changeset
9 ;; Keywords: abbrev
267
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11 ;; This file is part of GNU Emacs.
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
13 ;; GNU Emacs is free software; you can redistribute it and/or modify
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
14 ;; it under the terms of the GNU General Public License as published by
807
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 793
diff changeset
15 ;; the Free Software Foundation; either version 2, or (at your option)
267
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
16 ;; any later version.
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
17
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
18 ;; GNU Emacs is distributed in the hope that it will be useful,
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
19 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
20 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
21 ;; GNU General Public License for more details.
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
22
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
23 ;; You should have received a copy of the GNU General Public License
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
24 ;; along with GNU Emacs; see the file COPYING. If not, write to
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
25 ;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
26
807
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 793
diff changeset
27 ;;; Commentary:
267
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
28
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
29 ; DABBREVS - "Dynamic abbreviations" hack, originally written by Don Morrison
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
30 ; for Twenex Emacs. Converted to mlisp by Russ Fish. Supports the table
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
31 ; feature to avoid hitting the same expansion on re-expand, and the search
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
32 ; size limit variable. Bugs fixed from the Twenex version are flagged by
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
33 ; comments starting with ;;; .
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
34 ;
793
6fb68a1460a6 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 662
diff changeset
35 ; converted to Emacs Lisp by Spencer Thomas.
267
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
36 ; Thoroughly cleaned up by Richard Stallman.
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
37 ;
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
38 ; If anyone feels like hacking at it, Bob Keller (Keller@Utah-20) first
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
39 ; suggested the beast, and has some good ideas for its improvement, but
807
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 793
diff changeset
40 ; doesn't know TECO (the lucky devil...). One thing that should definitely
267
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
41 ; be done is adding the ability to search some other buffer(s) if you can?t
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
42 ; find the expansion you want in the current one.
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
43
807
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 793
diff changeset
44 ;;; Code:
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 793
diff changeset
45
267
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
46 ;; (defun dabbrevs-help ()
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
47 ;; "Give help about dabbrevs."
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
48 ;; (interactive)
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
49 ;; (&info "emacs" "dabbrevs") ; Select the specific info node.
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
50 ;; )
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
51 (defvar dabbrevs-limit nil
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
52 "*Limits region searched by `dabbrevs-expand' to this many chars away.")
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
53 (make-variable-buffer-local 'dabbrevs-limit)
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
54
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
55 (defvar dabbrevs-backward-only nil
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
56 "*If non-NIL, `dabbrevs-expand' only looks backwards.")
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
57
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
58 ; State vars for dabbrevs-re-expand.
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
59 (defvar last-dabbrevs-table nil
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
60 "Table of expansions seen so far (local)")
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
61 (make-variable-buffer-local 'last-dabbrevs-table)
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
62
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
63 (defvar last-dabbrevs-abbreviation ""
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
64 "Last string we tried to expand (local).")
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
65 (make-variable-buffer-local 'last-dabbrevs-abbreviation)
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
66
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
67 (defvar last-dabbrevs-direction 0
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
68 "Direction of last dabbrevs search (local)")
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
69 (make-variable-buffer-local 'last-dabbrevs-direction)
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
70
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
71 (defvar last-dabbrevs-abbrev-location nil
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
72 "Location last abbreviation began (local).")
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
73 (make-variable-buffer-local 'last-dabbrevs-abbrev-location)
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
74
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
75 (defvar last-dabbrevs-expansion nil
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
76 "Last expansion of an abbreviation. (local)")
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
77 (make-variable-buffer-local 'last-dabbrevs-expansion)
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
78
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
79 (defvar last-dabbrevs-expansion-location nil
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
80 "Location the last expansion was found. (local)")
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
81 (make-variable-buffer-local 'last-dabbrevs-expansion-location)
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
82
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
83 ;;;###autoload
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
84 (defun dabbrev-expand (arg)
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
85 "Expand previous word \"dynamically\".
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
86 Expands to the most recent, preceding word for which this is a prefix.
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
87 If no suitable preceding word is found, words following point are considered.
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
88
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
89 If `case-fold-search' and `case-replace' are non-nil (usually true)
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
90 then the substituted word may be case-adjusted to match the abbreviation
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
91 that you had typed. This takes place if the substituted word, as found,
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
92 is all lower case, or if it is at the beginning of a sentence and only
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
93 its first letter was upper case.
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
94
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
95 A positive prefix arg N says to take the Nth backward DISTINCT
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
96 possibility. A negative argument says search forward. The variable
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
97 `dabbrev-backward-only' may be used to limit the direction of search to
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
98 backward if set non-nil.
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
99
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
100 If the cursor has not moved from the end of the previous expansion and
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
101 no argument is given, replace the previously-made expansion
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
102 with the next possible expansion not yet tried."
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
103 (interactive "*P")
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
104 (let (abbrev expansion old which loc n pattern
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
105 (do-case (and case-fold-search case-replace)))
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
106 ;; abbrev -- the abbrev to expand
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
107 ;; expansion -- the expansion found (eventually) or nil until then
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
108 ;; old -- the text currently in the buffer
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
109 ;; (the abbrev, or the previously-made expansion)
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
110 ;; loc -- place where expansion is found
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
111 ;; (to start search there for next expansion if requested later)
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
112 ;; do-case -- non-nil if should transform case when substituting.
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
113 (save-excursion
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
114 (if (and (null arg)
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
115 (eq last-command this-command)
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
116 last-dabbrevs-abbrev-location)
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
117 (progn
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
118 (setq abbrev last-dabbrevs-abbreviation)
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
119 (setq old last-dabbrevs-expansion)
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
120 (setq which last-dabbrevs-direction))
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
121 (setq which (if (null arg)
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
122 (if dabbrevs-backward-only 1 0)
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
123 (prefix-numeric-value arg)))
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
124 (setq loc (point))
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
125 (forward-word -1)
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
126 (setq last-dabbrevs-abbrev-location (point)) ; Original location.
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
127 (setq abbrev (buffer-substring (point) loc))
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
128 (setq old abbrev)
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
129 (setq last-dabbrevs-expansion-location nil)
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
130 (setq last-dabbrev-table nil)) ; Clear table of things seen.
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
131
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
132 (setq pattern (concat "\\b" (regexp-quote abbrev) "\\(\\sw\\|\\s_\\)+"))
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
133 ;; Try looking backward unless inhibited.
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
134 (if (>= which 0)
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
135 (progn
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
136 (setq n (max 1 which))
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
137 (if last-dabbrevs-expansion-location
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
138 (goto-char last-dabbrevs-expansion-location))
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
139 (while (and (> n 0)
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
140 (setq expansion (dabbrevs-search pattern t do-case)))
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
141 (setq loc (point-marker))
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
142 (setq last-dabbrev-table (cons expansion last-dabbrev-table))
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
143 (setq n (1- n)))
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
144 (or expansion
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
145 (setq last-dabbrevs-expansion-location nil))
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
146 (setq last-dabbrevs-direction (min 1 which))))
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
147
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
148 (if (and (<= which 0) (not expansion)) ; Then look forward.
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
149 (progn
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
150 (setq n (max 1 (- which)))
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
151 (if last-dabbrevs-expansion-location
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
152 (goto-char last-dabbrevs-expansion-location))
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
153 (while (and (> n 0)
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
154 (setq expansion (dabbrevs-search pattern nil do-case)))
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
155 (setq loc (point-marker))
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
156 (setq last-dabbrev-table (cons expansion last-dabbrev-table))
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
157 (setq n (1- n)))
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
158 (setq last-dabbrevs-direction -1))))
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
159
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
160 (if (not expansion)
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
161 (let ((first (string= abbrev old)))
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
162 (setq last-dabbrevs-abbrev-location nil)
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
163 (if (not first)
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
164 (progn (undo-boundary)
3731
ca1e006fff42 (dabbrev-expand): Do all changes with replace-match.
Richard M. Stallman <rms@gnu.org>
parents: 2713
diff changeset
165 (search-backward old)
ca1e006fff42 (dabbrev-expand): Do all changes with replace-match.
Richard M. Stallman <rms@gnu.org>
parents: 2713
diff changeset
166 (if (eq major-mode 'picture-mode)
ca1e006fff42 (dabbrev-expand): Do all changes with replace-match.
Richard M. Stallman <rms@gnu.org>
parents: 2713
diff changeset
167 (picture-replace-match abbrev t 'literal)
ca1e006fff42 (dabbrev-expand): Do all changes with replace-match.
Richard M. Stallman <rms@gnu.org>
parents: 2713
diff changeset
168 (replace-match abbrev t 'literal))))
267
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
169 (error (if first
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
170 "No dynamic expansion for \"%s\" found."
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
171 "No further dynamic expansions for \"%s\" found.")
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
172 abbrev))
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
173 ;; Success: stick it in and return.
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
174 (undo-boundary)
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
175 (search-backward old)
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
176 ;; Make case of replacement conform to case of abbreviation
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
177 ;; provided (1) that kind of thing is enabled in this buffer
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
178 ;; and (2) the replacement itself is all lower case.
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
179 ;; First put back the original abbreviation with its original
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
180 ;; case pattern.
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
181 (save-excursion
3731
ca1e006fff42 (dabbrev-expand): Do all changes with replace-match.
Richard M. Stallman <rms@gnu.org>
parents: 2713
diff changeset
182 (if (eq major-mode 'picture-mode)
ca1e006fff42 (dabbrev-expand): Do all changes with replace-match.
Richard M. Stallman <rms@gnu.org>
parents: 2713
diff changeset
183 (picture-replace-match abbrev t 'literal)
ca1e006fff42 (dabbrev-expand): Do all changes with replace-match.
Richard M. Stallman <rms@gnu.org>
parents: 2713
diff changeset
184 (replace-match abbrev t 'literal)))
267
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
185 (search-forward abbrev)
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
186 (let ((do-case (and do-case
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
187 (string= (substring expansion 1)
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
188 (downcase (substring expansion 1))))))
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
189 ;; First put back the original abbreviation with its original
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
190 ;; case pattern.
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
191 (save-excursion
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
192 (replace-match abbrev t 'literal))
2713
fd3e1f2d7ae5 (dabbrev-expand): Delete a search-forward call
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
193 ;;; This used to be necessary, but no longer,
fd3e1f2d7ae5 (dabbrev-expand): Delete a search-forward call
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
194 ;;; because now point is preserved correctly above.
fd3e1f2d7ae5 (dabbrev-expand): Delete a search-forward call
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
195 ;;; (search-forward abbrev)
3731
ca1e006fff42 (dabbrev-expand): Do all changes with replace-match.
Richard M. Stallman <rms@gnu.org>
parents: 2713
diff changeset
196 (if (eq major-mode 'picture-mode)
ca1e006fff42 (dabbrev-expand): Do all changes with replace-match.
Richard M. Stallman <rms@gnu.org>
parents: 2713
diff changeset
197 (picture-replace-match (if do-case (downcase expansion) expansion)
ca1e006fff42 (dabbrev-expand): Do all changes with replace-match.
Richard M. Stallman <rms@gnu.org>
parents: 2713
diff changeset
198 (not do-case)
ca1e006fff42 (dabbrev-expand): Do all changes with replace-match.
Richard M. Stallman <rms@gnu.org>
parents: 2713
diff changeset
199 'literal)
ca1e006fff42 (dabbrev-expand): Do all changes with replace-match.
Richard M. Stallman <rms@gnu.org>
parents: 2713
diff changeset
200 (replace-match (if do-case (downcase expansion) expansion)
ca1e006fff42 (dabbrev-expand): Do all changes with replace-match.
Richard M. Stallman <rms@gnu.org>
parents: 2713
diff changeset
201 (not do-case)
ca1e006fff42 (dabbrev-expand): Do all changes with replace-match.
Richard M. Stallman <rms@gnu.org>
parents: 2713
diff changeset
202 'literal)))
267
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
203 ;; Save state for re-expand.
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
204 (setq last-dabbrevs-abbreviation abbrev)
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
205 (setq last-dabbrevs-expansion expansion)
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
206 (setq last-dabbrevs-expansion-location loc))))
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
207
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
208 ;;;###autoload
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
209 (define-key esc-map "/" 'dabbrev-expand)
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
210
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
211
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
212 ;; Search function used by dabbrevs library.
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
213 ;; First arg is string to find as prefix of word. Second arg is
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
214 ;; t for reverse search, nil for forward. Variable dabbrevs-limit
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
215 ;; controls the maximum search region size.
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
216
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
217 ;; Table of expansions already seen is examined in buffer last-dabbrev-table,
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
218 ;; so that only distinct possibilities are found by dabbrevs-re-expand.
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
219 ;; Note that to prevent finding the abbrev itself it must have been
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
220 ;; entered in the table.
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
221
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
222 ;; IGNORE-CASE non-nil means treat case as insignificant while
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
223 ;; looking for a match and when comparing with previous matches.
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
224 ;; Also if that's non-nil and the match is found at the beginning of a sentence
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
225 ;; and is in lower case except for the initial
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
226 ;; then it is converted to all lower case for return.
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
227
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
228 ;; Value is the expansion, or nil if not found. After a successful
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
229 ;; search, point is left right after the expansion found.
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
230
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
231 (defun dabbrevs-search (pattern reverse ignore-case)
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
232 (let (missing result (case-fold-search ignore-case))
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
233 (save-restriction ; Uses restriction for limited searches.
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
234 (if dabbrevs-limit
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
235 (narrow-to-region last-dabbrevs-abbrev-location
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
236 (+ (point)
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
237 (* dabbrevs-limit (if reverse -1 1)))))
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
238 ;; Keep looking for a distinct expansion.
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
239 (setq result nil)
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
240 (setq missing nil)
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
241 (while (and (not result) (not missing))
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
242 ; Look for it, leave loop if search fails.
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
243 (setq missing
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
244 (not (if reverse
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
245 (re-search-backward pattern nil t)
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
246 (re-search-forward pattern nil t))))
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
247
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
248 (if (not missing)
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
249 (progn
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
250 (setq result (buffer-substring (match-beginning 0)
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
251 (match-end 0)))
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
252 (let* ((test last-dabbrev-table))
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
253 (while (and test
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
254 (not
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
255 (if ignore-case
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
256 (string= (downcase (car test))
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
257 (downcase result))
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
258 (string= (car test) result))))
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
259 (setq test (cdr test)))
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
260 (if test (setq result nil)))))) ; if already in table, ignore
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
261 (if result
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
262 (save-excursion
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
263 (let ((beg (match-beginning 0)))
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
264 (goto-char beg)
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
265 (and ignore-case
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
266 (string= (substring result 1)
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
267 (downcase (substring result 1)))
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
268 (if (string= paragraph-start
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
269 (concat "^$\\|" page-delimiter))
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
270 (and (re-search-backward sentence-end nil t)
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
271 (= (match-end 0) beg))
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
272 (forward-char 1)
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
273 (backward-sentence)
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
274 (= (point) beg))
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
275 (setq result (downcase result))))))
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
276 result)))
584
4cd7543be581 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 267
diff changeset
277
1144
9fe14b2cc5b9 entered into RCS
Roland McGrath <roland@gnu.org>
parents: 846
diff changeset
278 (provide 'dabbrev)
584
4cd7543be581 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 267
diff changeset
279
662
8a533acedb77 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 584
diff changeset
280 ;;; dabbrev.el ends here