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

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

[nongnu] elpa/bash-completion 2684ea9e46 264/313: Fix issue with case-in


From: ELPA Syncer
Subject: [nongnu] elpa/bash-completion 2684ea9e46 264/313: Fix issue with case-insensitive completion.
Date: Sat, 3 Dec 2022 10:59:36 -0500 (EST)

branch: elpa/bash-completion
commit 2684ea9e46e24dc70d03aa07f47b85b062998cca
Author: Stephane Zermatten <szermatt@gmx.net>
Commit: Stephane Zermatten <szermatt@gmx.net>

    Fix issue with case-insensitive completion.
    
    Before this change, when matches have different cases, the "common
    prefix" ended up being empty. completion-ignore-case needs to be set
    correctly, after all, from the output of "bind -v".
---
 bash-completion.el                       | 21 ++++++++++++---------
 test/bash-completion-integration-test.el |  9 +++++++++
 2 files changed, 21 insertions(+), 9 deletions(-)

diff --git a/bash-completion.el b/bash-completion.el
index ba5ec5d701..02b021024b 100644
--- a/bash-completion.el
+++ b/bash-completion.el
@@ -441,6 +441,12 @@ returned."
     (process-put process 'bash-major-version bash-major-version)
 
     (bash-completion-send "bind -v 2>/dev/null" process)
+    (process-put process 'completion-ignore-case 
+                 (with-current-buffer (bash-completion--get-buffer process)
+                   (save-excursion
+                     (goto-char (point-min))
+                     (and (search-forward "completion-ignore-case on" nil 
'noerror) t))))
+
     (process-put process 'setup-done t)))
 
 ;;; ---------- Inline functions
@@ -1584,15 +1590,12 @@ completion."
                      (bash-completion--complete comp process))))))
           (setq last-str str
                 last-result result)
-          ;; The below passes an empty string to try-completion,
-          ;; all-completions and test-completion to not let them do
-          ;; any further filtering.
-          (funcall
-           (cond
-            ((null action) 'try-completion)
-            ((eq action t) 'all-completions)
-            (t 'test-completion))
-           "" result predicate))))))
+          (let ((filtered-result (if predicate (mapcar predicate result) 
result))
+                (completion-ignore-case (process-get process 
'completion-ignore-case)))
+            (cond
+             ((null action) (try-completion "" filtered-result))
+             ((eq action t) filtered-result)
+             (t (test-completion "" filtered-result)))))))))
 
 (provide 'bash-completion)
 
diff --git a/test/bash-completion-integration-test.el 
b/test/bash-completion-integration-test.el
index 0c82c82d51..6ed2dc1c6f 100644
--- a/test/bash-completion-integration-test.el
+++ b/test/bash-completion-integration-test.el
@@ -46,6 +46,9 @@
                   "--noprofile"
                   "--rcfile" (expand-file-name "bashrc" test-env-dir)))
            (completion-ignore-case nil)
+           (completion-in-region-function 'completion--in-region)
+           (completion-cycle-threshold 20)
+           (completion-styles '(basic partial-completion substring emacs22))
            (explicit-shell-file-name bash-completion-prog)
            (explicit-args-var (intern
                                (concat "explicit-"
@@ -398,6 +401,8 @@ for testing completion."
      (insert "set completion-ignore-case on\n"))
    (make-directory "Uppercase")
    (make-directory "Another Uppercase")
+   (make-directory "libs")
+   (make-directory "Library")
    (bash-completion_test-with-shell
     (when (>= (bash-completion_test-bash-major-version) 4)
       ;; Case insensitive completion is done by compgen which, under
@@ -407,6 +412,10 @@ for testing completion."
       (should (equal "ls some/" (bash-completion_test-complete "ls So")))
       (should (equal "ls Uppercase/" (bash-completion_test-complete "ls Up")))
       (should (equal "ls Uppercase/" (bash-completion_test-complete "ls up")))
+      
+      (should (equal "ls libs/" (bash-completion_test-complete "ls li")))
+      (should (equal "ls libs/" (bash-completion_test-complete "ls Li")))
+
       (should (equal "ls Another\\ Uppercase/" (bash-completion_test-complete 
"ls Ano")))
       (should (equal "ls Another\\ Uppercase/" (bash-completion_test-complete 
"ls ano")))
       (should (equal "ls \"Another Uppercase/" (bash-completion_test-complete 
"ls \"Ano")))



reply via email to

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