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

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

[nongnu] elpa/bash-completion 5447034cdc 251/313: Respect completion-ign


From: ELPA Syncer
Subject: [nongnu] elpa/bash-completion 5447034cdc 251/313: Respect completion-ignore-case setting from .inputrc.
Date: Sat, 3 Dec 2022 10:59:35 -0500 (EST)

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

    Respect completion-ignore-case setting from .inputrc.
    
    This change reads the setting completion-ignore-case set in .inputrc
    and use it to set the Emacs variable completion-ignore-case to make
    completion accept matches whose case don't match.
    
    Case-insensitive completion only works on bash 4, not bash 3, as this
    approach relies on compgen following the setting in .inputrc, which
    only happens starting with bash 4.
    
    This change, together with the previous changes accepting completion
    output that don't start with the original word, fix issue #7.
---
 bash-completion.el                       | 16 ++++++++++++++
 test/bash-completion-integration-test.el | 36 +++++++++++++++++++++++++++++++-
 test/bash-completion-test.el             |  2 ++
 3 files changed, 53 insertions(+), 1 deletion(-)

diff --git a/bash-completion.el b/bash-completion.el
index c826741622..4c2f59b7e4 100644
--- a/bash-completion.el
+++ b/bash-completion.el
@@ -439,6 +439,14 @@ returned."
                    (buffer-substring-no-properties
                     (point-min) (point-max))))
     (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))
+                     (search-forward "completion-ignore-case on" nil 
'noerror))))
+
     (process-put process 'setup-done t)))
 
 ;;; ---------- Inline functions
@@ -564,6 +572,14 @@ Returns (list stub-start stub-end completions) with
                     (process-get process 'bash-major-version)))
              (stub-start (bash-completion--stub-start comp))
              (use-separate-processes bash-completion-use-separate-processes))
+
+        ;; This sets completion-ignore-case which matters for the
+        ;; caller, as it needs to know how to post-process the
+        ;; results.
+        (let ((ignore-case (process-get process 'completion-ignore-case)))
+          (unless (eq completion-ignore-case ignore-case)
+            (setq completion-ignore-case ignore-case)))
+        
         (bash-completion--customize comp process)
         (list
          stub-start
diff --git a/test/bash-completion-integration-test.el 
b/test/bash-completion-integration-test.el
index ef2bdd21c2..09b190b166 100644
--- a/test/bash-completion-integration-test.el
+++ b/test/bash-completion-integration-test.el
@@ -45,6 +45,7 @@
             (list "--noediting"
                   "--noprofile"
                   "--rcfile" (expand-file-name "bashrc" test-env-dir)))
+           (completion-ignore-case nil)
            (explicit-shell-file-name bash-completion-prog)
            (explicit-args-var (intern
                                (concat "explicit-"
@@ -386,5 +387,38 @@ for testing completion."
    (should (equal "dummy 1 Yaaa "
                   (bash-completion_test-complete "dummy 1 Y")))))
 
-   
+(ert-deftest bash-completion-integration-case-insensitive-test ()
+  (bash-completion_test-harness
+   (concat ; .bashrc
+    "INPUTRC=test-inputrc\n")
+   nil ; use-separate-process
+   (with-temp-file "test-inputrc"
+     (insert "set completion-ignore-case on\n"))
+   (make-directory "Uppercase")
+   (bash-completion_test-with-shell
+    (when (>= (bash-completion_test-bash-major-version) 4)
+      ;; Case insensitive completion is done by compgen which, under
+      ;; bash 4, respects the case sensitivity settings set in
+      ;; .inputrc.
+      (should (equal "ls some/" (bash-completion_test-complete "ls so")))
+      (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 completion-ignore-case)))))
+
+(ert-deftest bash-completion-integration-case-sensitive-test ()
+  (bash-completion_test-harness
+   (concat ; .bashrc
+    "INPUTRC=test-inputrc\n")
+   nil ; use-separate-process
+   (with-temp-file "test-inputrc"
+     (insert "set completion-ignore-case off\n"))
+   (make-directory "Uppercase")
+   (bash-completion_test-with-shell
+    (should (equal "ls some/" (bash-completion_test-complete "ls so")))
+    (should (equal "ls So" (bash-completion_test-complete "ls So")))
+    (should (equal "ls Uppercase/" (bash-completion_test-complete "ls Up")))
+    (should (equal "ls up" (bash-completion_test-complete "ls up")))
+    (should (not completion-ignore-case)))))
+
 ;;; bash-completion-integration-test.el ends here
diff --git a/test/bash-completion-test.el b/test/bash-completion-test.el
index c4516e434a..5c794525a2 100644
--- a/test/bash-completion-test.el
+++ b/test/bash-completion-test.el
@@ -966,6 +966,8 @@ before calling `bash-completion-dynamic-complete-nocomint'.
                           wordbreaks)
                          ((and (eq 'process process) (eq 'bash-major-version 
prop))
                           bash-major-version)
+                         ((and (eq 'process process) (eq 
'completion-ignore-case prop))
+                          completion-ignore-case)
                          (t (error "unexpected call")))))
                      ((symbol-function 'bash-completion-buffer) (lambda () 
--process-buffer))
                      ((symbol-function 'process-buffer) (lambda (p) 
--process-buffer))



reply via email to

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