Function: semantic-complete-symbol
semantic-complete-symbol is an interactive and byte-compiled function
defined in util.el.gz.
Signature
(semantic-complete-symbol &optional PREDICATE)
Documentation
Complete the symbol under point, using Semantic facilities.
When called from a program, optional arg PREDICATE is a predicate determining which symbols are considered.
Key Bindings
Source Code
;; Defined in /usr/src/emacs/lisp/cedet/semantic/util.el.gz
(defun semantic-complete-symbol (&optional predicate)
"Complete the symbol under point, using Semantic facilities.
When called from a program, optional arg PREDICATE is a predicate
determining which symbols are considered."
(interactive)
(require 'semantic/ctxt)
(let* ((start (car (nth 2 (semantic-ctxt-current-symbol-and-bounds
(point)))))
(pattern (regexp-quote (buffer-substring start (point))))
collection completion)
(when start
(if (and semantic--completion-cache
(eq (nth 0 semantic--completion-cache) (current-buffer))
(= (nth 1 semantic--completion-cache) start)
(save-excursion
(goto-char start)
(looking-at (nth 3 semantic--completion-cache))))
;; Use cached value.
(setq collection (nthcdr 4 semantic--completion-cache))
;; Perform new query.
(setq collection (semantic-find-tag-for-completion pattern))
(setq semantic--completion-cache
(append (list (current-buffer) start 0 pattern)
collection))))
(if (null collection)
(let ((str (if pattern (format " for \"%s\"" pattern) "")))
(if (window-minibuffer-p (selected-window))
(minibuffer-message (format " [No completions%s]" str))
(message "Can't find completion%s" str)))
(setq completion (try-completion pattern collection predicate))
(if (string= pattern completion)
(let ((list (all-completions pattern collection predicate)))
(setq list (sort list #'string<))
(if (> (length list) 1)
(with-output-to-temp-buffer "*Completions*"
(display-completion-list
(completion-hilit-commonality list (length pattern) nil)))
;; Bury any out-of-date completions buffer.
(let ((win (get-buffer-window "*Completions*" 0)))
(if win (with-selected-window win (bury-buffer))))))
;; Exact match
(delete-region start (point))
(insert completion)
;; Bury any out-of-date completions buffer.
(let ((win (get-buffer-window "*Completions*" 0)))
(if win (with-selected-window win (bury-buffer))))))))