changeset 106381:752b44ae030c

(makefile-special-targets-list): No need for it to be an alist any more. (makefile-complete): Use completion-in-region.
author Stefan Monnier <monnier@iro.umontreal.ca>
date Thu, 03 Dec 2009 03:02:34 +0000
parents f14ff1a09863
children 2ae01aa75e84
files lisp/ChangeLog lisp/progmodes/make-mode.el
diffstat 2 files changed, 39 insertions(+), 88 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/ChangeLog	Thu Dec 03 02:58:16 2009 +0000
+++ b/lisp/ChangeLog	Thu Dec 03 03:02:34 2009 +0000
@@ -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.
 
--- a/lisp/progmodes/make-mode.el	Thu Dec 03 02:58:16 2009 +0000
+++ b/lisp/progmodes/make-mode.el	Thu Dec 03 03:02:34 2009 +0000
@@ -231,15 +231,15 @@
 ;; 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 @@
 		(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)))))
+	 (paren nil)
+	 (do-macros
+          (save-excursion
+            (goto-char beg)
+            (let ((pc (preceding-char)))
+              (cond
+               ;; Preceding "$" means macros only.
+               ((= pc ?$)
+                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))
+               ;; Preceding "$(" or "${" means macros only.
+               ((and (memq pc '(?\{ ?\())
+                     (progn
+                       (setq paren (if (eq paren ?\{) ?\} ?\)))
+                       (backward-char)
+                       (= (preceding-char) ?$)))
+                t)))))
 
-       ;; 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)))