emacs-elpa-diffs
[Top][All Lists]
Advanced

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

[elpa] externals/orderless 89eb3775da 2/2: Work around inconsistency of


From: ELPA Syncer
Subject: [elpa] externals/orderless 89eb3775da 2/2: Work around inconsistency of `completion-table-with-context'
Date: Wed, 25 Oct 2023 21:58:37 -0400 (EDT)

branch: externals/orderless
commit 89eb3775daa53cfb52ad03015410c23f28c72d30
Author: Daniel Mendler <mail@daniel-mendler.de>
Commit: Daniel Mendler <mail@daniel-mendler.de>

    Work around inconsistency of `completion-table-with-context'
    
    The function `completion-table-with-context' modifies the predicate such 
that
    the string arguments are prefixed. This behavior is inconsistent with the
    `completion-file-name-table', where the strings returned by 
`all-completions'
    are the same as the strings passed to the predicate. The behavior of
    `all-completions' seems more intuitive at first sight. This could be an
    unintended bug or oversight in `completion-table-with-context'.
    
    In `orderless-try-completion' we work around the inconsistency by checking 
if a
    prefix is already present in the string passed to the predicate. If not, the
    prefix is added.
    
    Fix #148
---
 orderless.el | 15 +++++++++++++--
 1 file changed, 13 insertions(+), 2 deletions(-)

diff --git a/orderless.el b/orderless.el
index 38d73abc61..9e1939e5e6 100644
--- a/orderless.el
+++ b/orderless.el
@@ -477,10 +477,21 @@ This function is part of the `orderless' completion 
style."
            (setq one args)
            t)))
       (when one
+        ;; Prepend prefix if the candidate does not already have the same
+        ;; prefix.  This workaround is needed since the predicate may either
+        ;; receive an unprefixed or a prefixed candidate as argument.  Most
+        ;; completion tables consistently call the predicate with unprefixed
+        ;; candidates, for example `completion-file-name-table'.  In contrast,
+        ;; `completion-table-with-context' calls the predicate with prefixed
+        ;; candidates.  This could be an unintended bug or oversight in
+        ;; `completion-table-with-context'.
+        (let ((prefix (car (orderless--prefix+pattern string table pred))))
+          (unless (or (equal prefix "")
+                      (and (string-prefix-p prefix one)
+                           (test-completion one table pred)))
+            (setq one (concat prefix one))))
         (if (equal string one)
             t ;; unique exact match
-          (setq one (concat (car (orderless--prefix+pattern string table pred))
-                            one))
           (cons one (length one)))))))
 
 ;;;###autoload



reply via email to

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