From: Stefan Monnier Date: Thu, 28 Apr 2011 19:39:11 +0000 (-0300) Subject: * lisp/pcomplete.el (pcomplete-completions-at-point): Return nil if there X-Git-Tag: emacs-pretest-24.0.90~104^2~275^2~185 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=08abfaad86031776b5c01de4d6a8cadb4986896b;p=emacs.git * lisp/pcomplete.el (pcomplete-completions-at-point): Return nil if there aren't any completions at point. --- diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 1444a9ebe5f..11b648367fc 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,8 @@ +2011-04-28 Stefan Monnier + + * pcomplete.el (pcomplete-completions-at-point): Return nil if there + aren't any completions at point. + 2011-04-28 Juanma Barranquero * subr.el (display-delayed-warnings): New function. @@ -5,6 +10,10 @@ 2011-04-28 Stefan Monnier + * minibuffer.el (completion-at-point, completion-help-at-point): + Don't presume that a given completion-at-point-function will always + use the same calling convention. + * pcomplete.el (pcomplete-completions-at-point): Obey pcomplete-ignore-case. Don't call pcomplete-norm-func unless pcomplete-seen is non-nil. diff --git a/lisp/pcomplete.el b/lisp/pcomplete.el index 82f809d00ce..6ee617d9862 100644 --- a/lisp/pcomplete.el +++ b/lisp/pcomplete.el @@ -489,57 +489,57 @@ Same as `pcomplete' but using the standard completion UI." ;; prefix from pcomplete-stub. (beg (max (- (point) (length pcomplete-stub)) (pcomplete-begin))) - (buftext (buffer-substring beg (point))) - (table - (cond - ((null completions) nil) - ((not (equal pcomplete-stub buftext)) - ;; This isn't always strictly right (e.g. if - ;; FOO="toto/$FOO", then completion of /$FOO/bar may - ;; result in something incorrect), but given the lack of - ;; any other info, it's about as good as it gets, and in - ;; practice it should work just fine (fingers crossed). - (let ((prefixes (pcomplete--common-quoted-suffix - pcomplete-stub buftext))) - (apply-partially - 'pcomplete--table-subvert - completions - (cdr prefixes) (car prefixes)))) - (t - (lexical-let ((completions completions)) - (lambda (string pred action) - (let ((res (complete-with-action - action completions string pred))) - (if (stringp res) - (pcomplete-quote-argument res) - res))))))) - (pred - ;; pare it down, if applicable - (when (and table pcomplete-use-paring pcomplete-seen) - (setq pcomplete-seen - (mapcar (lambda (f) - (funcall pcomplete-norm-func - (directory-file-name f))) - pcomplete-seen)) - (lambda (f) - (not (when pcomplete-seen - (member - (funcall pcomplete-norm-func - (directory-file-name f)) - pcomplete-seen))))))) - (unless (zerop (length pcomplete-termination-string)) - ;; Add a space at the end of completion. Use a terminator-regexp - ;; that never matches since the terminator cannot appear - ;; within the completion field anyway. - (setq table - (apply-partially #'completion-table-with-terminator - (cons pcomplete-termination-string - "\\`a\\`") - table))) - (when pcomplete-ignore-case - (setq table - (apply-partially #'completion-table-case-fold table))) - (list beg (point) table :predicate pred)))) + (buftext (buffer-substring beg (point)))) + (when completions + (let ((table + (cond + ((not (equal pcomplete-stub buftext)) + ;; This isn't always strictly right (e.g. if + ;; FOO="toto/$FOO", then completion of /$FOO/bar may + ;; result in something incorrect), but given the lack of + ;; any other info, it's about as good as it gets, and in + ;; practice it should work just fine (fingers crossed). + (let ((prefixes (pcomplete--common-quoted-suffix + pcomplete-stub buftext))) + (apply-partially + 'pcomplete--table-subvert + completions + (cdr prefixes) (car prefixes)))) + (t + (lexical-let ((completions completions)) + (lambda (string pred action) + (let ((res (complete-with-action + action completions string pred))) + (if (stringp res) + (pcomplete-quote-argument 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 (when pcomplete-seen + (member + (funcall pcomplete-norm-func + (directory-file-name f)) + pcomplete-seen))))))) + (unless (zerop (length pcomplete-termination-string)) + ;; Add a space at the end of completion. Use a terminator-regexp + ;; that never matches since the terminator cannot appear + ;; within the completion field anyway. + (setq table + (apply-partially #'completion-table-with-terminator + (cons pcomplete-termination-string + "\\`a\\`") + table))) + (when pcomplete-ignore-case + (setq table + (apply-partially #'completion-table-case-fold table))) + (list beg (point) table :predicate pred)))))) ;; I don't think such commands are usable before first setting up buffer-local ;; variables to parse args, so there's no point autoloading it.