changeset 105764:a5db863758a8

(pcomplete-std-complete): Obey pcomplete-use-paring. (pcomplete, pcomplete-parse-buffer-arguments, pcomplete-opt) (pcomplete--here): Use push.
author Stefan Monnier <monnier@iro.umontreal.ca>
date Mon, 26 Oct 2009 04:06:01 +0000
parents 5041ae86859e
children db5e4a5897ec
files etc/NEWS lisp/ChangeLog lisp/pcomplete.el
diffstat 3 files changed, 36 insertions(+), 17 deletions(-) [+]
line wrap: on
line diff
--- a/etc/NEWS	Mon Oct 26 03:39:15 2009 +0000
+++ b/etc/NEWS	Mon Oct 26 04:06:01 2009 +0000
@@ -135,6 +135,9 @@
 
 * Changes in Specialized Modes and Packages in Emacs 23.2
 
+** pcomplete provides a new command `pcomplete-std-completion' which
+is similar to `pcomplete' but using the standard completion UI code.
+
 ** .calc.el and .abbrev_defs obey user-emacs-directory.
 
 ** Calc graphing commands (`g f' etc.) now work on MS-Windows,
--- a/lisp/ChangeLog	Mon Oct 26 03:39:15 2009 +0000
+++ b/lisp/ChangeLog	Mon Oct 26 04:06:01 2009 +0000
@@ -1,5 +1,9 @@
 2009-10-26  Stefan Monnier  <monnier@iro.umontreal.ca>
 
+	* pcomplete.el (pcomplete-std-complete): Obey pcomplete-use-paring.
+	(pcomplete, pcomplete-parse-buffer-arguments, pcomplete-opt)
+	(pcomplete--here): Use push.
+
 	* subr.el (all-completions): Declare the 4th arg obsolete.
 
 2009-10-25  Stefan Monnier  <monnier@iro.umontreal.ca>
--- a/lisp/pcomplete.el	Mon Oct 26 03:39:15 2009 +0000
+++ b/lisp/pcomplete.el	Mon Oct 26 04:06:01 2009 +0000
@@ -448,7 +448,8 @@
   "Provide standard completion using pcomplete's completion tables.
 Same as `pcomplete' but using the standard completion UI."
   (interactive)
-  ;; FIXME: it doesn't implement paring.
+  ;; FIXME: it only completes the text before point, whereas the
+  ;; standard UI may also consider text after point.
   (catch 'pcompleted
     (let* ((pcomplete-stub)
            pcomplete-seen pcomplete-norm-func
@@ -497,7 +498,20 @@
                               action completions string pred)))
                     (if (stringp res)
                         (pcomplete-quote-argument res)
-                      res)))))))
+                      res))))))
+           (pred
+            ;; pare it down, if applicable
+            (when (and pcomplete-use-paring pcomplete-seen)
+              (setq pcomplete-seen
+                    (mapcar (lambda (f)
+                              (funcall pcomplete-norm-func
+                                       (directory-file-name f)))
+                            pcomplete-seen))
+              (lambda (f)
+                (not (member
+                      (funcall pcomplete-norm-func
+                               (directory-file-name f))
+                      pcomplete-seen))))))
 
       (let ((ol (make-overlay beg (point) nil nil t))
             (minibuffer-completion-table
@@ -510,7 +524,7 @@
                                 (cons pcomplete-termination-string
                                       "\\`a\\`")
                                 table)))
-            (minibuffer-completion-predicate nil))
+            (minibuffer-completion-predicate pred))
         (overlay-put ol 'field 'pcomplete)
         (unwind-protect
             (call-interactively 'minibuffer-complete)
@@ -534,9 +548,8 @@
 	(delete-backward-char pcomplete-last-completion-length)
 	(if (eq this-command 'pcomplete-reverse)
 	    (progn
-	      (setq pcomplete-current-completions
-		    (cons (car (last pcomplete-current-completions))
-			  pcomplete-current-completions))
+              (push (car (last pcomplete-current-completions))
+                    pcomplete-current-completions)
 	      (setcdr (last pcomplete-current-completions 2) nil))
 	  (nconc pcomplete-current-completions
 		 (list (car pcomplete-current-completions)))
@@ -744,12 +757,12 @@
       (goto-char begin)
       (while (< (point) end)
 	(skip-chars-forward " \t\n")
-	(setq begins (cons (point) begins))
+	(push (point) begins)
 	(skip-chars-forward "^ \t\n")
-	(setq args (cons (buffer-substring-no-properties
-			  (car begins) (point))
-			 args)))
-      (cons (reverse args) (reverse begins)))))
+	(push (buffer-substring-no-properties
+               (car begins) (point))
+              args))
+      (cons (nreverse args) (nreverse begins)))))
 
 ;;;###autoload
 (defun pcomplete-comint-setup (completef-sym)
@@ -974,7 +987,7 @@
 	      (let ((result (read-from-string options index)))
 		(setq index (cdr result)))
 	    (unless (memq char '(?/ ?* ?? ?.))
-	      (setq choices (cons (char-to-string char) choices)))
+	      (push (char-to-string char) choices))
 	    (setq index (1+ index))))
 	(throw 'pcomplete-completions
 	       (mapcar
@@ -1022,11 +1035,10 @@
 	  (unless (eq paring t)
 	    (let ((arg (pcomplete-arg)))
 	      (when (stringp arg)
-		(setq pcomplete-seen
-		      (cons (if paring
-				(funcall paring arg)
-			      (file-truename arg))
-			    pcomplete-seen))))))
+                (push (if paring
+                          (funcall paring arg)
+                        (file-truename arg))
+                      pcomplete-seen)))))
 	(pcomplete-next-arg)
 	t)
     (when pcomplete-show-help