annotate lisp/completion.el @ 110410:f2e111723c3a

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