annotate lisp/completion.el @ 26059:2a7f35e0072b

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