annotate lisp/completion.el @ 983:eb19dfaec9c4

* window.c (window_loop): This used to keep track of the first window processed and wait until we came back around to it. Sadly, this doesn't work if that window gets deleted. So instead, use Fprevious_window to find the last window to process, and loop until we've done that one. * window.c [not MULTI_FRAME] (init_window_once): Don't forget to set the `mini_p' flag on the new minibuffer window to t. * window.c (Fwindow_at): Don't check the type of the frame argument. * window.c [not MULTI_FRAME] (window_loop): Set frame to zero, instead of trying to decode it. * window.c (init_window_once): Initialize minibuf_window before FRAME_ROOT_WINDOW, so the latter actually points to something.
author Jim Blandy <jimb@redhat.com>
date Fri, 14 Aug 1992 02:27:26 +0000
parents 213978acbc1e
children dcf780f7ae1b
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: 190
diff changeset
1 ;;; completion.el --- dynamic word-completion code
8a533acedb77 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 190
diff changeset
2
795
c693d56ef36d *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 732
diff changeset
3 ;; Maintainer: bug-completion@think.com
c693d56ef36d *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 732
diff changeset
4
c693d56ef36d *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 732
diff changeset
5 ;;; Commentary:
c693d56ef36d *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 732
diff changeset
6
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7 ;;; This is a Completion system for GNU Emacs
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8 ;;;
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
9 ;;; E-Mail:
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
10 ;;; Internet: completion@think.com, bug-completion@think.com
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
11 ;;; UUCP: {rutgers,harvard,mit-eddie}!think!completion
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
12 ;;;
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
13 ;;; If you are a new user, we'd appreciate knowing your site name and
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
14 ;;; any comments you have.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
15 ;;;
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
16 ;;;
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
17 ;;; NO WARRANTY
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
18 ;;;
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
19 ;;; This software is distributed free of charge and is in the public domain.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
20 ;;; Anyone may use, duplicate or modify this program. Thinking Machines
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
21 ;;; Corporation does not restrict in any way the use of this software by
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
22 ;;; anyone.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
23 ;;;
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
24 ;;; Thinking Machines Corporation provides absolutely no warranty of any kind.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
25 ;;; The entire risk as to the quality and performance of this program is with
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
26 ;;; you. In no event will Thinking Machines Corporation be liable to you for
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
27 ;;; damages, including any lost profits, lost monies, or other special,
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
28 ;;; incidental or consequential damages arising out of the use of this program.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
29 ;;;
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
30 ;;; You must not restrict the distribution of this software.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
31 ;;;
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
32 ;;; Please keep this notice and author information in any copies you make.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
33 ;;;
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
34 ;;; 4/90
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
35 ;;;
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
36 ;;;
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
37 ;;; Advertisement
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
38 ;;;---------------
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
39 ;;; Try using this. If you are like most you will be happy you did.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
40 ;;;
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
41 ;;; What to put in .emacs
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
42 ;;;-----------------------
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
43 ;;; (load "completion") ;; If it's not part of the standard band.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
44 ;;; (initialize-completions)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
45 ;;;
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
46 ;;; For best results, be sure to byte-compile the file first.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
47 ;;;
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
48
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
49 ;;; Authors
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
50 ;;;---------
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
51 ;;; Jim Salem {salem@think.com}
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
52 ;;; Brewster Kahle {brewster@think.com}
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
53 ;;; Thinking Machines Corporation
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
54 ;;; 245 First St., Cambridge MA 02142 (617) 876-1111
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
55 ;;;
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
56 ;;; Mailing Lists
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
57 ;;;---------------
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
58 ;;;
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
59 ;;; Bugs to bug-completion@think.com
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
60 ;;; Comments to completion@think.com
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
61 ;;; Requests to be added completion-request@think.com
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
62 ;;;
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
63 ;;; Availability
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
64 ;;;--------------
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
65 ;;; Anonymous FTP from think.com
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
66 ;;;
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
67
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
68 ;;;---------------------------------------------------------------------------
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
69 ;;; Documentation [Slightly out of date]
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
70 ;;;---------------------------------------------------------------------------
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
71 ;;; (also check the documentation string of the functions)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
72 ;;;
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
73 ;;; Introduction
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
74 ;;;---------------
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
75 ;;;
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
76 ;;; After you type a few characters, pressing the "complete" key inserts
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
77 ;;; the rest of the word you are likely to type.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
78 ;;;
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
79 ;;; This watches all the words that you type and remembers them. When
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
80 ;;; typing a new word, pressing "complete" (meta-return) "completes" the
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
81 ;;; word by inserting the most recently used word that begins with the
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
82 ;;; same characters. If you press meta-return repeatedly, it cycles
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
83 ;;; through all the words it knows about.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
84 ;;;
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
85 ;;; If you like the completion then just continue typing, it is as if you
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
86 ;;; entered the text by hand. If you want the inserted extra characters
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
87 ;;; to go away, type control-w or delete. More options are described below.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
88 ;;;
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
89 ;;; The guesses are made in the order of the most recently "used". Typing
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
90 ;;; in a word and then typing a separator character (such as a space) "uses"
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
91 ;;; the word. So does moving a cursor over the word. If no words are found,
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
92 ;;; it uses an extended version of the dabbrev style completion.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
93 ;;;
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
94 ;;; You automatically save the completions you use to a file between
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
95 ;;; sessions.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
96 ;;;
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
97 ;;; Completion enables programmers to enter longer, more descriptive
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
98 ;;; variable names while typing fewer keystrokes than they normally would.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
99 ;;;
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
100 ;;;
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
101 ;;; Full documentation
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
102 ;;;---------------------
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
103 ;;;
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
104 ;;; A "word" is any string containing characters with either word or symbol
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
105 ;;; syntax. [E.G. Any alphanumeric string with hypens, underscores, etc.]
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
106 ;;; Unless you change the constants, you must type at least three characters
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
107 ;;; for the word to be recognized. Only words longer than 6 characters are
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
108 ;;; saved.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
109 ;;;
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
110 ;;; When you load this file, completion will be on. I suggest you use the
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
111 ;;; compiled version (because it is noticibly faster).
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
112 ;;;
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
113 ;;; M-X completion-mode toggles whether or not new words are added to the
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
114 ;;; database by changing the value of *completep*.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
115 ;;;
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
116 ;;; SAVING/LOADING COMPLETIONS
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
117 ;;; Completions are automatically saved from one session to another
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
118 ;;; (unless *save-completions-p* or *completep* is nil).
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
119 ;;; Loading this file (or calling initialize-completions) causes EMACS
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
120 ;;; to load a completions database for a saved completions file
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
121 ;;; (default: ~/.completions). When you exit, EMACS saves a copy of the
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
122 ;;; completions that you
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
123 ;;; often use. When you next start, EMACS loads in the saved completion file.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
124 ;;;
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
125 ;;; The number of completions saved depends loosely on
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
126 ;;; *saved-completions-decay-factor*. Completions that have never been
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
127 ;;; inserted via "complete" are not saved. You are encouraged to experiment
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
128 ;;; with different functions (see compute-completion-min-num-uses).
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
129 ;;;
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
130 ;;; Some completions are permanent and are always saved out. These
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
131 ;;; completions have their num-uses slot set to T. Use
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
132 ;;; add-permanent-completion to do this
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
133 ;;;
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
134 ;;; Completions are saved only if *completep* is T. The number of old
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
135 ;;; versions kept of the saved completions file is controlled by
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
136 ;;; *completion-file-versions-kept*.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
137 ;;;
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
138 ;;; COMPLETE KEY OPTIONS
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
139 ;;; The complete function takes a numeric arguments.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
140 ;;; control-u :: leave the point at the beginning of the completion rather
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
141 ;;; than the middle.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
142 ;;; a number :: rotate through the possible completions by that amount
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
143 ;;; `-' :: same as -1 (insert previous completion)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
144 ;;;
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
145 ;;; HOW THE DATABASE IS MAINTAINED
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
146 ;;; <write>
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
147 ;;;
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
148 ;;; UPDATING THE DATABASE MANUALLY
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
149 ;;; m-x kill-completion
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
150 ;;; kills the completion at point.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
151 ;;; m-x add-completion
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
152 ;;; m-x add-permanent-completion
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
153 ;;;
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
154 ;;; UPDATING THE DATABASE FROM A SOURCE CODE FILE
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
155 ;;; m-x add-completions-from-buffer
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
156 ;;; Parses all the definition names from a C or LISP mode buffer and
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
157 ;;; adds them to the completion database.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
158 ;;;
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
159 ;;; m-x add-completions-from-lisp-file
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
160 ;;; Parses all the definition names from a C or Lisp mode file and
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
161 ;;; adds them to the completion database.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
162 ;;;
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
163 ;;; UPDATING THE DATABASE FROM A TAGS TABLE
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
164 ;;; m-x add-completions-from-tags-table
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
165 ;;; Adds completions from the current tags-table-buffer.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
166 ;;;
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
167 ;;; HOW A COMPLETION IS FOUND
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
168 ;;; <write>
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
169 ;;;
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
170 ;;; STRING CASING
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
171 ;;; Completion is string case independent if case-fold-search has its
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
172 ;;; normal default of T. Also when the completion is inserted the case of the
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
173 ;;; entry is coerced appropriately.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
174 ;;; [E.G. APP --> APPROPRIATELY app --> appropriately
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
175 ;;; App --> Appropriately]
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
176 ;;;
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
177 ;;; INITIALIZATION
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
178 ;;; The form `(initialize-completions)' initializes the completion system by
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
179 ;;; trying to load in the user's completions. After the first cal, further
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
180 ;;; calls have no effect so one should be careful not to put the form in a
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
181 ;;; site's standard site-init file.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
182 ;;;
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
183 ;;;---------------------------------------------------------------------------
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
184 ;;;
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
185 ;;;
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
186
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
187 ;;;-----------------------------------------------
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
188 ;;; Porting Notes
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
189 ;;;-----------------------------------------------
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
190 ;;;
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
191 ;;; Should run on 18.49, 18.52, and 19.0
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
192 ;;; Tested on vanilla version.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
193 ;;; This requires the standard cl.el file. It could easily rewritten to not
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
194 ;;; require it. It defines remove which is not in cl.el.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
195 ;;;
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
196 ;;; FUNCTIONS BASHED
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
197 ;;; The following functions are bashed but it is done carefully and should not
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
198 ;;; cause problems ::
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
199 ;;; kill-region, next-line, previous-line, newline, newline-and-indent,
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
200 ;;; kill-emacs
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
201 ;;;
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
202 ;;;
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
203 ;;;---------------------------------------------------------------------------
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
204 ;;; Functions you might like to call
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
205 ;;;---------------------------------------------------------------------------
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
206 ;;;
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
207 ;;; add-completion string &optional num-uses
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
208 ;;; Adds a new string to the database
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
209 ;;;
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
210 ;;; add-permanent-completion string
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
211 ;;; Adds a new string to the database with num-uses = T
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
212 ;;;
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
213
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
214 ;;; kill-completion string
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
215 ;;; Kills the completion from the database.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
216 ;;;
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
217 ;;; clear-all-completions
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
218 ;;; Clears the database
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
219 ;;;
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
220 ;;; list-all-completions
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
221 ;;; Returns a list of all completions.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
222 ;;;
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
223 ;;;
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
224 ;;; next-completion string &optional index
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
225 ;;; Returns a completion entry that starts with string.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
226 ;;;
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
227 ;;; find-exact-completion string
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
228 ;;; Returns a completion entry that exactly matches string.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
229 ;;;
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
230 ;;; complete
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
231 ;;; Inserts a completion at point
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
232 ;;;
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
233 ;;; initialize-completions
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
234 ;;; Loads the completions file and sets up so that exiting emacs will
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
235 ;;; save them.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
236 ;;;
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
237 ;;; save-completions-to-file &optional filename
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
238 ;;; load-completions-from-file &optional filename
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
239 ;;;
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
240 ;;;-----------------------------------------------
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
241 ;;; Other functions
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
242 ;;;-----------------------------------------------
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
243 ;;;
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
244 ;;; get-completion-list string
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
245 ;;;
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
246 ;;; These things are for manipulating the structure
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
247 ;;; make-completion string num-uses
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
248 ;;; completion-num-uses completion
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
249 ;;; completion-string completion
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
250 ;;; set-completion-num-uses completion num-uses
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
251 ;;; set-completion-string completion string
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
252 ;;;
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
253 ;;;
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
254
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
255 ;;;-----------------------------------------------
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
256 ;;; To Do :: (anybody ?)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
257 ;;;-----------------------------------------------
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
258 ;;;
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
259 ;;; Implement Lookup and keyboard interface in C
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
260 ;;; Add package prefix smarts (for Common Lisp)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
261 ;;; Add autoprompting of possible completions after every keystroke (fast
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
262 ;;; terminals only !)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
263 ;;; Add doc. to texinfo
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
264 ;;;
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
265 ;;;
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
266 ;;;-----------------------------------------------
795
c693d56ef36d *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 732
diff changeset
267 ;;; Change Log:
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
268 ;;;-----------------------------------------------
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
269 ;;; Sometime in '84 Brewster implemented a somewhat buggy version for
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
270 ;;; Symbolics LISPMs.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
271 ;;; Jan. '85 Jim became enamored of the idea and implemented a faster,
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
272 ;;; more robust version.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
273 ;;; With input from many users at TMC, (rose, craig, and gls come to mind),
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
274 ;;; the current style of interface was developed.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
275 ;;; 9/87, Jim and Brewster took terminals home. Yuck. After
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
276 ;;; complaining for a while Brewester implemented a subset of the current
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
277 ;;; LISPM version for GNU Emacs.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
278 ;;; 8/88 After complaining for a while (and with sufficient
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
279 ;;; promised rewards), Jim reimplemented a version of GNU completion
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
280 ;;; superior to that of the LISPM version.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
281 ;;;
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
282 ;;;-----------------------------------------------
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
283 ;;; Acknowlegements
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
284 ;;;-----------------------------------------------
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
285 ;;; Cliff Lasser (cal@think.com), Kevin Herbert (kph@cisco.com),
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
286 ;;; eero@media-lab, kgk@cs.brown.edu, jla@ai.mit.edu,
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
287 ;;;
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
288 ;;;-----------------------------------------------
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
289 ;;; Change Log
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
290 ;;;-----------------------------------------------
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
291 ;;; From version 9 to 10
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
292 ;;; - Allowance for non-integral *completion-version* nos.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
293 ;;; - Fix cmpl-apply-as-top-level for keyboard macros
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
294 ;;; - Fix broken completion merging (in save-completions-to-file)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
295 ;;; - More misc. fixes for version 19.0 of emacs
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
296 ;;;
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
297 ;;; From Version 8 to 9
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
298 ;;; - Ported to version 19.0 of emacs (backcompatible with version 18)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
299 ;;; - Added add-completions-from-tags-table (with thanks to eero@media-lab)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
300 ;;;
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
301 ;;; From Version 7 to 8
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
302 ;;; - Misc. changes to comments
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
303 ;;; - new completion key bindings: c-x o, M->, M-<, c-a, c-e
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
304 ;;; - cdabbrev now checks all the visible window buffers and the "other buffer"
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
305 ;;; - `%' is now a symbol character rather than a separator (except in C mode)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
306 ;;;
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
307 ;;; From Version 6 to 7
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
308 ;;; - Fixed bug with saving out .completion file the first time
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
309 ;;;
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
310 ;;; From Version 5 to 6
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
311 ;;; - removed statistics recording
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
312 ;;; - reworked advise to handle autoloads
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
313 ;;; - Fixed fortran mode support
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
314 ;;; - Added new cursor motion triggers
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
315 ;;;
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
316 ;;; From Version 4 to 5
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
317 ;;; - doesn't bother saving if nothing has changed
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
318 ;;; - auto-save if haven't used for a 1/2 hour
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
319 ;;; - save period extended to two weeks
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
320 ;;; - minor fix to capitalization code
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
321 ;;; - added *completion-auto-save-period* to variables recorded.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
322 ;;; - added reenter protection to cmpl-record-statistics-filter
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
323 ;;; - added backup protection to save-completions-to-file (prevents
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
324 ;;; problems with disk full errors)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
325
795
c693d56ef36d *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 732
diff changeset
326 ;;; Code:
c693d56ef36d *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 732
diff changeset
327
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
328 ;;;-----------------------------------------------
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
329 ;;; Requires
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
330 ;;; Version
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
331 ;;;-----------------------------------------------
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
332
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
333 ;;(require 'cl) ;; DOTIMES, etc. {actually done after variable defs.}
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
334
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
335 (defconst *completion-version* 10
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
336 "Tested for EMACS versions 18.49, 18.52, 18.55 and beyond and 19.0.")
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
337
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
338 ;;;---------------------------------------------------------------------------
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
339 ;;; User changeable parameters
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
340 ;;;---------------------------------------------------------------------------
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
341
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
342 (defvar *completep* t
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
343 "*Set to nil to turn off the completion hooks.
190
8428fd468956 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 56
diff changeset
344 (No new words added to the database or saved to the init file).")
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
345
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
346 (defvar *save-completions-p* t
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
347 "*If non-nil, the most useful completions are saved to disk when
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
348 exiting EMACS. See *saved-completions-decay-factor*.")
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
349
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
350 (defvar *saved-completions-filename* "~/.completions"
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
351 "*The filename to save completions to.")
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
352
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
353 (defvar *saved-completion-retention-time* 336
190
8428fd468956 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 56
diff changeset
354 "*The maximum amount of time to save a completion for if it has not been used.
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
355 In hours. (1 day = 24, 1 week = 168). If this is 0, non-permanent completions
190
8428fd468956 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 56
diff changeset
356 will not be saved unless these are used. Default is two weeks.")
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
357
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
358 (defvar *separator-character-uses-completion-p* nil
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
359 "*If non-nil, typing a separator character after a completion symbol that
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
360 is not part of the database marks it as used (so it will be saved).")
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
361
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
362 (defvar *completion-file-versions-kept* kept-new-versions
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
363 "*Set this to the number of versions you want save-completions-to-file
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
364 to keep.")
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
365
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
366 (defvar *print-next-completion-speed-threshold* 4800
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
367 "*The baud rate at or above which to print the next potential completion
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
368 after inserting the current one."
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
369 )
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
370
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
371 (defvar *print-next-completion-does-cdabbrev-search-p* nil
190
8428fd468956 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 56
diff changeset
372 "*If non-nil, the next completion prompt will also do a cdabbrev search.
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
373 This can be time consuming.")
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
374
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
375 (defvar *cdabbrev-radius* 15000
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
376 "*How far to search for cdabbrevs. In number of characters. If nil, the
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
377 whole buffer is searched.")
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
378
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
379 (defvar *modes-for-completion-find-file-hook* '(lisp c)
190
8428fd468956 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 56
diff changeset
380 "*A list of modes {either C or Lisp}. Definitions from visited files
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
381 of those types are automatically added to the completion database.")
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
382
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
383 (defvar *record-cmpl-statistics-p* nil
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
384 "*If non-nil, statistics are automatically recorded.")
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
385
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
386 (defvar *completion-auto-save-period* 1800
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
387 "*The period in seconds to wait for emacs to be idle before autosaving
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
388 the completions. Default is a 1/2 hour.")
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
389
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
390 (defconst *completion-min-length* nil ;; defined below in eval-when
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
391 "*The minimum length of a stored completion.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
392 DON'T CHANGE WITHOUT RECOMPILING ! This is used by macros.")
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
393
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
394 (defconst *completion-max-length* nil ;; defined below in eval-when
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
395 "*The maximum length of a stored completion.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
396 DON'T CHANGE WITHOUT RECOMPILING ! This is used by macros.")
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
397
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
398 (defconst *completion-prefix-min-length* nil ;; defined below in eval-when
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
399 "The minimum length of a completion search string.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
400 DON'T CHANGE WITHOUT RECOMPILING ! This is used by macros.")
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
401
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
402 (defmacro eval-when-compile-load-eval (&rest body)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
403 ;; eval everything before expanding
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
404 (mapcar 'eval body)
190
8428fd468956 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 56
diff changeset
405 (cons 'progn body))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
406
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
407 (defun completion-eval-when ()
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
408 (eval-when-compile-load-eval
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
409 ;; These vars. are defined at both compile and load time.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
410 (setq *completion-min-length* 6)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
411 (setq *completion-max-length* 200)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
412 (setq *completion-prefix-min-length* 3)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
413 ;; Need this file around too
190
8428fd468956 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 56
diff changeset
414 (require 'cl)))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
415
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
416 (completion-eval-when)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
417
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
418 ;;;---------------------------------------------------------------------------
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
419 ;;; Internal Variables
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
420 ;;;---------------------------------------------------------------------------
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
421
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
422 (defvar cmpl-initialized-p nil
190
8428fd468956 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 56
diff changeset
423 "Set to t when the completion system is initialized. Indicates that the
8428fd468956 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 56
diff changeset
424 old completion file has been read in.")
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
425
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
426 (defvar cmpl-completions-accepted-p nil
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
427 "Set to T as soon as the first completion has been accepted. Used to
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
428 decide whether to save completions.")
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
429
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
430
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
431 ;;;---------------------------------------------------------------------------
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
432 ;;; Low level tools
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
433 ;;;---------------------------------------------------------------------------
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
434
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
435 ;;;-----------------------------------------------
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
436 ;;; Misc.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
437 ;;;-----------------------------------------------
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
438
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
439 (defun remove (item list)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
440 (setq list (copy-sequence list))
190
8428fd468956 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 56
diff changeset
441 (delq item list))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
442
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
443 (defun minibuffer-window-selected-p ()
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
444 "True iff the current window is the minibuffer."
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
445 (eq (minibuffer-window) (selected-window)))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
446
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
447 (eval-when-compile-load-eval
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
448 (defun function-needs-autoloading-p (symbol)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
449 ;; True iff symbol is represents an autoloaded function and has not yet been
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
450 ;; autoloaded.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
451 (and (listp (symbol-function symbol))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
452 (eq 'autoload (car (symbol-function symbol)))
190
8428fd468956 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 56
diff changeset
453 )))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
454
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
455 (defun function-defined-and-loaded (symbol)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
456 ;; True iff symbol is bound to a loaded function.
190
8428fd468956 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 56
diff changeset
457 (and (fboundp symbol) (not (function-needs-autoloading-p symbol))))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
458
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
459 (defmacro read-time-eval (form)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
460 ;; Like the #. reader macro
190
8428fd468956 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 56
diff changeset
461 (eval form))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
462
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
463 ;;;-----------------------------------------------
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
464 ;;; Emacs Version 19 compatibility
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
465 ;;;-----------------------------------------------
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
466
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
467 (defconst emacs-is-version-19 (string= (substring emacs-version 0 2) "19"))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
468
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
469 (defun cmpl19-baud-rate ()
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
470 (if emacs-is-version-19
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
471 baud-rate
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
472 (baud-rate)))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
473
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
474 (defun cmpl19-sit-for (amount)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
475 (if (and emacs-is-version-19 (= amount 0))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
476 (sit-for 1 t)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
477 (sit-for amount)))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
478
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
479 ;;;-----------------------------------------------
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
480 ;;; Advise
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
481 ;;;-----------------------------------------------
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
482
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
483 (defmacro completion-advise (function-name where &rest body)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
484 "Adds the body code before calling function. This advise is not compiled.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
485 WHERE is either :BEFORE or :AFTER."
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
486 (completion-advise-1 function-name where body)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
487 )
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
488
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
489 (defmacro cmpl-apply-as-top-level (function arglist)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
490 "Calls function-name interactively if inside a call-interactively."
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
491 (list 'cmpl-apply-as-top-level-1 function arglist
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
492 '(let ((executing-macro nil)) (interactive-p)))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
493 )
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
494
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
495 (defun cmpl-apply-as-top-level-1 (function arglist interactive-p)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
496 (if (and interactive-p (commandp function))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
497 (call-interactively function)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
498 (apply function arglist)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
499 ))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
500
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
501 (eval-when-compile-load-eval
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
502
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
503 (defun cmpl-defun-preamble (function-name)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
504 (let ((doc-string
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
505 (condition-case e
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
506 ;; This condition-case is here to stave
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
507 ;; off bizarre load time errors 18.52 gets
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
508 ;; on the function c-mode
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
509 (documentation function-name)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
510 (error nil)))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
511 (interactivep (commandp function-name))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
512 )
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
513 (append
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
514 (if doc-string (list doc-string))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
515 (if interactivep '((interactive)))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
516 )))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
517
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
518 (defun completion-advise-1 (function-name where body &optional new-name)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
519 (unless new-name (setq new-name function-name))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
520 (let ((quoted-name (list 'quote function-name))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
521 (quoted-new-name (list 'quote new-name))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
522 )
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
523
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
524 (cond ((function-needs-autoloading-p function-name)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
525 (list* 'defun function-name '(&rest arglist)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
526 (append
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
527 (cmpl-defun-preamble function-name)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
528 (list (list 'load (second (symbol-function function-name)))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
529 (list 'eval
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
530 (list 'completion-advise-1 quoted-name
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
531 (list 'quote where) (list 'quote body)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
532 quoted-new-name))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
533 (list 'cmpl-apply-as-top-level quoted-new-name 'arglist)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
534 )))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
535 )
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
536 (t
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
537 (let ((old-def-name
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
538 (intern (concat "$$$cmpl-" (symbol-name function-name))))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
539 )
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
540
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
541 (list 'progn
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
542 (list 'defvar old-def-name
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
543 (list 'symbol-function quoted-name))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
544 (list* 'defun new-name '(&rest arglist)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
545 (append
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
546 (cmpl-defun-preamble function-name)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
547 (ecase where
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
548 (:before
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
549 (list (cons 'progn body)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
550 (list 'cmpl-apply-as-top-level
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
551 old-def-name 'arglist)))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
552 (:after
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
553 (list* (list 'cmpl-apply-as-top-level
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
554 old-def-name 'arglist)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
555 body)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
556 )))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
557 )))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
558 ))))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
559 ) ;; eval-when
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
560
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
561
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
562 ;;;-----------------------------------------------
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
563 ;;; String case coercion
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
564 ;;;-----------------------------------------------
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
565
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
566 (defun cmpl-string-case-type (string)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
567 "Returns :capitalized, :up, :down, :mixed, or :neither."
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
568 (let ((case-fold-search nil))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
569 (cond ((string-match "[a-z]" string)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
570 (cond ((string-match "[A-Z]" string)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
571 (cond ((and (> (length string) 1)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
572 (null (string-match "[A-Z]" string 1)))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
573 ':capitalized)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
574 (t
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
575 ':mixed)))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
576 (t ':down)))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
577 (t
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
578 (cond ((string-match "[A-Z]" string)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
579 ':up)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
580 (t ':neither))))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
581 ))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
582
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
583 ;;; Tests -
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
584 ;;; (cmpl-string-case-type "123ABCDEF456") --> :up
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
585 ;;; (cmpl-string-case-type "123abcdef456") --> :down
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
586 ;;; (cmpl-string-case-type "123aBcDeF456") --> :mixed
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
587 ;;; (cmpl-string-case-type "123456") --> :neither
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
588 ;;; (cmpl-string-case-type "Abcde123") --> :capitalized
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
589
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
590 (defun cmpl-coerce-string-case (string case-type)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
591 (cond ((eq case-type ':down) (downcase string))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
592 ((eq case-type ':up) (upcase string))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
593 ((eq case-type ':capitalized)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
594 (setq string (downcase string))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
595 (aset string 0 (logand ?\337 (aref string 0)))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
596 string)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
597 (t string)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
598 ))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
599
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
600 (defun cmpl-merge-string-cases (string-to-coerce given-string)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
601 (let ((string-case-type (cmpl-string-case-type string-to-coerce))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
602 )
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
603 (cond ((memq string-case-type '(:down :up :capitalized))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
604 ;; Found string is in a standard case. Coerce to a type based on
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
605 ;; the given string
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
606 (cmpl-coerce-string-case string-to-coerce
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
607 (cmpl-string-case-type given-string))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
608 )
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
609 (t
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
610 ;; If the found string is in some unusual case, just insert it
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
611 ;; as is
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
612 string-to-coerce)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
613 )))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
614
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
615 ;;; Tests -
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
616 ;;; (cmpl-merge-string-cases "AbCdEf456" "abc") --> AbCdEf456
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
617 ;;; (cmpl-merge-string-cases "abcdef456" "ABC") --> ABCDEF456
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
618 ;;; (cmpl-merge-string-cases "ABCDEF456" "Abc") --> Abcdef456
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
619 ;;; (cmpl-merge-string-cases "ABCDEF456" "abc") --> abcdef456
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
620
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
621
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
622 ;;;-----------------------------------------------
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
623 ;;; Emacs Idle Time hooks
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
624 ;;;-----------------------------------------------
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
625
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
626 (defvar cmpl-emacs-idle-process nil)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
627
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
628 (defvar cmpl-emacs-idle-interval 150
190
8428fd468956 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 56
diff changeset
629 "Seconds between running the Emacs idle process.")
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
630
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
631 (defun init-cmpl-emacs-idle-process ()
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
632 "Initialize the emacs idle process."
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
633 (let ((live (and cmpl-emacs-idle-process
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
634 (eq (process-status cmpl-emacs-idle-process) 'run)))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
635 ;; do not allocate a pty
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
636 (process-connection-type nil))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
637 (if live
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
638 (kill-process cmpl-emacs-idle-process))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
639 (if cmpl-emacs-idle-process
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
640 (delete-process cmpl-emacs-idle-process))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
641 (setq cmpl-emacs-idle-process
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
642 (start-process "cmpl-emacs-idle" nil
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
643 "loadst"
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
644 "-n" (int-to-string cmpl-emacs-idle-interval)))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
645 (process-kill-without-query cmpl-emacs-idle-process)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
646 (set-process-filter cmpl-emacs-idle-process 'cmpl-emacs-idle-filter)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
647 ))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
648
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
649 (defvar cmpl-emacs-buffer nil)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
650 (defvar cmpl-emacs-point 0)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
651 (defvar cmpl-emacs-last-command nil)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
652 (defvar cmpl-emacs-last-command-char nil)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
653 (defun cmpl-emacs-idle-p ()
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
654 ;; returns T if emacs has been idle
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
655 (if (and (eq cmpl-emacs-buffer (current-buffer))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
656 (= cmpl-emacs-point (point))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
657 (eq cmpl-emacs-last-command last-command)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
658 (eq last-command-char last-command-char)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
659 )
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
660 t ;; idle
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
661 ;; otherwise, update count
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
662 (setq cmpl-emacs-buffer (current-buffer))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
663 (setq cmpl-emacs-point (point))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
664 (setq cmpl-emacs-last-command last-command)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
665 (setq last-command-char last-command-char)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
666 nil
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
667 ))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
668
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
669 (defvar cmpl-emacs-idle-time 0
190
8428fd468956 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 56
diff changeset
670 "The idle time of Emacs in seconds.")
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
671
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
672 (defvar inside-cmpl-emacs-idle-filter nil)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
673 (defvar cmpl-emacs-idle-time-hooks nil)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
674
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
675 (defun cmpl-emacs-idle-filter (proc string)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
676 ;; This gets called every cmpl-emacs-idle-interval seconds
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
677 ;; Update idle time clock
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
678 (if (cmpl-emacs-idle-p)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
679 (incf cmpl-emacs-idle-time cmpl-emacs-idle-interval)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
680 (setq cmpl-emacs-idle-time 0))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
681
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
682 (unless inside-cmpl-emacs-idle-filter
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
683 ;; Don't reenter if we are hung
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
684
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
685 (setq inside-cmpl-emacs-idle-filter t)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
686
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
687 (dolist (function cmpl-emacs-idle-time-hooks)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
688 (condition-case e
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
689 (funcall function)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
690 (error nil)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
691 ))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
692 (setq inside-cmpl-emacs-idle-filter nil)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
693 ))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
694
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
695
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
696 ;;;-----------------------------------------------
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
697 ;;; Time
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
698 ;;;-----------------------------------------------
190
8428fd468956 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 56
diff changeset
699 ;;; What a backwards way to get the time! Unfortunately, GNU Emacs
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
700 ;;; doesn't have an accessible time function.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
701
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
702 (defconst cmpl-hours-per-day 24)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
703 (defconst cmpl-hours-per-year (* 365 cmpl-hours-per-day))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
704 (defconst cmpl-hours-per-4-years (+ (* 4 cmpl-hours-per-year)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
705 cmpl-hours-per-day))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
706 (defconst cmpl-days-since-start-of-year
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
707 '(0 31 59 90 120 151 181 212 243 273 304 334))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
708 (defconst cmpl-days-since-start-of-leap-year
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
709 '(0 31 60 91 121 152 182 213 244 274 305 335))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
710 (defconst cmpl-months
190
8428fd468956 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 56
diff changeset
711 '("Jan" "Feb" "Mar" "Apr" "May" "Jun" "Jul" "Aug" "Sep" "Oct" "Nov" "Dec"))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
712
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
713 (defun cmpl-hours-since-1900-internal (month day year hours)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
714 "Month is an integer from 1 to 12. Year is a two digit integer (19XX)"
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
715 (+ ;; Year
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
716 (* (/ (1- year) 4) cmpl-hours-per-4-years)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
717 (* (1+ (mod (1- year) 4)) cmpl-hours-per-year)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
718 ;; minus two to account for 1968 rather than 1900
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
719 ;; month
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
720 (* cmpl-hours-per-day
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
721 (nth (1- month) (if (zerop (mod year 4))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
722 cmpl-days-since-start-of-leap-year
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
723 cmpl-days-since-start-of-year)))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
724 (* (1- day) cmpl-hours-per-day)
190
8428fd468956 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 56
diff changeset
725 hours))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
726
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
727 (defun cmpl-month-from-string (month-string)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
728 "Month string is a three char. month string"
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
729 (let ((count 1))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
730 (do ((list cmpl-months (cdr list))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
731 )
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
732 ((or (null list) (string-equal month-string (car list))))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
733 (setq count (1+ count)))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
734 (if (> count 12)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
735 (error "Unknown month - %s" month-string))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
736 count))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
737
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
738 (defun cmpl-hours-since-1900 (&optional time-string)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
739 "String is a string in the format of current-time-string (the default)."
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
740 (let* ((string (or time-string (current-time-string)))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
741 (month (cmpl-month-from-string (substring string 4 7)))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
742 (day (string-to-int (substring string 8 10)))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
743 (year (string-to-int (substring string 22 24)))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
744 (hour (string-to-int (substring string 11 13)))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
745 )
190
8428fd468956 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 56
diff changeset
746 (cmpl-hours-since-1900-internal month day year hour)))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
747
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
748 ;;; Tests -
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
749 ;;;(cmpl-hours-since-1900 "Wed Jan 1 00:00:28 1900") --> 35040
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
750 ;;;(cmpl-hours-since-1900 "Wed Nov 2 23:00:28 1988") --> 778751
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
751 ;;;(cmpl-hours-since-1900 "Wed Jan 23 14:34:28 1988") --> 771926
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
752 ;;;(cmpl-hours-since-1900 "Wed Feb 23 14:34:28 1988") --> 772670
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
753 ;;;(cmpl-hours-since-1900 "Wed Mar 23 14:34:28 1988") --> 773366
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
754 ;;;(cmpl-hours-since-1900 "Wed Apr 23 14:34:28 1988") --> 774110
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
755 ;;;(cmpl-hours-since-1900 "Wed May 23 14:34:28 1988") --> 774830
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
756 ;;;(cmpl-hours-since-1900 "Wed Jun 23 14:34:28 1988") --> 775574
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
757 ;;;(cmpl-hours-since-1900 "Wed Jul 23 14:34:28 1988") --> 776294
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
758 ;;;(cmpl-hours-since-1900 "Wed Aug 23 14:34:28 1988") --> 777038
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
759 ;;;(cmpl-hours-since-1900 "Wed Sep 23 14:34:28 1988") --> 777782
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
760 ;;;(cmpl-hours-since-1900 "Wed Oct 23 14:34:28 1988") --> 778502
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
761 ;;;(cmpl-hours-since-1900 "Wed Nov 23 14:34:28 1988") --> 779246
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
762 ;;;(cmpl-hours-since-1900 "Wed Dec 23 14:34:28 1988") --> 779966
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
763 ;;;(cmpl-hours-since-1900 "Wed Jan 23 14:34:28 1957") --> 500198
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
764 ;;;(cmpl-hours-since-1900 "Wed Feb 23 14:34:28 1957") --> 500942
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
765 ;;;(cmpl-hours-since-1900 "Wed Mar 23 14:34:28 1957") --> 501614
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
766 ;;;(cmpl-hours-since-1900 "Wed Apr 23 14:34:28 1957") --> 502358
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
767 ;;;(cmpl-hours-since-1900 "Wed May 23 14:34:28 1957") --> 503078
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
768 ;;;(cmpl-hours-since-1900 "Wed Jun 23 14:34:28 1957") --> 503822
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
769 ;;;(cmpl-hours-since-1900 "Wed Jul 23 14:34:28 1957") --> 504542
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
770 ;;;(cmpl-hours-since-1900 "Wed Aug 23 14:34:28 1957") --> 505286
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
771 ;;;(cmpl-hours-since-1900 "Wed Sep 23 14:34:28 1957") --> 506030
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
772 ;;;(cmpl-hours-since-1900 "Wed Oct 23 14:34:28 1957") --> 506750
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
773 ;;;(cmpl-hours-since-1900 "Wed Nov 23 14:34:28 1957") --> 507494
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
774 ;;;(cmpl-hours-since-1900 "Wed Dec 23 14:34:28 1957") --> 508214
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
775
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
776
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
777 ;;;---------------------------------------------------------------------------
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
778 ;;; "Symbol" parsing functions
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
779 ;;;---------------------------------------------------------------------------
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
780 ;;; The functions symbol-before-point, symbol-under-point, etc. quickly return
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
781 ;;; an appropriate symbol string. The strategy is to temporarily change
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
782 ;;; the syntax table to enable fast symbol searching. There are three classes
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
783 ;;; of syntax in these "symbol" syntax tables ::
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
784 ;;;
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
785 ;;; syntax (?_) - "symbol" chars (e.g. alphanumerics)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
786 ;;; syntax (?w) - symbol chars to ignore at end of words (e.g. period).
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
787 ;;; syntax (? ) - everything else
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
788 ;;;
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
789 ;;; Thus by judicious use of scan-sexps and forward-word, we can get
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
790 ;;; the word we want relatively fast and without consing.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
791 ;;;
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
792 ;;; Why do we need a separate category for "symbol chars to ignore at ends" ?
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
793 ;;; For example, in LISP we want starting :'s trimmed
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
794 ;;; so keyword argument specifiers also define the keyword completion. And,
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
795 ;;; for example, in C we want `.' appearing in a structure ref. to
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
796 ;;; be kept intact in order to store the whole structure ref.; however, if
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
797 ;;; it appears at the end of a symbol it should be discarded because it is
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
798 ;;; probably used as a period.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
799
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
800 ;;; Here is the default completion syntax ::
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
801 ;;; Symbol chars :: A-Z a-z 0-9 @ / \ * + ~ $ < > %
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
802 ;;; Symbol chars to ignore at ends :: _ : . -
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
803 ;;; Separator chars. :: <tab> <space> ! ^ & ( ) = ` | { } [ ] ; " ' #
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
804 ;;; , ? <Everything else>
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
805
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
806 ;;; Mode specific differences and notes ::
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
807 ;;; LISP diffs ->
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
808 ;;; Symbol chars :: ! & ? = ^
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
809 ;;;
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
810 ;;; C diffs ->
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
811 ;;; Separator chars :: + * / : %
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
812 ;;; A note on the hypen (`-'). Perhaps, the hypen should also be a separator
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
813 ;;; char., however, we wanted to have completion symbols include pointer
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
814 ;;; references. For example, "foo->bar" is a symbol as far as completion is
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
815 ;;; concerned.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
816 ;;;
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
817 ;;; FORTRAN diffs ->
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
818 ;;; Separator chars :: + - * / :
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
819 ;;;
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
820 ;;; Pathname diffs ->
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
821 ;;; Symbol chars :: .
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
822 ;;; Of course there is no pathname "mode" and in fact we have not implemented
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
823 ;;; this table. However, if there was such a mode, this is what it would look
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
824 ;;; like.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
825
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
826 ;;;-----------------------------------------------
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
827 ;;; Table definitions
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
828 ;;;-----------------------------------------------
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
829
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
830 (defun make-standard-completion-syntax-table ()
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
831 (let ((table (make-vector 256 0)) ;; default syntax is whitespace
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
832 )
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
833 ;; alpha chars
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
834 (dotimes (i 26)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
835 (modify-syntax-entry (+ ?a i) "_" table)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
836 (modify-syntax-entry (+ ?A i) "_" table))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
837 ;; digit chars.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
838 (dotimes (i 10)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
839 (modify-syntax-entry (+ ?0 i) "_" table))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
840 ;; Other ones
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
841 (let ((symbol-chars '(?@ ?/ ?\\ ?* ?+ ?~ ?$ ?< ?> ?%))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
842 (symbol-chars-ignore '(?_ ?- ?: ?.))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
843 )
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
844 (dolist (char symbol-chars)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
845 (modify-syntax-entry char "_" table))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
846 (dolist (char symbol-chars-ignore)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
847 (modify-syntax-entry char "w" table)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
848 )
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
849 )
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
850 table))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
851
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
852 (defconst cmpl-standard-syntax-table (make-standard-completion-syntax-table))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
853
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
854 (defun make-lisp-completion-syntax-table ()
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
855 (let ((table (copy-syntax-table cmpl-standard-syntax-table))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
856 (symbol-chars '(?! ?& ?? ?= ?^))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
857 )
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
858 (dolist (char symbol-chars)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
859 (modify-syntax-entry char "_" table))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
860 table))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
861
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
862 (defun make-c-completion-syntax-table ()
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
863 (let ((table (copy-syntax-table cmpl-standard-syntax-table))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
864 (separator-chars '(?+ ?* ?/ ?: ?%))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
865 )
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
866 (dolist (char separator-chars)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
867 (modify-syntax-entry char " " table))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
868 table))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
869
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
870 (defun make-fortran-completion-syntax-table ()
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
871 (let ((table (copy-syntax-table cmpl-standard-syntax-table))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
872 (separator-chars '(?+ ?- ?* ?/ ?:))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
873 )
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
874 (dolist (char separator-chars)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
875 (modify-syntax-entry char " " table))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
876 table))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
877
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
878 (defconst cmpl-lisp-syntax-table (make-lisp-completion-syntax-table))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
879 (defconst cmpl-c-syntax-table (make-c-completion-syntax-table))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
880 (defconst cmpl-fortran-syntax-table (make-fortran-completion-syntax-table))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
881
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
882 (defvar cmpl-syntax-table cmpl-standard-syntax-table
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
883 "This variable holds the current completion syntax table.")
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
884 (make-variable-buffer-local 'cmpl-syntax-table)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
885
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
886 ;;;-----------------------------------------------
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
887 ;;; Installing the appropriate mode tables
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
888 ;;;-----------------------------------------------
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
889
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
890 (completion-advise lisp-mode-variables :after
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
891 (setq cmpl-syntax-table cmpl-lisp-syntax-table)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
892 )
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
893
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
894 (completion-advise c-mode :after
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
895 (setq cmpl-syntax-table cmpl-c-syntax-table)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
896 )
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
897
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
898 (completion-advise fortran-mode :after
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
899 (setq cmpl-syntax-table cmpl-fortran-syntax-table)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
900 (completion-setup-fortran-mode)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
901 )
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
902
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
903 ;;;-----------------------------------------------
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
904 ;;; Symbol functions
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
905 ;;;-----------------------------------------------
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
906 (defvar cmpl-symbol-start nil
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
907 "Set to the first character of the symbol after one of the completion
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
908 symbol functions is called.")
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
909 (defvar cmpl-symbol-end nil
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
910 "Set to the last character of the symbol after one of the completion
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
911 symbol functions is called.")
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
912 ;;; These are temp. vars. we use to avoid using let.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
913 ;;; Why ? Small speed improvement.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
914 (defvar cmpl-saved-syntax nil)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
915 (defvar cmpl-saved-point nil)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
916
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
917 (defun symbol-under-point ()
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
918 "Returns the symbol that the point is currently on if it is longer
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
919 than *completion-min-length*."
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
920 (setq cmpl-saved-syntax (syntax-table))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
921 (set-syntax-table cmpl-syntax-table)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
922 (cond
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
923 ;; Cursor is on following-char and after preceding-char
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
924 ((memq (char-syntax (following-char)) '(?w ?_))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
925 (setq cmpl-saved-point (point)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
926 cmpl-symbol-start (scan-sexps (1+ cmpl-saved-point) -1)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
927 cmpl-symbol-end (scan-sexps cmpl-saved-point 1))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
928 ;; remove chars to ignore at the start
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
929 (cond ((= (char-syntax (char-after cmpl-symbol-start)) ?w)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
930 (goto-char cmpl-symbol-start)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
931 (forward-word 1)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
932 (setq cmpl-symbol-start (point))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
933 (goto-char cmpl-saved-point)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
934 ))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
935 ;; remove chars to ignore at the end
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
936 (cond ((= (char-syntax (char-after (1- cmpl-symbol-end))) ?w)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
937 (goto-char cmpl-symbol-end)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
938 (forward-word -1)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
939 (setq cmpl-symbol-end (point))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
940 (goto-char cmpl-saved-point)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
941 ))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
942 ;; restore state
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
943 (set-syntax-table cmpl-saved-syntax)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
944 ;; Return completion if the length is reasonable
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
945 (if (and (<= (read-time-eval *completion-min-length*)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
946 (- cmpl-symbol-end cmpl-symbol-start))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
947 (<= (- cmpl-symbol-end cmpl-symbol-start)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
948 (read-time-eval *completion-max-length*)))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
949 (buffer-substring cmpl-symbol-start cmpl-symbol-end))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
950 )
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
951 (t
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
952 ;; restore table if no symbol
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
953 (set-syntax-table cmpl-saved-syntax)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
954 nil)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
955 ))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
956
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
957 ;;; tests for symbol-under-point
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
958 ;;; `^' indicates cursor pos. where value is returned
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
959 ;;; simple-word-test
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
960 ;;; ^^^^^^^^^^^^^^^^ --> simple-word-test
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
961 ;;; _harder_word_test_
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
962 ;;; ^^^^^^^^^^^^^^^^^^ --> harder_word_test
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
963 ;;; .___.______.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
964 ;;; --> nil
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
965 ;;; /foo/bar/quux.hello
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
966 ;;; ^^^^^^^^^^^^^^^^^^^ --> /foo/bar/quux.hello
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
967 ;;;
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
968
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
969 (defun symbol-before-point ()
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
970 "Returns a string of the symbol immediately before point
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
971 or nil if there isn't one longer than *completion-min-length*."
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
972 ;; This is called when a word separator is typed so it must be FAST !
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
973 (setq cmpl-saved-syntax (syntax-table))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
974 (set-syntax-table cmpl-syntax-table)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
975 ;; Cursor is on following-char and after preceding-char
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
976 (cond ((= (setq cmpl-preceding-syntax (char-syntax (preceding-char))) ?_)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
977 ;; No chars. to ignore at end
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
978 (setq cmpl-symbol-end (point)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
979 cmpl-symbol-start (scan-sexps (1+ cmpl-symbol-end) -1)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
980 )
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
981 ;; remove chars to ignore at the start
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
982 (cond ((= (char-syntax (char-after cmpl-symbol-start)) ?w)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
983 (goto-char cmpl-symbol-start)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
984 (forward-word 1)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
985 (setq cmpl-symbol-start (point))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
986 (goto-char cmpl-symbol-end)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
987 ))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
988 ;; restore state
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
989 (set-syntax-table cmpl-saved-syntax)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
990 ;; return value if long enough
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
991 (if (>= cmpl-symbol-end
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
992 (+ cmpl-symbol-start
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
993 (read-time-eval *completion-min-length*)))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
994 (buffer-substring cmpl-symbol-start cmpl-symbol-end))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
995 )
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
996 ((= cmpl-preceding-syntax ?w)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
997 ;; chars to ignore at end
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
998 (setq cmpl-saved-point (point)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
999 cmpl-symbol-start (scan-sexps (1+ cmpl-saved-point) -1))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1000 ;; take off chars. from end
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1001 (forward-word -1)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1002 (setq cmpl-symbol-end (point))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1003 ;; remove chars to ignore at the start
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1004 (cond ((= (char-syntax (char-after cmpl-symbol-start)) ?w)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1005 (goto-char cmpl-symbol-start)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1006 (forward-word 1)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1007 (setq cmpl-symbol-start (point))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1008 ))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1009 ;; restore state
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1010 (goto-char cmpl-saved-point)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1011 (set-syntax-table cmpl-saved-syntax)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1012 ;; Return completion if the length is reasonable
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1013 (if (and (<= (read-time-eval *completion-min-length*)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1014 (- cmpl-symbol-end cmpl-symbol-start))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1015 (<= (- cmpl-symbol-end cmpl-symbol-start)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1016 (read-time-eval *completion-max-length*)))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1017 (buffer-substring cmpl-symbol-start cmpl-symbol-end))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1018 )
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1019 (t
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1020 ;; restore table if no symbol
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1021 (set-syntax-table cmpl-saved-syntax)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1022 nil)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1023 ))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1024
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1025 ;;; tests for symbol-before-point
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1026 ;;; `^' indicates cursor pos. where value is returned
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1027 ;;; simple-word-test
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1028 ;;; ^ --> nil
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1029 ;;; ^ --> nil
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1030 ;;; ^ --> simple-w
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1031 ;;; ^ --> simple-word-test
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1032 ;;; _harder_word_test_
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1033 ;;; ^ --> harder_word_test
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1034 ;;; ^ --> harder_word_test
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1035 ;;; ^ --> harder
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1036 ;;; .___....
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1037 ;;; --> nil
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1038
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1039 (defun symbol-under-or-before-point ()
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1040 ;;; This could be made slightly faster but it is better to avoid
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1041 ;;; copying all the code.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1042 ;;; However, it is only used by the completion string prompter.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1043 ;;; If it comes into common use, it could be rewritten.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1044 (setq cmpl-saved-syntax (syntax-table))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1045 (set-syntax-table cmpl-syntax-table)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1046 (cond ((memq (char-syntax (following-char)) '(?w ?_))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1047 (set-syntax-table cmpl-saved-syntax)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1048 (symbol-under-point))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1049 (t
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1050 (set-syntax-table cmpl-saved-syntax)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1051 (symbol-before-point))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1052 ))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1053
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1054
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1055 (defun symbol-before-point-for-complete ()
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1056 ;; "Returns a string of the symbol immediately before point
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1057 ;; or nil if there isn't one. Like symbol-before-point but doesn't trim the
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1058 ;; end chars."
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1059 ;; Cursor is on following-char and after preceding-char
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1060 (setq cmpl-saved-syntax (syntax-table))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1061 (set-syntax-table cmpl-syntax-table)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1062 (cond ((memq (setq cmpl-preceding-syntax (char-syntax (preceding-char)))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1063 '(?_ ?w))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1064 (setq cmpl-symbol-end (point)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1065 cmpl-symbol-start (scan-sexps (1+ cmpl-symbol-end) -1)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1066 )
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1067 ;; remove chars to ignore at the start
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1068 (cond ((= (char-syntax (char-after cmpl-symbol-start)) ?w)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1069 (goto-char cmpl-symbol-start)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1070 (forward-word 1)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1071 (setq cmpl-symbol-start (point))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1072 (goto-char cmpl-symbol-end)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1073 ))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1074 ;; restore state
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1075 (set-syntax-table cmpl-saved-syntax)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1076 ;; Return completion if the length is reasonable
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1077 (if (and (<= (read-time-eval
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1078 *completion-prefix-min-length*)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1079 (- cmpl-symbol-end cmpl-symbol-start))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1080 (<= (- cmpl-symbol-end cmpl-symbol-start)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1081 (read-time-eval *completion-max-length*)))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1082 (buffer-substring cmpl-symbol-start cmpl-symbol-end))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1083 )
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1084 (t
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1085 ;; restore table if no symbol
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1086 (set-syntax-table cmpl-saved-syntax)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1087 nil)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1088 ))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1089
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1090 ;;; tests for symbol-before-point-for-complete
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1091 ;;; `^' indicates cursor pos. where value is returned
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1092 ;;; simple-word-test
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1093 ;;; ^ --> nil
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1094 ;;; ^ --> nil
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1095 ;;; ^ --> simple-w
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1096 ;;; ^ --> simple-word-test
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1097 ;;; _harder_word_test_
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1098 ;;; ^ --> harder_word_test
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1099 ;;; ^ --> harder_word_test_
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1100 ;;; ^ --> harder_
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1101 ;;; .___....
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1102 ;;; --> nil
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1103
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1104
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1105
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1106 ;;;---------------------------------------------------------------------------
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1107 ;;; Statistics Recording
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1108 ;;;---------------------------------------------------------------------------
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1109
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1110 ;;; Note that the guts of this has been turned off. The guts
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1111 ;;; are in completion-stats.el.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1112
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1113 ;;;-----------------------------------------------
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1114 ;;; Conditionalizing code on *record-cmpl-statistics-p*
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1115 ;;;-----------------------------------------------
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1116 ;;; All statistics code outside this block should use this
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1117 (defmacro cmpl-statistics-block (&rest body)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1118 "Only executes body if we are recording statistics."
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1119 (list 'cond
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1120 (list* '*record-cmpl-statistics-p* body)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1121 ))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1122
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1123 ;;;-----------------------------------------------
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1124 ;;; Completion Sources
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1125 ;;;-----------------------------------------------
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1126
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1127 ;; ID numbers
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1128 (defconst cmpl-source-unknown 0)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1129 (defconst cmpl-source-init-file 1)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1130 (defconst cmpl-source-file-parsing 2)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1131 (defconst cmpl-source-separator 3)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1132 (defconst cmpl-source-cursor-moves 4)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1133 (defconst cmpl-source-interactive 5)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1134 (defconst cmpl-source-cdabbrev 6)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1135 (defconst num-cmpl-sources 7)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1136 (defvar current-completion-source cmpl-source-unknown)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1137
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1138
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1139
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1140 ;;;---------------------------------------------------------------------------
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1141 ;;; Completion Method #2: dabbrev-expand style
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1142 ;;;---------------------------------------------------------------------------
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1143 ;;;
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1144 ;;; This method is used if there are no useful stored completions. It is
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1145 ;;; based on dabbrev-expand with these differences :
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1146 ;;; 1) Faster (we don't use regexps)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1147 ;;; 2) case coercion handled correctly
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1148 ;;; This is called cdabbrev to differentiate it.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1149 ;;; We simply search backwards through the file looking for words which
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1150 ;;; start with the same letters we are trying to complete.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1151 ;;;
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1152
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1153 (defvar cdabbrev-completions-tried nil)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1154 ;;; "A list of all the cdabbrev completions since the last reset.")
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1155
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1156 (defvar cdabbrev-current-point 0)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1157 ;;; "The current point position the cdabbrev search is at.")
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1158
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1159 (defvar cdabbrev-current-window nil)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1160 ;;; "The current window we are looking for cdabbrevs in. T if looking in
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1161 ;;; (other-buffer), NIL if no more cdabbrevs.")
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1162
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1163 (defvar cdabbrev-wrapped-p nil)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1164 ;;; "T if the cdabbrev search has wrapped around the file.")
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1165
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1166 (defvar cdabbrev-abbrev-string "")
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1167 (defvar cdabbrev-start-point 0)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1168
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1169 ;;; Test strings for cdabbrev
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1170 ;;; cdat-upcase ;;same namestring
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1171 ;;; CDAT-UPCASE ;;ok
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1172 ;;; cdat2 ;;too short
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1173 ;;; cdat-1-2-3-4 ;;ok
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1174 ;;; a-cdat-1 ;;doesn't start correctly
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1175 ;;; cdat-simple ;;ok
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1176
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1177
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1178 (defun reset-cdabbrev (abbrev-string &optional initial-completions-tried)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1179 "Resets the cdabbrev search to search for abbrev-string.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1180 initial-completions-tried is a list of downcased strings to ignore
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1181 during the search."
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1182 (setq cdabbrev-abbrev-string abbrev-string
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1183 cdabbrev-completions-tried
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1184 (cons (downcase abbrev-string) initial-completions-tried)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1185 )
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1186 (reset-cdabbrev-window t)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1187 )
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1188
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1189 (defun set-cdabbrev-buffer ()
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1190 ;; cdabbrev-current-window must not be NIL
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1191 (set-buffer (if (eq cdabbrev-current-window t)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1192 (other-buffer)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1193 (window-buffer cdabbrev-current-window)))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1194 )
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1195
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1196
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1197 (defun reset-cdabbrev-window (&optional initializep)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1198 "Resets the cdabbrev search to search for abbrev-string.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1199 initial-completions-tried is a list of downcased strings to ignore
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1200 during the search."
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1201 ;; Set the window
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1202 (cond (initializep
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1203 (setq cdabbrev-current-window (selected-window))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1204 )
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1205 ((eq cdabbrev-current-window t)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1206 ;; Everything has failed
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1207 (setq cdabbrev-current-window nil))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1208 (cdabbrev-current-window
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1209 (setq cdabbrev-current-window (next-window cdabbrev-current-window))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1210 (if (eq cdabbrev-current-window (selected-window))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1211 ;; No more windows, try other buffer.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1212 (setq cdabbrev-current-window t)))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1213 )
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1214 (when cdabbrev-current-window
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1215 (save-excursion
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1216 (set-cdabbrev-buffer)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1217 (setq cdabbrev-current-point (point)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1218 cdabbrev-start-point cdabbrev-current-point
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1219 cdabbrev-stop-point
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1220 (if *cdabbrev-radius*
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1221 (max (point-min)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1222 (- cdabbrev-start-point *cdabbrev-radius*))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1223 (point-min))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1224 cdabbrev-wrapped-p nil)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1225 )))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1226
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1227 (defun next-cdabbrev ()
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1228 "Return the next possible cdabbrev expansion or nil if there isn't one.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1229 reset-cdabbrev must've been called. This is sensitive to case-fold-search."
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1230 ;; note that case-fold-search affects the behavior of this function
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1231 ;; Bug: won't pick up an expansion that starts at the top of buffer
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1232 (when cdabbrev-current-window
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1233 (let (saved-point
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1234 saved-syntax
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1235 (expansion nil)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1236 downcase-expansion tried-list syntax saved-point-2)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1237 (save-excursion
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1238 (unwind-protect
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1239 (progn
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1240 ;; Switch to current completion buffer
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1241 (set-cdabbrev-buffer)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1242 ;; Save current buffer state
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1243 (setq saved-point (point)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1244 saved-syntax (syntax-table))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1245 ;; Restore completion state
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1246 (set-syntax-table cmpl-syntax-table)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1247 (goto-char cdabbrev-current-point)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1248 ;; Loop looking for completions
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1249 (while
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1250 ;; This code returns t if it should loop again
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1251 (cond
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1252 (;; search for the string
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1253 (search-backward cdabbrev-abbrev-string cdabbrev-stop-point t)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1254 ;; return nil if the completion is valid
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1255 (not
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1256 (and
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1257 ;; does it start with a separator char ?
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1258 (or (= (setq syntax (char-syntax (preceding-char))) ? )
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1259 (and (= syntax ?w)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1260 ;; symbol char to ignore at end. Are we at end ?
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1261 (progn
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1262 (setq saved-point-2 (point))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1263 (forward-word -1)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1264 (prog1
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1265 (= (char-syntax (preceding-char)) ? )
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1266 (goto-char saved-point-2)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1267 ))))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1268 ;; is the symbol long enough ?
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1269 (setq expansion (symbol-under-point))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1270 ;; have we not tried this one before
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1271 (progn
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1272 ;; See if we've already used it
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1273 (setq tried-list cdabbrev-completions-tried
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1274 downcase-expansion (downcase expansion))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1275 (while (and tried-list
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1276 (not (string-equal downcase-expansion
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1277 (car tried-list))))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1278 ;; Already tried, don't choose this one
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1279 (setq tried-list (cdr tried-list))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1280 )
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1281 ;; at this point tried-list will be nil if this
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1282 ;; expansion has not yet been tried
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1283 (if tried-list
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1284 (setq expansion nil)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1285 t)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1286 ))))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1287 ;; search failed
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1288 (cdabbrev-wrapped-p
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1289 ;; If already wrapped, then we've failed completely
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1290 nil)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1291 (t
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1292 ;; need to wrap
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1293 (goto-char (setq cdabbrev-current-point
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1294 (if *cdabbrev-radius*
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1295 (min (point-max) (+ cdabbrev-start-point *cdabbrev-radius*))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1296 (point-max))))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1297
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1298 (setq cdabbrev-wrapped-p t))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1299 ))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1300 ;; end of while loop
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1301 (cond (expansion
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1302 ;; successful
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1303 (setq cdabbrev-completions-tried
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1304 (cons downcase-expansion cdabbrev-completions-tried)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1305 cdabbrev-current-point (point))))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1306 )
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1307 (set-syntax-table saved-syntax)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1308 (goto-char saved-point)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1309 ))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1310 ;; If no expansion, go to next window
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1311 (cond (expansion)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1312 (t (reset-cdabbrev-window)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1313 (next-cdabbrev)))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1314 )))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1315
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1316 ;;; The following must be eval'd in the minibuffer ::
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1317 ;;; (reset-cdabbrev "cdat")
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1318 ;;; (next-cdabbrev) --> "cdat-simple"
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1319 ;;; (next-cdabbrev) --> "cdat-1-2-3-4"
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1320 ;;; (next-cdabbrev) --> "CDAT-UPCASE"
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1321 ;;; (next-cdabbrev) --> "cdat-wrapping"
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1322 ;;; (next-cdabbrev) --> "cdat_start_sym"
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1323 ;;; (next-cdabbrev) --> nil
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1324 ;;; (next-cdabbrev) --> nil
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1325 ;;; (next-cdabbrev) --> nil
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1326
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1327 ;;; _cdat_start_sym
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1328 ;;; cdat-wrapping
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1329
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1330
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1331 ;;;---------------------------------------------------------------------------
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1332 ;;; Completion Database
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1333 ;;;---------------------------------------------------------------------------
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1334
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1335 ;;; We use two storage modes for the two search types ::
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1336 ;;; 1) Prefix {cmpl-prefix-obarray} for looking up possible completions
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1337 ;;; Used by search-completion-next
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1338 ;;; the value of the symbol is nil or a cons of head and tail pointers
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1339 ;;; 2) Interning {cmpl-obarray} to see if it's in the database
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1340 ;;; Used by find-exact-completion, completion-in-database-p
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1341 ;;; The value of the symbol is the completion entry
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1342
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1343 ;;; bad things may happen if this length is changed due to the way
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1344 ;;; GNU implements obarrays
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1345 (defconst cmpl-obarray-length 511)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1346
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1347 (defvar cmpl-prefix-obarray (make-vector cmpl-obarray-length 0)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1348 "An obarray used to store the downcased completion prefices.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1349 Each symbol is bound to a list of completion entries.")
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1350
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1351 (defvar cmpl-obarray (make-vector cmpl-obarray-length 0)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1352 "An obarray used to store the downcased completions.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1353 Each symbol is bound to a single completion entry.")
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1354
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1355 ;;;-----------------------------------------------
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1356 ;;; Completion Entry Structure Definition
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1357 ;;;-----------------------------------------------
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1358
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1359 ;;; A completion entry is a LIST of string, prefix-symbol num-uses, and
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1360 ;;; last-use-time (the time the completion was last used)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1361 ;;; last-use-time is T if the string should be kept permanently
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1362 ;;; num-uses is incremented everytime the completion is used.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1363
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1364 ;;; We chose lists because (car foo) is faster than (aref foo 0) and the
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1365 ;;; creation time is about the same.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1366
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1367 ;;; READER MACROS
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1368
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1369 (defmacro completion-string (completion-entry)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1370 (list 'car completion-entry))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1371
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1372 (defmacro completion-num-uses (completion-entry)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1373 ;; "The number of times it has used. Used to decide whether to save
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1374 ;; it."
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1375 (list 'car (list 'cdr completion-entry)))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1376
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1377 (defmacro completion-last-use-time (completion-entry)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1378 ;; "The time it was last used. In hours since 1900. Used to decide
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1379 ;; whether to save it. T if one should always save it."
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1380 (list 'nth 2 completion-entry))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1381
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1382 (defmacro completion-source (completion-entry)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1383 (list 'nth 3 completion-entry))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1384
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1385 ;;; WRITER MACROS
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1386 (defmacro set-completion-string (completion-entry string)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1387 (list 'setcar completion-entry string))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1388
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1389 (defmacro set-completion-num-uses (completion-entry num-uses)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1390 (list 'setcar (list 'cdr completion-entry) num-uses))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1391
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1392 (defmacro set-completion-last-use-time (completion-entry last-use-time)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1393 (list 'setcar (list 'cdr (list 'cdr completion-entry)) last-use-time))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1394
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1395 ;;; CONSTRUCTOR
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1396 (defun make-completion (string)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1397 "Returns a list of a completion entry."
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1398 (list (list string 0 nil current-completion-source)))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1399
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1400 ;; Obsolete
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1401 ;;(defmacro cmpl-prefix-entry-symbol (completion-entry)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1402 ;; (list 'car (list 'cdr completion-entry)))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1403
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1404
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1405
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1406 ;;;-----------------------------------------------
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1407 ;;; Prefix symbol entry definition
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1408 ;;;-----------------------------------------------
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1409 ;;; A cons of (head . tail)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1410
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1411 ;;; READER Macros
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1412
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1413 (defmacro cmpl-prefix-entry-head (prefix-entry)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1414 (list 'car prefix-entry))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1415
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1416 (defmacro cmpl-prefix-entry-tail (prefix-entry)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1417 (list 'cdr prefix-entry))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1418
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1419 ;;; WRITER Macros
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1420
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1421 (defmacro set-cmpl-prefix-entry-head (prefix-entry new-head)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1422 (list 'setcar prefix-entry new-head))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1423
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1424 (defmacro set-cmpl-prefix-entry-tail (prefix-entry new-tail)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1425 (list 'setcdr prefix-entry new-tail))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1426
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1427 ;;; Contructor
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1428
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1429 (defun make-cmpl-prefix-entry (completion-entry-list)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1430 "Makes a new prefix entry containing only completion-entry."
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1431 (cons completion-entry-list completion-entry-list))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1432
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1433 ;;;-----------------------------------------------
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1434 ;;; Completion Database - Utilities
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1435 ;;;-----------------------------------------------
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1436
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1437 (defun clear-all-completions ()
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1438 "Initializes the completion storage. All existing completions are lost."
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1439 (interactive)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1440 (setq cmpl-prefix-obarray (make-vector cmpl-obarray-length 0))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1441 (setq cmpl-obarray (make-vector cmpl-obarray-length 0))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1442 (cmpl-statistics-block
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1443 (record-clear-all-completions))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1444 )
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1445
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1446 (defun list-all-completions ()
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1447 "Returns a list of all the known completion entries."
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1448 (let ((return-completions nil))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1449 (mapatoms 'list-all-completions-1 cmpl-prefix-obarray)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1450 return-completions))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1451
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1452 (defun list-all-completions-1 (prefix-symbol)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1453 (if (boundp prefix-symbol)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1454 (setq return-completions
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1455 (append (cmpl-prefix-entry-head (symbol-value prefix-symbol))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1456 return-completions))))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1457
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1458 (defun list-all-completions-by-hash-bucket ()
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1459 "Returns a list of lists of all the known completion entries organized by
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1460 hash bucket."
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1461 (let ((return-completions nil))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1462 (mapatoms 'list-all-completions-by-hash-bucket-1 cmpl-prefix-obarray)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1463 return-completions))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1464
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1465 (defun list-all-completions-by-hash-bucket-1 (prefix-symbol)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1466 (if (boundp prefix-symbol)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1467 (setq return-completions
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1468 (cons (cmpl-prefix-entry-head (symbol-value prefix-symbol))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1469 return-completions))))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1470
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1471
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1472 ;;;-----------------------------------------------
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1473 ;;; Updating the database
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1474 ;;;-----------------------------------------------
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1475 ;;;
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1476 ;;; These are the internal functions used to update the datebase
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1477 ;;;
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1478 ;;;
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1479 (defvar completion-to-accept nil)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1480 ;;"Set to a string that is pending its acceptance."
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1481 ;; this checked by the top level reading functions
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1482
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1483 (defvar cmpl-db-downcase-string nil)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1484 ;; "Setup by find-exact-completion, etc. The given string, downcased."
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1485 (defvar cmpl-db-symbol nil)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1486 ;; "The interned symbol corresponding to cmpl-db-downcase-string.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1487 ;; Set up by cmpl-db-symbol."
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1488 (defvar cmpl-db-prefix-symbol nil)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1489 ;; "The interned prefix symbol corresponding to cmpl-db-downcase-string."
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1490 (defvar cmpl-db-entry nil)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1491 (defvar cmpl-db-debug-p nil
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1492 "Set to T if you want to debug the database.")
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1493
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1494 ;;; READS
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1495 (defun find-exact-completion (string)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1496 "Returns the completion entry for string or nil.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1497 Sets up cmpl-db-downcase-string and cmpl-db-symbol."
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1498 (and (boundp (setq cmpl-db-symbol
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1499 (intern (setq cmpl-db-downcase-string (downcase string))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1500 cmpl-obarray)))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1501 (symbol-value cmpl-db-symbol)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1502 ))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1503
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1504 (defun find-cmpl-prefix-entry (prefix-string)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1505 "Returns the prefix entry for string. Sets cmpl-db-prefix-symbol.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1506 Prefix-string must be exactly *completion-prefix-min-length* long
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1507 and downcased. Sets up cmpl-db-prefix-symbol."
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1508 (and (boundp (setq cmpl-db-prefix-symbol
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1509 (intern prefix-string cmpl-prefix-obarray)))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1510 (symbol-value cmpl-db-prefix-symbol)))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1511
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1512 (defvar inside-locate-completion-entry nil)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1513 ;; used to trap lossage in silent error correction
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1514
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1515 (defun locate-completion-entry (completion-entry prefix-entry)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1516 "Locates the completion entry. Returns a pointer to the element
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1517 before the completion entry or nil if the completion entry is at the head.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1518 Must be called after find-exact-completion."
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1519 (let ((prefix-list (cmpl-prefix-entry-head prefix-entry))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1520 next-prefix-list
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1521 )
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1522 (cond
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1523 ((not (eq (car prefix-list) completion-entry))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1524 ;; not already at head
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1525 (while (and prefix-list
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1526 (not (eq completion-entry
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1527 (car (setq next-prefix-list (cdr prefix-list)))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1528 )))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1529 (setq prefix-list next-prefix-list))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1530 (cond (;; found
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1531 prefix-list)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1532 ;; Didn't find it. Database is messed up.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1533 (cmpl-db-debug-p
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1534 ;; not found, error if debug mode
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1535 (error "Completion entry exists but not on prefix list - %s"
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1536 string))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1537 (inside-locate-completion-entry
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1538 ;; recursive error: really scrod
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1539 (locate-completion-db-error))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1540 (t
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1541 ;; Patch out
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1542 (set cmpl-db-symbol nil)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1543 ;; Retry
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1544 (locate-completion-entry-retry completion-entry)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1545 ))))))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1546
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1547 (defun locate-completion-entry-retry (old-entry)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1548 (let ((inside-locate-completion-entry t))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1549 (add-completion (completion-string old-entry)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1550 (completion-num-uses old-entry)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1551 (completion-last-use-time old-entry))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1552 (let ((cmpl-entry (find-exact-completion (completion-string old-entry)))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1553 (pref-entry
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1554 (if cmpl-entry
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1555 (find-cmpl-prefix-entry
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1556 (substring cmpl-db-downcase-string
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1557 0 *completion-prefix-min-length*))))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1558 )
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1559 (if (and cmpl-entry pref-entry)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1560 ;; try again
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1561 (locate-completion-entry cmpl-entry pref-entry)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1562 ;; still losing
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1563 (locate-completion-db-error))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1564 )))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1565
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1566 (defun locate-completion-db-error ()
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1567 ;; recursive error: really scrod
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1568 (error "Completion database corrupted. Try M-x clear-all-completions. Send bug report.")
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1569 )
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1570
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1571 ;;; WRITES
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1572 (defun add-completion-to-tail-if-new (string)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1573 "If the string is not in the database it is added to the end of the
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1574 approppriate prefix list with num-uses = 0. The database is unchanged if it
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1575 is there. string must be longer than *completion-prefix-min-length*.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1576 This must be very fast.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1577 Returns the completion entry."
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1578 (or (find-exact-completion string)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1579 ;; not there
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1580 (let (;; create an entry
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1581 (entry (make-completion string))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1582 ;; setup the prefix
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1583 (prefix-entry (find-cmpl-prefix-entry
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1584 (substring cmpl-db-downcase-string 0
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1585 (read-time-eval
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1586 *completion-prefix-min-length*))))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1587 )
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1588 ;; The next two forms should happen as a unit (atomically) but
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1589 ;; no fatal errors should result if that is not the case.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1590 (cond (prefix-entry
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1591 ;; These two should be atomic, but nothing fatal will happen
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1592 ;; if they're not.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1593 (setcdr (cmpl-prefix-entry-tail prefix-entry) entry)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1594 (set-cmpl-prefix-entry-tail prefix-entry entry))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1595 (t
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1596 (set cmpl-db-prefix-symbol (make-cmpl-prefix-entry entry))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1597 ))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1598 ;; statistics
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1599 (cmpl-statistics-block
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1600 (note-added-completion))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1601 ;; set symbol
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1602 (set cmpl-db-symbol (car entry))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1603 )))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1604
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1605 (defun add-completion-to-head (string)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1606 "If the string is not in the database it is added to the head of the
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1607 approppriate prefix list. Otherwise it is moved to the head of the list.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1608 string must be longer than *completion-prefix-min-length*.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1609 Updates the saved string with the supplied string.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1610 This must be very fast.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1611 Returns the completion entry."
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1612 ;; Handle pending acceptance
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1613 (if completion-to-accept (accept-completion))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1614 ;; test if already in database
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1615 (if (setq cmpl-db-entry (find-exact-completion string))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1616 ;; found
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1617 (let* ((prefix-entry (find-cmpl-prefix-entry
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1618 (substring cmpl-db-downcase-string 0
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1619 (read-time-eval
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1620 *completion-prefix-min-length*))))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1621 (splice-ptr (locate-completion-entry cmpl-db-entry prefix-entry))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1622 (cmpl-ptr (cdr splice-ptr))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1623 )
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1624 ;; update entry
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1625 (set-completion-string cmpl-db-entry string)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1626 ;; move to head (if necessary)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1627 (cond (splice-ptr
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1628 ;; These should all execute atomically but it is not fatal if
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1629 ;; they don't.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1630 ;; splice it out
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1631 (or (setcdr splice-ptr (cdr cmpl-ptr))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1632 ;; fix up tail if necessary
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1633 (set-cmpl-prefix-entry-tail prefix-entry splice-ptr))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1634 ;; splice in at head
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1635 (setcdr cmpl-ptr (cmpl-prefix-entry-head prefix-entry))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1636 (set-cmpl-prefix-entry-head prefix-entry cmpl-ptr)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1637 ))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1638 cmpl-db-entry)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1639 ;; not there
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1640 (let (;; create an entry
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1641 (entry (make-completion string))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1642 ;; setup the prefix
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1643 (prefix-entry (find-cmpl-prefix-entry
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1644 (substring cmpl-db-downcase-string 0
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1645 (read-time-eval
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1646 *completion-prefix-min-length*))))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1647 )
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1648 (cond (prefix-entry
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1649 ;; Splice in at head
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1650 (setcdr entry (cmpl-prefix-entry-head prefix-entry))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1651 (set-cmpl-prefix-entry-head prefix-entry entry))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1652 (t
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1653 ;; Start new prefix entry
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1654 (set cmpl-db-prefix-symbol (make-cmpl-prefix-entry entry))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1655 ))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1656 ;; statistics
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1657 (cmpl-statistics-block
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1658 (note-added-completion))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1659 ;; Add it to the symbol
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1660 (set cmpl-db-symbol (car entry))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1661 )))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1662
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1663 (defun delete-completion (string)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1664 "Deletes the completion from the database. string must be longer than
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1665 *completion-prefix-min-length*."
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1666 ;; Handle pending acceptance
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1667 (if completion-to-accept (accept-completion))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1668 (if (setq cmpl-db-entry (find-exact-completion string))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1669 ;; found
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1670 (let* ((prefix-entry (find-cmpl-prefix-entry
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1671 (substring cmpl-db-downcase-string 0
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1672 (read-time-eval
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1673 *completion-prefix-min-length*))))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1674 (splice-ptr (locate-completion-entry cmpl-db-entry prefix-entry))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1675 )
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1676 ;; delete symbol reference
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1677 (set cmpl-db-symbol nil)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1678 ;; remove from prefix list
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1679 (cond (splice-ptr
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1680 ;; not at head
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1681 (or (setcdr splice-ptr (cdr (cdr splice-ptr)))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1682 ;; fix up tail if necessary
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1683 (set-cmpl-prefix-entry-tail prefix-entry splice-ptr))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1684 )
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1685 (t
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1686 ;; at head
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1687 (or (set-cmpl-prefix-entry-head
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1688 prefix-entry (cdr (cmpl-prefix-entry-head prefix-entry)))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1689 ;; List is now empty
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1690 (set cmpl-db-prefix-symbol nil))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1691 ))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1692 (cmpl-statistics-block
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1693 (note-completion-deleted))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1694 )
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1695 (error "Unknown completion: %s. Couldn't delete it." string)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1696 ))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1697
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1698 ;;; Tests --
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1699 ;;; - Add and Find -
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1700 ;;; (add-completion-to-head "banana") --> ("banana" 0 nil 0)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1701 ;;; (find-exact-completion "banana") --> ("banana" 0 nil 0)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1702 ;;; (find-exact-completion "bana") --> nil
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1703 ;;; (car (find-cmpl-prefix-entry "ban")) --> (("banana" ...))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1704 ;;; (cdr (find-cmpl-prefix-entry "ban")) --> (("banana" ...))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1705 ;;; (add-completion-to-head "banish") --> ("banish" 0 nil 0)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1706 ;;; (find-exact-completion "banish") --> ("banish" 0 nil 0)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1707 ;;; (car (find-cmpl-prefix-entry "ban")) --> (("banish" ...) ("banana" ...))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1708 ;;; (cdr (find-cmpl-prefix-entry "ban")) --> (("banana" ...))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1709 ;;; (add-completion-to-head "banana") --> ("banana" 0 nil 0)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1710 ;;; (car (find-cmpl-prefix-entry "ban")) --> (("banana" ...) ("banish" ...))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1711 ;;; (cdr (find-cmpl-prefix-entry "ban")) --> (("banish" ...))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1712 ;;;
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1713 ;;; - Deleting -
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1714 ;;; (add-completion-to-head "banner") --> ("banner" 0 nil 0)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1715 ;;; (delete-completion "banner")
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1716 ;;; (find-exact-completion "banner") --> nil
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1717 ;;; (car (find-cmpl-prefix-entry "ban")) --> (("banana" ...) ("banish" ...))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1718 ;;; (cdr (find-cmpl-prefix-entry "ban")) --> (("banish" ...))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1719 ;;; (add-completion-to-head "banner") --> ("banner" 0 nil 0)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1720 ;;; (delete-completion "banana")
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1721 ;;; (car (find-cmpl-prefix-entry "ban")) --> (("banner" ...) ("banish" ...))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1722 ;;; (cdr (find-cmpl-prefix-entry "ban")) --> (("banish" ...))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1723 ;;; (delete-completion "banner")
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1724 ;;; (delete-completion "banish")
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1725 ;;; (find-cmpl-prefix-entry "ban") --> nil
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1726 ;;; (delete-completion "banner") --> error
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1727 ;;;
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1728 ;;; - Tail -
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1729 ;;; (add-completion-to-tail-if-new "banana") --> ("banana" 0 nil 0)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1730 ;;; (car (find-cmpl-prefix-entry "ban")) --> (("banana" ...))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1731 ;;; (cdr (find-cmpl-prefix-entry "ban")) --> (("banana" ...))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1732 ;;; (add-completion-to-tail-if-new "banish") --> ("banish" 0 nil 0)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1733 ;;; (car (find-cmpl-prefix-entry "ban")) -->(("banana" ...) ("banish" ...))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1734 ;;; (cdr (find-cmpl-prefix-entry "ban")) -->(("banish" ...))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1735 ;;;
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1736
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1737
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1738 ;;;---------------------------------------------------------------------------
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1739 ;;; Database Update :: Interface level routines
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1740 ;;;---------------------------------------------------------------------------
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1741 ;;;
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1742 ;;; These lie on top of the database ref. functions but below the standard
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1743 ;;; user interface level
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1744
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1745
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1746 (defun interactive-completion-string-reader (prompt)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1747 (let* ((default (symbol-under-or-before-point))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1748 (new-prompt
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1749 (if default
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1750 (format "%s: (default: %s) " prompt default)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1751 (format "%s: " prompt))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1752 )
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1753 (read (completing-read new-prompt cmpl-obarray))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1754 )
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1755 (if (zerop (length read)) (setq read (or default "")))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1756 (list read)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1757 ))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1758
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1759 (defun check-completion-length (string)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1760 (if (< (length string) *completion-min-length*)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1761 (error "The string \"%s\" is too short to be saved as a completion."
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1762 string)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1763 (list string)))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1764
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1765 (defun add-completion (string &optional num-uses last-use-time)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1766 "If the string is not there, it is added to the head of the completion list.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1767 Otherwise, it is moved to the head of the list.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1768 The completion is altered appropriately if num-uses and/or last-use-time is
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1769 specified."
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1770 (interactive (interactive-completion-string-reader "Completion to add"))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1771 (check-completion-length string)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1772 (let* ((current-completion-source (if (interactive-p)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1773 cmpl-source-interactive
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1774 current-completion-source))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1775 (entry (add-completion-to-head string)))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1776
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1777 (if num-uses (set-completion-num-uses entry num-uses))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1778 (if last-use-time
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1779 (set-completion-last-use-time entry last-use-time))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1780 ))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1781
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1782 (defun add-permanent-completion (string)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1783 "Adds string if it isn't already there and and makes it a permanent string."
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1784 (interactive
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1785 (interactive-completion-string-reader "Completion to add permanently"))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1786 (let ((current-completion-source (if (interactive-p)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1787 cmpl-source-interactive
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1788 current-completion-source))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1789 )
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1790 (add-completion string nil t)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1791 ))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1792
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1793 (defun kill-completion (string)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1794 (interactive (interactive-completion-string-reader "Completion to kill"))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1795 (check-completion-length string)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1796 (delete-completion string)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1797 )
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1798
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1799 (defun accept-completion ()
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1800 "Accepts the pending completion in completion-to-accept.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1801 This bumps num-uses. Called by add-completion-to-head and
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1802 completion-search-reset."
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1803 (let ((string completion-to-accept)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1804 ;; if this is added afresh here, then it must be a cdabbrev
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1805 (current-completion-source cmpl-source-cdabbrev)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1806 entry
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1807 )
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1808 (setq completion-to-accept nil)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1809 (setq entry (add-completion-to-head string))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1810 (set-completion-num-uses entry (1+ (completion-num-uses entry)))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1811 (setq cmpl-completions-accepted-p t)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1812 ))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1813
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1814 (defun use-completion-under-point ()
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1815 "Call this to add the completion symbol underneath the point into
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1816 the completion buffer."
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1817 (let ((string (and *completep* (symbol-under-point)))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1818 (current-completion-source cmpl-source-cursor-moves))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1819 (if string (add-completion-to-head string))))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1820
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1821 (defun use-completion-before-point ()
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1822 "Call this to add the completion symbol before point into
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1823 the completion buffer."
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1824 (let ((string (and *completep* (symbol-before-point)))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1825 (current-completion-source cmpl-source-cursor-moves))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1826 (if string (add-completion-to-head string))))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1827
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1828 (defun use-completion-under-or-before-point ()
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1829 "Call this to add the completion symbol before point into
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1830 the completion buffer."
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1831 (let ((string (and *completep* (symbol-under-or-before-point)))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1832 (current-completion-source cmpl-source-cursor-moves))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1833 (if string (add-completion-to-head string))))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1834
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1835 (defun use-completion-before-separator ()
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1836 "Call this to add the completion symbol before point into
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1837 the completion buffer. Completions added this way will automatically be
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1838 saved if *separator-character-uses-completion-p* is non-nil."
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1839 (let ((string (and *completep* (symbol-before-point)))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1840 (current-completion-source cmpl-source-separator)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1841 entry)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1842 (cmpl-statistics-block
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1843 (note-separator-character string)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1844 )
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1845 (cond (string
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1846 (setq entry (add-completion-to-head string))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1847 (when (and *separator-character-uses-completion-p*
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1848 (zerop (completion-num-uses entry)))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1849 (set-completion-num-uses entry 1)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1850 (setq cmpl-completions-accepted-p t)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1851 )))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1852 ))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1853
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1854 ;;; Tests --
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1855 ;;; - Add and Find -
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1856 ;;; (add-completion "banana" 5 10)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1857 ;;; (find-exact-completion "banana") --> ("banana" 5 10 0)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1858 ;;; (add-completion "banana" 6)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1859 ;;; (find-exact-completion "banana") --> ("banana" 6 10 0)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1860 ;;; (add-completion "banish")
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1861 ;;; (car (find-cmpl-prefix-entry "ban")) --> (("banish" ...) ("banana" ...))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1862 ;;;
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1863 ;;; - Accepting -
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1864 ;;; (setq completion-to-accept "banana")
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1865 ;;; (accept-completion)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1866 ;;; (find-exact-completion "banana") --> ("banana" 7 10)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1867 ;;; (car (find-cmpl-prefix-entry "ban")) --> (("banana" ...) ("banish" ...))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1868 ;;; (setq completion-to-accept "banish")
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1869 ;;; (add-completion "banner")
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1870 ;;; (car (find-cmpl-prefix-entry "ban"))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1871 ;;; --> (("banner" ...) ("banish" 1 ...) ("banana" 7 ...))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1872 ;;;
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1873 ;;; - Deleting -
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1874 ;;; (kill-completion "banish")
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1875 ;;; (car (find-cmpl-prefix-entry "ban")) --> (("banner" ...) ("banana" ...))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1876
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1877
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1878 ;;;---------------------------------------------------------------------------
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1879 ;;; Searching the database
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1880 ;;;---------------------------------------------------------------------------
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1881 ;;; Functions outside this block must call completion-search-reset followed
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1882 ;;; by calls to completion-search-next or completion-search-peek
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1883 ;;;
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1884
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1885 ;;; Status variables
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1886 ;; Commented out to improve loading speed
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1887 (defvar cmpl-test-string "")
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1888 ;; "The current string used by completion-search-next."
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1889 (defvar cmpl-test-regexp "")
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1890 ;; "The current regexp used by completion-search-next.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1891 ;; (derived from cmpl-test-string)"
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1892 (defvar cmpl-last-index 0)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1893 ;; "The last index that completion-search-next was called with."
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1894 (defvar cmpl-cdabbrev-reset-p nil)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1895 ;; "Set to t when cdabbrevs have been reset."
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1896 (defvar cmpl-next-possibilities nil)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1897 ;; "A pointer to the element BEFORE the next set of possible completions.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1898 ;; cadr of this is the cmpl-next-possibility"
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1899 (defvar cmpl-starting-possibilities nil)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1900 ;; "The initial list of starting possibilities."
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1901 (defvar cmpl-next-possibility nil)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1902 ;; "The cached next possibility."
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1903 (defvar cmpl-tried-list nil)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1904 ;; "A downcased list of all the completions we have tried."
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1905
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1906
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1907 (defun completion-search-reset (string)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1908 "Given a string, sets up the get-completion and completion-search-next functions.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1909 String must be longer than *completion-prefix-min-length*."
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1910 (if completion-to-accept (accept-completion))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1911 (setq cmpl-starting-possibilities
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1912 (cmpl-prefix-entry-head
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1913 (find-cmpl-prefix-entry (downcase (substring string 0 3))))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1914 cmpl-test-string string
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1915 cmpl-test-regexp (concat (regexp-quote string) "."))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1916 (completion-search-reset-1)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1917 )
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1918
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1919 (defun completion-search-reset-1 ()
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1920 (setq cmpl-next-possibilities cmpl-starting-possibilities
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1921 cmpl-next-possibility nil
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1922 cmpl-cdabbrev-reset-p nil
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1923 cmpl-last-index -1
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1924 cmpl-tried-list nil
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1925 ))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1926
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1927 (defun completion-search-next (index)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1928 "Returns the next completion entry. If index is out of sequence it resets
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1929 and starts from the top. If there are no more entries it tries cdabbrev and
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1930 returns only a string."
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1931 (cond
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1932 ((= index (setq cmpl-last-index (1+ cmpl-last-index)))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1933 (completion-search-peek t))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1934 ((minusp index)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1935 (completion-search-reset-1)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1936 (setq cmpl-last-index index)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1937 ;; reverse the possibilities list
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1938 (setq cmpl-next-possibilities (reverse cmpl-starting-possibilities))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1939 ;; do a "normal" search
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1940 (while (and (completion-search-peek nil)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1941 (minusp (setq index (1+ index))))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1942 (setq cmpl-next-possibility nil)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1943 )
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1944 (cond ((not cmpl-next-possibilities))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1945 ;; If no more possibilities, leave it that way
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1946 ((= -1 cmpl-last-index)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1947 ;; next completion is at index 0. reset next-possibility list
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1948 ;; to start at beginning
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1949 (setq cmpl-next-possibilities cmpl-starting-possibilities))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1950 (t
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1951 ;; otherwise point to one before current
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1952 (setq cmpl-next-possibilities
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1953 (nthcdr (- (length cmpl-starting-possibilities)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1954 (length cmpl-next-possibilities))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1955 cmpl-starting-possibilities))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1956 )))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1957 (t
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1958 ;; non-negative index, reset and search
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1959 ;;(prin1 'reset)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1960 (completion-search-reset-1)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1961 (setq cmpl-last-index index)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1962 (while (and (completion-search-peek t)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1963 (not (minusp (setq index (1- index)))))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1964 (setq cmpl-next-possibility nil)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1965 ))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1966 )
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1967 (prog1
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1968 cmpl-next-possibility
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1969 (setq cmpl-next-possibility nil)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1970 ))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1971
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1972
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1973 (defun completion-search-peek (use-cdabbrev)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1974 "Returns the next completion entry without actually moving the pointers.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1975 Calling this again or calling completion-search-next will result in the same
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1976 string being returned. Depends on case-fold-search.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1977 If there are no more entries it tries cdabbrev and then returns only a string."
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1978 (cond
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1979 ;; return the cached value if we have it
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1980 (cmpl-next-possibility)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1981 ((and cmpl-next-possibilities
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1982 ;; still a few possibilities left
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1983 (progn
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1984 (while
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1985 (and (not (eq 0 (string-match cmpl-test-regexp
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1986 (completion-string (car cmpl-next-possibilities)))))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1987 (setq cmpl-next-possibilities (cdr cmpl-next-possibilities))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1988 ))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1989 cmpl-next-possibilities
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1990 ))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1991 ;; successful match
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1992 (setq cmpl-next-possibility (car cmpl-next-possibilities)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1993 cmpl-tried-list (cons (downcase (completion-string cmpl-next-possibility))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1994 cmpl-tried-list)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1995 cmpl-next-possibilities (cdr cmpl-next-possibilities)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1996 )
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1997 cmpl-next-possibility)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1998 (use-cdabbrev
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1999 ;; unsuccessful, use cdabbrev
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2000 (cond ((not cmpl-cdabbrev-reset-p)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2001 (reset-cdabbrev cmpl-test-string cmpl-tried-list)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2002 (setq cmpl-cdabbrev-reset-p t)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2003 ))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2004 (setq cmpl-next-possibility (next-cdabbrev))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2005 )
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2006 ;; Completely unsuccessful, return nil
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2007 ))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2008
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2009 ;;; Tests --
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2010 ;;; - Add and Find -
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2011 ;;; (add-completion "banana")
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2012 ;;; (completion-search-reset "ban")
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2013 ;;; (completion-search-next 0) --> "banana"
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2014 ;;;
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2015 ;;; - Discrimination -
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2016 ;;; (add-completion "cumberland")
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2017 ;;; (add-completion "cumberbund")
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2018 ;;; cumbering
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2019 ;;; (completion-search-reset "cumb")
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2020 ;;; (completion-search-peek t) --> "cumberbund"
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2021 ;;; (completion-search-next 0) --> "cumberbund"
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2022 ;;; (completion-search-peek t) --> "cumberland"
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2023 ;;; (completion-search-next 1) --> "cumberland"
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2024 ;;; (completion-search-peek nil) --> nil
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2025 ;;; (completion-search-next 2) --> "cumbering" {cdabbrev}
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2026 ;;; (completion-search-next 3) --> nil or "cumming"{depends on context}
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2027 ;;; (completion-search-next 1) --> "cumberland"
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2028 ;;; (completion-search-peek t) --> "cumbering" {cdabbrev}
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2029 ;;;
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2030 ;;; - Accepting -
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2031 ;;; (completion-search-next 1) --> "cumberland"
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2032 ;;; (setq completion-to-accept "cumberland")
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2033 ;;; (completion-search-reset "foo")
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2034 ;;; (completion-search-reset "cum")
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2035 ;;; (completion-search-next 0) --> "cumberland"
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2036 ;;;
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2037 ;;; - Deleting -
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2038 ;;; (kill-completion "cumberland")
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2039 ;;; cummings
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2040 ;;; (completion-search-reset "cum")
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2041 ;;; (completion-search-next 0) --> "cumberbund"
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2042 ;;; (completion-search-next 1) --> "cummings"
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2043 ;;;
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2044 ;;; - Ignoring Capitalization -
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2045 ;;; (completion-search-reset "CuMb")
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2046 ;;; (completion-search-next 0) --> "cumberbund"
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2047
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2048
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2049
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2050 ;;;-----------------------------------------------
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2051 ;;; COMPLETE
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2052 ;;;-----------------------------------------------
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2053
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2054 (defun completion-mode ()
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2055 "Toggles whether or not new words are added to the database."
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2056 (interactive)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2057 (setq *completep* (not *completep*))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2058 (message "Completion mode is now %s." (if *completep* "ON" "OFF"))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2059 )
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2060
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2061 (defvar cmpl-current-index 0)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2062 (defvar cmpl-original-string nil)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2063 (defvar cmpl-last-insert-location -1)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2064 (defvar cmpl-leave-point-at-start nil)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2065
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2066 (defun complete (&optional arg)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2067 "Inserts a completion at point.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2068 Point is left at end. Consective calls rotate through all possibilities.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2069 Prefix args ::
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2070 control-u :: leave the point at the beginning of the completion rather
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2071 than at the end.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2072 a number :: rotate through the possible completions by that amount
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2073 `-' :: same as -1 (insert previous completion)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2074 {See the comments at the top of completion.el for more info.}
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2075 "
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2076 (interactive "*p")
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2077 ;;; Set up variables
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2078 (cond ((eq last-command this-command)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2079 ;; Undo last one
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2080 (delete-region cmpl-last-insert-location (point))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2081 ;; get next completion
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2082 (setq cmpl-current-index (+ cmpl-current-index (or arg 1)))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2083 )
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2084 (t
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2085 (if (not cmpl-initialized-p)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2086 (initialize-completions)) ;; make sure everything's loaded
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2087 (cond ((consp current-prefix-arg) ;; control-u
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2088 (setq arg 0)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2089 (setq cmpl-leave-point-at-start t)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2090 )
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2091 (t
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2092 (setq cmpl-leave-point-at-start nil)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2093 ))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2094 ;; get string
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2095 (setq cmpl-original-string (symbol-before-point-for-complete))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2096 (cond ((not cmpl-original-string)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2097 (setq this-command 'failed-complete)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2098 (error "To complete, the point must be after a symbol at least %d character long."
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2099 *completion-prefix-min-length*)))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2100 ;; get index
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2101 (setq cmpl-current-index (if current-prefix-arg arg 0))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2102 ;; statistics
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2103 (cmpl-statistics-block
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2104 (note-complete-entered-afresh cmpl-original-string))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2105 ;; reset database
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2106 (completion-search-reset cmpl-original-string)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2107 ;; erase what we've got
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2108 (delete-region cmpl-symbol-start cmpl-symbol-end)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2109 ))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2110
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2111 ;; point is at the point to insert the new symbol
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2112 ;; Get the next completion
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2113 (let* ((print-status-p
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2114 (and (>= (cmpl19-baud-rate) *print-next-completion-speed-threshold*)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2115 (not (minibuffer-window-selected-p))))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2116 (insert-point (point))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2117 (entry (completion-search-next cmpl-current-index))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2118 string
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2119 )
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2120 ;; entry is either a completion entry or a string (if cdabbrev)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2121
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2122 ;; If found, insert
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2123 (cond (entry
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2124 ;; Setup for proper case
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2125 (setq string (if (stringp entry)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2126 entry (completion-string entry)))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2127 (setq string (cmpl-merge-string-cases
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2128 string cmpl-original-string))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2129 ;; insert
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2130 (insert string)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2131 ;; accept it
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2132 (setq completion-to-accept string)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2133 ;; fixup and cache point
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2134 (cond (cmpl-leave-point-at-start
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2135 (setq cmpl-last-insert-location (point))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2136 (goto-char insert-point))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2137 (t;; point at end,
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2138 (setq cmpl-last-insert-location insert-point))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2139 )
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2140 ;; statistics
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2141 (cmpl-statistics-block
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2142 (note-complete-inserted entry cmpl-current-index))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2143 ;; Done ! cmpl-stat-complete-successful
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2144 ;;display the next completion
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2145 (cond
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2146 ((and print-status-p
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2147 ;; This updates the display and only prints if there
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2148 ;; is no typeahead
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2149 (cmpl19-sit-for 0)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2150 (setq entry
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2151 (completion-search-peek
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2152 *print-next-completion-does-cdabbrev-search-p*)))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2153 (setq string (if (stringp entry)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2154 entry (completion-string entry)))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2155 (setq string (cmpl-merge-string-cases
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2156 string cmpl-original-string))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2157 (message "Next completion: %s" string)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2158 ))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2159 )
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2160 (t;; none found, insert old
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2161 (insert cmpl-original-string)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2162 ;; Don't accept completions
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2163 (setq completion-to-accept nil)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2164 ;; print message
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2165 (if (and print-status-p (cmpl19-sit-for 0))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2166 (message "No %scompletions."
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2167 (if (eq this-command last-command) "more " "")))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2168 ;; statistics
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2169 (cmpl-statistics-block
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2170 (record-complete-failed cmpl-current-index))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2171 ;; Pretend that we were never here
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2172 (setq this-command 'failed-complete)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2173 ))))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2174
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2175 ;;;-----------------------------------------------
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2176 ;;; "Complete" Key Keybindings
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2177 ;;;-----------------------------------------------
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2178
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2179 ;;; Complete key definition
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2180 ;;; These define c-return and meta-return
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2181 ;;; In any case you really want to bind this to a single keystroke
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2182 (if (fboundp 'key-for-others-chord)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2183 (condition-case e
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2184 ;; this can fail if some of the prefix chars. are already used
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2185 ;; as commands (this happens on wyses)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2186 (global-set-key (key-for-others-chord "return" '(control)) 'complete)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2187 (error)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2188 ))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2189 (if (fboundp 'gmacs-keycode)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2190 (global-set-key (gmacs-keycode "return" '(control)) 'complete)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2191 )
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2192 (global-set-key "\M-\r" 'complete)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2193
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2194 ;;; Tests -
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2195 ;;; (add-completion "cumberland")
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2196 ;;; (add-completion "cumberbund")
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2197 ;;; cum
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2198 ;;; Cumber
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2199 ;;; cumbering
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2200 ;;; cumb
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2201
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2202
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2203 ;;;---------------------------------------------------------------------------
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2204 ;;; Parsing definitions from files into the database
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2205 ;;;---------------------------------------------------------------------------
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2206
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2207 ;;;-----------------------------------------------
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2208 ;;; Top Level functions ::
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2209 ;;;-----------------------------------------------
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2210
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2211 ;;; User interface
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2212 (defun add-completions-from-file (file)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2213 "Parses all the definition names from a Lisp mode file and adds them to the
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2214 completion database."
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2215 (interactive "fFile: ")
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2216 (setq file (if (fboundp 'expand-file-name-defaulting)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2217 (expand-file-name-defaulting file)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2218 (expand-file-name file)))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2219 (let* ((buffer (get-file-buffer file))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2220 (buffer-already-there-p buffer)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2221 )
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2222 (when (not buffer-already-there-p)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2223 (let ((*modes-for-completion-find-file-hook* nil))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2224 (setq buffer (find-file-noselect file))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2225 ))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2226 (unwind-protect
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2227 (save-excursion
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2228 (set-buffer buffer)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2229 (add-completions-from-buffer)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2230 )
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2231 (when (not buffer-already-there-p)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2232 (kill-buffer buffer))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2233 )))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2234
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2235 (defun add-completions-from-buffer ()
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2236 (interactive)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2237 (let ((current-completion-source cmpl-source-file-parsing)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2238 (start-num
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2239 (cmpl-statistics-block
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2240 (aref completion-add-count-vector cmpl-source-file-parsing)))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2241 mode
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2242 )
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2243 (cond ((memq major-mode '(emacs-lisp-mode lisp-mode))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2244 (add-completions-from-lisp-buffer)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2245 (setq mode 'lisp)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2246 )
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2247 ((memq major-mode '(c-mode))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2248 (add-completions-from-c-buffer)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2249 (setq mode 'c)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2250 )
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2251 (t
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2252 (error "Do not know how to parse completions in %s buffers."
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2253 major-mode)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2254 ))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2255 (cmpl-statistics-block
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2256 (record-cmpl-parse-file
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2257 mode (point-max)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2258 (- (aref completion-add-count-vector cmpl-source-file-parsing)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2259 start-num)))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2260 ))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2261
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2262 ;;; Find file hook
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2263 (defun cmpl-find-file-hook ()
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2264 (cond (*completep*
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2265 (cond ((and (memq major-mode '(emacs-lisp-mode lisp-mode))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2266 (memq 'lisp *modes-for-completion-find-file-hook*)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2267 )
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2268 (add-completions-from-buffer))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2269 ((and (memq major-mode '(c-mode))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2270 (memq 'c *modes-for-completion-find-file-hook*)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2271 )
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2272 (add-completions-from-buffer)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2273 )))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2274 ))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2275
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2276 (pushnew 'cmpl-find-file-hook find-file-hooks)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2277
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2278 ;;;-----------------------------------------------
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2279 ;;; Tags Table Completions
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2280 ;;;-----------------------------------------------
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2281
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2282 (defun add-completions-from-tags-table ()
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2283 ;; Inspired by eero@media-lab.media.mit.edu
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2284 "Add completions from the current tags-table-buffer."
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2285 (interactive)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2286 (visit-tags-table-buffer) ;this will prompt if no tags-table
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2287 (save-excursion
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2288 (goto-char (point-min))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2289 (let (string)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2290 (condition-case e
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2291 (while t
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2292 (search-forward "\177")
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2293 (backward-char 3)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2294 (and (setq string (symbol-under-point))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2295 (add-completion-to-tail-if-new string))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2296 (forward-char 3)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2297 )
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2298 (search-failed)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2299 ))))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2300
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2301
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2302 ;;;-----------------------------------------------
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2303 ;;; Lisp File completion parsing
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2304 ;;;-----------------------------------------------
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2305 ;;; This merely looks for phrases beginning with (def.... or
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2306 ;;; (package:def ... and takes the next word.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2307 ;;;
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2308 ;;; We tried using forward-lines and explicit searches but the regexp technique
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2309 ;;; was faster. (About 100K characters per second)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2310 ;;;
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2311 (defconst *lisp-def-regexp*
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2312 "\n(\\(\\w*:\\)?def\\(\\w\\|\\s_\\)*\\s +(*"
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2313 "A regexp that searches for lisp definition form."
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2314 )
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2315
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2316 ;;; Tests -
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2317 ;;; (and (string-match *lisp-def-regexp* "\n(defun foo") (match-end 0)) -> 8
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2318 ;;; (and (string-match *lisp-def-regexp* "\n(si:def foo") (match-end 0)) -> 9
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2319 ;;; (and (string-match *lisp-def-regexp* "\n(def-bar foo")(match-end 0)) -> 10
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2320 ;;; (and (string-match *lisp-def-regexp* "\n(defun (foo") (match-end 0)) -> 9
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2321
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2322 (defun add-completions-from-lisp-buffer ()
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2323 "Parses all the definition names from a Lisp mode buffer and adds them to
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2324 the completion database."
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2325 ;;; Benchmarks
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2326 ;;; Sun-3/280 - 1500 to 3000 lines of lisp code per second
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2327 (let (string)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2328 (save-excursion
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2329 (goto-char (point-min))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2330 (condition-case e
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2331 (while t
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2332 (re-search-forward *lisp-def-regexp*)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2333 (and (setq string (symbol-under-point))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2334 (add-completion-to-tail-if-new string))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2335 )
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2336 (search-failed)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2337 ))))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2338
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2339
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2340 ;;;-----------------------------------------------
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2341 ;;; C file completion parsing
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2342 ;;;-----------------------------------------------
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2343 ;;; C :
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2344 ;;; Looks for #define or [<storage class>] [<type>] <name>{,<name>}
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2345 ;;; or structure, array or pointer defs.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2346 ;;; It gets most of the definition names.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2347 ;;;
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2348 ;;; As you might suspect by now, we use some symbol table hackery
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2349 ;;;
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2350 ;;; Symbol separator chars (have whitespace syntax) --> , ; * = (
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2351 ;;; Opening char --> [ {
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2352 ;;; Closing char --> ] }
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2353 ;;; openning and closing must be skipped over
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2354 ;;; Whitespace chars (have symbol syntax)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2355 ;;; Everything else has word syntax
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2356
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2357 (defun make-c-def-completion-syntax-table ()
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2358 (let ((table (make-vector 256 0))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2359 (whitespace-chars '(? ?\n ?\t ?\f ?\v ?\r))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2360 ;; unforunately the ?( causes the parens to appear unbalanced
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2361 (separator-chars '(?, ?* ?= ?\( ?\;
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2362 ))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2363 )
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2364 ;; default syntax is whitespace
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2365 (dotimes (i 256)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2366 (modify-syntax-entry i "w" table))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2367 (dolist (char whitespace-chars)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2368 (modify-syntax-entry char "_" table))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2369 (dolist (char separator-chars)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2370 (modify-syntax-entry char " " table))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2371 (modify-syntax-entry ?\[ "(]" table)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2372 (modify-syntax-entry ?\{ "(}" table)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2373 (modify-syntax-entry ?\] ")[" table)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2374 (modify-syntax-entry ?\} "){" table)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2375 table))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2376
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2377 (defconst cmpl-c-def-syntax-table (make-c-def-completion-syntax-table))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2378
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2379 ;;; Regexps
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2380 (defconst *c-def-regexp*
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2381 ;; This stops on lines with possible definitions
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2382 "\n[_a-zA-Z#]"
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2383 ;; This stops after the symbol to add.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2384 ;;"\n\\(#define\\s +.\\|\\(\\(\\w\\|\\s_\\)+\\b\\s *\\)+[(;,[*{=]\\)"
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2385 ;; This stops before the symbol to add. {Test cases in parens. below}
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2386 ;;"\n\\(\\(\\w\\|\\s_\\)+\\s *(\\|\\(\\(#define\\|auto\\|extern\\|register\\|static\\|int\\|long\\|short\\|unsigned\\|char\\|void\\|float\\|double\\|enum\\|struct\\|union\\|typedef\\)\\s +\\)+\\)"
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2387 ;; this simple version picks up too much extraneous stuff
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2388 ;; "\n\\(\\w\\|\\s_\\|#\\)\\B"
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2389 "A regexp that searches for a definition form."
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2390 )
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2391 ;
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2392 ;(defconst *c-cont-regexp*
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2393 ; "\\(\\w\\|\\s_\\)+\\b\\s *\\({\\|\\(\\[[0-9\t ]*\\]\\s *\\)*,\\(*\\|\\s \\)*\\b\\)"
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2394 ; "This regexp should be used in a looking-at to parse for lists of variables.")
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2395 ;
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2396 ;(defconst *c-struct-regexp*
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2397 ; "\\(*\\|\\s \\)*\\b"
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2398 ; "This regexp should be used to test whether a symbol follows a structure definition.")
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2399
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2400 ;(defun test-c-def-regexp (regexp string)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2401 ; (and (eq 0 (string-match regexp string)) (match-end 0))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2402 ; )
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2403
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2404 ;;; Tests -
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2405 ;;; (test-c-def-regexp *c-def-regexp* "\n#define foo") -> 10 (9)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2406 ;;; (test-c-def-regexp *c-def-regexp* "\nfoo (x, y) {") -> 6 (6)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2407 ;;; (test-c-def-regexp *c-def-regexp* "\nint foo (x, y)") -> 10 (5)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2408 ;;; (test-c-def-regexp *c-def-regexp* "\n int foo (x, y)") -> nil
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2409 ;;; (test-c-def-regexp *c-cont-regexp* "oo, bar") -> 4
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2410 ;;; (test-c-def-regexp *c-cont-regexp* "oo, *bar") -> 5
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2411 ;;; (test-c-def-regexp *c-cont-regexp* "a [5][6], bar") -> 10
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2412 ;;; (test-c-def-regexp *c-cont-regexp* "oo(x,y)") -> nil
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2413 ;;; (test-c-def-regexp *c-cont-regexp* "a [6] ,\t bar") -> 9
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2414 ;;; (test-c-def-regexp *c-cont-regexp* "oo {trout =1} my_carp;") -> 14
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2415 ;;; (test-c-def-regexp *c-cont-regexp* "truct_p complex foon") -> nil
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2416
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2417 (defun add-completions-from-c-buffer ()
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2418 "Parses all the definition names from a C mode buffer and adds them to the
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2419 completion database."
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2420 ;; Benchmark --
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2421 ;; Sun 3/280-- 1250 lines/sec.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2422
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2423 (let (string next-point char
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2424 (saved-syntax (syntax-table))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2425 )
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2426 (save-excursion
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2427 (goto-char (point-min))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2428 (catch 'finish-add-completions
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2429 (unwind-protect
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2430 (while t
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2431 ;; we loop here only when scan-sexps fails
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2432 ;; (i.e. unbalance exps.)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2433 (set-syntax-table cmpl-c-def-syntax-table)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2434 (condition-case e
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2435 (while t
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2436 (re-search-forward *c-def-regexp*)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2437 (cond
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2438 ((= (preceding-char) ?#)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2439 ;; preprocessor macro, see if it's one we handle
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2440 (setq string (buffer-substring (point) (+ (point) 6)))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2441 (cond ((or (string-equal string "define")
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2442 (string-equal string "ifdef ")
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2443 )
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2444 ;; skip forward over definition symbol
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2445 ;; and add it to database
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2446 (and (forward-word 2)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2447 (setq string (symbol-before-point))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2448 ;;(push string foo)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2449 (add-completion-to-tail-if-new string)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2450 ))))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2451 (t
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2452 ;; C definition
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2453 (setq next-point (point))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2454 (while (and
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2455 next-point
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2456 ;; scan to next separator char.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2457 (setq next-point (scan-sexps next-point 1))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2458 )
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2459 ;; position the point on the word we want to add
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2460 (goto-char next-point)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2461 (while (= (setq char (following-char)) ?*)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2462 ;; handle pointer ref
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2463 ;; move to next separator char.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2464 (goto-char
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2465 (setq next-point (scan-sexps (point) 1)))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2466 )
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2467 (forward-word -1)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2468 ;; add to database
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2469 (if (setq string (symbol-under-point))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2470 ;; (push string foo)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2471 (add-completion-to-tail-if-new string)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2472 ;; Local TMC hack (useful for parsing paris.h)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2473 (if (and (looking-at "_AP") ;; "ansi prototype"
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2474 (progn
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2475 (forward-word -1)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2476 (setq string
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2477 (symbol-under-point))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2478 ))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2479 (add-completion-to-tail-if-new string)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2480 )
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2481 )
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2482 ;; go to next
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2483 (goto-char next-point)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2484 ;; (push (format "%c" (following-char)) foo)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2485 (if (= (char-syntax char) ?\()
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2486 ;; if on an opening delimiter, go to end
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2487 (while (= (char-syntax char) ?\()
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2488 (setq next-point (scan-sexps next-point 1)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2489 char (char-after next-point))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2490 )
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2491 (or (= char ?,)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2492 ;; Current char is an end char.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2493 (setq next-point nil)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2494 ))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2495 ))))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2496 (search-failed ;;done
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2497 (throw 'finish-add-completions t)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2498 )
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2499 (error
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2500 ;; Check for failure in scan-sexps
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2501 (if (or (string-equal (second e)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2502 "Containing expression ends prematurely")
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2503 (string-equal (second e) "Unbalanced parentheses"))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2504 ;; unbalanced paren., keep going
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2505 ;;(ding)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2506 (forward-line 1)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2507 (message "Error parsing C buffer for completions. Please bug report.")
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2508 (throw 'finish-add-completions t)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2509 ))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2510 ))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2511 (set-syntax-table saved-syntax)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2512 )))))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2513
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2514
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2515 ;;;---------------------------------------------------------------------------
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2516 ;;; Init files
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2517 ;;;---------------------------------------------------------------------------
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2518
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2519 (defun kill-emacs-save-completions ()
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2520 "The version of save-completions-to-file called at kill-emacs
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2521 time."
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2522 (when (and *save-completions-p* *completep* cmpl-initialized-p)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2523 (cond
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2524 ((not cmpl-completions-accepted-p)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2525 (message "Completions database has not changed - not writing."))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2526 (t
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2527 (save-completions-to-file)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2528 ))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2529 ))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2530
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2531 (defconst saved-cmpl-file-header
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2532 ";;; Completion Initialization file.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2533 ;;; Version = %s
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2534 ;;; Format is (<string> . <last-use-time>)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2535 ;;; <string> is the completion
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2536 ;;; <last-use-time> is the time the completion was last used
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2537 ;;; If it is t, the completion will never be pruned from the file.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2538 ;;; Otherwise it is in hours since 1900.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2539 \n")
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2540
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2541 (defun completion-backup-filename (filename)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2542 (concat filename ".BAK"))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2543
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2544 (defun save-completions-to-file (&optional filename)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2545 "Saves a completion init file. If file is not specified,
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2546 then *saved-completions-filename* is used."
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2547 (interactive)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2548 (setq filename (expand-file-name (or filename *saved-completions-filename*)))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2549 (when (file-writable-p filename)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2550 (if (not cmpl-initialized-p)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2551 (initialize-completions));; make sure everything's loaded
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2552 (message "Saving completions to file %s" filename)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2553
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2554 (let* ((trim-versions-without-asking t)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2555 (kept-old-versions 0)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2556 (kept-new-versions *completion-file-versions-kept*)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2557 last-use-time
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2558 (current-time (cmpl-hours-since-1900))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2559 (total-in-db 0)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2560 (total-perm 0)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2561 (total-saved 0)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2562 (backup-filename (completion-backup-filename filename))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2563 )
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2564
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2565 (save-excursion
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2566 (get-buffer-create " *completion-save-buffer*")
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2567 (set-buffer " *completion-save-buffer*")
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2568 (setq buffer-file-name filename)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2569
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2570 (when (not (verify-visited-file-modtime (current-buffer)))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2571 ;; file has changed on disk. Bring us up-to-date
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2572 (message "Completion file has changed. Merging. . .")
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2573 (load-completions-from-file filename t)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2574 (message "Merging finished. Saving completions to file %s" filename)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2575 )
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2576
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2577 ;; prepare the buffer to be modified
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2578 (clear-visited-file-modtime)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2579 (erase-buffer)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2580 ;; (/ 1 0)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2581 (insert (format saved-cmpl-file-header *completion-version*))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2582 (dolist (completion (list-all-completions))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2583 (setq total-in-db (1+ total-in-db))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2584 (setq last-use-time (completion-last-use-time completion))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2585 ;; Update num uses and maybe write completion to a file
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2586 (cond ((or;; Write to file if
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2587 ;; permanent
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2588 (and (eq last-use-time t)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2589 (setq total-perm (1+ total-perm)))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2590 ;; or if
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2591 (if (plusp (completion-num-uses completion))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2592 ;; it's been used
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2593 (setq last-use-time current-time)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2594 ;; or it was saved before and
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2595 (and last-use-time
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2596 ;; *saved-completion-retention-time* is nil
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2597 (or (not *saved-completion-retention-time*)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2598 ;; or time since last use is < ...retention-time*
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2599 (< (- current-time last-use-time)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2600 *saved-completion-retention-time*))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2601 )))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2602 ;; write to file
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2603 (setq total-saved (1+ total-saved))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2604 (insert (prin1-to-string (cons (completion-string completion)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2605 last-use-time)) "\n")
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2606 )))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2607
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2608 ;; write the buffer
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2609 (condition-case e
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2610 (let ((file-exists-p (file-exists-p filename)))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2611 (when file-exists-p
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2612 ;; If file exists . . .
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2613 ;; Save a backup(so GNU doesn't screw us when we're out of disk)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2614 ;; (GNU leaves a 0 length file if it gets a disk full error!)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2615
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2616 ;; If backup doesn't exit, Rename current to backup
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2617 ;; {If backup exists the primary file is probably messed up}
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2618 (unless (file-exists-p backup-filename)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2619 (rename-file filename backup-filename))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2620 ;; Copy the backup back to the current name
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2621 ;; (so versioning works)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2622 (copy-file backup-filename filename t)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2623 )
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2624 ;; Save it
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2625 (save-buffer)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2626 (when file-exists-p
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2627 ;; If successful, remove backup
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2628 (delete-file backup-filename)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2629 ))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2630 (error
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2631 (set-buffer-modified-p nil)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2632 (message "Couldn't save completion file %s." filename)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2633 ))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2634 ;; Reset accepted-p flag
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2635 (setq cmpl-completions-accepted-p nil)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2636 )
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2637 (cmpl-statistics-block
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2638 (record-save-completions total-in-db total-perm total-saved))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2639 )))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2640
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2641 (defun autosave-completions ()
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2642 (when (and *save-completions-p* *completep* cmpl-initialized-p
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2643 *completion-auto-save-period*
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2644 (> cmpl-emacs-idle-time *completion-auto-save-period*)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2645 cmpl-completions-accepted-p)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2646 (save-completions-to-file)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2647 ))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2648
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2649 (pushnew 'autosave-completions cmpl-emacs-idle-time-hooks)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2650
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2651 (defun load-completions-from-file (&optional filename no-message-p)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2652 "loads a completion init file. If file is not specified,
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2653 then *saved-completions-filename* is used"
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2654 (interactive)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2655 (setq filename (expand-file-name (or filename *saved-completions-filename*)))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2656 (let* ((backup-filename (completion-backup-filename filename))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2657 (backup-readable-p (file-readable-p backup-filename))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2658 )
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2659 (when backup-readable-p (setq filename backup-filename))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2660 (when (file-readable-p filename)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2661 (if (not no-message-p)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2662 (message "Loading completions from %sfile %s . . ."
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2663 (if backup-readable-p "backup " "") filename))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2664 (save-excursion
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2665 (get-buffer-create " *completion-save-buffer*")
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2666 (set-buffer " *completion-save-buffer*")
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2667 (setq buffer-file-name filename)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2668 ;; prepare the buffer to be modified
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2669 (clear-visited-file-modtime)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2670 (erase-buffer)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2671
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2672 (let ((insert-okay-p nil)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2673 (buffer (current-buffer))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2674 (current-time (cmpl-hours-since-1900))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2675 string num-uses entry last-use-time
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2676 cmpl-entry cmpl-last-use-time
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2677 (current-completion-source cmpl-source-init-file)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2678 (start-num
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2679 (cmpl-statistics-block
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2680 (aref completion-add-count-vector cmpl-source-file-parsing)))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2681 (total-in-file 0) (total-perm 0)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2682 )
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2683 ;; insert the file into a buffer
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2684 (condition-case e
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2685 (progn (insert-file-contents filename t)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2686 (setq insert-okay-p t))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2687
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2688 (file-error
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2689 (message "File error trying to load completion file %s."
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2690 filename)))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2691 ;; parse it
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2692 (when insert-okay-p
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2693 (goto-char (point-min))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2694
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2695 (condition-case e
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2696 (while t
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2697 (setq entry (read buffer))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2698 (setq total-in-file (1+ total-in-file))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2699 (cond
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2700 ((and (consp entry)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2701 (stringp (setq string (car entry)))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2702 (cond
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2703 ((eq (setq last-use-time (cdr entry)) 'T)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2704 ;; handle case sensitivity
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2705 (setq total-perm (1+ total-perm))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2706 (setq last-use-time t))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2707 ((eq last-use-time t)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2708 (setq total-perm (1+ total-perm)))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2709 ((integerp last-use-time))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2710 ))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2711 ;; Valid entry
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2712 ;; add it in
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2713 (setq cmpl-last-use-time
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2714 (completion-last-use-time
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2715 (setq cmpl-entry
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2716 (add-completion-to-tail-if-new string))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2717 ))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2718 (if (or (eq last-use-time t)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2719 (and (> last-use-time 1000);;backcompatibility
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2720 (not (eq cmpl-last-use-time t))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2721 (or (not cmpl-last-use-time)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2722 ;; more recent
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2723 (> last-use-time cmpl-last-use-time))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2724 ))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2725 ;; update last-use-time
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2726 (set-completion-last-use-time cmpl-entry last-use-time)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2727 ))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2728 (t
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2729 ;; Bad format
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2730 (message "Error: invalid saved completion - %s"
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2731 (prin1-to-string entry))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2732 ;; try to get back in sync
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2733 (search-forward "\n(")
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2734 )))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2735 (search-failed
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2736 (message "End of file while reading completions.")
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2737 )
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2738 (end-of-file
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2739 (if (= (point) (point-max))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2740 (if (not no-message-p)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2741 (message "Loading completions from file %s . . . Done."
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2742 filename))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2743 (message "End of file while reading completions.")
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2744 ))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2745 ))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2746
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2747 (cmpl-statistics-block
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2748 (record-load-completions
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2749 total-in-file total-perm
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2750 (- (aref completion-add-count-vector cmpl-source-init-file)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2751 start-num)))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2752
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2753 )))))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2754
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2755 (defun initialize-completions ()
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2756 "Loads the default completions file and sets up so that exiting emacs will
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2757 automatically save the file."
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2758 (interactive)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2759 (cond ((not cmpl-initialized-p)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2760 (load-completions-from-file)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2761 ))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2762 (init-cmpl-emacs-idle-process)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2763 (setq cmpl-initialized-p t)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2764 )
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2765
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2766
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2767 ;;;-----------------------------------------------
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2768 ;;; Kill EMACS patch
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2769 ;;;-----------------------------------------------
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2770
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2771 (completion-advise kill-emacs :before
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2772 ;; | All completion code should go in here
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2773 ;;\ /
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2774 (kill-emacs-save-completions)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2775 ;;/ \
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2776 ;; | All completion code should go in here
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2777 (cmpl-statistics-block
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2778 (record-cmpl-kill-emacs))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2779 )
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2780
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2781
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2782 ;;;-----------------------------------------------
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2783 ;;; Kill region patch
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2784 ;;;-----------------------------------------------
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2785
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2786 ;;; Patched to remove the most recent completion
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2787 (defvar $$$cmpl-old-kill-region (symbol-function 'kill-region))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2788
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2789 (defun kill-region (&optional beg end)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2790 "Kill between point and mark.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2791 The text is deleted but saved in the kill ring.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2792 The command \\[yank] can retrieve it from there.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2793 /(If you want to kill and then yank immediately, use \\[copy-region-as-kill].)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2794
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2795 This is the primitive for programs to kill text (as opposed to deleting it).
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2796 Supply two arguments, character numbers indicating the stretch of text
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2797 to be killed.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2798 Any command that calls this function is a \"kill command\".
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2799 If the previous command was also a kill command,
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2800 the text killed this time appends to the text killed last time
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2801 to make one entry in the kill ring.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2802 Patched to remove the most recent completion."
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2803 (interactive "*")
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2804 (cond ((and (eq last-command 'complete) (eq last-command-char ?\C-w))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2805 (delete-region (point) cmpl-last-insert-location)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2806 (insert cmpl-original-string)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2807 (setq completion-to-accept nil)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2808 (cmpl-statistics-block
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2809 (record-complete-failed))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2810 )
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2811 (t
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2812 (if (not beg)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2813 (setq beg (min (point) (mark))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2814 end (max (point) (mark)))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2815 )
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2816 (funcall $$$cmpl-old-kill-region beg end)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2817 )))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2818
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2819 ;;;-----------------------------------------------
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2820 ;;; Patches to self-insert-command.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2821 ;;;-----------------------------------------------
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2822
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2823 ;;; Need 2 versions: generic seperator chars. and space (to get auto fill
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2824 ;;; to work)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2825
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2826 ;;; All common separators (eg. space "(" ")" """) characters go through a
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2827 ;;; function to add new words to the list of words to complete from:
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2828 ;;; COMPLETION-SEPARATOR-SELF-INSERT-COMMAND (arg).
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2829 ;;; If the character before this was an alpha-numeric then this adds the
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2830 ;;; symbol befoe point to the completion list (using ADD-COMPLETION).
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2831
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2832 (defun completion-separator-self-insert-command (arg)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2833 (interactive "p")
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2834 (use-completion-before-separator)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2835 (self-insert-command arg)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2836 )
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2837
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2838 (defun completion-separator-self-insert-autofilling (arg)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2839 (interactive "p")
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2840 (use-completion-before-separator)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2841 (self-insert-command arg)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2842 (and (> (current-column) fill-column)
732
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 662
diff changeset
2843 auto-fill-function
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 662
diff changeset
2844 (funcall auto-fill-function))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2845 )
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2846
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2847 ;;;-----------------------------------------------
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2848 ;;; Wrapping Macro
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2849 ;;;-----------------------------------------------
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2850
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2851 ;;; Note that because of the way byte compiling works, none of
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2852 ;;; the functions defined with this macro get byte compiled.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2853
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2854 (defmacro def-completion-wrapper (function-name type &optional new-name)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2855 "Add a call to update the completion database before the function is
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2856 executed. TYPE is the type of the wrapper to be added. Can be :before or
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2857 :under."
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2858 (completion-advise-1
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2859 function-name ':before
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2860 (ecase type
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2861 (:before '((use-completion-before-point)))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2862 (:separator '((use-completion-before-separator)))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2863 (:under '((use-completion-under-point)))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2864 (:under-or-before
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2865 '((use-completion-under-or-before-point)))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2866 (:minibuffer-separator
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2867 '((let ((cmpl-syntax-table cmpl-standard-syntax-table))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2868 (use-completion-before-separator))))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2869 )
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2870 new-name
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2871 ))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2872
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2873 ;;;(defun foo (x y z) (+ x y z))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2874 ;;;foo
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2875 ;;;(macroexpand '(def-completion-wrapper foo :under))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2876 ;;;(progn (defvar $$$cmpl-foo (symbol-function (quote foo))) (defun foo (&rest arglist) (progn (use-completion-under-point)) (cmpl-apply-as-top-level $$$cmpl-foo arglist)))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2877 ;;;(defun bar (x y z) "Documentation" (+ x y z))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2878 ;;;bar
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2879 ;;;(macroexpand '(def-completion-wrapper bar :under))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2880 ;;;(progn (defvar $$$cmpl-bar (symbol-function (quote bar))) (defun bar (&rest arglist) "Documentation" (progn (use-completion-under-point)) (cmpl-apply-as-top-level $$$cmpl-bar arglist)))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2881 ;;;(defun quuz (x &optional y z) "Documentation" (interactive "P") (+ x y z))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2882 ;;;quuz
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2883 ;;;(macroexpand '(def-completion-wrapper quuz :before))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2884 ;;;(progn (defvar $$$cmpl-quuz (symbol-function (quote quuz))) (defun quuz (&rest arglist) "Documentation" (interactive) (progn (use-completion-before-point)) (cmpl-apply-as-top-level $$$cmpl-quuz arglist)))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2885
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2886
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2887 ;;;---------------------------------------------------------------------------
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2888 ;;; Patches to standard keymaps insert completions
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2889 ;;;---------------------------------------------------------------------------
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2890
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2891 ;;;-----------------------------------------------
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2892 ;;; Separators
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2893 ;;;-----------------------------------------------
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2894 ;;; We've used the completion syntax table given as a guide.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2895 ;;;
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2896 ;;; Global separator chars.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2897 ;;; We left out <tab> because there are too many special cases for it. Also,
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2898 ;;; in normal coding it's rarely typed after a word.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2899 (global-set-key " " 'completion-separator-self-insert-autofilling)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2900 (global-set-key "!" 'completion-separator-self-insert-command)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2901 (global-set-key "%" 'completion-separator-self-insert-command)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2902 (global-set-key "^" 'completion-separator-self-insert-command)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2903 (global-set-key "&" 'completion-separator-self-insert-command)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2904 (global-set-key "(" 'completion-separator-self-insert-command)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2905 (global-set-key ")" 'completion-separator-self-insert-command)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2906 (global-set-key "=" 'completion-separator-self-insert-command)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2907 (global-set-key "`" 'completion-separator-self-insert-command)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2908 (global-set-key "|" 'completion-separator-self-insert-command)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2909 (global-set-key "{" 'completion-separator-self-insert-command)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2910 (global-set-key "}" 'completion-separator-self-insert-command)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2911 (global-set-key "[" 'completion-separator-self-insert-command)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2912 (global-set-key "]" 'completion-separator-self-insert-command)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2913 (global-set-key ";" 'completion-separator-self-insert-command)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2914 (global-set-key "\"" 'completion-separator-self-insert-command)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2915 (global-set-key "'" 'completion-separator-self-insert-command)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2916 (global-set-key "#" 'completion-separator-self-insert-command)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2917 (global-set-key "," 'completion-separator-self-insert-command)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2918 (global-set-key "?" 'completion-separator-self-insert-command)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2919
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2920 ;;; We include period and colon even though they are symbol chars because :
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2921 ;;; - in text we want to pick up the last word in a sentence.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2922 ;;; - in C pointer refs. we want to pick up the first symbol
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2923 ;;; - it won't make a difference for lisp mode (package names are short)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2924 (global-set-key "." 'completion-separator-self-insert-command)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2925 (global-set-key ":" 'completion-separator-self-insert-command)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2926
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2927 ;;; Lisp Mode diffs
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2928 (define-key lisp-mode-map "!" 'self-insert-command)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2929 (define-key lisp-mode-map "&" 'self-insert-command)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2930 (define-key lisp-mode-map "%" 'self-insert-command)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2931 (define-key lisp-mode-map "?" 'self-insert-command)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2932 (define-key lisp-mode-map "=" 'self-insert-command)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2933 (define-key lisp-mode-map "^" 'self-insert-command)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2934
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2935 ;;; C mode diffs.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2936 (def-completion-wrapper electric-c-semi :separator)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2937 (define-key c-mode-map "+" 'completion-separator-self-insert-command)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2938 (define-key c-mode-map "*" 'completion-separator-self-insert-command)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2939 (define-key c-mode-map "/" 'completion-separator-self-insert-command)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2940
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2941 ;;; FORTRAN mode diffs. (these are defined when fortran is called)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2942 (defun completion-setup-fortran-mode ()
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2943 (define-key fortran-mode-map "+" 'completion-separator-self-insert-command)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2944 (define-key fortran-mode-map "-" 'completion-separator-self-insert-command)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2945 (define-key fortran-mode-map "*" 'completion-separator-self-insert-command)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2946 (define-key fortran-mode-map "/" 'completion-separator-self-insert-command)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2947 )
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2948
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2949 ;;;-----------------------------------------------
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2950 ;;; End of line chars.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2951 ;;;-----------------------------------------------
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2952 (def-completion-wrapper newline :separator)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2953 (def-completion-wrapper newline-and-indent :separator)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2954 (if (function-defined-and-loaded 'shell-send-input)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2955 (def-completion-wrapper shell-send-input :separator))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2956 (def-completion-wrapper exit-minibuffer :minibuffer-separator)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2957 (def-completion-wrapper eval-print-last-sexp :separator)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2958 (def-completion-wrapper eval-last-sexp :separator)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2959 ;;(def-completion-wrapper minibuffer-complete-and-exit :minibuffer)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2960
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2961 ;;;-----------------------------------------------
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2962 ;;; Cursor movement
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2963 ;;;-----------------------------------------------
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2964
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2965 (def-completion-wrapper next-line :under-or-before)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2966 (def-completion-wrapper previous-line :under-or-before)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2967 (def-completion-wrapper beginning-of-buffer :under-or-before)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2968 (def-completion-wrapper end-of-buffer :under-or-before)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2969
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2970 ;; we patch these explicitly so they byte compile and so we don't have to
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2971 ;; patch the faster underlying function.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2972
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2973 (defun cmpl-beginning-of-line (&optional n)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2974 "Move point to beginning of current line.\n\
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2975 With argument ARG not nil or 1, move forward ARG - 1 lines first.\n\
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2976 If scan reaches end of buffer, stop there without error."
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2977 (interactive "p")
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2978 (use-completion-under-or-before-point)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2979 (beginning-of-line n)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2980 )
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2981
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2982 (defun cmpl-end-of-line (&optional n)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2983 "Move point to end of current line.\n\
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2984 With argument ARG not nil or 1, move forward ARG - 1 lines first.\n\
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2985 If scan reaches end of buffer, stop there without error."
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2986 (interactive "p")
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2987 (use-completion-under-or-before-point)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2988 (end-of-line n)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2989 )
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2990
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2991 (defun cmpl-forward-char (n)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2992 "Move point right ARG characters (left if ARG negative).\n\
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2993 On reaching end of buffer, stop and signal error."
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2994 (interactive "p")
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2995 (use-completion-under-or-before-point)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2996 (forward-char n)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2997 )
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2998 (defun cmpl-backward-char (n)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2999 "Move point left ARG characters (right if ARG negative).\n\
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3000 On attempt to pass beginning or end of buffer, stop and signal error."
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3001 (interactive "p")
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3002 (use-completion-under-point)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3003 (if (eq last-command 'complete)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3004 ;; probably a failed completion if you have to back up
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3005 (cmpl-statistics-block (record-complete-failed)))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3006 (backward-char n)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3007 )
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3008
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3009 (defun cmpl-forward-word (n)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3010 "Move point forward ARG words (backward if ARG is negative).\n\
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3011 Normally returns t.\n\
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3012 If an edge of the buffer is reached, point is left there\n\
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3013 and nil is returned."
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3014 (interactive "p")
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3015 (use-completion-under-or-before-point)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3016 (forward-word n)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3017 )
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3018 (defun cmpl-backward-word (n)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3019 "Move backward until encountering the end of a word.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3020 With argument, do this that many times.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3021 In programs, it is faster to call forward-word with negative arg."
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3022 (interactive "p")
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3023 (use-completion-under-point)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3024 (if (eq last-command 'complete)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3025 ;; probably a failed completion if you have to back up
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3026 (cmpl-statistics-block (record-complete-failed)))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3027 (forward-word (- n))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3028 )
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3029
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3030 (defun cmpl-forward-sexp (n)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3031 "Move forward across one balanced expression.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3032 With argument, do this that many times."
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3033 (interactive "p")
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3034 (use-completion-under-or-before-point)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3035 (forward-sexp n)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3036 )
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3037 (defun cmpl-backward-sexp (n)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3038 "Move backward across one balanced expression.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3039 With argument, do this that many times."
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3040 (interactive "p")
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3041 (use-completion-under-point)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3042 (if (eq last-command 'complete)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3043 ;; probably a failed completion if you have to back up
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3044 (cmpl-statistics-block (record-complete-failed)))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3045 (backward-sexp n)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3046 )
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3047
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3048 (defun cmpl-delete-backward-char (n killflag)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3049 "Delete the previous ARG characters (following, with negative ARG).\n\
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3050 Optional second arg KILLFLAG non-nil means kill instead (save in kill ring).\n\
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3051 Interactively, ARG is the prefix arg, and KILLFLAG is set if\n\
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3052 ARG was explicitly specified."
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3053 (interactive "p\nP")
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3054 (if (eq last-command 'complete)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3055 ;; probably a failed completion if you have to back up
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3056 (cmpl-statistics-block (record-complete-failed)))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3057 (delete-backward-char n killflag)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3058 )
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3059
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3060 (defvar $$$cmpl-old-backward-delete-char-untabify
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3061 (symbol-function 'backward-delete-char-untabify))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3062
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3063 (defun backward-delete-char-untabify (arg &optional killp)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3064 "Delete characters backward, changing tabs into spaces.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3065 Delete ARG chars, and kill (save in kill ring) if KILLP is non-nil.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3066 Interactively, ARG is the prefix arg (default 1)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3067 and KILLP is t if prefix arg is was specified."
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3068 (interactive "*p\nP")
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3069 (if (eq last-command 'complete)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3070 ;; probably a failed completion if you have to back up
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3071 (cmpl-statistics-block (record-complete-failed)))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3072 (funcall $$$cmpl-old-backward-delete-char-untabify arg killp)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3073 )
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3074
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3075
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3076 (global-set-key "\C-?" 'cmpl-delete-backward-char)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3077 (global-set-key "\M-\C-F" 'cmpl-forward-sexp)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3078 (global-set-key "\M-\C-B" 'cmpl-backward-sexp)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3079 (global-set-key "\M-F" 'cmpl-forward-word)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3080 (global-set-key "\M-B" 'cmpl-backward-word)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3081 (global-set-key "\C-F" 'cmpl-forward-char)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3082 (global-set-key "\C-B" 'cmpl-backward-char)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3083 (global-set-key "\C-A" 'cmpl-beginning-of-line)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3084 (global-set-key "\C-E" 'cmpl-end-of-line)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3085
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3086 ;;;-----------------------------------------------
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3087 ;;; Misc.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3088 ;;;-----------------------------------------------
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3089
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3090 (def-completion-wrapper electric-buffer-list :under-or-before)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3091 (def-completion-wrapper list-buffers :under-or-before)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3092 (def-completion-wrapper scroll-up :under-or-before)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3093 (def-completion-wrapper scroll-down :under-or-before)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3094 (def-completion-wrapper execute-extended-command
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3095 :under-or-before)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3096 (def-completion-wrapper other-window :under-or-before)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3097
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3098 ;;;-----------------------------------------------
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3099 ;;; Local Thinking Machines stuff
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3100 ;;;-----------------------------------------------
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3101
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3102 (if (fboundp 'up-ten-lines)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3103 (def-completion-wrapper up-ten-lines :under-or-before))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3104 (if (fboundp 'down-ten-lines)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3105 (def-completion-wrapper down-ten-lines :under-or-before))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3106 (if (fboundp 'tmc-scroll-up)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3107 (def-completion-wrapper tmc-scroll-up :under-or-before))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3108 (if (fboundp 'tmc-scroll-down)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3109 (def-completion-wrapper tmc-scroll-down :under-or-before))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3110 (if (fboundp 'execute-extended-command-and-check-for-bindings)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3111 (def-completion-wrapper execute-extended-command-and-check-for-bindings
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3112 :under-or-before))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3113
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3114 ;;; Tests --
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3115 ;;; foobarbiz
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3116 ;;; foobar
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3117 ;;; fooquux
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3118 ;;; fooper
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3119
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3120 (cmpl-statistics-block
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3121 (record-completion-file-loaded))
662
8a533acedb77 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 190
diff changeset
3122
8a533acedb77 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 190
diff changeset
3123 ;;; completion.el ends here