From: Stefan Monnier Date: Thu, 3 Dec 2009 03:02:34 +0000 (+0000) Subject: (makefile-special-targets-list): No need for it to be an alist any more. X-Git-Tag: emacs-pretest-23.1.90~113 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=ea52206ba0bec06cf886edf7142d0083a2ee2382;p=emacs.git (makefile-special-targets-list): No need for it to be an alist any more. (makefile-complete): Use completion-in-region. --- diff --git a/lisp/ChangeLog b/lisp/ChangeLog index f0b2de4031e..33cc62cb5b3 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,9 @@ 2009-12-03 Stefan Monnier + * 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. diff --git a/lisp/progmodes/make-mode.el b/lisp/progmodes/make-mode.el index 7eb3df185e9..3674714d6fb 100644 --- a/lisp/progmodes/make-mode.el +++ b/lisp/progmodes/make-mode.el @@ -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)) - - (save-excursion - (goto-char beg) - (let ((pc (preceding-char))) - (cond - ;; Beginning of line means anything. - ((bolp) - ()) - - ;; 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")))))) + (paren nil) + (do-macros + (save-excursion + (goto-char beg) + (let ((pc (preceding-char))) + (cond + ;; Preceding "$" means macros only. + ((= pc ?$) + t) + + ;; Preceding "$(" or "${" means macros only. + ((and (memq pc '(?\{ ?\()) + (progn + (setq paren (if (eq paren ?\{) ?\} ?\))) + (backward-char) + (= (preceding-char) ?$))) + t))))) + + (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)))