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

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

[nongnu] elpa/bash-completion c6df9be78d 182/313: Store the alist as pro


From: ELPA Syncer
Subject: [nongnu] elpa/bash-completion c6df9be78d 182/313: Store the alist as process property.
Date: Sat, 3 Dec 2022 10:59:28 -0500 (EST)

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

    Store the alist as process property.
    
    This change prepares the way to store additional per-process
    information, such as the version of the bash command and the value of
    COMP_WORDBREAKS. Process property provide a convenient way of doing
    that.
---
 bash-completion.el           | 37 ++++++++++++++++++-------------------
 test/bash-completion-test.el | 23 +++++++++++++++++++----
 2 files changed, 37 insertions(+), 23 deletions(-)

diff --git a/bash-completion.el b/bash-completion.el
index f0d8fbe54f..d48c808444 100644
--- a/bash-completion.el
+++ b/bash-completion.el
@@ -757,8 +757,7 @@ up the completion environment (COMP_LINE, COMP_POINT, 
COMP_WORDS,
 COMP_CWORD) and calls compgen.
 
 The result is a list of candidates, which might be empty."
-  (let* ((entry (bash-completion-require-process))
-         (process (car entry))
+  (let* ((process (bash-completion-require-process))
          (completion-status)
          (options))
     (setq completion-status (bash-completion-send 
(bash-completion-generate-line comp) process))
@@ -768,7 +767,7 @@ The result is a list of candidates, which might be empty."
       ;; just setup completion for the current command and is asking
       ;; us to retry once with the new configuration.
       (bash-completion-send "complete -p" process)
-      (setcdr entry (bash-completion-build-alist (process-buffer process)))
+      (process-put process 'complete-p (bash-completion-build-alist 
(process-buffer process)))
       (bash-completion--customize comp 'nodefault)
       (setq completion-status (bash-completion-send 
(bash-completion-generate-line comp) process)))
     (setq options (bash-completion--options comp))
@@ -1074,12 +1073,11 @@ is set to t."
               ;; spaces. Noticed in bash_completion v1.872.
               (bash-completion-send "function quote_readline { echo \"$1\"; }" 
process)
               (bash-completion-send "complete -p" process)
-              (let ((entry (cons process (bash-completion-build-alist
-                                          (process-buffer process)))))
-                (push (cons remote entry)
-                      bash-completion-processes)
-                (setq cleanup nil)
-                entry))
+              (process-put process 'complete-p
+                           (bash-completion-build-alist (process-buffer 
process)))
+              (push (cons remote process) bash-completion-processes)
+              (setq cleanup nil)
+              process)
           ;; finally
           (progn
             (setenv "EMACS_BASH_COMPLETE" nil)
@@ -1132,12 +1130,13 @@ The returned alist is a sligthly parsed version of the 
output of
     alist))
 
 (defun bash-completion--customize (comp &optional nodefault)
-  (unless (eq 'command (bash-completion--type comp))
-    (let ((bash-completion-alist (cdr (bash-completion-require-process))))
-      (let ((command-name (file-name-nondirectory (car (bash-completion--words 
comp)))))
-        (setf (bash-completion--compgen-args comp)
-              (or (cdr (assoc command-name bash-completion-alist))
-                  (and (not nodefault) (cdr (assoc nil 
bash-completion-alist)))))))))
+  (let ((compgen-args-alist
+         (process-get (bash-completion-require-process) 'complete-p))
+        (command-name (file-name-nondirectory
+                       (car (bash-completion--words comp)))))
+    (setf (bash-completion--compgen-args comp)
+          (or (cdr (assoc command-name compgen-args-alist))
+              (and (not nodefault) (cdr (assoc nil compgen-args-alist)))))))
 
 (defun bash-completion-generate-line (comp)
   "Generate a command-line that calls compgen for COMP.
@@ -1209,7 +1208,7 @@ and would like bash completion in Emacs to take these 
changes into account."
   (interactive)
   (let* ((remote (and default-directory (file-remote-p default-directory)))
          (entry (assoc remote bash-completion-processes))
-         (proc (cadr entry)))
+         (proc (cdr entry)))
     (when proc
       (bash-completion-kill proc)
       (setq bash-completion-processes (delq entry 
bash-completion-processes)))))
@@ -1232,13 +1231,13 @@ and would like bash completion in Emacs to take these 
changes into account."
 
 (defun bash-completion-buffer ()
   "Return the buffer of the BASH process, create the BASH process if 
necessary."
-  (process-buffer (car (bash-completion-require-process))))
+  (process-buffer (bash-completion-require-process)))
 
 (defun bash-completion-is-running ()
   "Check whether the bash completion process is running."
   (let* ((entry (assoc (file-remote-p default-directory)
                        bash-completion-processes))
-         (proc (cadr entry))
+         (proc (cdr entry))
          (running (and proc (eq 'run (process-status proc)))))
     (unless (and entry running)
       (setq bash-completion-processes (delq entry bash-completion-processes)))
@@ -1260,7 +1259,7 @@ of the command in the bash completion process buffer.
 
 Return the status code of the command, as a number."
   ;; (message commandline)
-  (let ((process (or process (car (bash-completion-require-process))))
+  (let ((process (or process (bash-completion-require-process)))
        (timeout (or timeout bash-completion-process-timeout)))
     (with-current-buffer (process-buffer process)
       (erase-buffer)
diff --git a/test/bash-completion-test.el b/test/bash-completion-test.el
index 6a741d1b9f..c11cb959a6 100644
--- a/test/bash-completion-test.el
+++ b/test/bash-completion-test.el
@@ -376,9 +376,14 @@ garbage
 
 (ert-deftest bash-completion-customize-test ()
   (cl-letf (((symbol-function 'bash-completion-require-process)
-             (lambda () '(nil
-                          (nil "-F" "__default")
-                          ("zorg" "-F" "__zorg")))))
+             (lambda () 'process))
+            ((symbol-function 'process-get)
+             (lambda (process prop)
+               (if (and (eq 'process process)
+                        (eq 'complete-p prop))
+                   '((nil "-F" "__default")
+                     ("zorg" "-F" "__zorg"))
+                 (error "unexpected call")))))
     (let ((comp (bash-completion--make :cword 1)))
       (setf (bash-completion--words comp) '("zorg" "world"))
       (bash-completion--customize comp)
@@ -713,7 +718,17 @@ before calling `bash-completion-dynamic-complete-nocomint'.
          (setq --process-buffer (current-buffer))
          (with-temp-buffer
            (setq --test-buffer (current-buffer))
-           (cl-letf (((symbol-function 'bash-completion-require-process) 
(lambda () `(process . ,bash-completion-alist)))
+           (cl-letf (((symbol-function 'bash-completion-require-process) 
(lambda () 'process))
+                     ((symbol-function 'process-put)
+                      (lambda (process prop value)
+                        (if (and (eq 'process process) (eq 'complete-p prop))
+                            (setq bash-completion-alist value)
+                          (error))))
+                     ((symbol-function 'process-get)
+                      (lambda (process prop)
+                        (if (and (eq 'process process) (eq 'complete-p prop))
+                            bash-completion-alist
+                          (error))))
                      ((symbol-function 'bash-completion-buffer) (lambda () 
--process-buffer))
                      ((symbol-function 'process-buffer) (lambda (p) 
--process-buffer))
                      ((symbol-function 'file-accessible-directory-p)



reply via email to

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