* minibuffer.el (tags-completion-at-point-function): New function.

(completion-at-point-functions): Use it.

* cedet/semantic.el (semantic-completion-at-point-function): New function.
(semantic-mode): Use semantic-completion-at-point-function for
completion-at-point-functions instead.

* progmodes/etags.el (complete-tag): Revert last change.
This commit is contained in:
Chong Yidong 2010-04-29 11:32:11 -04:00
parent 3d14bb734b
commit 3a07ffce2f
4 changed files with 53 additions and 18 deletions

View file

@ -1,3 +1,14 @@
2010-04-29 Chong Yidong <cyd@stupidchicken.com>
* minibuffer.el (tags-completion-at-point-function): New function.
(completion-at-point-functions): Use it.
* cedet/semantic.el (semantic-completion-at-point-function): New function.
(semantic-mode): Use semantic-completion-at-point-function for
completion-at-point-functions instead.
* progmodes/etags.el (complete-tag): Revert last change.
2010-04-29 Alan Mackenzie <acm@muc.de>
* progmodes/cc-mode.el (c-extend-region-for-CPP): Fix an

View file

@ -1083,7 +1083,8 @@ Semantic mode.
;; Add semantic-ia-complete-symbol to
;; completion-at-point-functions, so that it is run from
;; M-TAB.
(add-hook 'completion-at-point-functions 'semantic-ia-complete-symbol)
(add-hook 'completion-at-point-functions
'semantic-completion-at-point-function)
(if global-ede-mode
(define-key cedet-menu-map [cedet-menu-separator] '("--")))
(dolist (b (buffer-list))
@ -1091,7 +1092,8 @@ Semantic mode.
(semantic-new-buffer-fcn))))
;; Disable all Semantic features.
(remove-hook 'mode-local-init-hook 'semantic-new-buffer-fcn)
(remove-hook 'completion-at-point-functions 'semantic-ia-complete-symbol)
(remove-hook 'completion-at-point-functions
'semantic-completion-at-point-function)
(define-key cedet-menu-map [cedet-menu-separator] nil)
(define-key cedet-menu-map [semantic-options-separator] nil)
;; FIXME: handle semanticdb-load-ebrowse-caches
@ -1099,6 +1101,9 @@ Semantic mode.
(if (and (boundp mode) (eval mode))
(funcall mode -1)))))
(defun semantic-completion-at-point-function ()
'semantic-ia-complete-symbol)
;;; Autoload some functions that are not in semantic/loaddefs
(autoload 'global-semantic-idle-completions-mode "semantic/idle"

View file

@ -1157,7 +1157,7 @@ Point needs to be somewhere between START and END."
(call-interactively 'minibuffer-complete)
(delete-overlay ol)))))
(defvar completion-at-point-functions '(complete-tag)
(defvar completion-at-point-functions '(tags-completion-at-point-function)
"Special hook to find the completion table for the thing at point.
It is called without any argument and should return either nil,
or a function of no argument to perform completion (discouraged),
@ -1169,14 +1169,9 @@ Currently supported properties are:
`:predicate' a predicate that completion candidates need to satisfy.
`:annotation-function' the value to use for `completion-annotate-function'.")
(declare-function tags-lazy-completion-table "etags.el" ())
(defun complete-tag ()
"Perform tags completion on the text around point.
If no tags table is loaded, do nothing and return nil.
Otherwise, complete to the set of names listed in the tags table.
The string to complete is chosen in the same way as the default
for `find-tag'."
(defun tags-completion-at-point-function ()
"Using tags, return a completion table for the text around point.
If no tags table is loaded, do nothing and return nil."
(interactive)
(when (or tags-table-list tags-file-name)
(require 'etags)
@ -1185,14 +1180,11 @@ for `find-tag'."
case-fold-search))
(pattern (funcall (or find-tag-default-function
(get major-mode 'find-tag-default-function)
'find-tag-default)))
(comp-table (tags-lazy-completion-table))
beg)
'find-tag-default))))
(when pattern
(search-backward pattern)
(setq beg (point))
(forward-char (length pattern))
(completion-in-region beg (point) comp-table)))))
(tags-lazy-completion-table)))))
(declare-function tags-lazy-completion-table "etags.el" ())
(defun complete-symbol (&optional arg)
"Perform completion on the text around point.

View file

@ -2027,6 +2027,33 @@ see the doc of that variable if you want to add names to the list."
(interactive)
(quit-window t (selected-window)))
;;;###autoload
(defun complete-tag ()
"Perform tags completion on the text around point.
Completes to the set of names listed in the current tags table.
The string to complete is chosen in the same way as the default
for \\[find-tag] (which see)."
(interactive)
(or tags-table-list
tags-file-name
(error "%s"
(substitute-command-keys
"No tags table loaded; try \\[visit-tags-table]")))
(let ((completion-ignore-case (if (memq tags-case-fold-search '(t nil))
tags-case-fold-search
case-fold-search))
(pattern (funcall (or find-tag-default-function
(get major-mode 'find-tag-default-function)
'find-tag-default)))
(comp-table (tags-lazy-completion-table))
beg)
(or pattern
(error "Nothing to complete"))
(search-backward pattern)
(setq beg (point))
(forward-char (length pattern))
(completion-in-region beg (point) comp-table)))
(dolist (x '("^No tags table in use; use .* to select one$"
"^There is no default tag$"
"^No previous tag locations$"