annotate lisp/completion.el @ 39625:e441240482b2

(add-change-log-entry): Skip copyright notice and copying permission notice at start of file, if any. Make use of terms "entry" and "item" accord with Emacs manual. Simplify the logic for moving point while entering or creating an entry and then an item. (add-change-log-entry-other-window): Doc fix.
author Richard M. Stallman <rms@gnu.org>
date Sat, 06 Oct 2001 02:32:54 +0000
parents 253f761ad37b
children 7308bbc423d5
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
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
2
17436
2a9fdbfcb993 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 15774
diff changeset
3 ;; Copyright (C) 1990, 1993, 1995, 1997 Free Software Foundation, Inc.
662
8a533acedb77 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 190
diff changeset
4
3846
8808695cc15b Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 3739
diff changeset
5 ;; Maintainer: FSF
22250
a77d473867b8 *** empty log message ***
Dan Nicolaescu <done@ece.arizona.edu>
parents: 19894
diff changeset
6 ;; Keywords: abbrev convenience
13636
a120308bfe29 (cmpl-make-standard-completion-syntax-table)
Richard M. Stallman <rms@gnu.org>
parents: 11431
diff changeset
7 ;; Author: Jim Salem <alem@bbnplanet.com> of Thinking Machines Inc.
11295
2bb1a6595c14 Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 10639
diff changeset
8 ;; (ideas suggested by Brewster Kahle)
4434
265397236749 (completion-version): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 4218
diff changeset
9
265397236749 (completion-version): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 4218
diff changeset
10 ;; This file is part of GNU Emacs.
265397236749 (completion-version): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 4218
diff changeset
11
265397236749 (completion-version): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 4218
diff changeset
12 ;; GNU Emacs is free software; you can redistribute it and/or modify
265397236749 (completion-version): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 4218
diff changeset
13 ;; it under the terms of the GNU General Public License as published by
265397236749 (completion-version): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 4218
diff changeset
14 ;; the Free Software Foundation; either version 2, or (at your option)
265397236749 (completion-version): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 4218
diff changeset
15 ;; any later version.
265397236749 (completion-version): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 4218
diff changeset
16
265397236749 (completion-version): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 4218
diff changeset
17 ;; GNU Emacs is distributed in the hope that it will be useful,
265397236749 (completion-version): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 4218
diff changeset
18 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
265397236749 (completion-version): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 4218
diff changeset
19 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
265397236749 (completion-version): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 4218
diff changeset
20 ;; GNU General Public License for more details.
265397236749 (completion-version): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 4218
diff changeset
21
265397236749 (completion-version): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 4218
diff changeset
22 ;; You should have received a copy of the GNU General Public License
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
23 ;; along with GNU Emacs; see the file COPYING. If not, write to the
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
24 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
25 ;; Boston, MA 02111-1307, USA.
795
c693d56ef36d *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 732
diff changeset
26
c693d56ef36d *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 732
diff changeset
27 ;;; Commentary:
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
28
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
29 ;; What to put in .emacs
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
30 ;;-----------------------
23605
527b3c7d0b5b (dynamic-completion-mode): New function to enable
Richard M. Stallman <rms@gnu.org>
parents: 23382
diff changeset
31 ;; (dynamic-completion-mode)
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
32
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
33 ;;---------------------------------------------------------------------------
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
34 ;; Documentation [Slightly out of date]
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
35 ;;---------------------------------------------------------------------------
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
36 ;; (also check the documentation string of the functions)
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
37 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
38 ;; Introduction
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
39 ;;---------------
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
40 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
41 ;; After you type a few characters, pressing the "complete" key inserts
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
42 ;; the rest of the word you are likely to type.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
43 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
44 ;; This watches all the words that you type and remembers them. When
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
45 ;; typing a new word, pressing "complete" (meta-return) "completes" the
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
46 ;; word by inserting the most recently used word that begins with the
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
47 ;; same characters. If you press meta-return repeatedly, it cycles
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
48 ;; through all the words it knows about.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
49 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
50 ;; If you like the completion then just continue typing, it is as if you
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
51 ;; entered the text by hand. If you want the inserted extra characters
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
52 ;; to go away, type control-w or delete. More options are described below.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
53 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
54 ;; The guesses are made in the order of the most recently "used". Typing
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
55 ;; in a word and then typing a separator character (such as a space) "uses"
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
56 ;; the word. So does moving a cursor over the word. If no words are found,
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
57 ;; it uses an extended version of the dabbrev style completion.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
58 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
59 ;; You automatically save the completions you use to a file between
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
60 ;; sessions.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
61 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
62 ;; Completion enables programmers to enter longer, more descriptive
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
63 ;; variable names while typing fewer keystrokes than they normally would.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
64 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
65 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
66 ;; Full documentation
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
67 ;;---------------------
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
68 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
69 ;; A "word" is any string containing characters with either word or symbol
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
70 ;; syntax. [E.G. Any alphanumeric string with hyphens, underscores, etc.]
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
71 ;; Unless you change the constants, you must type at least three characters
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
72 ;; for the word to be recognized. Only words longer than 6 characters are
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
73 ;; saved.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
74 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
75 ;; When you load this file, completion will be on. I suggest you use the
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
76 ;; compiled version (because it is noticeably faster).
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
77 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
78 ;; M-X completion-mode toggles whether or not new words are added to the
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
79 ;; database by changing the value of enable-completion.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
80 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
81 ;; SAVING/LOADING COMPLETIONS
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
82 ;; Completions are automatically saved from one session to another
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
83 ;; (unless save-completions-flag or enable-completion is nil).
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
84 ;; Loading this file (or calling initialize-completions) causes EMACS
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
85 ;; to load a completions database for a saved completions file
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
86 ;; (default: ~/.completions). When you exit, EMACS saves a copy of the
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
87 ;; completions that you
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
88 ;; often use. When you next start, EMACS loads in the saved completion file.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
89 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
90 ;; The number of completions saved depends loosely on
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
91 ;; *saved-completions-decay-factor*. Completions that have never been
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
92 ;; inserted via "complete" are not saved. You are encouraged to experiment
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
93 ;; with different functions (see compute-completion-min-num-uses).
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
94 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
95 ;; Some completions are permanent and are always saved out. These
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
96 ;; completions have their num-uses slot set to T. Use
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
97 ;; add-permanent-completion to do this
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
98 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
99 ;; Completions are saved only if enable-completion is T. The number of old
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
100 ;; versions kept of the saved completions file is controlled by
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
101 ;; completions-file-versions-kept.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
102 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
103 ;; COMPLETE KEY OPTIONS
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
104 ;; The complete function takes a numeric arguments.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
105 ;; control-u :: leave the point at the beginning of the completion rather
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
106 ;; than the middle.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
107 ;; a number :: rotate through the possible completions by that amount
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
108 ;; `-' :: same as -1 (insert previous completion)
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
109 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
110 ;; HOW THE DATABASE IS MAINTAINED
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
111 ;; <write>
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
112 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
113 ;; UPDATING THE DATABASE MANUALLY
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
114 ;; m-x kill-completion
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
115 ;; kills the completion at point.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
116 ;; m-x add-completion
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
117 ;; m-x add-permanent-completion
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
118 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
119 ;; UPDATING THE DATABASE FROM A SOURCE CODE FILE
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
120 ;; m-x add-completions-from-buffer
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
121 ;; Parses all the definition names from a C or LISP mode buffer and
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
122 ;; adds them to the completion database.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
123 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
124 ;; m-x add-completions-from-lisp-file
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
125 ;; Parses all the definition names from a C or Lisp mode file and
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
126 ;; adds them to the completion database.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
127 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
128 ;; UPDATING THE DATABASE FROM A TAGS TABLE
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
129 ;; m-x add-completions-from-tags-table
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
130 ;; Adds completions from the current tags-table-buffer.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
131 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
132 ;; HOW A COMPLETION IS FOUND
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
133 ;; <write>
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
134 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
135 ;; STRING CASING
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
136 ;; Completion is string case independent if case-fold-search has its
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
137 ;; normal default of T. Also when the completion is inserted the case of the
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
138 ;; entry is coerced appropriately.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
139 ;; [E.G. APP --> APPROPRIATELY app --> appropriately
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
140 ;; App --> Appropriately]
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
141 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
142 ;; INITIALIZATION
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
143 ;; The form `(initialize-completions)' initializes the completion system by
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
144 ;; trying to load in the user's completions. After the first cal, further
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
145 ;; calls have no effect so one should be careful not to put the form in a
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
146 ;; site's standard site-init file.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
147 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
148 ;;---------------------------------------------------------------------------
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
149 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
150 ;;
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
151
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
152 ;;---------------------------------------------------------------------------
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
153 ;; Functions you might like to call
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
154 ;;---------------------------------------------------------------------------
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
155 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
156 ;; add-completion string &optional num-uses
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
157 ;; Adds a new string to the database
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
158 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
159 ;; add-permanent-completion string
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
160 ;; Adds a new string to the database with num-uses = T
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
161 ;;
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
162
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
163 ;; kill-completion string
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
164 ;; Kills the completion from the database.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
165 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
166 ;; clear-all-completions
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
167 ;; Clears the database
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
168 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
169 ;; list-all-completions
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
170 ;; Returns a list of all completions.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
171 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
172 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
173 ;; next-completion string &optional index
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
174 ;; Returns a completion entry that starts with string.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
175 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
176 ;; find-exact-completion string
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
177 ;; Returns a completion entry that exactly matches string.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
178 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
179 ;; complete
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
180 ;; Inserts a completion at point
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
181 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
182 ;; initialize-completions
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
183 ;; Loads the completions file and sets up so that exiting emacs will
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
184 ;; save them.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
185 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
186 ;; save-completions-to-file &optional filename
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
187 ;; load-completions-from-file &optional filename
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
188 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
189 ;;-----------------------------------------------
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
190 ;; Other functions
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
191 ;;-----------------------------------------------
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
192 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
193 ;; get-completion-list string
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
194 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
195 ;; These things are for manipulating the structure
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
196 ;; make-completion string num-uses
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
197 ;; completion-num-uses completion
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
198 ;; completion-string completion
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
199 ;; set-completion-num-uses completion num-uses
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
200 ;; set-completion-string completion string
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
201 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
202 ;;
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
203
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
204 ;;-----------------------------------------------
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
205 ;; To Do :: (anybody ?)
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
206 ;;-----------------------------------------------
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
207 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
208 ;; Implement Lookup and keyboard interface in C
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
209 ;; Add package prefix smarts (for Common Lisp)
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
210 ;; Add autoprompting of possible completions after every keystroke (fast
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
211 ;; terminals only !)
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
212 ;; Add doc. to texinfo
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
213 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
214 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
215 ;;-----------------------------------------------
14231
069791dced1e Fix Change Log comment line.
Erik Naggum <erik@naggum.no>
parents: 14169
diff changeset
216 ;;; Change Log:
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
217 ;;-----------------------------------------------
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
218 ;; Sometime in '84 Brewster implemented a somewhat buggy version for
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
219 ;; Symbolics LISPMs.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
220 ;; Jan. '85 Jim became enamored of the idea and implemented a faster,
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
221 ;; more robust version.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
222 ;; With input from many users at TMC, (rose, craig, and gls come to mind),
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
223 ;; the current style of interface was developed.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
224 ;; 9/87, Jim and Brewster took terminals home. Yuck. After
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
225 ;; complaining for a while Brewster implemented a subset of the current
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
226 ;; LISPM version for GNU Emacs.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
227 ;; 8/88 After complaining for a while (and with sufficient
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
228 ;; promised rewards), Jim reimplemented a version of GNU completion
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
229 ;; superior to that of the LISPM version.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
230 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
231 ;;-----------------------------------------------
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
232 ;; Acknowledgements
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
233 ;;-----------------------------------------------
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
234 ;; Cliff Lasser (cal@think.com), Kevin Herbert (kph@cisco.com),
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
235 ;; eero@media-lab, kgk@cs.brown.edu, jla@ai.mit.edu,
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
236 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
237 ;;-----------------------------------------------
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
238 ;; Change Log
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
239 ;;-----------------------------------------------
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
240 ;; From version 9 to 10
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
241 ;; - Allowance for non-integral *completion-version* nos.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
242 ;; - Fix cmpl-apply-as-top-level for keyboard macros
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
243 ;; - Fix broken completion merging (in save-completions-to-file)
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
244 ;; - More misc. fixes for version 19.0 of emacs
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
245 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
246 ;; From Version 8 to 9
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
247 ;; - Ported to version 19.0 of emacs (backcompatible with version 18)
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
248 ;; - Added add-completions-from-tags-table (with thanks to eero@media-lab)
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
249 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
250 ;; From Version 7 to 8
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
251 ;; - Misc. changes to comments
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
252 ;; - new completion key bindings: c-x o, M->, M-<, c-a, c-e
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
253 ;; - cdabbrev now checks all the visible window buffers and the "other buffer"
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
254 ;; - `%' is now a symbol character rather than a separator (except in C mode)
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
255 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
256 ;; From Version 6 to 7
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
257 ;; - Fixed bug with saving out .completion file the first time
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
258 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
259 ;; From Version 5 to 6
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
260 ;; - removed statistics recording
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
261 ;; - reworked advise to handle autoloads
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
262 ;; - Fixed fortran mode support
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
263 ;; - Added new cursor motion triggers
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
264 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
265 ;; From Version 4 to 5
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
266 ;; - doesn't bother saving if nothing has changed
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
267 ;; - auto-save if haven't used for a 1/2 hour
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
268 ;; - save period extended to two weeks
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
269 ;; - minor fix to capitalization code
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
270 ;; - added *completion-auto-save-period* to variables recorded.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
271 ;; - added reenter protection to cmpl-record-statistics-filter
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
272 ;; - added backup protection to save-completions-to-file (prevents
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
273 ;; problems with disk full errors)
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
274
795
c693d56ef36d *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 732
diff changeset
275 ;;; Code:
c693d56ef36d *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 732
diff changeset
276
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
277 ;;---------------------------------------------------------------------------
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
278 ;; User changeable parameters
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
279 ;;---------------------------------------------------------------------------
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
280
17436
2a9fdbfcb993 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 15774
diff changeset
281 (defgroup completion nil
2a9fdbfcb993 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 15774
diff changeset
282 "Dynamic word-completion code."
22250
a77d473867b8 *** empty log message ***
Dan Nicolaescu <done@ece.arizona.edu>
parents: 19894
diff changeset
283 :group 'matching
a77d473867b8 *** empty log message ***
Dan Nicolaescu <done@ece.arizona.edu>
parents: 19894
diff changeset
284 :group 'convenience)
17436
2a9fdbfcb993 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 15774
diff changeset
285
2a9fdbfcb993 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 15774
diff changeset
286
2a9fdbfcb993 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 15774
diff changeset
287 (defcustom enable-completion t
3175
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
288 "*Non-nil means enable recording and saving of completions.
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
289 If nil, no new words are added to the database or saved to the init file."
17436
2a9fdbfcb993 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 15774
diff changeset
290 :type 'boolean
2a9fdbfcb993 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 15774
diff changeset
291 :group 'completion)
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
292
17436
2a9fdbfcb993 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 15774
diff changeset
293 (defcustom save-completions-flag t
3175
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
294 "*Non-nil means save most-used completions when exiting Emacs.
19894
4bcb67851128 (save-completions-flag): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 17436
diff changeset
295 See also `save-completions-retention-time'."
17436
2a9fdbfcb993 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 15774
diff changeset
296 :type 'boolean
2a9fdbfcb993 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 15774
diff changeset
297 :group 'completion)
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
298
17436
2a9fdbfcb993 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 15774
diff changeset
299 (defcustom save-completions-file-name (convert-standard-filename "~/.completions")
2a9fdbfcb993 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 15774
diff changeset
300 "*The filename to save completions to."
2a9fdbfcb993 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 15774
diff changeset
301 :type 'file
2a9fdbfcb993 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 15774
diff changeset
302 :group 'completion)
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
303
17436
2a9fdbfcb993 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 15774
diff changeset
304 (defcustom save-completions-retention-time 336
3175
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
305 "*Discard a completion if unused for this many hours.
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
306 \(1 day = 24, 1 week = 168). If this is 0, non-permanent completions
17436
2a9fdbfcb993 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 15774
diff changeset
307 will not be saved unless these are used. Default is two weeks."
2a9fdbfcb993 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 15774
diff changeset
308 :type 'integer
2a9fdbfcb993 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 15774
diff changeset
309 :group 'completion)
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
310
17436
2a9fdbfcb993 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 15774
diff changeset
311 (defcustom completion-on-separator-character nil
3175
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
312 "*Non-nil means separator characters mark previous word as used.
17436
2a9fdbfcb993 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 15774
diff changeset
313 This means the word will be saved as a completion."
2a9fdbfcb993 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 15774
diff changeset
314 :type 'boolean
2a9fdbfcb993 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 15774
diff changeset
315 :group 'completion)
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
316
17436
2a9fdbfcb993 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 15774
diff changeset
317 (defcustom completions-file-versions-kept kept-new-versions
2a9fdbfcb993 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 15774
diff changeset
318 "*Number of versions to keep for the saved completions file."
2a9fdbfcb993 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 15774
diff changeset
319 :type 'integer
2a9fdbfcb993 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 15774
diff changeset
320 :group 'completion)
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
321
17436
2a9fdbfcb993 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 15774
diff changeset
322 (defcustom completion-prompt-speed-threshold 4800
2a9fdbfcb993 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 15774
diff changeset
323 "*Minimum output speed at which to display next potential completion."
2a9fdbfcb993 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 15774
diff changeset
324 :type 'integer
2a9fdbfcb993 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 15774
diff changeset
325 :group 'completion)
3175
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
326
17436
2a9fdbfcb993 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 15774
diff changeset
327 (defcustom completion-cdabbrev-prompt-flag nil
3175
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
328 "*If non-nil, the next completion prompt does a cdabbrev search.
17436
2a9fdbfcb993 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 15774
diff changeset
329 This can be time consuming."
2a9fdbfcb993 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 15774
diff changeset
330 :type 'boolean
2a9fdbfcb993 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 15774
diff changeset
331 :group 'completion)
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
332
17436
2a9fdbfcb993 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 15774
diff changeset
333 (defcustom completion-search-distance 15000
3175
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
334 "*How far to search in the buffer when looking for completions.
17436
2a9fdbfcb993 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 15774
diff changeset
335 In number of characters. If nil, search the whole buffer."
2a9fdbfcb993 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 15774
diff changeset
336 :type 'integer
2a9fdbfcb993 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 15774
diff changeset
337 :group 'completion)
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
338
17436
2a9fdbfcb993 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 15774
diff changeset
339 (defcustom completions-merging-modes '(lisp c)
3175
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
340 "*List of modes {`c' or `lisp'} for automatic completions merging.
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
341 Definitions from visited files which have these modes
17436
2a9fdbfcb993 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 15774
diff changeset
342 are automatically added to the completion database."
2a9fdbfcb993 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 15774
diff changeset
343 :type '(set (const lisp) (const c))
2a9fdbfcb993 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 15774
diff changeset
344 :group 'completion)
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
345
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
346 ;;(defvar *record-cmpl-statistics-p* nil
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
347 ;; "*If non-nil, record completion statistics.")
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
348
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
349 ;;(defvar *completion-auto-save-period* 1800
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
350 ;; "*The period in seconds to wait for emacs to be idle before autosaving
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
351 ;;the completions. Default is a 1/2 hour.")
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
352
3175
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
353 (defconst completion-min-length nil ;; defined below in eval-when
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
354 "*The minimum length of a stored completion.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
355 DON'T CHANGE WITHOUT RECOMPILING ! This is used by macros.")
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
356
3175
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
357 (defconst completion-max-length nil ;; defined below in eval-when
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
358 "*The maximum length of a stored completion.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
359 DON'T CHANGE WITHOUT RECOMPILING ! This is used by macros.")
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
360
3175
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
361 (defconst completion-prefix-min-length nil ;; defined below in eval-when
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
362 "The minimum length of a completion search string.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
363 DON'T CHANGE WITHOUT RECOMPILING ! This is used by macros.")
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
364
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
365 (defmacro eval-when-compile-load-eval (&rest body)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
366 ;; eval everything before expanding
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
367 (mapcar 'eval body)
190
8428fd468956 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 56
diff changeset
368 (cons 'progn body))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
369
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
370 (defun completion-eval-when ()
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
371 (eval-when-compile-load-eval
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
372 ;; These vars. are defined at both compile and load time.
3175
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
373 (setq completion-min-length 6)
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
374 (setq completion-max-length 200)
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
375 (setq completion-prefix-min-length 3)))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
376
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
377 (completion-eval-when)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
378
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
379 ;;---------------------------------------------------------------------------
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
380 ;; Internal Variables
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
381 ;;---------------------------------------------------------------------------
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
382
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
383 (defvar cmpl-initialized-p nil
3175
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
384 "Set to t when the completion system is initialized.
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
385 Indicates that the old completion file has been read in.")
56
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 cmpl-completions-accepted-p nil
3175
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
388 "Set to t as soon as the first completion has been accepted.
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
389 Used to decide whether to save completions.")
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
390
10638
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
391 (defvar cmpl-preceding-syntax)
10639
dc32b19de050 (completion-string): Add defvar.
Richard M. Stallman <rms@gnu.org>
parents: 10638
diff changeset
392
dc32b19de050 (completion-string): Add defvar.
Richard M. Stallman <rms@gnu.org>
parents: 10638
diff changeset
393 (defvar completion-string)
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
394
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
395 ;;---------------------------------------------------------------------------
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
396 ;; Low level tools
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
397 ;;---------------------------------------------------------------------------
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
398
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
399 ;;-----------------------------------------------
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
400 ;; Misc.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
401 ;;-----------------------------------------------
56
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 (defun minibuffer-window-selected-p ()
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
404 "True iff the current window is the minibuffer."
3175
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
405 (window-minibuffer-p (selected-window)))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
406
4435
4ad99dc50f6f (cmpl-read-time-eval): Make it no-op.
Richard M. Stallman <rms@gnu.org>
parents: 4434
diff changeset
407 ;; This used to be `(eval form)'. Eval FORM at run time now.
3175
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
408 (defmacro cmpl-read-time-eval (form)
4435
4ad99dc50f6f (cmpl-read-time-eval): Make it no-op.
Richard M. Stallman <rms@gnu.org>
parents: 4434
diff changeset
409 form)
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
410
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
411 ;;-----------------------------------------------
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
412 ;; String case coercion
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
413 ;;-----------------------------------------------
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
414
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
415 (defun cmpl-string-case-type (string)
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
416 "Return :capitalized, :up, :down, :mixed, or :neither for case of STRING."
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
417 (let ((case-fold-search nil))
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
418 (cond ((string-match "[[:lower:]]" string)
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
419 (cond ((string-match "[[:upper:]]" string)
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
420 (cond ((and (> (length string) 1)
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
421 (null (string-match "[[:upper:]]" string 1)))
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
422 :capitalized)
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
423 (t
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
424 :mixed)))
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
425 (t :down)))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
426 (t
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
427 (cond ((string-match "[[:upper:]]" string)
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
428 :up)
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
429 (t :neither))))))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
430
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
431 ;; Tests -
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
432 ;; (cmpl-string-case-type "123ABCDEF456") --> :up
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
433 ;; (cmpl-string-case-type "123abcdef456") --> :down
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
434 ;; (cmpl-string-case-type "123aBcDeF456") --> :mixed
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
435 ;; (cmpl-string-case-type "123456") --> :neither
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
436 ;; (cmpl-string-case-type "Abcde123") --> :capitalized
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
437
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
438 (defun cmpl-coerce-string-case (string case-type)
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
439 (cond ((eq case-type :down) (downcase string))
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
440 ((eq case-type :up) (upcase string))
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
441 ((eq case-type :capitalized)
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
442 (setq string (downcase string))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
443 (aset string 0 (logand ?\337 (aref string 0)))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
444 string)
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
445 (t string)))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
446
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
447 (defun cmpl-merge-string-cases (string-to-coerce given-string)
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
448 (let ((string-case-type (cmpl-string-case-type string-to-coerce)))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
449 (cond ((memq string-case-type '(:down :up :capitalized))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
450 ;; 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
451 ;; the given string
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
452 (cmpl-coerce-string-case string-to-coerce
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
453 (cmpl-string-case-type given-string)))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
454 (t
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
455 ;; If the found string is in some unusual case, just insert it
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
456 ;; as is
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
457 string-to-coerce))))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
458
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
459 ;; Tests -
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
460 ;; (cmpl-merge-string-cases "AbCdEf456" "abc") --> AbCdEf456
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
461 ;; (cmpl-merge-string-cases "abcdef456" "ABC") --> ABCDEF456
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
462 ;; (cmpl-merge-string-cases "ABCDEF456" "Abc") --> Abcdef456
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
463 ;; (cmpl-merge-string-cases "ABCDEF456" "abc") --> abcdef456
56
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
3175
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
466 (defun cmpl-hours-since-origin ()
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
467 (let ((time (current-time)))
15774
e3cfe2afed17 (cmpl-hours-since-origin): Fix bug:
Richard M. Stallman <rms@gnu.org>
parents: 15031
diff changeset
468 (floor (+ (* 65536.0 (nth 0 time)) (nth 1 time)) 3600)))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
469
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
470 ;;---------------------------------------------------------------------------
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
471 ;; "Symbol" parsing functions
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
472 ;;---------------------------------------------------------------------------
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
473 ;; The functions symbol-before-point, symbol-under-point, etc. quickly return
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
474 ;; an appropriate symbol string. The strategy is to temporarily change
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
475 ;; the syntax table to enable fast symbol searching. There are three classes
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
476 ;; of syntax in these "symbol" syntax tables ::
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
477 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
478 ;; syntax (?_) - "symbol" chars (e.g. alphanumerics)
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
479 ;; syntax (?w) - symbol chars to ignore at end of words (e.g. period).
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
480 ;; syntax (? ) - everything else
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
481 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
482 ;; Thus by judicious use of scan-sexps and forward-word, we can get
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
483 ;; the word we want relatively fast and without consing.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
484 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
485 ;; Why do we need a separate category for "symbol chars to ignore at ends" ?
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
486 ;; For example, in LISP we want starting :'s trimmed
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
487 ;; so keyword argument specifiers also define the keyword completion. And,
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
488 ;; for example, in C we want `.' appearing in a structure ref. to
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
489 ;; be kept intact in order to store the whole structure ref.; however, if
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
490 ;; it appears at the end of a symbol it should be discarded because it is
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
491 ;; probably used as a period.
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
492
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
493 ;; Here is the default completion syntax ::
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
494 ;; Symbol chars :: A-Z a-z 0-9 @ / \ * + ~ $ < > %
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
495 ;; Symbol chars to ignore at ends :: _ : . -
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
496 ;; Separator chars. :: <tab> <space> ! ^ & ( ) = ` | { } [ ] ; " ' #
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
497 ;; , ? <Everything else>
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
498
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
499 ;; Mode specific differences and notes ::
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
500 ;; LISP diffs ->
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
501 ;; Symbol chars :: ! & ? = ^
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
502 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
503 ;; C diffs ->
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
504 ;; Separator chars :: + * / : %
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
505 ;; A note on the hyphen (`-'). Perhaps the hyphen should also be a separator
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
506 ;; char., however, we wanted to have completion symbols include pointer
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
507 ;; references. For example, "foo->bar" is a symbol as far as completion is
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
508 ;; concerned.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
509 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
510 ;; FORTRAN diffs ->
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
511 ;; Separator chars :: + - * / :
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
512 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
513 ;; Pathname diffs ->
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
514 ;; Symbol chars :: .
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
515 ;; Of course there is no pathname "mode" and in fact we have not implemented
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
516 ;; this table. However, if there was such a mode, this is what it would look
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
517 ;; like.
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
518
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
519 ;;-----------------------------------------------
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
520 ;; Table definitions
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
521 ;;-----------------------------------------------
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
522
3175
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
523 (defun cmpl-make-standard-completion-syntax-table ()
15031
fef6a7e70bf4 Provide `completion'.
Richard M. Stallman <rms@gnu.org>
parents: 14231
diff changeset
524 (let ((table (make-syntax-table))
10638
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
525 i)
15031
fef6a7e70bf4 Provide `completion'.
Richard M. Stallman <rms@gnu.org>
parents: 14231
diff changeset
526 ;; Default syntax is whitespace.
fef6a7e70bf4 Provide `completion'.
Richard M. Stallman <rms@gnu.org>
parents: 14231
diff changeset
527 (setq i 0)
fef6a7e70bf4 Provide `completion'.
Richard M. Stallman <rms@gnu.org>
parents: 14231
diff changeset
528 (while (< i 256)
fef6a7e70bf4 Provide `completion'.
Richard M. Stallman <rms@gnu.org>
parents: 14231
diff changeset
529 (modify-syntax-entry i " " table)
fef6a7e70bf4 Provide `completion'.
Richard M. Stallman <rms@gnu.org>
parents: 14231
diff changeset
530 (setq i (1+ i)))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
531 ;; alpha chars
10638
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
532 (setq i 0)
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
533 (while (< i 26)
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
534 (modify-syntax-entry (+ ?a i) "_" table)
10638
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
535 (modify-syntax-entry (+ ?A i) "_" table)
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
536 (setq i (1+ i)))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
537 ;; digit chars.
10638
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
538 (setq i 0)
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
539 (while (< i 10)
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
540 (modify-syntax-entry (+ ?0 i) "_" table)
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
541 (setq i (1+ i)))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
542 ;; Other ones
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
543 (let ((symbol-chars '(?@ ?/ ?\\ ?* ?+ ?~ ?$ ?< ?> ?%))
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
544 (symbol-chars-ignore '(?_ ?- ?: ?.)))
27599
d1305a19933d Replace completion-dolist with dolist.
Dave Love <fx@gnu.org>
parents: 23605
diff changeset
545 (dolist (char symbol-chars)
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
546 (modify-syntax-entry char "_" table))
27599
d1305a19933d Replace completion-dolist with dolist.
Dave Love <fx@gnu.org>
parents: 23605
diff changeset
547 (dolist (char symbol-chars-ignore)
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
548 (modify-syntax-entry char "w" table)))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
549 table))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
550
3175
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
551 (defconst cmpl-standard-syntax-table (cmpl-make-standard-completion-syntax-table))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
552
3175
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
553 (defun cmpl-make-lisp-completion-syntax-table ()
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
554 (let ((table (copy-syntax-table cmpl-standard-syntax-table))
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
555 (symbol-chars '(?! ?& ?? ?= ?^)))
27599
d1305a19933d Replace completion-dolist with dolist.
Dave Love <fx@gnu.org>
parents: 23605
diff changeset
556 (dolist (char symbol-chars)
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
557 (modify-syntax-entry char "_" table))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
558 table))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
559
3175
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
560 (defun cmpl-make-c-completion-syntax-table ()
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
561 (let ((table (copy-syntax-table cmpl-standard-syntax-table))
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
562 (separator-chars '(?+ ?* ?/ ?: ?%)))
27599
d1305a19933d Replace completion-dolist with dolist.
Dave Love <fx@gnu.org>
parents: 23605
diff changeset
563 (dolist (char separator-chars)
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
564 (modify-syntax-entry char " " table))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
565 table))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
566
3175
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
567 (defun cmpl-make-fortran-completion-syntax-table ()
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
568 (let ((table (copy-syntax-table cmpl-standard-syntax-table))
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
569 (separator-chars '(?+ ?- ?* ?/ ?:)))
27599
d1305a19933d Replace completion-dolist with dolist.
Dave Love <fx@gnu.org>
parents: 23605
diff changeset
570 (dolist (char separator-chars)
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
571 (modify-syntax-entry char " " table))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
572 table))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
573
3175
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
574 (defconst cmpl-lisp-syntax-table (cmpl-make-lisp-completion-syntax-table))
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
575 (defconst cmpl-c-syntax-table (cmpl-make-c-completion-syntax-table))
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
576 (defconst cmpl-fortran-syntax-table (cmpl-make-fortran-completion-syntax-table))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
577
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
578 (defvar cmpl-syntax-table cmpl-standard-syntax-table
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
579 "This variable holds the current completion syntax table.")
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
580 (make-variable-buffer-local 'cmpl-syntax-table)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
581
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
582 ;;-----------------------------------------------
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
583 ;; Symbol functions
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
584 ;;-----------------------------------------------
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
585 (defvar cmpl-symbol-start nil
3175
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
586 "Holds first character of symbol, after any completion symbol function.")
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
587 (defvar cmpl-symbol-end nil
3175
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
588 "Holds last character of symbol, after any completion symbol function.")
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
589 ;; These are temp. vars. we use to avoid using let.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
590 ;; Why ? Small speed improvement.
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
591 (defvar cmpl-saved-syntax nil)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
592 (defvar cmpl-saved-point nil)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
593
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
594 (defun symbol-under-point ()
3175
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
595 "Returns the symbol that the point is currently on.
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
596 But only if it is longer than `completion-min-length'."
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
597 (setq cmpl-saved-syntax (syntax-table))
13793
b51b78fa556e (symbol-under-point, symbol-before-point)
Karl Heuer <kwzh@gnu.org>
parents: 13636
diff changeset
598 (unwind-protect
b51b78fa556e (symbol-under-point, symbol-before-point)
Karl Heuer <kwzh@gnu.org>
parents: 13636
diff changeset
599 (progn
b51b78fa556e (symbol-under-point, symbol-before-point)
Karl Heuer <kwzh@gnu.org>
parents: 13636
diff changeset
600 (set-syntax-table cmpl-syntax-table)
b51b78fa556e (symbol-under-point, symbol-before-point)
Karl Heuer <kwzh@gnu.org>
parents: 13636
diff changeset
601 (cond
b51b78fa556e (symbol-under-point, symbol-before-point)
Karl Heuer <kwzh@gnu.org>
parents: 13636
diff changeset
602 ;; Cursor is on following-char and after preceding-char
b51b78fa556e (symbol-under-point, symbol-before-point)
Karl Heuer <kwzh@gnu.org>
parents: 13636
diff changeset
603 ((memq (char-syntax (following-char)) '(?w ?_))
b51b78fa556e (symbol-under-point, symbol-before-point)
Karl Heuer <kwzh@gnu.org>
parents: 13636
diff changeset
604 (setq cmpl-saved-point (point)
b51b78fa556e (symbol-under-point, symbol-before-point)
Karl Heuer <kwzh@gnu.org>
parents: 13636
diff changeset
605 cmpl-symbol-start (scan-sexps (1+ cmpl-saved-point) -1)
b51b78fa556e (symbol-under-point, symbol-before-point)
Karl Heuer <kwzh@gnu.org>
parents: 13636
diff changeset
606 cmpl-symbol-end (scan-sexps cmpl-saved-point 1))
b51b78fa556e (symbol-under-point, symbol-before-point)
Karl Heuer <kwzh@gnu.org>
parents: 13636
diff changeset
607 ;; Remove chars to ignore at the start.
b51b78fa556e (symbol-under-point, symbol-before-point)
Karl Heuer <kwzh@gnu.org>
parents: 13636
diff changeset
608 (cond ((= (char-syntax (char-after cmpl-symbol-start)) ?w)
b51b78fa556e (symbol-under-point, symbol-before-point)
Karl Heuer <kwzh@gnu.org>
parents: 13636
diff changeset
609 (goto-char cmpl-symbol-start)
b51b78fa556e (symbol-under-point, symbol-before-point)
Karl Heuer <kwzh@gnu.org>
parents: 13636
diff changeset
610 (forward-word 1)
b51b78fa556e (symbol-under-point, symbol-before-point)
Karl Heuer <kwzh@gnu.org>
parents: 13636
diff changeset
611 (setq cmpl-symbol-start (point))
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
612 (goto-char cmpl-saved-point)))
13793
b51b78fa556e (symbol-under-point, symbol-before-point)
Karl Heuer <kwzh@gnu.org>
parents: 13636
diff changeset
613 ;; Remove chars to ignore at the end.
b51b78fa556e (symbol-under-point, symbol-before-point)
Karl Heuer <kwzh@gnu.org>
parents: 13636
diff changeset
614 (cond ((= (char-syntax (char-after (1- cmpl-symbol-end))) ?w)
b51b78fa556e (symbol-under-point, symbol-before-point)
Karl Heuer <kwzh@gnu.org>
parents: 13636
diff changeset
615 (goto-char cmpl-symbol-end)
b51b78fa556e (symbol-under-point, symbol-before-point)
Karl Heuer <kwzh@gnu.org>
parents: 13636
diff changeset
616 (forward-word -1)
b51b78fa556e (symbol-under-point, symbol-before-point)
Karl Heuer <kwzh@gnu.org>
parents: 13636
diff changeset
617 (setq cmpl-symbol-end (point))
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
618 (goto-char cmpl-saved-point)))
13793
b51b78fa556e (symbol-under-point, symbol-before-point)
Karl Heuer <kwzh@gnu.org>
parents: 13636
diff changeset
619 ;; Return completion if the length is reasonable.
b51b78fa556e (symbol-under-point, symbol-before-point)
Karl Heuer <kwzh@gnu.org>
parents: 13636
diff changeset
620 (if (and (<= (cmpl-read-time-eval completion-min-length)
b51b78fa556e (symbol-under-point, symbol-before-point)
Karl Heuer <kwzh@gnu.org>
parents: 13636
diff changeset
621 (- cmpl-symbol-end cmpl-symbol-start))
b51b78fa556e (symbol-under-point, symbol-before-point)
Karl Heuer <kwzh@gnu.org>
parents: 13636
diff changeset
622 (<= (- cmpl-symbol-end cmpl-symbol-start)
b51b78fa556e (symbol-under-point, symbol-before-point)
Karl Heuer <kwzh@gnu.org>
parents: 13636
diff changeset
623 (cmpl-read-time-eval completion-max-length)))
b51b78fa556e (symbol-under-point, symbol-before-point)
Karl Heuer <kwzh@gnu.org>
parents: 13636
diff changeset
624 (buffer-substring cmpl-symbol-start cmpl-symbol-end)))))
b51b78fa556e (symbol-under-point, symbol-before-point)
Karl Heuer <kwzh@gnu.org>
parents: 13636
diff changeset
625 (set-syntax-table cmpl-saved-syntax)))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
626
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
627 ;; tests for symbol-under-point
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
628 ;; `^' indicates cursor pos. where value is returned
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
629 ;; simple-word-test
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
630 ;; ^^^^^^^^^^^^^^^^ --> simple-word-test
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
631 ;; _harder_word_test_
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
632 ;; ^^^^^^^^^^^^^^^^^^ --> harder_word_test
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
633 ;; .___.______.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
634 ;; --> nil
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
635 ;; /foo/bar/quux.hello
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
636 ;; ^^^^^^^^^^^^^^^^^^^ --> /foo/bar/quux.hello
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
637 ;;
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
638
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
639 (defun symbol-before-point ()
3175
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
640 "Returns a string of the symbol immediately before point.
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
641 Returns nil if there isn't one longer than `completion-min-length'."
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
642 ;; 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
643 (setq cmpl-saved-syntax (syntax-table))
13793
b51b78fa556e (symbol-under-point, symbol-before-point)
Karl Heuer <kwzh@gnu.org>
parents: 13636
diff changeset
644 (unwind-protect
b51b78fa556e (symbol-under-point, symbol-before-point)
Karl Heuer <kwzh@gnu.org>
parents: 13636
diff changeset
645 (progn
b51b78fa556e (symbol-under-point, symbol-before-point)
Karl Heuer <kwzh@gnu.org>
parents: 13636
diff changeset
646 (set-syntax-table cmpl-syntax-table)
b51b78fa556e (symbol-under-point, symbol-before-point)
Karl Heuer <kwzh@gnu.org>
parents: 13636
diff changeset
647 ;; Cursor is on following-char and after preceding-char
b51b78fa556e (symbol-under-point, symbol-before-point)
Karl Heuer <kwzh@gnu.org>
parents: 13636
diff changeset
648 (cond ((= (setq cmpl-preceding-syntax (char-syntax (preceding-char))) ?_)
b51b78fa556e (symbol-under-point, symbol-before-point)
Karl Heuer <kwzh@gnu.org>
parents: 13636
diff changeset
649 ;; Number of chars to ignore at end.
b51b78fa556e (symbol-under-point, symbol-before-point)
Karl Heuer <kwzh@gnu.org>
parents: 13636
diff changeset
650 (setq cmpl-symbol-end (point)
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
651 cmpl-symbol-start (scan-sexps cmpl-symbol-end -1))
13793
b51b78fa556e (symbol-under-point, symbol-before-point)
Karl Heuer <kwzh@gnu.org>
parents: 13636
diff changeset
652 ;; Remove chars to ignore at the start.
b51b78fa556e (symbol-under-point, symbol-before-point)
Karl Heuer <kwzh@gnu.org>
parents: 13636
diff changeset
653 (cond ((= (char-syntax (char-after cmpl-symbol-start)) ?w)
b51b78fa556e (symbol-under-point, symbol-before-point)
Karl Heuer <kwzh@gnu.org>
parents: 13636
diff changeset
654 (goto-char cmpl-symbol-start)
b51b78fa556e (symbol-under-point, symbol-before-point)
Karl Heuer <kwzh@gnu.org>
parents: 13636
diff changeset
655 (forward-word 1)
b51b78fa556e (symbol-under-point, symbol-before-point)
Karl Heuer <kwzh@gnu.org>
parents: 13636
diff changeset
656 (setq cmpl-symbol-start (point))
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
657 (goto-char cmpl-symbol-end)))
13793
b51b78fa556e (symbol-under-point, symbol-before-point)
Karl Heuer <kwzh@gnu.org>
parents: 13636
diff changeset
658 ;; Return value if long enough.
b51b78fa556e (symbol-under-point, symbol-before-point)
Karl Heuer <kwzh@gnu.org>
parents: 13636
diff changeset
659 (if (>= cmpl-symbol-end
b51b78fa556e (symbol-under-point, symbol-before-point)
Karl Heuer <kwzh@gnu.org>
parents: 13636
diff changeset
660 (+ cmpl-symbol-start
b51b78fa556e (symbol-under-point, symbol-before-point)
Karl Heuer <kwzh@gnu.org>
parents: 13636
diff changeset
661 (cmpl-read-time-eval completion-min-length)))
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
662 (buffer-substring cmpl-symbol-start cmpl-symbol-end)))
13793
b51b78fa556e (symbol-under-point, symbol-before-point)
Karl Heuer <kwzh@gnu.org>
parents: 13636
diff changeset
663 ((= cmpl-preceding-syntax ?w)
b51b78fa556e (symbol-under-point, symbol-before-point)
Karl Heuer <kwzh@gnu.org>
parents: 13636
diff changeset
664 ;; chars to ignore at end
b51b78fa556e (symbol-under-point, symbol-before-point)
Karl Heuer <kwzh@gnu.org>
parents: 13636
diff changeset
665 (setq cmpl-saved-point (point)
b51b78fa556e (symbol-under-point, symbol-before-point)
Karl Heuer <kwzh@gnu.org>
parents: 13636
diff changeset
666 cmpl-symbol-start (scan-sexps cmpl-saved-point -1))
b51b78fa556e (symbol-under-point, symbol-before-point)
Karl Heuer <kwzh@gnu.org>
parents: 13636
diff changeset
667 ;; take off chars. from end
b51b78fa556e (symbol-under-point, symbol-before-point)
Karl Heuer <kwzh@gnu.org>
parents: 13636
diff changeset
668 (forward-word -1)
b51b78fa556e (symbol-under-point, symbol-before-point)
Karl Heuer <kwzh@gnu.org>
parents: 13636
diff changeset
669 (setq cmpl-symbol-end (point))
b51b78fa556e (symbol-under-point, symbol-before-point)
Karl Heuer <kwzh@gnu.org>
parents: 13636
diff changeset
670 ;; remove chars to ignore at the start
b51b78fa556e (symbol-under-point, symbol-before-point)
Karl Heuer <kwzh@gnu.org>
parents: 13636
diff changeset
671 (cond ((= (char-syntax (char-after cmpl-symbol-start)) ?w)
b51b78fa556e (symbol-under-point, symbol-before-point)
Karl Heuer <kwzh@gnu.org>
parents: 13636
diff changeset
672 (goto-char cmpl-symbol-start)
b51b78fa556e (symbol-under-point, symbol-before-point)
Karl Heuer <kwzh@gnu.org>
parents: 13636
diff changeset
673 (forward-word 1)
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
674 (setq cmpl-symbol-start (point))))
13793
b51b78fa556e (symbol-under-point, symbol-before-point)
Karl Heuer <kwzh@gnu.org>
parents: 13636
diff changeset
675 ;; Restore state.
b51b78fa556e (symbol-under-point, symbol-before-point)
Karl Heuer <kwzh@gnu.org>
parents: 13636
diff changeset
676 (goto-char cmpl-saved-point)
b51b78fa556e (symbol-under-point, symbol-before-point)
Karl Heuer <kwzh@gnu.org>
parents: 13636
diff changeset
677 ;; Return completion if the length is reasonable
b51b78fa556e (symbol-under-point, symbol-before-point)
Karl Heuer <kwzh@gnu.org>
parents: 13636
diff changeset
678 (if (and (<= (cmpl-read-time-eval completion-min-length)
b51b78fa556e (symbol-under-point, symbol-before-point)
Karl Heuer <kwzh@gnu.org>
parents: 13636
diff changeset
679 (- cmpl-symbol-end cmpl-symbol-start))
b51b78fa556e (symbol-under-point, symbol-before-point)
Karl Heuer <kwzh@gnu.org>
parents: 13636
diff changeset
680 (<= (- cmpl-symbol-end cmpl-symbol-start)
b51b78fa556e (symbol-under-point, symbol-before-point)
Karl Heuer <kwzh@gnu.org>
parents: 13636
diff changeset
681 (cmpl-read-time-eval completion-max-length)))
b51b78fa556e (symbol-under-point, symbol-before-point)
Karl Heuer <kwzh@gnu.org>
parents: 13636
diff changeset
682 (buffer-substring cmpl-symbol-start cmpl-symbol-end)))))
b51b78fa556e (symbol-under-point, symbol-before-point)
Karl Heuer <kwzh@gnu.org>
parents: 13636
diff changeset
683 (set-syntax-table cmpl-saved-syntax)))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
684
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
685 ;; tests for symbol-before-point
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
686 ;; `^' indicates cursor pos. where value is returned
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
687 ;; simple-word-test
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
688 ;; ^ --> nil
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
689 ;; ^ --> nil
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
690 ;; ^ --> simple-w
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
691 ;; ^ --> simple-word-test
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
692 ;; _harder_word_test_
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
693 ;; ^ --> harder_word_test
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
694 ;; ^ --> harder_word_test
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
695 ;; ^ --> harder
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
696 ;; .___....
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
697 ;; --> nil
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
698
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
699 (defun symbol-under-or-before-point ()
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
700 ;; This could be made slightly faster but it is better to avoid
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
701 ;; copying all the code.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
702 ;; However, it is only used by the completion string prompter.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
703 ;; If it comes into common use, it could be rewritten.
13793
b51b78fa556e (symbol-under-point, symbol-before-point)
Karl Heuer <kwzh@gnu.org>
parents: 13636
diff changeset
704 (cond ((memq (progn
b51b78fa556e (symbol-under-point, symbol-before-point)
Karl Heuer <kwzh@gnu.org>
parents: 13636
diff changeset
705 (setq cmpl-saved-syntax (syntax-table))
b51b78fa556e (symbol-under-point, symbol-before-point)
Karl Heuer <kwzh@gnu.org>
parents: 13636
diff changeset
706 (unwind-protect
b51b78fa556e (symbol-under-point, symbol-before-point)
Karl Heuer <kwzh@gnu.org>
parents: 13636
diff changeset
707 (progn
b51b78fa556e (symbol-under-point, symbol-before-point)
Karl Heuer <kwzh@gnu.org>
parents: 13636
diff changeset
708 (set-syntax-table cmpl-syntax-table)
b51b78fa556e (symbol-under-point, symbol-before-point)
Karl Heuer <kwzh@gnu.org>
parents: 13636
diff changeset
709 (char-syntax (following-char)))
b51b78fa556e (symbol-under-point, symbol-before-point)
Karl Heuer <kwzh@gnu.org>
parents: 13636
diff changeset
710 (set-syntax-table cmpl-saved-syntax)))
b51b78fa556e (symbol-under-point, symbol-before-point)
Karl Heuer <kwzh@gnu.org>
parents: 13636
diff changeset
711 '(?w ?_))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
712 (symbol-under-point))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
713 (t
13793
b51b78fa556e (symbol-under-point, symbol-before-point)
Karl Heuer <kwzh@gnu.org>
parents: 13636
diff changeset
714 (symbol-before-point))))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
715
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
716
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
717 (defun symbol-before-point-for-complete ()
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
718 ;; "Returns a string of the symbol immediately before point
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
719 ;; 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
720 ;; end chars."
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
721 ;; Cursor is on following-char and after preceding-char
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
722 (setq cmpl-saved-syntax (syntax-table))
13793
b51b78fa556e (symbol-under-point, symbol-before-point)
Karl Heuer <kwzh@gnu.org>
parents: 13636
diff changeset
723 (unwind-protect
b51b78fa556e (symbol-under-point, symbol-before-point)
Karl Heuer <kwzh@gnu.org>
parents: 13636
diff changeset
724 (progn
b51b78fa556e (symbol-under-point, symbol-before-point)
Karl Heuer <kwzh@gnu.org>
parents: 13636
diff changeset
725 (set-syntax-table cmpl-syntax-table)
b51b78fa556e (symbol-under-point, symbol-before-point)
Karl Heuer <kwzh@gnu.org>
parents: 13636
diff changeset
726 (cond ((memq (setq cmpl-preceding-syntax (char-syntax (preceding-char)))
b51b78fa556e (symbol-under-point, symbol-before-point)
Karl Heuer <kwzh@gnu.org>
parents: 13636
diff changeset
727 '(?_ ?w))
b51b78fa556e (symbol-under-point, symbol-before-point)
Karl Heuer <kwzh@gnu.org>
parents: 13636
diff changeset
728 (setq cmpl-symbol-end (point)
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
729 cmpl-symbol-start (scan-sexps cmpl-symbol-end -1))
13793
b51b78fa556e (symbol-under-point, symbol-before-point)
Karl Heuer <kwzh@gnu.org>
parents: 13636
diff changeset
730 ;; Remove chars to ignore at the start.
b51b78fa556e (symbol-under-point, symbol-before-point)
Karl Heuer <kwzh@gnu.org>
parents: 13636
diff changeset
731 (cond ((= (char-syntax (char-after cmpl-symbol-start)) ?w)
b51b78fa556e (symbol-under-point, symbol-before-point)
Karl Heuer <kwzh@gnu.org>
parents: 13636
diff changeset
732 (goto-char cmpl-symbol-start)
b51b78fa556e (symbol-under-point, symbol-before-point)
Karl Heuer <kwzh@gnu.org>
parents: 13636
diff changeset
733 (forward-word 1)
b51b78fa556e (symbol-under-point, symbol-before-point)
Karl Heuer <kwzh@gnu.org>
parents: 13636
diff changeset
734 (setq cmpl-symbol-start (point))
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
735 (goto-char cmpl-symbol-end)))
13793
b51b78fa556e (symbol-under-point, symbol-before-point)
Karl Heuer <kwzh@gnu.org>
parents: 13636
diff changeset
736 ;; Return completion if the length is reasonable.
b51b78fa556e (symbol-under-point, symbol-before-point)
Karl Heuer <kwzh@gnu.org>
parents: 13636
diff changeset
737 (if (and (<= (cmpl-read-time-eval
b51b78fa556e (symbol-under-point, symbol-before-point)
Karl Heuer <kwzh@gnu.org>
parents: 13636
diff changeset
738 completion-prefix-min-length)
b51b78fa556e (symbol-under-point, symbol-before-point)
Karl Heuer <kwzh@gnu.org>
parents: 13636
diff changeset
739 (- cmpl-symbol-end cmpl-symbol-start))
b51b78fa556e (symbol-under-point, symbol-before-point)
Karl Heuer <kwzh@gnu.org>
parents: 13636
diff changeset
740 (<= (- cmpl-symbol-end cmpl-symbol-start)
b51b78fa556e (symbol-under-point, symbol-before-point)
Karl Heuer <kwzh@gnu.org>
parents: 13636
diff changeset
741 (cmpl-read-time-eval completion-max-length)))
b51b78fa556e (symbol-under-point, symbol-before-point)
Karl Heuer <kwzh@gnu.org>
parents: 13636
diff changeset
742 (buffer-substring cmpl-symbol-start cmpl-symbol-end)))))
b51b78fa556e (symbol-under-point, symbol-before-point)
Karl Heuer <kwzh@gnu.org>
parents: 13636
diff changeset
743 ;; Restore syntax table.
b51b78fa556e (symbol-under-point, symbol-before-point)
Karl Heuer <kwzh@gnu.org>
parents: 13636
diff changeset
744 (set-syntax-table cmpl-saved-syntax)))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
745
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
746 ;; tests for symbol-before-point-for-complete
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
747 ;; `^' indicates cursor pos. where value is returned
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
748 ;; simple-word-test
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
749 ;; ^ --> nil
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
750 ;; ^ --> nil
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
751 ;; ^ --> simple-w
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
752 ;; ^ --> simple-word-test
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
753 ;; _harder_word_test_
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
754 ;; ^ --> harder_word_test
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
755 ;; ^ --> harder_word_test_
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
756 ;; ^ --> harder_
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
757 ;; .___....
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
758 ;; --> nil
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
759
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
760
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
761
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
762 ;;---------------------------------------------------------------------------
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
763 ;; Statistics Recording
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
764 ;;---------------------------------------------------------------------------
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
765
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
766 ;; Note that the guts of this has been turned off. The guts
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
767 ;; are in completion-stats.el.
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
768
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
769 ;;-----------------------------------------------
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
770 ;; Conditionalizing code on *record-cmpl-statistics-p*
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
771 ;;-----------------------------------------------
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
772 ;; All statistics code outside this block should use this
3175
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
773 (defmacro cmpl-statistics-block (&rest body))
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
774 ;; "Only executes body if we are recording statistics."
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
775 ;; (list 'cond
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
776 ;; (list* '*record-cmpl-statistics-p* body)
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
777 ;; ))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
778
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
779 ;;-----------------------------------------------
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
780 ;; Completion Sources
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
781 ;;-----------------------------------------------
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
782
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
783 ;; ID numbers
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
784 (defconst cmpl-source-unknown 0)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
785 (defconst cmpl-source-init-file 1)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
786 (defconst cmpl-source-file-parsing 2)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
787 (defconst cmpl-source-separator 3)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
788 (defconst cmpl-source-cursor-moves 4)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
789 (defconst cmpl-source-interactive 5)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
790 (defconst cmpl-source-cdabbrev 6)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
791 (defconst num-cmpl-sources 7)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
792 (defvar current-completion-source cmpl-source-unknown)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
793
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
794
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
795
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
796 ;;---------------------------------------------------------------------------
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
797 ;; Completion Method #2: dabbrev-expand style
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
798 ;;---------------------------------------------------------------------------
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
799 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
800 ;; This method is used if there are no useful stored completions. It is
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
801 ;; based on dabbrev-expand with these differences :
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
802 ;; 1) Faster (we don't use regexps)
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
803 ;; 2) case coercion handled correctly
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
804 ;; This is called cdabbrev to differentiate it.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
805 ;; We simply search backwards through the file looking for words which
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
806 ;; start with the same letters we are trying to complete.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
807 ;;
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
808
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
809 (defvar cdabbrev-completions-tried nil)
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
810 ;; "A list of all the cdabbrev completions since the last reset.")
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
811
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
812 (defvar cdabbrev-current-point 0)
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
813 ;; "The current point position the cdabbrev search is at.")
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
814
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
815 (defvar cdabbrev-current-window nil)
23605
527b3c7d0b5b (dynamic-completion-mode): New function to enable
Richard M. Stallman <rms@gnu.org>
parents: 23382
diff changeset
816 ;; "The current window we are looking for cdabbrevs in.
527b3c7d0b5b (dynamic-completion-mode): New function to enable
Richard M. Stallman <rms@gnu.org>
parents: 23382
diff changeset
817 ;; Return t if looking in (other-buffer), nil if no more cdabbrevs.")
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
818
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
819 (defvar cdabbrev-wrapped-p nil)
23605
527b3c7d0b5b (dynamic-completion-mode): New function to enable
Richard M. Stallman <rms@gnu.org>
parents: 23382
diff changeset
820 ;; "Return t if the cdabbrev search has wrapped around the file.")
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
821
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
822 (defvar cdabbrev-abbrev-string "")
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
823 (defvar cdabbrev-start-point 0)
10638
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
824 (defvar cdabbrev-stop-point)
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
825
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
826 ;; Test strings for cdabbrev
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
827 ;; cdat-upcase ;;same namestring
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
828 ;; CDAT-UPCASE ;;ok
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
829 ;; cdat2 ;;too short
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
830 ;; cdat-1-2-3-4 ;;ok
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
831 ;; a-cdat-1 ;;doesn't start correctly
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
832 ;; cdat-simple ;;ok
56
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
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
835 (defun reset-cdabbrev (abbrev-string &optional initial-completions-tried)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
836 "Resets the cdabbrev search to search for abbrev-string.
3175
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
837 INITIAL-COMPLETIONS-TRIED is a list of downcased strings to ignore
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
838 during the search."
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
839 (setq cdabbrev-abbrev-string abbrev-string
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
840 cdabbrev-completions-tried
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
841 (cons (downcase abbrev-string) initial-completions-tried))
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
842 (reset-cdabbrev-window t))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
843
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
844 (defun set-cdabbrev-buffer ()
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
845 ;; cdabbrev-current-window must not be NIL
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
846 (set-buffer (if (eq cdabbrev-current-window t)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
847 (other-buffer)
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
848 (window-buffer cdabbrev-current-window))))
56
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 (defun reset-cdabbrev-window (&optional initializep)
3175
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
852 "Resets the cdabbrev search to search for abbrev-string."
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
853 ;; Set the window
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
854 (cond (initializep
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
855 (setq cdabbrev-current-window (selected-window)))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
856 ((eq cdabbrev-current-window t)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
857 ;; Everything has failed
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
858 (setq cdabbrev-current-window nil))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
859 (cdabbrev-current-window
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
860 (setq cdabbrev-current-window (next-window cdabbrev-current-window))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
861 (if (eq cdabbrev-current-window (selected-window))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
862 ;; No more windows, try other buffer.
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
863 (setq cdabbrev-current-window t))))
10638
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
864 (if cdabbrev-current-window
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
865 (save-excursion
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
866 (set-cdabbrev-buffer)
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
867 (setq cdabbrev-current-point (point)
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
868 cdabbrev-start-point cdabbrev-current-point
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
869 cdabbrev-stop-point
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
870 (if completion-search-distance
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
871 (max (point-min)
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
872 (- cdabbrev-start-point completion-search-distance))
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
873 (point-min))
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
874 cdabbrev-wrapped-p nil))))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
875
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
876 (defun next-cdabbrev ()
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
877 "Return the next possible cdabbrev expansion or nil if there isn't one.
3175
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
878 `reset-cdabbrev' must've been called already.
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
879 This is sensitive to `case-fold-search'."
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
880 ;; note that case-fold-search affects the behavior of this function
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
881 ;; Bug: won't pick up an expansion that starts at the top of buffer
10638
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
882 (if cdabbrev-current-window
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
883 (let (saved-point
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
884 saved-syntax
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
885 (expansion nil)
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
886 downcase-expansion tried-list syntax saved-point-2)
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
887 (save-excursion
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
888 (unwind-protect
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
889 (progn
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
890 ;; Switch to current completion buffer
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
891 (set-cdabbrev-buffer)
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
892 ;; Save current buffer state
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
893 (setq saved-point (point)
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
894 saved-syntax (syntax-table))
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
895 ;; Restore completion state
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
896 (set-syntax-table cmpl-syntax-table)
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
897 (goto-char cdabbrev-current-point)
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
898 ;; Loop looking for completions
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
899 (while
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
900 ;; This code returns t if it should loop again
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
901 (cond
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
902 (;; search for the string
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
903 (search-backward cdabbrev-abbrev-string cdabbrev-stop-point t)
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
904 ;; return nil if the completion is valid
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
905 (not
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
906 (and
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
907 ;; does it start with a separator char ?
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
908 (or (= (setq syntax (char-syntax (preceding-char))) ? )
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
909 (and (= syntax ?w)
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
910 ;; symbol char to ignore at end. Are we at end ?
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
911 (progn
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
912 (setq saved-point-2 (point))
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
913 (forward-word -1)
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
914 (prog1
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
915 (= (char-syntax (preceding-char)) ? )
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
916 (goto-char saved-point-2)))))
10638
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
917 ;; is the symbol long enough ?
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
918 (setq expansion (symbol-under-point))
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
919 ;; have we not tried this one before
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
920 (progn
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
921 ;; See if we've already used it
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
922 (setq tried-list cdabbrev-completions-tried
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
923 downcase-expansion (downcase expansion))
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
924 (while (and tried-list
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
925 (not (string-equal downcase-expansion
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
926 (car tried-list))))
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
927 ;; Already tried, don't choose this one
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
928 (setq tried-list (cdr tried-list)))
10638
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
929 ;; at this point tried-list will be nil if this
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
930 ;; expansion has not yet been tried
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
931 (if tried-list
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
932 (setq expansion nil)
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
933 t)))))
10638
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
934 ;; search failed
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
935 (cdabbrev-wrapped-p
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
936 ;; If already wrapped, then we've failed completely
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
937 nil)
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
938 (t
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
939 ;; need to wrap
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
940 (goto-char (setq cdabbrev-current-point
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
941 (if completion-search-distance
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
942 (min (point-max) (+ cdabbrev-start-point completion-search-distance))
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
943 (point-max))))
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
944
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
945 (setq cdabbrev-wrapped-p t))))
10638
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
946 ;; end of while loop
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
947 (cond (expansion
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
948 ;; successful
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
949 (setq cdabbrev-completions-tried
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
950 (cons downcase-expansion cdabbrev-completions-tried)
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
951 cdabbrev-current-point (point)))))
10638
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
952 (set-syntax-table saved-syntax)
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
953 (goto-char saved-point)))
10638
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
954 ;; If no expansion, go to next window
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
955 (cond (expansion)
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
956 (t (reset-cdabbrev-window)
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
957 (next-cdabbrev))))))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
958
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
959 ;; The following must be eval'd in the minibuffer ::
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
960 ;; (reset-cdabbrev "cdat")
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
961 ;; (next-cdabbrev) --> "cdat-simple"
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
962 ;; (next-cdabbrev) --> "cdat-1-2-3-4"
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
963 ;; (next-cdabbrev) --> "CDAT-UPCASE"
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
964 ;; (next-cdabbrev) --> "cdat-wrapping"
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
965 ;; (next-cdabbrev) --> "cdat_start_sym"
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
966 ;; (next-cdabbrev) --> nil
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
967 ;; (next-cdabbrev) --> nil
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
968 ;; (next-cdabbrev) --> nil
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
969
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
970 ;; _cdat_start_sym
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
971 ;; cdat-wrapping
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
972
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
973
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
974 ;;---------------------------------------------------------------------------
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
975 ;; Completion Database
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
976 ;;---------------------------------------------------------------------------
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
977
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
978 ;; We use two storage modes for the two search types ::
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
979 ;; 1) Prefix {cmpl-prefix-obarray} for looking up possible completions
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
980 ;; Used by search-completion-next
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
981 ;; the value of the symbol is nil or a cons of head and tail pointers
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
982 ;; 2) Interning {cmpl-obarray} to see if it's in the database
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
983 ;; Used by find-exact-completion, completion-in-database-p
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
984 ;; The value of the symbol is the completion entry
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
985
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
986 ;; bad things may happen if this length is changed due to the way
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
987 ;; GNU implements obarrays
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
988 (defconst cmpl-obarray-length 511)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
989
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
990 (defvar cmpl-prefix-obarray (make-vector cmpl-obarray-length 0)
3591
507f64624555 Apply typo patches from Paul Eggert.
Jim Blandy <jimb@redhat.com>
parents: 3186
diff changeset
991 "An obarray used to store the downcased completion prefixes.
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
992 Each symbol is bound to a list of completion entries.")
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
993
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
994 (defvar cmpl-obarray (make-vector cmpl-obarray-length 0)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
995 "An obarray used to store the downcased completions.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
996 Each symbol is bound to a single completion entry.")
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
997
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
998 ;;-----------------------------------------------
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
999 ;; Completion Entry Structure Definition
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1000 ;;-----------------------------------------------
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1001
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1002 ;; A completion entry is a LIST of string, prefix-symbol num-uses, and
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1003 ;; last-use-time (the time the completion was last used)
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1004 ;; last-use-time is T if the string should be kept permanently
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1005 ;; num-uses is incremented every time the completion is used.
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1006
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1007 ;; We chose lists because (car foo) is faster than (aref foo 0) and the
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1008 ;; creation time is about the same.
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1009
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1010 ;; READER MACROS
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1011
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1012 (defmacro completion-string (completion-entry)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1013 (list 'car completion-entry))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1014
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1015 (defmacro completion-num-uses (completion-entry)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1016 ;; "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
1017 ;; it."
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1018 (list 'car (list 'cdr completion-entry)))
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 (defmacro completion-last-use-time (completion-entry)
3175
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
1021 ;; "The time it was last used. In hours since origin. Used to decide
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1022 ;; whether to save it. T if one should always save it."
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1023 (list 'nth 2 completion-entry))
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 (defmacro completion-source (completion-entry)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1026 (list 'nth 3 completion-entry))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1027
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1028 ;; WRITER MACROS
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1029 (defmacro set-completion-string (completion-entry string)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1030 (list 'setcar completion-entry string))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1031
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1032 (defmacro set-completion-num-uses (completion-entry num-uses)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1033 (list 'setcar (list 'cdr completion-entry) num-uses))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1034
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1035 (defmacro set-completion-last-use-time (completion-entry last-use-time)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1036 (list 'setcar (list 'cdr (list 'cdr completion-entry)) last-use-time))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1037
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1038 ;; CONSTRUCTOR
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1039 (defun make-completion (string)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1040 "Returns a list of a completion entry."
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1041 (list (list string 0 nil current-completion-source)))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1042
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1043 ;; Obsolete
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1044 ;;(defmacro cmpl-prefix-entry-symbol (completion-entry)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1045 ;; (list 'car (list 'cdr completion-entry)))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1046
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1047
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1048
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1049 ;;-----------------------------------------------
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1050 ;; Prefix symbol entry definition
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1051 ;;-----------------------------------------------
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1052 ;; A cons of (head . tail)
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1053
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1054 ;; READER Macros
56
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 (defmacro cmpl-prefix-entry-head (prefix-entry)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1057 (list 'car prefix-entry))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1058
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1059 (defmacro cmpl-prefix-entry-tail (prefix-entry)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1060 (list 'cdr prefix-entry))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1061
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1062 ;; WRITER Macros
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1063
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1064 (defmacro set-cmpl-prefix-entry-head (prefix-entry new-head)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1065 (list 'setcar prefix-entry new-head))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1066
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1067 (defmacro set-cmpl-prefix-entry-tail (prefix-entry new-tail)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1068 (list 'setcdr prefix-entry new-tail))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1069
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1070 ;; Constructor
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1071
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1072 (defun make-cmpl-prefix-entry (completion-entry-list)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1073 "Makes a new prefix entry containing only completion-entry."
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1074 (cons completion-entry-list completion-entry-list))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1075
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1076 ;;-----------------------------------------------
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1077 ;; Completion Database - Utilities
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1078 ;;-----------------------------------------------
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1079
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1080 (defun clear-all-completions ()
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
1081 "Initialize the completion storage. All existing completions are lost."
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1082 (interactive)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1083 (setq cmpl-prefix-obarray (make-vector cmpl-obarray-length 0))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1084 (setq cmpl-obarray (make-vector cmpl-obarray-length 0))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1085 (cmpl-statistics-block
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
1086 (record-clear-all-completions)))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1087
10638
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
1088 (defvar completions-list-return-value)
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
1089
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1090 (defun list-all-completions ()
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
1091 "Return a list of all the known completion entries."
10638
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
1092 (let ((completions-list-return-value nil))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1093 (mapatoms 'list-all-completions-1 cmpl-prefix-obarray)
10638
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
1094 completions-list-return-value))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1095
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1096 (defun list-all-completions-1 (prefix-symbol)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1097 (if (boundp prefix-symbol)
10638
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
1098 (setq completions-list-return-value
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1099 (append (cmpl-prefix-entry-head (symbol-value prefix-symbol))
10638
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
1100 completions-list-return-value))))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1101
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1102 (defun list-all-completions-by-hash-bucket ()
3175
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
1103 "Return list of lists of known completion entries, organized by hash bucket."
10638
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
1104 (let ((completions-list-return-value nil))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1105 (mapatoms 'list-all-completions-by-hash-bucket-1 cmpl-prefix-obarray)
10638
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
1106 completions-list-return-value))
56
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 (defun list-all-completions-by-hash-bucket-1 (prefix-symbol)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1109 (if (boundp prefix-symbol)
10638
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
1110 (setq completions-list-return-value
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1111 (cons (cmpl-prefix-entry-head (symbol-value prefix-symbol))
10638
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
1112 completions-list-return-value))))
56
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
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1115 ;;-----------------------------------------------
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1116 ;; Updating the database
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1117 ;;-----------------------------------------------
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1118 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1119 ;; These are the internal functions used to update the datebase
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1120 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1121 ;;
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1122 (defvar completion-to-accept nil)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1123 ;;"Set to a string that is pending its acceptance."
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1124 ;; this checked by the top level reading functions
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1125
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1126 (defvar cmpl-db-downcase-string nil)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1127 ;; "Setup by find-exact-completion, etc. The given string, downcased."
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1128 (defvar cmpl-db-symbol nil)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1129 ;; "The interned symbol corresponding to cmpl-db-downcase-string.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1130 ;; Set up by cmpl-db-symbol."
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1131 (defvar cmpl-db-prefix-symbol nil)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1132 ;; "The interned prefix symbol corresponding to cmpl-db-downcase-string."
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1133 (defvar cmpl-db-entry nil)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1134 (defvar cmpl-db-debug-p nil
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1135 "Set to T if you want to debug the database.")
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1136
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1137 ;; READS
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1138 (defun find-exact-completion (string)
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
1139 "Return the completion entry for STRING or nil.
3175
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
1140 Sets up `cmpl-db-downcase-string' and `cmpl-db-symbol'."
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1141 (and (boundp (setq cmpl-db-symbol
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1142 (intern (setq cmpl-db-downcase-string (downcase string))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1143 cmpl-obarray)))
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
1144 (symbol-value cmpl-db-symbol)))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1145
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1146 (defun find-cmpl-prefix-entry (prefix-string)
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
1147 "Return the prefix entry for string.
3175
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
1148 Sets `cmpl-db-prefix-symbol'.
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
1149 Prefix-string must be exactly `completion-prefix-min-length' long
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
1150 and downcased. Sets up `cmpl-db-prefix-symbol'."
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1151 (and (boundp (setq cmpl-db-prefix-symbol
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1152 (intern prefix-string cmpl-prefix-obarray)))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1153 (symbol-value cmpl-db-prefix-symbol)))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1154
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1155 (defvar inside-locate-completion-entry nil)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1156 ;; used to trap lossage in silent error correction
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1157
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1158 (defun locate-completion-entry (completion-entry prefix-entry)
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
1159 "Locate the completion entry.
1356
dcf780f7ae1b Doc fix.
Christopher Zaborsky <rogue@erratum.com>
parents: 845
diff changeset
1160 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
1161 the completion entry is at the head.
3175
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
1162 Must be called after `find-exact-completion'."
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1163 (let ((prefix-list (cmpl-prefix-entry-head prefix-entry))
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
1164 next-prefix-list)
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1165 (cond
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1166 ((not (eq (car prefix-list) completion-entry))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1167 ;; not already at head
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1168 (while (and prefix-list
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1169 (not (eq completion-entry
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
1170 (car (setq next-prefix-list (cdr prefix-list))))))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1171 (setq prefix-list next-prefix-list))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1172 (cond (;; found
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1173 prefix-list)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1174 ;; Didn't find it. Database is messed up.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1175 (cmpl-db-debug-p
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1176 ;; not found, error if debug mode
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1177 (error "Completion entry exists but not on prefix list - %s"
10638
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
1178 completion-string))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1179 (inside-locate-completion-entry
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1180 ;; recursive error: really scrod
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1181 (locate-completion-db-error))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1182 (t
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1183 ;; Patch out
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1184 (set cmpl-db-symbol nil)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1185 ;; Retry
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
1186 (locate-completion-entry-retry completion-entry)))))))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1187
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1188 (defun locate-completion-entry-retry (old-entry)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1189 (let ((inside-locate-completion-entry t))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1190 (add-completion (completion-string old-entry)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1191 (completion-num-uses old-entry)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1192 (completion-last-use-time old-entry))
10638
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
1193 (let* ((cmpl-entry (find-exact-completion (completion-string old-entry)))
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
1194 (pref-entry
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
1195 (if cmpl-entry
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
1196 (find-cmpl-prefix-entry
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
1197 (substring cmpl-db-downcase-string
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
1198 0 completion-prefix-min-length)))))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1199 (if (and cmpl-entry pref-entry)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1200 ;; try again
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1201 (locate-completion-entry cmpl-entry pref-entry)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1202 ;; still losing
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
1203 (locate-completion-db-error)))))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1204
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1205 (defun locate-completion-db-error ()
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1206 ;; recursive error: really scrod
38412
253f761ad37b Some fixes to follow coding conventions in files maintained by FSF.
Pavel Janík <Pavel@Janik.cz>
parents: 29118
diff changeset
1207 (error "Completion database corrupted. Try M-x clear-all-completions. Send bug report"))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1208
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1209 ;; WRITES
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1210 (defun add-completion-to-tail-if-new (string)
1356
dcf780f7ae1b Doc fix.
Christopher Zaborsky <rogue@erratum.com>
parents: 845
diff changeset
1211 "If STRING is not in the database add it to appropriate prefix list.
3591
507f64624555 Apply typo patches from Paul Eggert.
Jim Blandy <jimb@redhat.com>
parents: 3186
diff changeset
1212 STRING is added to the end of the appropriate prefix list with
1356
dcf780f7ae1b Doc fix.
Christopher Zaborsky <rogue@erratum.com>
parents: 845
diff changeset
1213 num-uses = 0. The database is unchanged if it is there. STRING must be
3175
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
1214 longer than `completion-prefix-min-length'.
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1215 This must be very fast.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1216 Returns the completion entry."
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1217 (or (find-exact-completion string)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1218 ;; not there
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1219 (let (;; create an entry
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1220 (entry (make-completion string))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1221 ;; setup the prefix
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1222 (prefix-entry (find-cmpl-prefix-entry
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1223 (substring cmpl-db-downcase-string 0
3175
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
1224 (cmpl-read-time-eval
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
1225 completion-prefix-min-length)))))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1226 ;; The next two forms should happen as a unit (atomically) but
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1227 ;; no fatal errors should result if that is not the case.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1228 (cond (prefix-entry
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1229 ;; These two should be atomic, but nothing fatal will happen
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1230 ;; if they're not.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1231 (setcdr (cmpl-prefix-entry-tail prefix-entry) entry)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1232 (set-cmpl-prefix-entry-tail prefix-entry entry))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1233 (t
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
1234 (set cmpl-db-prefix-symbol (make-cmpl-prefix-entry entry))))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1235 ;; statistics
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1236 (cmpl-statistics-block
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1237 (note-added-completion))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1238 ;; set symbol
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
1239 (set cmpl-db-symbol (car entry)))))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1240
10638
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
1241 (defun add-completion-to-head (completion-string)
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
1242 "If COMPLETION-STRING is not in the database, add it to prefix list.
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
1243 We add COMPLETION-STRING to the head of the appropriate prefix list,
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
1244 or it to the head of the list.
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
1245 COMPLETION-STRING must be longer than `completion-prefix-min-length'.
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1246 Updates the saved string with the supplied string.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1247 This must be very fast.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1248 Returns the completion entry."
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1249 ;; Handle pending acceptance
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1250 (if completion-to-accept (accept-completion))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1251 ;; test if already in database
10638
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
1252 (if (setq cmpl-db-entry (find-exact-completion completion-string))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1253 ;; found
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1254 (let* ((prefix-entry (find-cmpl-prefix-entry
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1255 (substring cmpl-db-downcase-string 0
3175
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
1256 (cmpl-read-time-eval
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
1257 completion-prefix-min-length))))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1258 (splice-ptr (locate-completion-entry cmpl-db-entry prefix-entry))
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
1259 (cmpl-ptr (cdr splice-ptr)))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1260 ;; update entry
10638
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
1261 (set-completion-string cmpl-db-entry completion-string)
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1262 ;; move to head (if necessary)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1263 (cond (splice-ptr
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1264 ;; These should all execute atomically but it is not fatal if
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1265 ;; they don't.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1266 ;; splice it out
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1267 (or (setcdr splice-ptr (cdr cmpl-ptr))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1268 ;; fix up tail if necessary
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1269 (set-cmpl-prefix-entry-tail prefix-entry splice-ptr))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1270 ;; splice in at head
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1271 (setcdr cmpl-ptr (cmpl-prefix-entry-head prefix-entry))
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
1272 (set-cmpl-prefix-entry-head prefix-entry cmpl-ptr)))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1273 cmpl-db-entry)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1274 ;; not there
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1275 (let (;; create an entry
10638
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
1276 (entry (make-completion completion-string))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1277 ;; setup the prefix
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1278 (prefix-entry (find-cmpl-prefix-entry
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1279 (substring cmpl-db-downcase-string 0
3175
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
1280 (cmpl-read-time-eval
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
1281 completion-prefix-min-length)))))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1282 (cond (prefix-entry
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1283 ;; Splice in at head
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1284 (setcdr entry (cmpl-prefix-entry-head prefix-entry))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1285 (set-cmpl-prefix-entry-head prefix-entry entry))
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 ;; Start new prefix entry
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
1288 (set cmpl-db-prefix-symbol (make-cmpl-prefix-entry entry))))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1289 ;; statistics
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1290 (cmpl-statistics-block
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1291 (note-added-completion))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1292 ;; Add it to the symbol
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
1293 (set cmpl-db-symbol (car entry)))))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1294
10638
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
1295 (defun delete-completion (completion-string)
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
1296 "Delete the completion from the database.
3175
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
1297 String must be longer than `completion-prefix-min-length'."
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1298 ;; Handle pending acceptance
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1299 (if completion-to-accept (accept-completion))
10638
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
1300 (if (setq cmpl-db-entry (find-exact-completion completion-string))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1301 ;; found
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1302 (let* ((prefix-entry (find-cmpl-prefix-entry
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1303 (substring cmpl-db-downcase-string 0
3175
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
1304 (cmpl-read-time-eval
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
1305 completion-prefix-min-length))))
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
1306 (splice-ptr (locate-completion-entry cmpl-db-entry prefix-entry)))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1307 ;; delete symbol reference
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1308 (set cmpl-db-symbol nil)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1309 ;; remove from prefix list
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1310 (cond (splice-ptr
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1311 ;; not at head
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1312 (or (setcdr splice-ptr (cdr (cdr splice-ptr)))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1313 ;; fix up tail if necessary
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
1314 (set-cmpl-prefix-entry-tail prefix-entry splice-ptr)))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1315 (t
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1316 ;; at head
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1317 (or (set-cmpl-prefix-entry-head
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1318 prefix-entry (cdr (cmpl-prefix-entry-head prefix-entry)))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1319 ;; List is now empty
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
1320 (set cmpl-db-prefix-symbol nil))))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1321 (cmpl-statistics-block
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
1322 (note-completion-deleted)))
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
1323 (error "Unknown completion `%s'" completion-string)))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1324
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1325 ;; Tests --
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1326 ;; - Add and Find -
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1327 ;; (add-completion-to-head "banana") --> ("banana" 0 nil 0)
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1328 ;; (find-exact-completion "banana") --> ("banana" 0 nil 0)
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1329 ;; (find-exact-completion "bana") --> nil
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1330 ;; (car (find-cmpl-prefix-entry "ban")) --> (("banana" ...))
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1331 ;; (cdr (find-cmpl-prefix-entry "ban")) --> (("banana" ...))
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1332 ;; (add-completion-to-head "banish") --> ("banish" 0 nil 0)
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1333 ;; (find-exact-completion "banish") --> ("banish" 0 nil 0)
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1334 ;; (car (find-cmpl-prefix-entry "ban")) --> (("banish" ...) ("banana" ...))
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1335 ;; (cdr (find-cmpl-prefix-entry "ban")) --> (("banana" ...))
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1336 ;; (add-completion-to-head "banana") --> ("banana" 0 nil 0)
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1337 ;; (car (find-cmpl-prefix-entry "ban")) --> (("banana" ...) ("banish" ...))
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1338 ;; (cdr (find-cmpl-prefix-entry "ban")) --> (("banish" ...))
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1339 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1340 ;; - Deleting -
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1341 ;; (add-completion-to-head "banner") --> ("banner" 0 nil 0)
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1342 ;; (delete-completion "banner")
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1343 ;; (find-exact-completion "banner") --> nil
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1344 ;; (car (find-cmpl-prefix-entry "ban")) --> (("banana" ...) ("banish" ...))
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1345 ;; (cdr (find-cmpl-prefix-entry "ban")) --> (("banish" ...))
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1346 ;; (add-completion-to-head "banner") --> ("banner" 0 nil 0)
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1347 ;; (delete-completion "banana")
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1348 ;; (car (find-cmpl-prefix-entry "ban")) --> (("banner" ...) ("banish" ...))
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1349 ;; (cdr (find-cmpl-prefix-entry "ban")) --> (("banish" ...))
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1350 ;; (delete-completion "banner")
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1351 ;; (delete-completion "banish")
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1352 ;; (find-cmpl-prefix-entry "ban") --> nil
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1353 ;; (delete-completion "banner") --> error
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1354 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1355 ;; - Tail -
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1356 ;; (add-completion-to-tail-if-new "banana") --> ("banana" 0 nil 0)
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1357 ;; (car (find-cmpl-prefix-entry "ban")) --> (("banana" ...))
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1358 ;; (cdr (find-cmpl-prefix-entry "ban")) --> (("banana" ...))
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1359 ;; (add-completion-to-tail-if-new "banish") --> ("banish" 0 nil 0)
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1360 ;; (car (find-cmpl-prefix-entry "ban")) -->(("banana" ...) ("banish" ...))
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1361 ;; (cdr (find-cmpl-prefix-entry "ban")) -->(("banish" ...))
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1362 ;;
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1363
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1364
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1365 ;;---------------------------------------------------------------------------
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1366 ;; Database Update :: Interface level routines
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1367 ;;---------------------------------------------------------------------------
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1368 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1369 ;; These lie on top of the database ref. functions but below the standard
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1370 ;; user interface level
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1371
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1372
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1373 (defun interactive-completion-string-reader (prompt)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1374 (let* ((default (symbol-under-or-before-point))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1375 (new-prompt
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1376 (if default
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1377 (format "%s: (default: %s) " prompt default)
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
1378 (format "%s: " prompt)))
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
1379 (read (completing-read new-prompt cmpl-obarray)))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1380 (if (zerop (length read)) (setq read (or default "")))
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
1381 (list read)))
56
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 (defun check-completion-length (string)
3175
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
1384 (if (< (length string) completion-min-length)
10638
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
1385 (error "The string `%s' is too short to be saved as a completion"
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1386 string)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1387 (list string)))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1388
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1389 (defun add-completion (string &optional num-uses last-use-time)
3175
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
1390 "Add STRING to completion list, or move it to head of list.
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1391 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
1392 specified."
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1393 (interactive (interactive-completion-string-reader "Completion to add"))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1394 (check-completion-length string)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1395 (let* ((current-completion-source (if (interactive-p)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1396 cmpl-source-interactive
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1397 current-completion-source))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1398 (entry (add-completion-to-head string)))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1399
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1400 (if num-uses (set-completion-num-uses entry num-uses))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1401 (if last-use-time
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
1402 (set-completion-last-use-time entry last-use-time))))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1403
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1404 (defun add-permanent-completion (string)
3175
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
1405 "Add STRING if it isn't already listed, and mark it permanent."
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1406 (interactive
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1407 (interactive-completion-string-reader "Completion to add permanently"))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1408 (let ((current-completion-source (if (interactive-p)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1409 cmpl-source-interactive
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
1410 current-completion-source)))
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
1411 (add-completion string nil t)))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1412
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1413 (defun kill-completion (string)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1414 (interactive (interactive-completion-string-reader "Completion to kill"))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1415 (check-completion-length string)
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
1416 (delete-completion string))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1417
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1418 (defun accept-completion ()
3175
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
1419 "Accepts the pending completion in `completion-to-accept'.
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
1420 This bumps num-uses. Called by `add-completion-to-head' and
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
1421 `completion-search-reset'."
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1422 (let ((string completion-to-accept)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1423 ;; if this is added afresh here, then it must be a cdabbrev
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1424 (current-completion-source cmpl-source-cdabbrev)
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
1425 entry)
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1426 (setq completion-to-accept nil)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1427 (setq entry (add-completion-to-head string))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1428 (set-completion-num-uses entry (1+ (completion-num-uses entry)))
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
1429 (setq cmpl-completions-accepted-p t)))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1430
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1431 (defun use-completion-under-point ()
3175
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
1432 "Add the completion symbol underneath the point into the completion buffer."
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
1433 (let ((string (and enable-completion (symbol-under-point)))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1434 (current-completion-source cmpl-source-cursor-moves))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1435 (if string (add-completion-to-head string))))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1436
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1437 (defun use-completion-before-point ()
3175
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
1438 "Add the completion symbol before point into the completion buffer."
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
1439 (let ((string (and enable-completion (symbol-before-point)))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1440 (current-completion-source cmpl-source-cursor-moves))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1441 (if string (add-completion-to-head string))))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1442
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1443 (defun use-completion-under-or-before-point ()
3175
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
1444 "Add the completion symbol before point into the completion buffer."
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
1445 (let ((string (and enable-completion (symbol-under-or-before-point)))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1446 (current-completion-source cmpl-source-cursor-moves))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1447 (if string (add-completion-to-head string))))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1448
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1449 (defun use-completion-before-separator ()
3175
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
1450 "Add the completion symbol before point into the completion buffer.
1356
dcf780f7ae1b Doc fix.
Christopher Zaborsky <rogue@erratum.com>
parents: 845
diff changeset
1451 Completions added this way will automatically be saved if
3175
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
1452 `completion-on-separator-character' is non-nil."
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
1453 (let ((string (and enable-completion (symbol-before-point)))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1454 (current-completion-source cmpl-source-separator)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1455 entry)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1456 (cmpl-statistics-block
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
1457 (note-separator-character string))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1458 (cond (string
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1459 (setq entry (add-completion-to-head string))
10638
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
1460 (if (and completion-on-separator-character
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1461 (zerop (completion-num-uses entry)))
10638
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
1462 (progn
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
1463 (set-completion-num-uses entry 1)
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
1464 (setq cmpl-completions-accepted-p t)))))))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1465
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1466 ;; Tests --
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1467 ;; - Add and Find -
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1468 ;; (add-completion "banana" 5 10)
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1469 ;; (find-exact-completion "banana") --> ("banana" 5 10 0)
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1470 ;; (add-completion "banana" 6)
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1471 ;; (find-exact-completion "banana") --> ("banana" 6 10 0)
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1472 ;; (add-completion "banish")
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1473 ;; (car (find-cmpl-prefix-entry "ban")) --> (("banish" ...) ("banana" ...))
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1474 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1475 ;; - Accepting -
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1476 ;; (setq completion-to-accept "banana")
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1477 ;; (accept-completion)
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1478 ;; (find-exact-completion "banana") --> ("banana" 7 10)
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1479 ;; (car (find-cmpl-prefix-entry "ban")) --> (("banana" ...) ("banish" ...))
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1480 ;; (setq completion-to-accept "banish")
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1481 ;; (add-completion "banner")
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1482 ;; (car (find-cmpl-prefix-entry "ban"))
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1483 ;; --> (("banner" ...) ("banish" 1 ...) ("banana" 7 ...))
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1484 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1485 ;; - Deleting -
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1486 ;; (kill-completion "banish")
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1487 ;; (car (find-cmpl-prefix-entry "ban")) --> (("banner" ...) ("banana" ...))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1488
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1489
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1490 ;;---------------------------------------------------------------------------
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1491 ;; Searching the database
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1492 ;;---------------------------------------------------------------------------
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1493 ;; Functions outside this block must call completion-search-reset followed
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1494 ;; by calls to completion-search-next or completion-search-peek
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1495 ;;
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1496
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1497 ;; Status variables
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1498 ;; Commented out to improve loading speed
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1499 (defvar cmpl-test-string "")
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1500 ;; "The current string used by completion-search-next."
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1501 (defvar cmpl-test-regexp "")
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1502 ;; "The current regexp used by completion-search-next.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1503 ;; (derived from cmpl-test-string)"
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1504 (defvar cmpl-last-index 0)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1505 ;; "The last index that completion-search-next was called with."
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1506 (defvar cmpl-cdabbrev-reset-p nil)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1507 ;; "Set to t when cdabbrevs have been reset."
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1508 (defvar cmpl-next-possibilities nil)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1509 ;; "A pointer to the element BEFORE the next set of possible completions.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1510 ;; cadr of this is the cmpl-next-possibility"
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1511 (defvar cmpl-starting-possibilities nil)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1512 ;; "The initial list of starting possibilities."
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1513 (defvar cmpl-next-possibility nil)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1514 ;; "The cached next possibility."
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1515 (defvar cmpl-tried-list nil)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1516 ;; "A downcased list of all the completions we have tried."
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1517
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1518
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1519 (defun completion-search-reset (string)
3175
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
1520 "Set up the for completion searching for STRING.
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
1521 STRING must be longer than `completion-prefix-min-length'."
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1522 (if completion-to-accept (accept-completion))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1523 (setq cmpl-starting-possibilities
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1524 (cmpl-prefix-entry-head
4435
4ad99dc50f6f (cmpl-read-time-eval): Make it no-op.
Richard M. Stallman <rms@gnu.org>
parents: 4434
diff changeset
1525 (find-cmpl-prefix-entry
4ad99dc50f6f (cmpl-read-time-eval): Make it no-op.
Richard M. Stallman <rms@gnu.org>
parents: 4434
diff changeset
1526 (downcase (substring string 0 completion-prefix-min-length))))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1527 cmpl-test-string string
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1528 cmpl-test-regexp (concat (regexp-quote string) "."))
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
1529 (completion-search-reset-1))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1530
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1531 (defun completion-search-reset-1 ()
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1532 (setq cmpl-next-possibilities cmpl-starting-possibilities
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1533 cmpl-next-possibility nil
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1534 cmpl-cdabbrev-reset-p nil
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1535 cmpl-last-index -1
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
1536 cmpl-tried-list nil))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1537
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1538 (defun completion-search-next (index)
3175
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
1539 "Return the next completion entry.
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
1540 If INDEX is out of sequence, reset and start from the top.
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
1541 If there are no more entries, try cdabbrev and returns only a string."
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1542 (cond
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1543 ((= index (setq cmpl-last-index (1+ cmpl-last-index)))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1544 (completion-search-peek t))
10638
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
1545 ((< index 0)
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1546 (completion-search-reset-1)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1547 (setq cmpl-last-index index)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1548 ;; reverse the possibilities list
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1549 (setq cmpl-next-possibilities (reverse cmpl-starting-possibilities))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1550 ;; do a "normal" search
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1551 (while (and (completion-search-peek nil)
10638
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
1552 (< (setq index (1+ index)) 0))
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
1553 (setq cmpl-next-possibility nil))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1554 (cond ((not cmpl-next-possibilities))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1555 ;; If no more possibilities, leave it that way
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1556 ((= -1 cmpl-last-index)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1557 ;; next completion is at index 0. reset next-possibility list
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1558 ;; to start at beginning
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1559 (setq cmpl-next-possibilities cmpl-starting-possibilities))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1560 (t
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1561 ;; otherwise point to one before current
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1562 (setq cmpl-next-possibilities
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1563 (nthcdr (- (length cmpl-starting-possibilities)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1564 (length cmpl-next-possibilities))
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
1565 cmpl-starting-possibilities)))))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1566 (t
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1567 ;; non-negative index, reset and search
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1568 ;;(prin1 'reset)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1569 (completion-search-reset-1)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1570 (setq cmpl-last-index index)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1571 (while (and (completion-search-peek t)
10638
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
1572 (not (< (setq index (1- index)) 0)))
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
1573 (setq cmpl-next-possibility nil))))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1574 (prog1
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1575 cmpl-next-possibility
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
1576 (setq cmpl-next-possibility nil)))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1577
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1578
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1579 (defun completion-search-peek (use-cdabbrev)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1580 "Returns the next completion entry without actually moving the pointers.
3175
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
1581 Calling this again or calling `completion-search-next' results in the same
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
1582 string being returned. Depends on `case-fold-search'.
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
1583 If there are no more entries, try cdabbrev and then return only a string."
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1584 (cond
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1585 ;; return the cached value if we have it
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1586 (cmpl-next-possibility)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1587 ((and cmpl-next-possibilities
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1588 ;; still a few possibilities left
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1589 (progn
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1590 (while
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1591 (and (not (eq 0 (string-match cmpl-test-regexp
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1592 (completion-string (car cmpl-next-possibilities)))))
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
1593 (setq cmpl-next-possibilities (cdr cmpl-next-possibilities))))
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
1594 cmpl-next-possibilities))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1595 ;; successful match
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1596 (setq cmpl-next-possibility (car cmpl-next-possibilities)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1597 cmpl-tried-list (cons (downcase (completion-string cmpl-next-possibility))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1598 cmpl-tried-list)
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
1599 cmpl-next-possibilities (cdr cmpl-next-possibilities))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1600 cmpl-next-possibility)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1601 (use-cdabbrev
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1602 ;; unsuccessful, use cdabbrev
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1603 (cond ((not cmpl-cdabbrev-reset-p)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1604 (reset-cdabbrev cmpl-test-string cmpl-tried-list)
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
1605 (setq cmpl-cdabbrev-reset-p t)))
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
1606 (setq cmpl-next-possibility (next-cdabbrev)))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1607 ;; Completely unsuccessful, return nil
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
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1610 ;; Tests --
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1611 ;; - Add and Find -
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1612 ;; (add-completion "banana")
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1613 ;; (completion-search-reset "ban")
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1614 ;; (completion-search-next 0) --> "banana"
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1615 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1616 ;; - Discrimination -
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1617 ;; (add-completion "cumberland")
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1618 ;; (add-completion "cumberbund")
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1619 ;; cumbering
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1620 ;; (completion-search-reset "cumb")
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1621 ;; (completion-search-peek t) --> "cumberbund"
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1622 ;; (completion-search-next 0) --> "cumberbund"
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1623 ;; (completion-search-peek t) --> "cumberland"
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1624 ;; (completion-search-next 1) --> "cumberland"
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1625 ;; (completion-search-peek nil) --> nil
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1626 ;; (completion-search-next 2) --> "cumbering" {cdabbrev}
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1627 ;; (completion-search-next 3) --> nil or "cumming"{depends on context}
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1628 ;; (completion-search-next 1) --> "cumberland"
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1629 ;; (completion-search-peek t) --> "cumbering" {cdabbrev}
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1630 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1631 ;; - Accepting -
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1632 ;; (completion-search-next 1) --> "cumberland"
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1633 ;; (setq completion-to-accept "cumberland")
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1634 ;; (completion-search-reset "foo")
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1635 ;; (completion-search-reset "cum")
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1636 ;; (completion-search-next 0) --> "cumberland"
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1637 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1638 ;; - Deleting -
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1639 ;; (kill-completion "cumberland")
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1640 ;; cummings
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1641 ;; (completion-search-reset "cum")
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1642 ;; (completion-search-next 0) --> "cumberbund"
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1643 ;; (completion-search-next 1) --> "cummings"
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1644 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1645 ;; - Ignoring Capitalization -
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1646 ;; (completion-search-reset "CuMb")
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1647 ;; (completion-search-next 0) --> "cumberbund"
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1648
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1649
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1650
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1651 ;;-----------------------------------------------
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1652 ;; COMPLETE
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1653 ;;-----------------------------------------------
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1654
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1655 (defun completion-mode ()
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
1656 "Toggle whether or not to add new words to the completion database."
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1657 (interactive)
3175
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
1658 (setq enable-completion (not enable-completion))
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
1659 (message "Completion mode is now %s." (if enable-completion "ON" "OFF")))
56
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 (defvar cmpl-current-index 0)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1662 (defvar cmpl-original-string nil)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1663 (defvar cmpl-last-insert-location -1)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1664 (defvar cmpl-leave-point-at-start nil)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1665
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1666 (defun complete (&optional arg)
3175
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
1667 "Fill out a completion of the word before point.
3591
507f64624555 Apply typo patches from Paul Eggert.
Jim Blandy <jimb@redhat.com>
parents: 3186
diff changeset
1668 Point is left at end. Consecutive calls rotate through all possibilities.
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1669 Prefix args ::
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1670 control-u :: leave the point at the beginning of the completion rather
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1671 than at the end.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1672 a number :: rotate through the possible completions by that amount
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1673 `-' :: same as -1 (insert previous completion)
3175
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
1674 {See the comments at the top of `completion.el' for more info.}"
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1675 (interactive "*p")
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1676 ;;; Set up variables
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1677 (cond ((eq last-command this-command)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1678 ;; Undo last one
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1679 (delete-region cmpl-last-insert-location (point))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1680 ;; get next completion
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
1681 (setq cmpl-current-index (+ cmpl-current-index (or arg 1))))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1682 (t
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1683 (if (not cmpl-initialized-p)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1684 (initialize-completions)) ;; make sure everything's loaded
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1685 (cond ((consp current-prefix-arg) ;; control-u
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1686 (setq arg 0)
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
1687 (setq cmpl-leave-point-at-start t))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1688 (t
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
1689 (setq cmpl-leave-point-at-start nil)))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1690 ;; get string
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1691 (setq cmpl-original-string (symbol-before-point-for-complete))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1692 (cond ((not cmpl-original-string)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1693 (setq this-command 'failed-complete)
10638
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
1694 (error "To complete, point must be after a symbol at least %d character long"
3175
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
1695 completion-prefix-min-length)))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1696 ;; get index
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1697 (setq cmpl-current-index (if current-prefix-arg arg 0))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1698 ;; statistics
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1699 (cmpl-statistics-block
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1700 (note-complete-entered-afresh cmpl-original-string))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1701 ;; reset database
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1702 (completion-search-reset cmpl-original-string)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1703 ;; erase what we've got
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
1704 (delete-region cmpl-symbol-start cmpl-symbol-end)))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1705
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1706 ;; point is at the point to insert the new symbol
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1707 ;; Get the next completion
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1708 (let* ((print-status-p
3175
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
1709 (and (>= baud-rate completion-prompt-speed-threshold)
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1710 (not (minibuffer-window-selected-p))))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1711 (insert-point (point))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1712 (entry (completion-search-next cmpl-current-index))
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
1713 string)
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1714 ;; entry is either a completion entry or a string (if cdabbrev)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1715
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1716 ;; If found, insert
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1717 (cond (entry
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1718 ;; Setup for proper case
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1719 (setq string (if (stringp entry)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1720 entry (completion-string entry)))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1721 (setq string (cmpl-merge-string-cases
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1722 string cmpl-original-string))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1723 ;; insert
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1724 (insert string)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1725 ;; accept it
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1726 (setq completion-to-accept string)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1727 ;; fixup and cache point
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1728 (cond (cmpl-leave-point-at-start
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1729 (setq cmpl-last-insert-location (point))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1730 (goto-char insert-point))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1731 (t;; point at end,
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
1732 (setq cmpl-last-insert-location insert-point)))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1733 ;; statistics
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1734 (cmpl-statistics-block
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1735 (note-complete-inserted entry cmpl-current-index))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1736 ;; Done ! cmpl-stat-complete-successful
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1737 ;;display the next completion
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1738 (cond
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1739 ((and print-status-p
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1740 ;; This updates the display and only prints if there
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1741 ;; is no typeahead
3175
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
1742 (sit-for 0)
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1743 (setq entry
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1744 (completion-search-peek
3175
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
1745 completion-cdabbrev-prompt-flag)))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1746 (setq string (if (stringp entry)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1747 entry (completion-string entry)))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1748 (setq string (cmpl-merge-string-cases
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1749 string cmpl-original-string))
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
1750 (message "Next completion: %s" string))))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1751 (t;; none found, insert old
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1752 (insert cmpl-original-string)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1753 ;; Don't accept completions
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1754 (setq completion-to-accept nil)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1755 ;; print message
4218
8e42b7df5c4f (complete): Use sit-for, not cmpl19-sit-for.
Richard M. Stallman <rms@gnu.org>
parents: 3846
diff changeset
1756 ;; This used to call cmpl19-sit-for, an undefined function.
8e42b7df5c4f (complete): Use sit-for, not cmpl19-sit-for.
Richard M. Stallman <rms@gnu.org>
parents: 3846
diff changeset
1757 ;; I hope that sit-for does the right thing; I don't know -- rms.
8e42b7df5c4f (complete): Use sit-for, not cmpl19-sit-for.
Richard M. Stallman <rms@gnu.org>
parents: 3846
diff changeset
1758 (if (and print-status-p (sit-for 0))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1759 (message "No %scompletions."
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1760 (if (eq this-command last-command) "more " "")))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1761 ;; statistics
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1762 (cmpl-statistics-block
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1763 (record-complete-failed cmpl-current-index))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1764 ;; Pretend that we were never here
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
1765 (setq this-command 'failed-complete)))))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1766
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1767 ;;---------------------------------------------------------------------------
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1768 ;; Parsing definitions from files into the database
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1769 ;;---------------------------------------------------------------------------
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1770
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1771 ;;-----------------------------------------------
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1772 ;; Top Level functions ::
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1773 ;;-----------------------------------------------
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1774
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1775 ;; User interface
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1776 (defun add-completions-from-file (file)
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
1777 "Parse possible completions from a FILE and add them to data base."
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1778 (interactive "fFile: ")
3175
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
1779 (setq file (expand-file-name file))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1780 (let* ((buffer (get-file-buffer file))
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
1781 (buffer-already-there-p buffer))
10638
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
1782 (if (not buffer-already-there-p)
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
1783 (let ((completions-merging-modes nil))
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
1784 (setq buffer (find-file-noselect file))))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1785 (unwind-protect
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1786 (save-excursion
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1787 (set-buffer buffer)
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
1788 (add-completions-from-buffer))
10638
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
1789 (if (not buffer-already-there-p)
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
1790 (kill-buffer buffer)))))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1791
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1792 (defun add-completions-from-buffer ()
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1793 (interactive)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1794 (let ((current-completion-source cmpl-source-file-parsing)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1795 (start-num
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1796 (cmpl-statistics-block
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1797 (aref completion-add-count-vector cmpl-source-file-parsing)))
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
1798 mode)
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1799 (cond ((memq major-mode '(emacs-lisp-mode lisp-mode))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1800 (add-completions-from-lisp-buffer)
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
1801 (setq mode 'lisp))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1802 ((memq major-mode '(c-mode))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1803 (add-completions-from-c-buffer)
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
1804 (setq mode 'c))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1805 (t
10638
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
1806 (error "Cannot parse completions in %s buffers"
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
1807 major-mode)))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1808 (cmpl-statistics-block
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1809 (record-cmpl-parse-file
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1810 mode (point-max)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1811 (- (aref completion-add-count-vector cmpl-source-file-parsing)
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
1812 start-num)))))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1813
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1814 ;; Find file hook
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1815 (defun cmpl-find-file-hook ()
3175
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
1816 (cond (enable-completion
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1817 (cond ((and (memq major-mode '(emacs-lisp-mode lisp-mode))
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
1818 (memq 'lisp completions-merging-modes))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1819 (add-completions-from-buffer))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1820 ((and (memq major-mode '(c-mode))
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
1821 (memq 'c completions-merging-modes))
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
1822 (add-completions-from-buffer))))))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1823
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1824 ;;-----------------------------------------------
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1825 ;; Tags Table Completions
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1826 ;;-----------------------------------------------
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1827
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1828 (defun add-completions-from-tags-table ()
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1829 ;; Inspired by eero@media-lab.media.mit.edu
3175
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
1830 "Add completions from the current tags table."
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1831 (interactive)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1832 (visit-tags-table-buffer) ;this will prompt if no tags-table
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1833 (save-excursion
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1834 (goto-char (point-min))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1835 (let (string)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1836 (condition-case e
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1837 (while t
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1838 (search-forward "\177")
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1839 (backward-char 3)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1840 (and (setq string (symbol-under-point))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1841 (add-completion-to-tail-if-new string))
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
1842 (forward-char 3))
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
1843 (search-failed)))))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1844
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1845
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1846 ;;-----------------------------------------------
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1847 ;; Lisp File completion parsing
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1848 ;;-----------------------------------------------
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1849 ;; This merely looks for phrases beginning with (def.... or
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1850 ;; (package:def ... and takes the next word.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1851 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1852 ;; We tried using forward-lines and explicit searches but the regexp technique
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1853 ;; was faster. (About 100K characters per second)
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1854 ;;
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1855 (defconst *lisp-def-regexp*
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1856 "\n(\\(\\w*:\\)?def\\(\\w\\|\\s_\\)*\\s +(*"
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
1857 "A regexp that searches for Lisp definition form.")
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1858
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1859 ;; Tests -
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1860 ;; (and (string-match *lisp-def-regexp* "\n(defun foo") (match-end 0)) -> 8
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1861 ;; (and (string-match *lisp-def-regexp* "\n(si:def foo") (match-end 0)) -> 9
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1862 ;; (and (string-match *lisp-def-regexp* "\n(def-bar foo")(match-end 0)) -> 10
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1863 ;; (and (string-match *lisp-def-regexp* "\n(defun (foo") (match-end 0)) -> 9
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1864
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1865 ;; Parses all the definition names from a Lisp mode buffer and adds them to
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1866 ;; the completion database.
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1867 (defun add-completions-from-lisp-buffer ()
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1868 ;;; Benchmarks
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1869 ;;; Sun-3/280 - 1500 to 3000 lines of lisp code per second
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1870 (let (string)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1871 (save-excursion
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1872 (goto-char (point-min))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1873 (condition-case e
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1874 (while t
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1875 (re-search-forward *lisp-def-regexp*)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1876 (and (setq string (symbol-under-point))
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
1877 (add-completion-to-tail-if-new string)))
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
1878 (search-failed)))))
56
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
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1881 ;;-----------------------------------------------
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1882 ;; C file completion parsing
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1883 ;;-----------------------------------------------
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1884 ;; C :
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1885 ;; Looks for #define or [<storage class>] [<type>] <name>{,<name>}
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1886 ;; or structure, array or pointer defs.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1887 ;; It gets most of the definition names.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1888 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1889 ;; As you might suspect by now, we use some symbol table hackery
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1890 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1891 ;; Symbol separator chars (have whitespace syntax) --> , ; * = (
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1892 ;; Opening char --> [ {
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1893 ;; Closing char --> ] }
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1894 ;; opening and closing must be skipped over
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1895 ;; Whitespace chars (have symbol syntax)
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1896 ;; Everything else has word syntax
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1897
3175
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
1898 (defun cmpl-make-c-def-completion-syntax-table ()
13636
a120308bfe29 (cmpl-make-standard-completion-syntax-table)
Richard M. Stallman <rms@gnu.org>
parents: 11431
diff changeset
1899 (let ((table (make-syntax-table))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1900 (whitespace-chars '(? ?\n ?\t ?\f ?\v ?\r))
3591
507f64624555 Apply typo patches from Paul Eggert.
Jim Blandy <jimb@redhat.com>
parents: 3186
diff changeset
1901 ;; unfortunately the ?( causes the parens to appear unbalanced
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
1902 (separator-chars '(?, ?* ?= ?\( ?\;))
10638
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
1903 i)
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1904 ;; default syntax is whitespace
10638
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
1905 (setq i 0)
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
1906 (while (< i 256)
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
1907 (modify-syntax-entry i "w" table)
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
1908 (setq i (1+ i)))
27599
d1305a19933d Replace completion-dolist with dolist.
Dave Love <fx@gnu.org>
parents: 23605
diff changeset
1909 (dolist (char whitespace-chars)
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1910 (modify-syntax-entry char "_" table))
27599
d1305a19933d Replace completion-dolist with dolist.
Dave Love <fx@gnu.org>
parents: 23605
diff changeset
1911 (dolist (char separator-chars)
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1912 (modify-syntax-entry char " " table))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1913 (modify-syntax-entry ?\[ "(]" table)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1914 (modify-syntax-entry ?\{ "(}" table)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1915 (modify-syntax-entry ?\] ")[" table)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1916 (modify-syntax-entry ?\} "){" table)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1917 table))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1918
3175
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
1919 (defconst cmpl-c-def-syntax-table (cmpl-make-c-def-completion-syntax-table))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1920
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1921 ;; Regexps
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1922 (defconst *c-def-regexp*
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1923 ;; This stops on lines with possible definitions
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1924 "\n[_a-zA-Z#]"
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1925 ;; This stops after the symbol to add.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1926 ;;"\n\\(#define\\s +.\\|\\(\\(\\w\\|\\s_\\)+\\b\\s *\\)+[(;,[*{=]\\)"
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1927 ;; This stops before the symbol to add. {Test cases in parens. below}
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1928 ;;"\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
1929 ;; this simple version picks up too much extraneous stuff
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1930 ;; "\n\\(\\w\\|\\s_\\|#\\)\\B"
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
1931 "A regexp that searches for a definition form.")
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1932 ;
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1933 ;(defconst *c-cont-regexp*
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1934 ; "\\(\\w\\|\\s_\\)+\\b\\s *\\({\\|\\(\\[[0-9\t ]*\\]\\s *\\)*,\\(*\\|\\s \\)*\\b\\)"
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1935 ; "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
1936 ;
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1937 ;(defconst *c-struct-regexp*
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1938 ; "\\(*\\|\\s \\)*\\b"
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1939 ; "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
1940
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1941 ;(defun test-c-def-regexp (regexp string)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1942 ; (and (eq 0 (string-match regexp string)) (match-end 0))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1943 ; )
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1944
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1945 ;; Tests -
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1946 ;; (test-c-def-regexp *c-def-regexp* "\n#define foo") -> 10 (9)
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1947 ;; (test-c-def-regexp *c-def-regexp* "\nfoo (x, y) {") -> 6 (6)
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1948 ;; (test-c-def-regexp *c-def-regexp* "\nint foo (x, y)") -> 10 (5)
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1949 ;; (test-c-def-regexp *c-def-regexp* "\n int foo (x, y)") -> nil
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1950 ;; (test-c-def-regexp *c-cont-regexp* "oo, bar") -> 4
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1951 ;; (test-c-def-regexp *c-cont-regexp* "oo, *bar") -> 5
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1952 ;; (test-c-def-regexp *c-cont-regexp* "a [5][6], bar") -> 10
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1953 ;; (test-c-def-regexp *c-cont-regexp* "oo(x,y)") -> nil
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1954 ;; (test-c-def-regexp *c-cont-regexp* "a [6] ,\t bar") -> 9
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1955 ;; (test-c-def-regexp *c-cont-regexp* "oo {trout =1} my_carp;") -> 14
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1956 ;; (test-c-def-regexp *c-cont-regexp* "truct_p complex foon") -> nil
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1957
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1958 ;; Parses all the definition names from a C mode buffer and adds them to the
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
1959 ;; completion database.
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1960 (defun add-completions-from-c-buffer ()
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1961 ;; Benchmark --
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1962 ;; Sun 3/280-- 1250 lines/sec.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1963
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1964 (let (string next-point char
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
1965 (saved-syntax (syntax-table)))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1966 (save-excursion
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1967 (goto-char (point-min))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1968 (catch 'finish-add-completions
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1969 (unwind-protect
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1970 (while t
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1971 ;; we loop here only when scan-sexps fails
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1972 ;; (i.e. unbalance exps.)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1973 (set-syntax-table cmpl-c-def-syntax-table)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1974 (condition-case e
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1975 (while t
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1976 (re-search-forward *c-def-regexp*)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1977 (cond
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1978 ((= (preceding-char) ?#)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1979 ;; preprocessor macro, see if it's one we handle
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1980 (setq string (buffer-substring (point) (+ (point) 6)))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1981 (cond ((or (string-equal string "define")
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
1982 (string-equal string "ifdef "))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1983 ;; skip forward over definition symbol
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1984 ;; and add it to database
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1985 (and (forward-word 2)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1986 (setq string (symbol-before-point))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1987 ;;(push string foo)
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
1988 (add-completion-to-tail-if-new string)))))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1989 (t
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1990 ;; C definition
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1991 (setq next-point (point))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1992 (while (and
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1993 next-point
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1994 ;; scan to next separator char.
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
1995 (setq next-point (scan-sexps next-point 1)))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1996 ;; position the point on the word we want to add
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1997 (goto-char next-point)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1998 (while (= (setq char (following-char)) ?*)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1999 ;; handle pointer ref
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2000 ;; move to next separator char.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2001 (goto-char
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
2002 (setq next-point (scan-sexps (point) 1))))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2003 (forward-word -1)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2004 ;; add to database
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2005 (if (setq string (symbol-under-point))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2006 ;; (push string foo)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2007 (add-completion-to-tail-if-new string)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2008 ;; Local TMC hack (useful for parsing paris.h)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2009 (if (and (looking-at "_AP") ;; "ansi prototype"
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2010 (progn
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2011 (forward-word -1)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2012 (setq string
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
2013 (symbol-under-point))))
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
2014 (add-completion-to-tail-if-new string)))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2015 ;; go to next
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2016 (goto-char next-point)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2017 ;; (push (format "%c" (following-char)) foo)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2018 (if (= (char-syntax char) ?\()
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2019 ;; if on an opening delimiter, go to end
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2020 (while (= (char-syntax char) ?\()
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2021 (setq next-point (scan-sexps next-point 1)
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
2022 char (char-after next-point)))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2023 (or (= char ?,)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2024 ;; Current char is an end char.
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
2025 (setq next-point nil)))))))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2026 (search-failed ;;done
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
2027 (throw 'finish-add-completions t))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2028 (error
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2029 ;; Check for failure in scan-sexps
10638
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2030 (if (or (string-equal (nth 1 e)
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2031 "Containing expression ends prematurely")
10638
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2032 (string-equal (nth 1 e) "Unbalanced parentheses"))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2033 ;; unbalanced paren., keep going
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2034 ;;(ding)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2035 (forward-line 1)
10638
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2036 (message "Error parsing C buffer for completions--please send bug report")
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
2037 (throw 'finish-add-completions t)))))
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
2038 (set-syntax-table saved-syntax))))))
56
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
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
2041 ;;---------------------------------------------------------------------------
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
2042 ;; Init files
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
2043 ;;---------------------------------------------------------------------------
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2044
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
2045 ;; 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
2046 (defun kill-emacs-save-completions ()
10638
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2047 (if (and save-completions-flag enable-completion cmpl-initialized-p)
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2048 (cond
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2049 ((not cmpl-completions-accepted-p)
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2050 (message "Completions database has not changed - not writing."))
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2051 (t
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2052 (save-completions-to-file)))))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2053
4434
265397236749 (completion-version): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 4218
diff changeset
2054 ;; There is no point bothering to change this again
265397236749 (completion-version): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 4218
diff changeset
2055 ;; unless the package changes so much that it matters
265397236749 (completion-version): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 4218
diff changeset
2056 ;; for people that have saved completions.
265397236749 (completion-version): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 4218
diff changeset
2057 (defconst completion-version "11")
265397236749 (completion-version): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 4218
diff changeset
2058
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2059 (defconst saved-cmpl-file-header
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2060 ";;; Completion Initialization file.
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
2061 ;; Version = %s
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
2062 ;; Format is (<string> . <last-use-time>)
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
2063 ;; <string> is the completion
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
2064 ;; <last-use-time> is the time the completion was last used
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
2065 ;; If it is t, the completion will never be pruned from the file.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
2066 ;; Otherwise it is in hours since origin.
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2067 \n")
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 completion-backup-filename (filename)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2070 (concat filename ".BAK"))
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2071
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2072 (defun save-completions-to-file (&optional filename)
3175
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
2073 "Save completions in init file FILENAME.
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
2074 If file name is not specified, use `save-completions-file-name'."
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2075 (interactive)
3175
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
2076 (setq filename (expand-file-name (or filename save-completions-file-name)))
10638
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2077 (if (file-writable-p filename)
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2078 (progn
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2079 (if (not cmpl-initialized-p)
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2080 (initialize-completions));; make sure everything's loaded
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2081 (message "Saving completions to file %s" filename)
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2082
10638
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2083 (let* ((delete-old-versions t)
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2084 (kept-old-versions 0)
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2085 (kept-new-versions completions-file-versions-kept)
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2086 last-use-time
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2087 (current-time (cmpl-hours-since-origin))
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2088 (total-in-db 0)
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2089 (total-perm 0)
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2090 (total-saved 0)
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
2091 (backup-filename (completion-backup-filename filename)))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2092
10638
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2093 (save-excursion
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2094 (get-buffer-create " *completion-save-buffer*")
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2095 (set-buffer " *completion-save-buffer*")
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2096 (setq buffer-file-name filename)
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2097
10638
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2098 (if (not (verify-visited-file-modtime (current-buffer)))
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2099 (progn
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2100 ;; file has changed on disk. Bring us up-to-date
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2101 (message "Completion file has changed. Merging. . .")
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2102 (load-completions-from-file filename t)
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2103 (message "Merging finished. Saving completions to file %s" filename)))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2104
10638
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2105 ;; prepare the buffer to be modified
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2106 (clear-visited-file-modtime)
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2107 (erase-buffer)
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2108 ;; (/ 1 0)
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2109 (insert (format saved-cmpl-file-header completion-version))
27599
d1305a19933d Replace completion-dolist with dolist.
Dave Love <fx@gnu.org>
parents: 23605
diff changeset
2110 (dolist (completion (list-all-completions))
10638
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2111 (setq total-in-db (1+ total-in-db))
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2112 (setq last-use-time (completion-last-use-time completion))
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2113 ;; Update num uses and maybe write completion to a file
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2114 (cond ((or;; Write to file if
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2115 ;; permanent
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2116 (and (eq last-use-time t)
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2117 (setq total-perm (1+ total-perm)))
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2118 ;; or if
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2119 (if (> (completion-num-uses completion) 0)
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2120 ;; it's been used
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2121 (setq last-use-time current-time)
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2122 ;; or it was saved before and
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2123 (and last-use-time
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2124 ;; save-completions-retention-time is nil
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2125 (or (not save-completions-retention-time)
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2126 ;; or time since last use is < ...retention-time*
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2127 (< (- current-time last-use-time)
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
2128 save-completions-retention-time)))))
10638
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2129 ;; write to file
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2130 (setq total-saved (1+ total-saved))
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2131 (insert (prin1-to-string (cons (completion-string completion)
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
2132 last-use-time)) "\n"))))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2133
10638
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2134 ;; write the buffer
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2135 (condition-case e
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2136 (let ((file-exists-p (file-exists-p filename)))
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2137 (if file-exists-p
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2138 (progn
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2139 ;; If file exists . . .
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2140 ;; Save a backup(so GNU doesn't screw us when we're out of disk)
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2141 ;; (GNU leaves a 0 length file if it gets a disk full error!)
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2142
10638
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2143 ;; If backup doesn't exit, Rename current to backup
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2144 ;; {If backup exists the primary file is probably messed up}
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2145 (or (file-exists-p backup-filename)
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2146 (rename-file filename backup-filename))
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2147 ;; Copy the backup back to the current name
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2148 ;; (so versioning works)
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2149 (copy-file backup-filename filename t)))
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2150 ;; Save it
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2151 (save-buffer)
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2152 (if file-exists-p
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2153 ;; If successful, remove backup
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2154 (delete-file backup-filename)))
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2155 (error
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2156 (set-buffer-modified-p nil)
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
2157 (message "Couldn't save completion file `%s'" filename)))
10638
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2158 ;; Reset accepted-p flag
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
2159 (setq cmpl-completions-accepted-p nil) )
10638
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2160 (cmpl-statistics-block
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
2161 (record-save-completions total-in-db total-perm total-saved))))))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2162
23382
55b2ea28932a Comment fix.
Karl Heuer <kwzh@gnu.org>
parents: 22250
diff changeset
2163 ;;(defun auto-save-completions ()
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
2164 ;; (if (and save-completions-flag enable-completion cmpl-initialized-p
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
2165 ;; *completion-auto-save-period*
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
2166 ;; (> cmpl-emacs-idle-time *completion-auto-save-period*)
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
2167 ;; cmpl-completions-accepted-p)
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
2168 ;; (save-completions-to-file)))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2169
23382
55b2ea28932a Comment fix.
Karl Heuer <kwzh@gnu.org>
parents: 22250
diff changeset
2170 ;;(add-hook 'cmpl-emacs-idle-time-hooks 'auto-save-completions)
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2171
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2172 (defun load-completions-from-file (&optional filename no-message-p)
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
2173 "Load a completion init file FILENAME.
3175
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
2174 If file is not specified, then use `save-completions-file-name'."
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2175 (interactive)
3175
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
2176 (setq filename (expand-file-name (or filename save-completions-file-name)))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2177 (let* ((backup-filename (completion-backup-filename filename))
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
2178 (backup-readable-p (file-readable-p backup-filename)))
10638
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2179 (if backup-readable-p (setq filename backup-filename))
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2180 (if (file-readable-p filename)
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2181 (progn
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2182 (if (not no-message-p)
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2183 (message "Loading completions from %sfile %s . . ."
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2184 (if backup-readable-p "backup " "") filename))
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2185 (save-excursion
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2186 (get-buffer-create " *completion-save-buffer*")
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2187 (set-buffer " *completion-save-buffer*")
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2188 (setq buffer-file-name filename)
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2189 ;; prepare the buffer to be modified
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2190 (clear-visited-file-modtime)
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2191 (erase-buffer)
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2192
10638
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2193 (let ((insert-okay-p nil)
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2194 (buffer (current-buffer))
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2195 (current-time (cmpl-hours-since-origin))
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2196 string num-uses entry last-use-time
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2197 cmpl-entry cmpl-last-use-time
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2198 (current-completion-source cmpl-source-init-file)
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2199 (start-num
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2200 (cmpl-statistics-block
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2201 (aref completion-add-count-vector cmpl-source-file-parsing)))
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
2202 (total-in-file 0) (total-perm 0))
10638
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2203 ;; insert the file into a buffer
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2204 (condition-case e
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2205 (progn (insert-file-contents filename t)
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2206 (setq insert-okay-p t))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2207
10638
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2208 (file-error
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2209 (message "File error trying to load completion file %s."
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2210 filename)))
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2211 ;; parse it
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2212 (if insert-okay-p
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2213 (progn
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2214 (goto-char (point-min))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2215
10638
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2216 (condition-case e
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2217 (while t
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2218 (setq entry (read buffer))
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2219 (setq total-in-file (1+ total-in-file))
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2220 (cond
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2221 ((and (consp entry)
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2222 (stringp (setq string (car entry)))
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2223 (cond
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2224 ((eq (setq last-use-time (cdr entry)) 'T)
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2225 ;; handle case sensitivity
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2226 (setq total-perm (1+ total-perm))
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2227 (setq last-use-time t))
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2228 ((eq last-use-time t)
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2229 (setq total-perm (1+ total-perm)))
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
2230 ((integerp last-use-time))))
10638
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2231 ;; Valid entry
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2232 ;; add it in
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2233 (setq cmpl-last-use-time
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2234 (completion-last-use-time
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2235 (setq cmpl-entry
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
2236 (add-completion-to-tail-if-new string))))
10638
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2237 (if (or (eq last-use-time t)
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2238 (and (> last-use-time 1000);;backcompatibility
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2239 (not (eq cmpl-last-use-time t))
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2240 (or (not cmpl-last-use-time)
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2241 ;; more recent
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
2242 (> last-use-time cmpl-last-use-time))))
10638
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2243 ;; update last-use-time
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
2244 (set-completion-last-use-time cmpl-entry last-use-time)))
10638
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2245 (t
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2246 ;; Bad format
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2247 (message "Error: invalid saved completion - %s"
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2248 (prin1-to-string entry))
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2249 ;; try to get back in sync
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
2250 (search-forward "\n("))))
10638
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2251 (search-failed
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
2252 (message "End of file while reading completions."))
10638
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2253 (end-of-file
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2254 (if (= (point) (point-max))
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2255 (if (not no-message-p)
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2256 (message "Loading completions from file %s . . . Done."
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2257 filename))
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
2258 (message "End of file while reading completions."))))))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2259
10638
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2260 (cmpl-statistics-block
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2261 (record-load-completions
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2262 total-in-file total-perm
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2263 (- (aref completion-add-count-vector cmpl-source-init-file)
f587ee9a25f6 Don't use cl. Eliminate use of when, unless,
Richard M. Stallman <rms@gnu.org>
parents: 10465
diff changeset
2264 start-num)))
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
2265 ))))))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2266
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2267 (defun initialize-completions ()
3175
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
2268 "Load the default completions file.
1356
dcf780f7ae1b Doc fix.
Christopher Zaborsky <rogue@erratum.com>
parents: 845
diff changeset
2269 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
2270 (interactive)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2271 (cond ((not cmpl-initialized-p)
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
2272 (load-completions-from-file)))
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
2273 (setq cmpl-initialized-p t))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2274
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
2275 ;;-----------------------------------------------
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
2276 ;; Kill region patch
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
2277 ;;-----------------------------------------------
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2278
3175
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
2279 (defun completion-kill-region (&optional beg end)
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2280 "Kill between point and mark.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2281 The text is deleted but saved in the kill ring.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2282 The command \\[yank] can retrieve it from there.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2283 /(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
2284
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2285 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
2286 Supply two arguments, character numbers indicating the stretch of text
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2287 to be killed.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2288 Any command that calls this function is a \"kill command\".
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2289 If the previous command was also a kill command,
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2290 the text killed this time appends to the text killed last time
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2291 to make one entry in the kill ring.
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2292 Patched to remove the most recent completion."
3175
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
2293 (interactive "r")
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
2294 (cond ((eq last-command 'complete)
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2295 (delete-region (point) cmpl-last-insert-location)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2296 (insert cmpl-original-string)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2297 (setq completion-to-accept nil)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2298 (cmpl-statistics-block
3175
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
2299 (record-complete-failed)))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2300 (t
3175
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
2301 (kill-region beg end))))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2302
3175
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
2303
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
2304 ;;-----------------------------------------------
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
2305 ;; Patches to self-insert-command.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
2306 ;;-----------------------------------------------
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2307
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
2308 ;; Need 2 versions: generic separator chars. and space (to get auto fill
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
2309 ;; to work)
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2310
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
2311 ;; All common separators (eg. space "(" ")" """) characters go through a
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
2312 ;; function to add new words to the list of words to complete from:
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
2313 ;; COMPLETION-SEPARATOR-SELF-INSERT-COMMAND (arg).
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
2314 ;; If the character before this was an alpha-numeric then this adds the
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
2315 ;; symbol before point to the completion list (using ADD-COMPLETION).
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2316
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2317 (defun completion-separator-self-insert-command (arg)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2318 (interactive "p")
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2319 (use-completion-before-separator)
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
2320 (self-insert-command arg))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2321
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2322 (defun completion-separator-self-insert-autofilling (arg)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2323 (interactive "p")
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2324 (use-completion-before-separator)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2325 (self-insert-command arg)
10465
00e1546cc687 (completion-separator-self-insert-autofilling):
Richard M. Stallman <rms@gnu.org>
parents: 8678
diff changeset
2326 (and auto-fill-function
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
2327 (funcall auto-fill-function)))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2328
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
2329 ;;-----------------------------------------------
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
2330 ;; Wrapping Macro
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
2331 ;;-----------------------------------------------
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2332
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
2333 ;; Note that because of the way byte compiling works, none of
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
2334 ;; the functions defined with this macro get byte compiled.
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2335
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2336 (defmacro def-completion-wrapper (function-name type &optional new-name)
1356
dcf780f7ae1b Doc fix.
Christopher Zaborsky <rogue@erratum.com>
parents: 845
diff changeset
2337 "Add a call to update the completion database before function execution.
dcf780f7ae1b Doc fix.
Christopher Zaborsky <rogue@erratum.com>
parents: 845
diff changeset
2338 TYPE is the type of the wrapper to be added. Can be :before or :under."
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
2339 (cond ((eq type :separator)
3175
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
2340 (list 'put (list 'quote function-name) ''completion-function
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
2341 ''use-completion-before-separator))
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
2342 ((eq type :before)
3175
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
2343 (list 'put (list 'quote function-name) ''completion-function
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
2344 ''use-completion-before-point))
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
2345 ((eq type :backward-under)
3175
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
2346 (list 'put (list 'quote function-name) ''completion-function
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
2347 ''use-completion-backward-under))
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
2348 ((eq type :backward)
3175
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
2349 (list 'put (list 'quote function-name) ''completion-function
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
2350 ''use-completion-backward))
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
2351 ((eq type :under)
3175
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
2352 (list 'put (list 'quote function-name) ''completion-function
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
2353 ''use-completion-under-point))
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
2354 ((eq type :under-or-before)
3175
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
2355 (list 'put (list 'quote function-name) ''completion-function
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
2356 ''use-completion-under-or-before-point))
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
2357 ((eq type :minibuffer-separator)
3175
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
2358 (list 'put (list 'quote function-name) ''completion-function
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
2359 ''use-completion-minibuffer-separator))))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2360
3175
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
2361 (defun use-completion-minibuffer-separator ()
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
2362 (let ((cmpl-syntax-table cmpl-standard-syntax-table))
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
2363 (use-completion-before-separator)))
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
2364
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
2365 (defun use-completion-backward-under ()
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
2366 (use-completion-under-point)
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
2367 (if (eq last-command 'complete)
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
2368 ;; probably a failed completion if you have to back up
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
2369 (cmpl-statistics-block (record-complete-failed))))
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
2370
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
2371 (defun use-completion-backward ()
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
2372 (if (eq last-command 'complete)
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
2373 ;; probably a failed completion if you have to back up
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
2374 (cmpl-statistics-block (record-complete-failed))))
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
2375
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
2376 (defun completion-before-command ()
8678
0107ce4d48af (completion-before-command): Don't call get on a non-symbol.
Richard M. Stallman <rms@gnu.org>
parents: 8156
diff changeset
2377 (funcall (or (and (symbolp this-command)
0107ce4d48af (completion-before-command): Don't call get on a non-symbol.
Richard M. Stallman <rms@gnu.org>
parents: 8156
diff changeset
2378 (get this-command 'completion-function))
3175
15d3c2e32922 Pervasive changes to use Emacs 19 features
Richard M. Stallman <rms@gnu.org>
parents: 3169
diff changeset
2379 'use-completion-under-or-before-point)))
23605
527b3c7d0b5b (dynamic-completion-mode): New function to enable
Richard M. Stallman <rms@gnu.org>
parents: 23382
diff changeset
2380
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
2381 ;; C mode diffs.
13636
a120308bfe29 (cmpl-make-standard-completion-syntax-table)
Richard M. Stallman <rms@gnu.org>
parents: 11431
diff changeset
2382 (defun completion-c-mode-hook ()
a120308bfe29 (cmpl-make-standard-completion-syntax-table)
Richard M. Stallman <rms@gnu.org>
parents: 11431
diff changeset
2383 (def-completion-wrapper electric-c-semi :separator)
a120308bfe29 (cmpl-make-standard-completion-syntax-table)
Richard M. Stallman <rms@gnu.org>
parents: 11431
diff changeset
2384 (define-key c-mode-map "+" 'completion-separator-self-insert-command)
a120308bfe29 (cmpl-make-standard-completion-syntax-table)
Richard M. Stallman <rms@gnu.org>
parents: 11431
diff changeset
2385 (define-key c-mode-map "*" 'completion-separator-self-insert-command)
a120308bfe29 (cmpl-make-standard-completion-syntax-table)
Richard M. Stallman <rms@gnu.org>
parents: 11431
diff changeset
2386 (define-key c-mode-map "/" 'completion-separator-self-insert-command))
a120308bfe29 (cmpl-make-standard-completion-syntax-table)
Richard M. Stallman <rms@gnu.org>
parents: 11431
diff changeset
2387 ;; Do this either now or whenever C mode is loaded.
a120308bfe29 (cmpl-make-standard-completion-syntax-table)
Richard M. Stallman <rms@gnu.org>
parents: 11431
diff changeset
2388 (if (featurep 'cc-mode)
a120308bfe29 (cmpl-make-standard-completion-syntax-table)
Richard M. Stallman <rms@gnu.org>
parents: 11431
diff changeset
2389 (completion-c-mode-hook)
a120308bfe29 (cmpl-make-standard-completion-syntax-table)
Richard M. Stallman <rms@gnu.org>
parents: 11431
diff changeset
2390 (add-hook 'c-mode-hook 'completion-c-mode-hook))
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2391
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
2392 ;; FORTRAN mode diffs. (these are defined when fortran is called)
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2393 (defun completion-setup-fortran-mode ()
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2394 (define-key fortran-mode-map "+" 'completion-separator-self-insert-command)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2395 (define-key fortran-mode-map "-" 'completion-separator-self-insert-command)
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2396 (define-key fortran-mode-map "*" 'completion-separator-self-insert-command)
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
2397 (define-key fortran-mode-map "/" 'completion-separator-self-insert-command))
23605
527b3c7d0b5b (dynamic-completion-mode): New function to enable
Richard M. Stallman <rms@gnu.org>
parents: 23382
diff changeset
2398
527b3c7d0b5b (dynamic-completion-mode): New function to enable
Richard M. Stallman <rms@gnu.org>
parents: 23382
diff changeset
2399 ;;; Enable completion mode.
527b3c7d0b5b (dynamic-completion-mode): New function to enable
Richard M. Stallman <rms@gnu.org>
parents: 23382
diff changeset
2400
527b3c7d0b5b (dynamic-completion-mode): New function to enable
Richard M. Stallman <rms@gnu.org>
parents: 23382
diff changeset
2401 ;;;###autoload
527b3c7d0b5b (dynamic-completion-mode): New function to enable
Richard M. Stallman <rms@gnu.org>
parents: 23382
diff changeset
2402 (defun dynamic-completion-mode ()
527b3c7d0b5b (dynamic-completion-mode): New function to enable
Richard M. Stallman <rms@gnu.org>
parents: 23382
diff changeset
2403 "Enable dynamic word-completion."
527b3c7d0b5b (dynamic-completion-mode): New function to enable
Richard M. Stallman <rms@gnu.org>
parents: 23382
diff changeset
2404 (interactive)
527b3c7d0b5b (dynamic-completion-mode): New function to enable
Richard M. Stallman <rms@gnu.org>
parents: 23382
diff changeset
2405 (add-hook 'find-file-hooks 'cmpl-find-file-hook)
527b3c7d0b5b (dynamic-completion-mode): New function to enable
Richard M. Stallman <rms@gnu.org>
parents: 23382
diff changeset
2406 (add-hook 'pre-command-hook 'completion-before-command)
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2407
23605
527b3c7d0b5b (dynamic-completion-mode): New function to enable
Richard M. Stallman <rms@gnu.org>
parents: 23382
diff changeset
2408 ;; Install the appropriate mode tables.
527b3c7d0b5b (dynamic-completion-mode): New function to enable
Richard M. Stallman <rms@gnu.org>
parents: 23382
diff changeset
2409 (add-hook 'lisp-mode-hook
29118
cbc6a64048ee (dynamic-completion-mode, dynamic-completion-mode): Don't quote lambdas.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29079
diff changeset
2410 (lambda ()
23605
527b3c7d0b5b (dynamic-completion-mode): New function to enable
Richard M. Stallman <rms@gnu.org>
parents: 23382
diff changeset
2411 (setq cmpl-syntax-table cmpl-lisp-syntax-table)))
527b3c7d0b5b (dynamic-completion-mode): New function to enable
Richard M. Stallman <rms@gnu.org>
parents: 23382
diff changeset
2412 (add-hook 'c-mode-hook
29118
cbc6a64048ee (dynamic-completion-mode, dynamic-completion-mode): Don't quote lambdas.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29079
diff changeset
2413 (lambda ()
23605
527b3c7d0b5b (dynamic-completion-mode): New function to enable
Richard M. Stallman <rms@gnu.org>
parents: 23382
diff changeset
2414 (setq cmpl-syntax-table cmpl-c-syntax-table)))
527b3c7d0b5b (dynamic-completion-mode): New function to enable
Richard M. Stallman <rms@gnu.org>
parents: 23382
diff changeset
2415 (add-hook 'fortran-mode-hook
29118
cbc6a64048ee (dynamic-completion-mode, dynamic-completion-mode): Don't quote lambdas.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29079
diff changeset
2416 (lambda ()
23605
527b3c7d0b5b (dynamic-completion-mode): New function to enable
Richard M. Stallman <rms@gnu.org>
parents: 23382
diff changeset
2417 (setq cmpl-syntax-table cmpl-fortran-syntax-table)
527b3c7d0b5b (dynamic-completion-mode): New function to enable
Richard M. Stallman <rms@gnu.org>
parents: 23382
diff changeset
2418 (completion-setup-fortran-mode)))
527b3c7d0b5b (dynamic-completion-mode): New function to enable
Richard M. Stallman <rms@gnu.org>
parents: 23382
diff changeset
2419
527b3c7d0b5b (dynamic-completion-mode): New function to enable
Richard M. Stallman <rms@gnu.org>
parents: 23382
diff changeset
2420 ;; "Complete" Key Keybindings.
527b3c7d0b5b (dynamic-completion-mode): New function to enable
Richard M. Stallman <rms@gnu.org>
parents: 23382
diff changeset
2421
527b3c7d0b5b (dynamic-completion-mode): New function to enable
Richard M. Stallman <rms@gnu.org>
parents: 23382
diff changeset
2422 (global-set-key "\M-\r" 'complete)
527b3c7d0b5b (dynamic-completion-mode): New function to enable
Richard M. Stallman <rms@gnu.org>
parents: 23382
diff changeset
2423 (global-set-key [?\C-\r] 'complete)
527b3c7d0b5b (dynamic-completion-mode): New function to enable
Richard M. Stallman <rms@gnu.org>
parents: 23382
diff changeset
2424 (define-key function-key-map [C-return] [?\C-\r])
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2425
23605
527b3c7d0b5b (dynamic-completion-mode): New function to enable
Richard M. Stallman <rms@gnu.org>
parents: 23382
diff changeset
2426 ;; Tests -
527b3c7d0b5b (dynamic-completion-mode): New function to enable
Richard M. Stallman <rms@gnu.org>
parents: 23382
diff changeset
2427 ;; (add-completion "cumberland")
527b3c7d0b5b (dynamic-completion-mode): New function to enable
Richard M. Stallman <rms@gnu.org>
parents: 23382
diff changeset
2428 ;; (add-completion "cumberbund")
527b3c7d0b5b (dynamic-completion-mode): New function to enable
Richard M. Stallman <rms@gnu.org>
parents: 23382
diff changeset
2429 ;; cum
527b3c7d0b5b (dynamic-completion-mode): New function to enable
Richard M. Stallman <rms@gnu.org>
parents: 23382
diff changeset
2430 ;; Cumber
527b3c7d0b5b (dynamic-completion-mode): New function to enable
Richard M. Stallman <rms@gnu.org>
parents: 23382
diff changeset
2431 ;; cumbering
527b3c7d0b5b (dynamic-completion-mode): New function to enable
Richard M. Stallman <rms@gnu.org>
parents: 23382
diff changeset
2432 ;; cumb
527b3c7d0b5b (dynamic-completion-mode): New function to enable
Richard M. Stallman <rms@gnu.org>
parents: 23382
diff changeset
2433
527b3c7d0b5b (dynamic-completion-mode): New function to enable
Richard M. Stallman <rms@gnu.org>
parents: 23382
diff changeset
2434 ;; Save completions when killing Emacs.
527b3c7d0b5b (dynamic-completion-mode): New function to enable
Richard M. Stallman <rms@gnu.org>
parents: 23382
diff changeset
2435
527b3c7d0b5b (dynamic-completion-mode): New function to enable
Richard M. Stallman <rms@gnu.org>
parents: 23382
diff changeset
2436 (add-hook 'kill-emacs-hook
29118
cbc6a64048ee (dynamic-completion-mode, dynamic-completion-mode): Don't quote lambdas.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29079
diff changeset
2437 (lambda ()
23605
527b3c7d0b5b (dynamic-completion-mode): New function to enable
Richard M. Stallman <rms@gnu.org>
parents: 23382
diff changeset
2438 (kill-emacs-save-completions)
527b3c7d0b5b (dynamic-completion-mode): New function to enable
Richard M. Stallman <rms@gnu.org>
parents: 23382
diff changeset
2439 (cmpl-statistics-block
527b3c7d0b5b (dynamic-completion-mode): New function to enable
Richard M. Stallman <rms@gnu.org>
parents: 23382
diff changeset
2440 (record-cmpl-kill-emacs))))
527b3c7d0b5b (dynamic-completion-mode): New function to enable
Richard M. Stallman <rms@gnu.org>
parents: 23382
diff changeset
2441
527b3c7d0b5b (dynamic-completion-mode): New function to enable
Richard M. Stallman <rms@gnu.org>
parents: 23382
diff changeset
2442 ;; Patches to standard keymaps insert completions
527b3c7d0b5b (dynamic-completion-mode): New function to enable
Richard M. Stallman <rms@gnu.org>
parents: 23382
diff changeset
2443 (substitute-key-definition 'kill-region 'completion-kill-region
527b3c7d0b5b (dynamic-completion-mode): New function to enable
Richard M. Stallman <rms@gnu.org>
parents: 23382
diff changeset
2444 global-map)
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2445
23605
527b3c7d0b5b (dynamic-completion-mode): New function to enable
Richard M. Stallman <rms@gnu.org>
parents: 23382
diff changeset
2446 ;; Separators
527b3c7d0b5b (dynamic-completion-mode): New function to enable
Richard M. Stallman <rms@gnu.org>
parents: 23382
diff changeset
2447 ;; We've used the completion syntax table given as a guide.
527b3c7d0b5b (dynamic-completion-mode): New function to enable
Richard M. Stallman <rms@gnu.org>
parents: 23382
diff changeset
2448 ;;
527b3c7d0b5b (dynamic-completion-mode): New function to enable
Richard M. Stallman <rms@gnu.org>
parents: 23382
diff changeset
2449 ;; Global separator chars.
527b3c7d0b5b (dynamic-completion-mode): New function to enable
Richard M. Stallman <rms@gnu.org>
parents: 23382
diff changeset
2450 ;; We left out <tab> because there are too many special cases for it. Also,
527b3c7d0b5b (dynamic-completion-mode): New function to enable
Richard M. Stallman <rms@gnu.org>
parents: 23382
diff changeset
2451 ;; in normal coding it's rarely typed after a word.
527b3c7d0b5b (dynamic-completion-mode): New function to enable
Richard M. Stallman <rms@gnu.org>
parents: 23382
diff changeset
2452 (global-set-key " " 'completion-separator-self-insert-autofilling)
527b3c7d0b5b (dynamic-completion-mode): New function to enable
Richard M. Stallman <rms@gnu.org>
parents: 23382
diff changeset
2453 (global-set-key "!" 'completion-separator-self-insert-command)
527b3c7d0b5b (dynamic-completion-mode): New function to enable
Richard M. Stallman <rms@gnu.org>
parents: 23382
diff changeset
2454 (global-set-key "%" 'completion-separator-self-insert-command)
527b3c7d0b5b (dynamic-completion-mode): New function to enable
Richard M. Stallman <rms@gnu.org>
parents: 23382
diff changeset
2455 (global-set-key "^" 'completion-separator-self-insert-command)
527b3c7d0b5b (dynamic-completion-mode): New function to enable
Richard M. Stallman <rms@gnu.org>
parents: 23382
diff changeset
2456 (global-set-key "&" 'completion-separator-self-insert-command)
527b3c7d0b5b (dynamic-completion-mode): New function to enable
Richard M. Stallman <rms@gnu.org>
parents: 23382
diff changeset
2457 (global-set-key "(" 'completion-separator-self-insert-command)
527b3c7d0b5b (dynamic-completion-mode): New function to enable
Richard M. Stallman <rms@gnu.org>
parents: 23382
diff changeset
2458 (global-set-key ")" 'completion-separator-self-insert-command)
527b3c7d0b5b (dynamic-completion-mode): New function to enable
Richard M. Stallman <rms@gnu.org>
parents: 23382
diff changeset
2459 (global-set-key "=" 'completion-separator-self-insert-command)
527b3c7d0b5b (dynamic-completion-mode): New function to enable
Richard M. Stallman <rms@gnu.org>
parents: 23382
diff changeset
2460 (global-set-key "`" 'completion-separator-self-insert-command)
527b3c7d0b5b (dynamic-completion-mode): New function to enable
Richard M. Stallman <rms@gnu.org>
parents: 23382
diff changeset
2461 (global-set-key "|" 'completion-separator-self-insert-command)
527b3c7d0b5b (dynamic-completion-mode): New function to enable
Richard M. Stallman <rms@gnu.org>
parents: 23382
diff changeset
2462 (global-set-key "{" 'completion-separator-self-insert-command)
527b3c7d0b5b (dynamic-completion-mode): New function to enable
Richard M. Stallman <rms@gnu.org>
parents: 23382
diff changeset
2463 (global-set-key "}" 'completion-separator-self-insert-command)
527b3c7d0b5b (dynamic-completion-mode): New function to enable
Richard M. Stallman <rms@gnu.org>
parents: 23382
diff changeset
2464 (global-set-key "[" 'completion-separator-self-insert-command)
527b3c7d0b5b (dynamic-completion-mode): New function to enable
Richard M. Stallman <rms@gnu.org>
parents: 23382
diff changeset
2465 (global-set-key "]" 'completion-separator-self-insert-command)
527b3c7d0b5b (dynamic-completion-mode): New function to enable
Richard M. Stallman <rms@gnu.org>
parents: 23382
diff changeset
2466 (global-set-key ";" 'completion-separator-self-insert-command)
527b3c7d0b5b (dynamic-completion-mode): New function to enable
Richard M. Stallman <rms@gnu.org>
parents: 23382
diff changeset
2467 (global-set-key "\"" 'completion-separator-self-insert-command)
527b3c7d0b5b (dynamic-completion-mode): New function to enable
Richard M. Stallman <rms@gnu.org>
parents: 23382
diff changeset
2468 (global-set-key "'" 'completion-separator-self-insert-command)
527b3c7d0b5b (dynamic-completion-mode): New function to enable
Richard M. Stallman <rms@gnu.org>
parents: 23382
diff changeset
2469 (global-set-key "#" 'completion-separator-self-insert-command)
527b3c7d0b5b (dynamic-completion-mode): New function to enable
Richard M. Stallman <rms@gnu.org>
parents: 23382
diff changeset
2470 (global-set-key "," 'completion-separator-self-insert-command)
527b3c7d0b5b (dynamic-completion-mode): New function to enable
Richard M. Stallman <rms@gnu.org>
parents: 23382
diff changeset
2471 (global-set-key "?" 'completion-separator-self-insert-command)
527b3c7d0b5b (dynamic-completion-mode): New function to enable
Richard M. Stallman <rms@gnu.org>
parents: 23382
diff changeset
2472
527b3c7d0b5b (dynamic-completion-mode): New function to enable
Richard M. Stallman <rms@gnu.org>
parents: 23382
diff changeset
2473 ;; We include period and colon even though they are symbol chars because :
527b3c7d0b5b (dynamic-completion-mode): New function to enable
Richard M. Stallman <rms@gnu.org>
parents: 23382
diff changeset
2474 ;; - in text we want to pick up the last word in a sentence.
527b3c7d0b5b (dynamic-completion-mode): New function to enable
Richard M. Stallman <rms@gnu.org>
parents: 23382
diff changeset
2475 ;; - in C pointer refs. we want to pick up the first symbol
527b3c7d0b5b (dynamic-completion-mode): New function to enable
Richard M. Stallman <rms@gnu.org>
parents: 23382
diff changeset
2476 ;; - it won't make a difference for lisp mode (package names are short)
527b3c7d0b5b (dynamic-completion-mode): New function to enable
Richard M. Stallman <rms@gnu.org>
parents: 23382
diff changeset
2477 (global-set-key "." 'completion-separator-self-insert-command)
527b3c7d0b5b (dynamic-completion-mode): New function to enable
Richard M. Stallman <rms@gnu.org>
parents: 23382
diff changeset
2478 (global-set-key ":" 'completion-separator-self-insert-command)
527b3c7d0b5b (dynamic-completion-mode): New function to enable
Richard M. Stallman <rms@gnu.org>
parents: 23382
diff changeset
2479
527b3c7d0b5b (dynamic-completion-mode): New function to enable
Richard M. Stallman <rms@gnu.org>
parents: 23382
diff changeset
2480 ;; Lisp Mode diffs
527b3c7d0b5b (dynamic-completion-mode): New function to enable
Richard M. Stallman <rms@gnu.org>
parents: 23382
diff changeset
2481 (define-key lisp-mode-map "!" 'self-insert-command)
527b3c7d0b5b (dynamic-completion-mode): New function to enable
Richard M. Stallman <rms@gnu.org>
parents: 23382
diff changeset
2482 (define-key lisp-mode-map "&" 'self-insert-command)
527b3c7d0b5b (dynamic-completion-mode): New function to enable
Richard M. Stallman <rms@gnu.org>
parents: 23382
diff changeset
2483 (define-key lisp-mode-map "%" 'self-insert-command)
527b3c7d0b5b (dynamic-completion-mode): New function to enable
Richard M. Stallman <rms@gnu.org>
parents: 23382
diff changeset
2484 (define-key lisp-mode-map "?" 'self-insert-command)
527b3c7d0b5b (dynamic-completion-mode): New function to enable
Richard M. Stallman <rms@gnu.org>
parents: 23382
diff changeset
2485 (define-key lisp-mode-map "=" 'self-insert-command)
527b3c7d0b5b (dynamic-completion-mode): New function to enable
Richard M. Stallman <rms@gnu.org>
parents: 23382
diff changeset
2486 (define-key lisp-mode-map "^" 'self-insert-command)
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2487
23605
527b3c7d0b5b (dynamic-completion-mode): New function to enable
Richard M. Stallman <rms@gnu.org>
parents: 23382
diff changeset
2488 ;; Avoid warnings.
527b3c7d0b5b (dynamic-completion-mode): New function to enable
Richard M. Stallman <rms@gnu.org>
parents: 23382
diff changeset
2489 (defvar c-mode-map)
527b3c7d0b5b (dynamic-completion-mode): New function to enable
Richard M. Stallman <rms@gnu.org>
parents: 23382
diff changeset
2490 (defvar fortran-mode-map)
527b3c7d0b5b (dynamic-completion-mode): New function to enable
Richard M. Stallman <rms@gnu.org>
parents: 23382
diff changeset
2491
527b3c7d0b5b (dynamic-completion-mode): New function to enable
Richard M. Stallman <rms@gnu.org>
parents: 23382
diff changeset
2492 ;;-----------------------------------------------
527b3c7d0b5b (dynamic-completion-mode): New function to enable
Richard M. Stallman <rms@gnu.org>
parents: 23382
diff changeset
2493 ;; End of line chars.
527b3c7d0b5b (dynamic-completion-mode): New function to enable
Richard M. Stallman <rms@gnu.org>
parents: 23382
diff changeset
2494 ;;-----------------------------------------------
527b3c7d0b5b (dynamic-completion-mode): New function to enable
Richard M. Stallman <rms@gnu.org>
parents: 23382
diff changeset
2495 (def-completion-wrapper newline :separator)
527b3c7d0b5b (dynamic-completion-mode): New function to enable
Richard M. Stallman <rms@gnu.org>
parents: 23382
diff changeset
2496 (def-completion-wrapper newline-and-indent :separator)
527b3c7d0b5b (dynamic-completion-mode): New function to enable
Richard M. Stallman <rms@gnu.org>
parents: 23382
diff changeset
2497 (def-completion-wrapper comint-send-input :separator)
527b3c7d0b5b (dynamic-completion-mode): New function to enable
Richard M. Stallman <rms@gnu.org>
parents: 23382
diff changeset
2498 (def-completion-wrapper exit-minibuffer :minibuffer-separator)
527b3c7d0b5b (dynamic-completion-mode): New function to enable
Richard M. Stallman <rms@gnu.org>
parents: 23382
diff changeset
2499 (def-completion-wrapper eval-print-last-sexp :separator)
527b3c7d0b5b (dynamic-completion-mode): New function to enable
Richard M. Stallman <rms@gnu.org>
parents: 23382
diff changeset
2500 (def-completion-wrapper eval-last-sexp :separator)
527b3c7d0b5b (dynamic-completion-mode): New function to enable
Richard M. Stallman <rms@gnu.org>
parents: 23382
diff changeset
2501 ;;(def-completion-wrapper minibuffer-complete-and-exit :minibuffer)
527b3c7d0b5b (dynamic-completion-mode): New function to enable
Richard M. Stallman <rms@gnu.org>
parents: 23382
diff changeset
2502
527b3c7d0b5b (dynamic-completion-mode): New function to enable
Richard M. Stallman <rms@gnu.org>
parents: 23382
diff changeset
2503 ;;-----------------------------------------------
527b3c7d0b5b (dynamic-completion-mode): New function to enable
Richard M. Stallman <rms@gnu.org>
parents: 23382
diff changeset
2504 ;; Cursor movement
527b3c7d0b5b (dynamic-completion-mode): New function to enable
Richard M. Stallman <rms@gnu.org>
parents: 23382
diff changeset
2505 ;;-----------------------------------------------
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2506
23605
527b3c7d0b5b (dynamic-completion-mode): New function to enable
Richard M. Stallman <rms@gnu.org>
parents: 23382
diff changeset
2507 (def-completion-wrapper next-line :under-or-before)
527b3c7d0b5b (dynamic-completion-mode): New function to enable
Richard M. Stallman <rms@gnu.org>
parents: 23382
diff changeset
2508 (def-completion-wrapper previous-line :under-or-before)
527b3c7d0b5b (dynamic-completion-mode): New function to enable
Richard M. Stallman <rms@gnu.org>
parents: 23382
diff changeset
2509 (def-completion-wrapper beginning-of-buffer :under-or-before)
527b3c7d0b5b (dynamic-completion-mode): New function to enable
Richard M. Stallman <rms@gnu.org>
parents: 23382
diff changeset
2510 (def-completion-wrapper end-of-buffer :under-or-before)
527b3c7d0b5b (dynamic-completion-mode): New function to enable
Richard M. Stallman <rms@gnu.org>
parents: 23382
diff changeset
2511 (def-completion-wrapper beginning-of-line :under-or-before)
527b3c7d0b5b (dynamic-completion-mode): New function to enable
Richard M. Stallman <rms@gnu.org>
parents: 23382
diff changeset
2512 (def-completion-wrapper end-of-line :under-or-before)
527b3c7d0b5b (dynamic-completion-mode): New function to enable
Richard M. Stallman <rms@gnu.org>
parents: 23382
diff changeset
2513 (def-completion-wrapper forward-char :under-or-before)
527b3c7d0b5b (dynamic-completion-mode): New function to enable
Richard M. Stallman <rms@gnu.org>
parents: 23382
diff changeset
2514 (def-completion-wrapper forward-word :under-or-before)
527b3c7d0b5b (dynamic-completion-mode): New function to enable
Richard M. Stallman <rms@gnu.org>
parents: 23382
diff changeset
2515 (def-completion-wrapper forward-sexp :under-or-before)
527b3c7d0b5b (dynamic-completion-mode): New function to enable
Richard M. Stallman <rms@gnu.org>
parents: 23382
diff changeset
2516 (def-completion-wrapper backward-char :backward-under)
527b3c7d0b5b (dynamic-completion-mode): New function to enable
Richard M. Stallman <rms@gnu.org>
parents: 23382
diff changeset
2517 (def-completion-wrapper backward-word :backward-under)
527b3c7d0b5b (dynamic-completion-mode): New function to enable
Richard M. Stallman <rms@gnu.org>
parents: 23382
diff changeset
2518 (def-completion-wrapper backward-sexp :backward-under)
56
3146eff78ab1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2519
23605
527b3c7d0b5b (dynamic-completion-mode): New function to enable
Richard M. Stallman <rms@gnu.org>
parents: 23382
diff changeset
2520 (def-completion-wrapper delete-backward-char :backward)
527b3c7d0b5b (dynamic-completion-mode): New function to enable
Richard M. Stallman <rms@gnu.org>
parents: 23382
diff changeset
2521 (def-completion-wrapper delete-backward-char-untabify :backward)
527b3c7d0b5b (dynamic-completion-mode): New function to enable
Richard M. Stallman <rms@gnu.org>
parents: 23382
diff changeset
2522
527b3c7d0b5b (dynamic-completion-mode): New function to enable
Richard M. Stallman <rms@gnu.org>
parents: 23382
diff changeset
2523 ;; Tests --
527b3c7d0b5b (dynamic-completion-mode): New function to enable
Richard M. Stallman <rms@gnu.org>
parents: 23382
diff changeset
2524 ;; foobarbiz
527b3c7d0b5b (dynamic-completion-mode): New function to enable
Richard M. Stallman <rms@gnu.org>
parents: 23382
diff changeset
2525 ;; foobar
527b3c7d0b5b (dynamic-completion-mode): New function to enable
Richard M. Stallman <rms@gnu.org>
parents: 23382
diff changeset
2526 ;; fooquux
527b3c7d0b5b (dynamic-completion-mode): New function to enable
Richard M. Stallman <rms@gnu.org>
parents: 23382
diff changeset
2527 ;; fooper
527b3c7d0b5b (dynamic-completion-mode): New function to enable
Richard M. Stallman <rms@gnu.org>
parents: 23382
diff changeset
2528
527b3c7d0b5b (dynamic-completion-mode): New function to enable
Richard M. Stallman <rms@gnu.org>
parents: 23382
diff changeset
2529 (cmpl-statistics-block
527b3c7d0b5b (dynamic-completion-mode): New function to enable
Richard M. Stallman <rms@gnu.org>
parents: 23382
diff changeset
2530 (record-completion-file-loaded))
527b3c7d0b5b (dynamic-completion-mode): New function to enable
Richard M. Stallman <rms@gnu.org>
parents: 23382
diff changeset
2531
527b3c7d0b5b (dynamic-completion-mode): New function to enable
Richard M. Stallman <rms@gnu.org>
parents: 23382
diff changeset
2532 (initialize-completions))
662
8a533acedb77 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 190
diff changeset
2533
29079
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
2534 (mapc (lambda (x)
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
2535 (add-to-list 'debug-ignored-errors x))
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
2536 '("^To complete, the point must be after a symbol at least [0-9]* character long\\.$"
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
2537 "^The string \".*\" is too short to be saved as a completion\\.$"))
3313f117f0ed Doc fixes. Add to debug-ignored-errors. Don't quote keywords.
Dave Love <fx@gnu.org>
parents: 27599
diff changeset
2538
15031
fef6a7e70bf4 Provide `completion'.
Richard M. Stallman <rms@gnu.org>
parents: 14231
diff changeset
2539 (provide 'completion)
fef6a7e70bf4 Provide `completion'.
Richard M. Stallman <rms@gnu.org>
parents: 14231
diff changeset
2540
662
8a533acedb77 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 190
diff changeset
2541 ;;; completion.el ends here