annotate lisp/completion.el @ 2921:37503f466755

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