emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] emacs/lisp ChangeLog pcomplete.el eshell/em-pro...


From: Stefan Monnier
Subject: [Emacs-diffs] emacs/lisp ChangeLog pcomplete.el eshell/em-pro...
Date: Sat, 28 Nov 2009 17:06:34 +0000

CVSROOT:        /sources/emacs
Module name:    emacs
Changes by:     Stefan Monnier <monnier>        09/11/28 17:06:34

Modified files:
        lisp           : ChangeLog pcomplete.el 
        lisp/eshell    : em-prompt.el 

Log message:
        * eshell/em-prompt.el (eshell-prompt-function): Abbreviate pwd, since
        `cd' doesn't always do it for us (bug#5067).
        * pcomplete.el (pcomplete-entries): Revert change installed mistakenly
        on 2009-10-25 as part of some other change (bug#5067).

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/emacs/lisp/ChangeLog?cvsroot=emacs&r1=1.16758&r2=1.16759
http://cvs.savannah.gnu.org/viewcvs/emacs/lisp/pcomplete.el?cvsroot=emacs&r1=1.46&r2=1.47
http://cvs.savannah.gnu.org/viewcvs/emacs/lisp/eshell/em-prompt.el?cvsroot=emacs&r1=1.20&r2=1.21

Patches:
Index: ChangeLog
===================================================================
RCS file: /sources/emacs/emacs/lisp/ChangeLog,v
retrieving revision 1.16758
retrieving revision 1.16759
diff -u -b -r1.16758 -r1.16759
--- ChangeLog   27 Nov 2009 22:03:04 -0000      1.16758
+++ ChangeLog   28 Nov 2009 17:06:30 -0000      1.16759
@@ -1,3 +1,11 @@
+2009-11-28  Stefan Monnier  <address@hidden>
+
+       * eshell/em-prompt.el (eshell-prompt-function): Abbreviate pwd, since
+       `cd' doesn't always do it for us (bug#5067).
+
+       * pcomplete.el (pcomplete-entries): Revert change installed mistakenly
+       on 2009-10-25 as part of some other change (bug#5067).
+
 2009-11-27  Stefan Monnier  <address@hidden>
 
        * emacs-lisp/bytecomp.el (byte-compile-warning-types): New type

Index: pcomplete.el
===================================================================
RCS file: /sources/emacs/emacs/lisp/pcomplete.el,v
retrieving revision 1.46
retrieving revision 1.47
diff -u -b -r1.46 -r1.47
--- pcomplete.el        19 Nov 2009 03:12:52 -0000      1.46
+++ pcomplete.el        28 Nov 2009 17:06:34 -0000      1.47
@@ -891,46 +891,65 @@
 \(files for which the PREDICATE returns nil will be excluded).
 If no directory information can be extracted from the completed
 component, `default-directory' is used as the basis for completion."
-  ;; FIXME: obey pcomplete-file-ignore and pcomplete-dir-ignore.
-  ;; FIXME: obey pcomplete-compare-entry-function (tho only if there
-  ;; are less than pcomplete-cycle-cutoff-length completions).
-  ;; FIXME: expand envvars?  shouldn't this be done globally instead?
-  (let* ((reg-pred (when regexp
-                     (lexical-let ((re regexp))
-                       (lambda (f)
-                         ;; (let ((name (file-name-nondirectory f)))
-                         ;;   (if (zerop (length name))
-                         ;;       (setq name (file-name-as-directory
-                         ;;                   (file-name-nondirectory
-                         ;;                    (directory-file-name f)))))
-                         ;;   (string-match re name))
-                         (string-match re f)))))
-         (pred (cond
-                ((null predicate) reg-pred)
-                ((null reg-pred) predicate)
-                (t (lexical-let ((predicate predicate)
-                                 (reg-pred reg-pred))
-                     (lambda (f)
-                       (and (funcall predicate f)
-                            (funcall reg-pred f)))))))
-         (fun
-          (lexical-let ((pred pred)
-                        (dir default-directory))
-            (lambda (s p a)
-              ;; Remember the default-directory that was active when we built
-              ;; the completion table.
-              (let ((default-directory dir)
-                    ;; The old code used only file-name-all-completions
-                    ;; which ignores completion-ignored-extensions.
-                    (completion-ignored-extensions nil))
-                (completion-table-with-predicate
-                 'completion-file-name-table pred 'strict s p a)))))
-         ;; Indirect through a symbol rather than returning a lambda
-         ;; expression, so as to help catch bugs where the caller
-         ;; might treat the lambda expression as a list of completions.
-         (sym (make-symbol "pcomplete-read-file-name-internal")))
-    (fset sym fun)
-    sym))
+  (let* ((name (substitute-env-vars pcomplete-stub))
+         (completion-ignore-case pcomplete-ignore-case)
+        (default-directory (expand-file-name
+                            (or (file-name-directory name)
+                                default-directory)))
+        above-cutoff)
+    (setq name (file-name-nondirectory name)
+         pcomplete-stub name)
+    (let ((completions
+          (file-name-all-completions name default-directory)))
+      (if regexp
+         (setq completions
+               (pcomplete-pare-list
+                completions nil
+                (function
+                 (lambda (file)
+                   (not (string-match regexp file)))))))
+      (if predicate
+         (setq completions
+               (pcomplete-pare-list
+                completions nil
+                (function
+                 (lambda (file)
+                   (not (funcall predicate file)))))))
+      (if (or pcomplete-file-ignore pcomplete-dir-ignore)
+         (setq completions
+               (pcomplete-pare-list
+                completions nil
+                (function
+                 (lambda (file)
+                   (if (eq (aref file (1- (length file)))
+                           ?/)
+                       (and pcomplete-dir-ignore
+                            (string-match pcomplete-dir-ignore file))
+                     (and pcomplete-file-ignore
+                          (string-match pcomplete-file-ignore file))))))))
+      (setq above-cutoff (and pcomplete-cycle-cutoff-length
+                            (> (length completions)
+                               pcomplete-cycle-cutoff-length)))
+      (sort completions
+           (function
+            (lambda (l r)
+              ;; for the purposes of comparison, remove the
+              ;; trailing slash from directory names.
+              ;; Otherwise, "foo.old/" will come before "foo/",
+              ;; since . is earlier in the ASCII alphabet than
+              ;; /
+              (let ((left (if (eq (aref l (1- (length l)))
+                                  ?/)
+                              (substring l 0 (1- (length l)))
+                            l))
+                    (right (if (eq (aref r (1- (length r)))
+                                   ?/)
+                               (substring r 0 (1- (length r)))
+                             r)))
+                (if above-cutoff
+                    (string-lessp left right)
+                  (funcall pcomplete-compare-entry-function
+                           left right)))))))))
 
 (defsubst pcomplete-all-entries (&optional regexp predicate)
   "Like `pcomplete-entries', but doesn't ignore any entries."

Index: eshell/em-prompt.el
===================================================================
RCS file: /sources/emacs/emacs/lisp/eshell/em-prompt.el,v
retrieving revision 1.20
retrieving revision 1.21
diff -u -b -r1.20 -r1.21
--- eshell/em-prompt.el 1 Sep 2009 16:17:57 -0000       1.20
+++ eshell/em-prompt.el 28 Nov 2009 17:06:34 -0000      1.21
@@ -46,9 +46,9 @@
 (defcustom eshell-prompt-function
   (function
    (lambda ()
-     (concat (eshell/pwd)
+     (concat (abbreviate-file-name (eshell/pwd))
             (if (= (user-uid) 0) " # " " $ "))))
-  "*A function that returns the Eshell prompt string.
+  "A function that returns the Eshell prompt string.
 Make sure to update `eshell-prompt-regexp' so that it will match your
 prompt."
   :type 'function




reply via email to

[Prev in Thread] Current Thread [Next in Thread]