(makefile-special-targets-list): No need for it to be an alist any more.
(makefile-complete): Use completion-in-region.
This commit is contained in:
parent
69a94a37cd
commit
ea52206ba0
2 changed files with 39 additions and 88 deletions
|
@ -1,5 +1,9 @@
|
|||
2009-12-03 Stefan Monnier <monnier@iro.umontreal.ca>
|
||||
|
||||
* progmodes/make-mode.el (makefile-special-targets-list): No need for
|
||||
it to be an alist any more.
|
||||
(makefile-complete): Use completion-in-region.
|
||||
|
||||
* progmodes/octave-mod.el (octave-complete-symbol):
|
||||
Use completion-in-region.
|
||||
|
||||
|
|
|
@ -231,15 +231,15 @@ to MODIFY A FILE WITHOUT YOUR CONFIRMATION when \"it seems necessary\"."
|
|||
;; Special targets for DMake, Sun's make ...
|
||||
;;
|
||||
(defcustom makefile-special-targets-list
|
||||
'(("DEFAULT") ("DONE") ("ERROR") ("EXPORT")
|
||||
("FAILED") ("GROUPEPILOG") ("GROUPPROLOG") ("IGNORE")
|
||||
("IMPORT") ("INCLUDE") ("INCLUDEDIRS") ("INIT")
|
||||
("KEEP_STATE") ("MAKEFILES") ("MAKE_VERSION") ("NO_PARALLEL")
|
||||
("PARALLEL") ("PHONY") ("PRECIOUS") ("REMOVE")
|
||||
("SCCS_GET") ("SILENT") ("SOURCE") ("SUFFIXES")
|
||||
("WAIT") ("c.o") ("C.o") ("m.o")
|
||||
("el.elc") ("y.c") ("s.o"))
|
||||
"*List of special targets.
|
||||
'("DEFAULT" "DONE" "ERROR" "EXPORT"
|
||||
"FAILED" "GROUPEPILOG" "GROUPPROLOG" "IGNORE"
|
||||
"IMPORT" "INCLUDE" "INCLUDEDIRS" "INIT"
|
||||
"KEEP_STATE" "MAKEFILES" "MAKE_VERSION" "NO_PARALLEL"
|
||||
"PARALLEL" "PHONY" "PRECIOUS" "REMOVE"
|
||||
"SCCS_GET" "SILENT" "SOURCE" "SUFFIXES"
|
||||
"WAIT" "c.o" "C.o" "m.o"
|
||||
"el.elc" "y.c" "s.o")
|
||||
"List of special targets.
|
||||
You will be offered to complete on one of those in the minibuffer whenever
|
||||
you enter a \".\" at the beginning of a line in `makefile-mode'."
|
||||
:type '(repeat (list string))
|
||||
|
@ -1185,87 +1185,34 @@ The context determines which are considered."
|
|||
(skip-chars-backward "^$(){}:#= \t\n")
|
||||
(point)))
|
||||
(try (buffer-substring beg (point)))
|
||||
(do-macros nil)
|
||||
(paren nil))
|
||||
(paren nil)
|
||||
(do-macros
|
||||
(save-excursion
|
||||
(goto-char beg)
|
||||
(let ((pc (preceding-char)))
|
||||
(cond
|
||||
;; Preceding "$" means macros only.
|
||||
((= pc ?$)
|
||||
t)
|
||||
|
||||
(save-excursion
|
||||
(goto-char beg)
|
||||
(let ((pc (preceding-char)))
|
||||
(cond
|
||||
;; Beginning of line means anything.
|
||||
((bolp)
|
||||
())
|
||||
;; Preceding "$(" or "${" means macros only.
|
||||
((and (memq pc '(?\{ ?\())
|
||||
(progn
|
||||
(setq paren (if (eq paren ?\{) ?\} ?\)))
|
||||
(backward-char)
|
||||
(= (preceding-char) ?$)))
|
||||
t)))))
|
||||
|
||||
;; Preceding "$" means macros only.
|
||||
((= pc ?$)
|
||||
(setq do-macros t))
|
||||
|
||||
;; Preceding "$(" or "${" means macros only.
|
||||
((and (or (= pc ?{)
|
||||
(= pc ?\())
|
||||
(progn
|
||||
(setq paren pc)
|
||||
(backward-char)
|
||||
(and (not (bolp))
|
||||
(= (preceding-char) ?$))))
|
||||
(setq do-macros t)))))
|
||||
|
||||
;; Try completion.
|
||||
(let* ((table (append (if do-macros
|
||||
'()
|
||||
makefile-target-table)
|
||||
makefile-macro-table))
|
||||
(completion (try-completion try table)))
|
||||
(cond
|
||||
;; Exact match, so insert closing paren or colon.
|
||||
((eq completion t)
|
||||
(insert (if do-macros
|
||||
(if (eq paren ?{)
|
||||
?}
|
||||
?\))
|
||||
(if (save-excursion
|
||||
(goto-char beg)
|
||||
(bolp))
|
||||
":"
|
||||
" "))))
|
||||
|
||||
;; No match.
|
||||
((null completion)
|
||||
(message "Can't find completion for \"%s\"" try)
|
||||
(ding))
|
||||
|
||||
;; Partial completion.
|
||||
((not (string= try completion))
|
||||
;; FIXME it would be nice to supply the closing paren if an
|
||||
;; exact, unambiguous match were found. That is not possible
|
||||
;; right now. Ditto closing ":" for targets.
|
||||
(delete-region beg (point))
|
||||
|
||||
;; DO-MACROS means doing macros only. If not that, then check
|
||||
;; to see if this completion is a macro. Special insertion
|
||||
;; must be done for macros.
|
||||
(if (or do-macros
|
||||
(assoc completion makefile-macro-table))
|
||||
(let ((makefile-use-curly-braces-for-macros-p
|
||||
(or (eq paren ?{)
|
||||
makefile-use-curly-braces-for-macros-p)))
|
||||
(delete-backward-char 2)
|
||||
(makefile-do-macro-insertion completion)
|
||||
(delete-backward-char 1))
|
||||
|
||||
;; Just insert targets.
|
||||
(insert completion)))
|
||||
|
||||
;; Can't complete any more, so make completion list. FIXME
|
||||
;; this doesn't do the right thing when the completion is
|
||||
;; actually inserted. I don't think there is an easy way to do
|
||||
;; that.
|
||||
(t
|
||||
(message "Making completion list...")
|
||||
(let ((list (all-completions try table)))
|
||||
(with-output-to-temp-buffer "*Completions*"
|
||||
(display-completion-list list try)))
|
||||
(message "Making completion list...done"))))))
|
||||
(table (apply-partially 'completion-table-with-terminator
|
||||
(cond
|
||||
(do-macros (or paren ""))
|
||||
((save-excursion (goto-char beg) (bolp)) ":")
|
||||
(t " "))
|
||||
(append (if do-macros
|
||||
'()
|
||||
makefile-target-table)
|
||||
makefile-macro-table))))
|
||||
(completion-in-region beg (point) table)))
|
||||
|
||||
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue