;;; semantic/complete.el --- Routines for performing tag completion
-;;; Copyright (C) 2003, 2004, 2005, 2007, 2008, 2009
-;;; Free Software Foundation, Inc.
+;; Copyright (C) 2003, 2004, 2005, 2007, 2008, 2009
+;; Free Software Foundation, Inc.
;; Author: Eric M. Ludlam <zappo@gnu.org>
;; Keywords: syntax
;; quickly without resorting to "show me every possible option now".
;;
;; In addition, some symbol names will appear in multiple locations.
-;; If it is important to distiguish, then a way to provide a choice
+;; If it is important to distinguish, then a way to provide a choice
;; over these locations is important as well.
;;
;; Beyond brute force offers for completion of plain strings,
;;
;; Here, we will treat each section separately (excluding D)
;; They can then be strung together in user-visible commands to
-;; fullfill specific needs.
+;; fulfil specific needs.
;;
;; COLLECTORS:
;;
;; `semantic-complete-inline-tag-engine' will complete text in
;; a buffer.
-(require 'eieio)
-(require 'eieio-opt)
+(eval-when-compile (require 'cl))
(require 'semantic)
+(require 'eieio-opt)
(require 'semantic/analyze)
(require 'semantic/ctxt)
(require 'semantic/decorate)
(require 'semantic/format)
-(require 'semantic/tag)
(eval-when-compile
;; For the semantic-find-tags-for-completion macro.
(require 'semantic/find))
-(eval-when-compile
- (condition-case nil
- ;; Tooltip not available in older emacsen.
- (require 'tooltip)
- (error nil))
- )
-
;;; Code:
-;;; Compatibility
-;;
-(if (fboundp 'minibuffer-contents)
- (eval-and-compile (defalias 'semantic-minibuffer-contents 'minibuffer-contents))
- (eval-and-compile (defalias 'semantic-minibuffer-contents 'buffer-string)))
-(if (fboundp 'delete-minibuffer-contents)
- (eval-and-compile (defalias 'semantic-delete-minibuffer-contents 'delete-minibuffer-contents))
- (eval-and-compile (defalias 'semantic-delete-minibuffer-contents 'erase-buffer)))
-
(defvar semantic-complete-inline-overlay nil
"The overlay currently active while completing inline.")
overlay."
(if semantic-complete-inline-overlay
(semantic-complete-inline-text)
- (semantic-minibuffer-contents)))
+ (minibuffer-contents)))
(defun semantic-completion-delete-text ()
"Delete the text that is actively being completed.
Presumably if you call this you will insert something new there."
(if semantic-complete-inline-overlay
(semantic-complete-inline-delete-text)
- (semantic-delete-minibuffer-contents)))
+ (delete-minibuffer-contents)))
(defun semantic-completion-message (fmt &rest args)
"Display the string FMT formatted with ARGS at the end of the minibuffer."
Argument COLLECTOR is an object which can be used to to calculate
a list of possible hits. See `semantic-completion-collector-engine'
for details on COLLECTOR.
-Argumeng DISPLAYOR is an object used to display a list of possible
+Argument DISPLAYOR is an object used to display a list of possible
completions for a given prefix. See`semantic-completion-display-engine'
for details on DISPLAYOR.
PROMPT is a string to prompt with.
;; semantic-displayor-focus-abstract-child-p is part of the
;; semantic-displayor-focus-abstract class, defined later in this
;; file.
-(declare-function semantic-displayor-focus-abstract-child-p "semantic/complete")
+(declare-function semantic-displayor-focus-abstract-child-p "semantic/complete"
+ t t)
(defun semantic-complete-current-match ()
"Calculate a match from the current completion environment.
Argument COLLECTOR is an object which can be used to to calculate
a list of possible hits. See `semantic-completion-collector-engine'
for details on COLLECTOR.
-Argumeng DISPLAYOR is an object used to display a list of possible
+Argument DISPLAYOR is an object used to display a list of possible
completions for a given prefix. See`semantic-completion-display-engine'
for details on DISPLAYOR.
BUFFER is the buffer in which completion will take place.
"Calculate the completions for prefix from completionlist.
Output must be in semanticdb Find result format."
;; Must output in semanticdb format
- (let ((table (save-excursion
- (set-buffer (oref obj buffer))
+ (let ((table (with-current-buffer (oref obj buffer)
semanticdb-current-table))
(result (semantic-find-tags-for-completion
prefix
(semantic-analyze-possible-completions (oref obj context))))
;; search our cached completion list. make it look like a semanticdb
;; results type.
- (list (cons (save-excursion
- (set-buffer (oref (oref obj context) buffer))
+ (list (cons (with-current-buffer (oref (oref obj context) buffer)
semanticdb-current-table)
(semantic-find-tags-for-completion
prefix
(and table (semanticdb-get-buffer table)))))
;; If no buffer is provided, then we can make up a summary buffer.
(when (not buf)
- (save-excursion
- (set-buffer (get-buffer-create "*Completion Focus*"))
+ (with-current-buffer (get-buffer-create "*Completion Focus*")
(erase-buffer)
(insert "Focus on tag: \n")
(insert (semantic-format-tag-summarize tag nil t) "\n\n")
C)))
(eieio-build-class-alist semantic-displayor-abstract t))
)
- "Possible options for inlince completion displayors.
+ "Possible options for inline completion displayors.
Use this to enable custom editing.")
(defcustom semantic-complete-inline-analyzer-displayor-class
PROMPT is the first part of the prompt. Additional prompt
is added based on the contexts full prefix.
CONTEXT is the semantic analyzer context to start with.
-HISTORY is a symbol representing a variable to stor the history in.
+HISTORY is a symbol representing a variable to store the history in.
usually a default-tag and initial-input are available for completion
prompts. these are calculated from the CONTEXT variable passed in."
(if (not context) (setq context (semantic-analyze-current-context (point))))
:buffer (oref context buffer)
:context context)
(semantic-displayor-traditional-with-focus-highlight "simple")
- (save-excursion
- (set-buffer (oref context buffer))
+ (with-current-buffer (oref context buffer)
(goto-char (cdr (oref context bounds)))
(concat prompt (mapconcat 'identity syms ".")
(if syms "." "")
))
\f
-;;; ------------------------------------------------------------
-;;; Testing/Samples
-;;
-(defun semantic-complete-test ()
- "Test completion mechanisms."
- (interactive)
- (message "%S"
- (semantic-format-tag-prototype
- (semantic-complete-read-tag-project "Symbol: ")
- )))
-
+;;;###autoload
(defun semantic-complete-jump-local ()
"Jump to a semantic symbol."
(interactive)
(semantic-tag-class tag)
(semantic-tag-name tag)))))
+;;;###autoload
(defun semantic-complete-jump ()
"Jump to a semantic symbol."
(interactive)
(semantic-tag-class tag)
(semantic-tag-name tag)))))
+;;;###autoload
(defun semantic-complete-analyze-and-replace ()
"Perform prompt completion to do in buffer completion.
`semantic-analyze-possible-completions' is used to determine the
(insert (semantic-tag-name tag))
(message "%S" (semantic-format-tag-summarize tag))))
+;;;###autoload
(defun semantic-complete-analyze-inline ()
"Perform prompt completion to do in buffer completion.
`semantic-analyze-possible-completions' is used to determine the
(semantic-complete-inline-TAB)
))
+;;;###autoload
(defun semantic-complete-analyze-inline-idle ()
"Perform prompt completion to do in buffer completion.
`semantic-analyze-possible-completions' is used to determine the
(message "Inline completion not needed."))
)
+;;;###autoload
(defun semantic-complete-self-insert (arg)
"Like `self-insert-command', but does completion afterwards.
ARG is passed to `self-insert-command'. If ARG is nil,
(error nil))
))
-;; @TODO - I can't find where this fcn is used. Delete?
-
-;;;;###autoload
-;(defun semantic-complete-inline-project ()
-; "Perform inline completion for any symbol in the current project.
-;`semantic-analyze-possible-completions' is used to determine the
-;possible values.
-;The function returns immediately, leaving the buffer in a mode that
-;will perform the completion."
-; (interactive)
-; ;; Only do this if we are not already completing something.
-; (if (not (semantic-completion-inline-active-p))
-; (semantic-complete-inline-tag-project))
-; ;; Report a message if things didn't startup.
-; (if (and (interactive-p)
-; (not (semantic-completion-inline-active-p)))
-; (message "Inline completion not needed."))
-; )
-
-;; End
(provide 'semantic/complete)
+;; Local variables:
+;; generated-autoload-file: "loaddefs.el"
+;; generated-autoload-feature: semantic/loaddefs
+;; generated-autoload-load-name: "semantic/complete"
+;; End:
+
+;; arch-tag: a07c8f71-e53b-416e-9704-3a99ef101b09
;;; semantic/complete.el ends here