branch: elpa/bash-completion
commit 718d7689afc0c83c2a06db3660efcb22ee6784d7
Author: Stephane Zermatten <szerm...@gmx.net>
Commit: Stephane Zermatten <steph...@fuzzy.zia>

    Run bash-completion--setup-bash-common when needed by bash.
    
    Before this change, bash-completion.el would guarantee that
    bash-completion--setup-bash-common is run exactly once by flagging the
    process.
    
    This would fail in the case where a bash subprocess was created, as the
    functions and options set during setup in the main Bash process would
    not be available in the subprocess.
    
    This change runs bash-completion--setup-bash-common whenever Bash
    reports not __emacs_complete_wrapper, so it's safe to run completion
    from Bash subprocesses.
    
    This change, together with the previous commit, should address
    isse #58, as there's no need to worry about calling bash-completion-refresh
    at the right time anymore.
---
 bash-completion.el | 20 +++++++++-----------
 1 file changed, 9 insertions(+), 11 deletions(-)

diff --git a/bash-completion.el b/bash-completion.el
index b5915f4f3c..295f74046d 100644
--- a/bash-completion.el
+++ b/bash-completion.el
@@ -407,9 +407,7 @@ returned."
                (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))
+                   (and (search-forward "completion-ignore-case on" nil 
'noerror) t)))))
 
 ;;; Inline functions
 
@@ -1194,8 +1192,6 @@ completion in these cases."
     (let* ((process (get-buffer-process (current-buffer)))
            (shell (if process (bash-completion--current-shell))))
       (when (and shell (bash-completion-starts-with shell "bash"))
-        (unless (process-get process 'setup-done)
-          (bash-completion--setup-bash-common process))
         process))))
 
 (defun bash-completion--get-process ()
@@ -1259,13 +1255,16 @@ The returned alist is a slightly parsed version of the 
output of
 
 (defun bash-completion--customize (comp process &optional nodefault)
   (unless (eq 'command (bash-completion--type comp))
-    (bash-completion-send
-     (concat "complete -p "
-             (bash-completion-quote (bash-completion--command comp))
-             " 2>/dev/null || complete -p -D"))
+    (let* ((complete-p (concat "complete -p "
+                               (bash-completion-quote 
(bash-completion--command comp))
+                               " 2>/dev/null || complete -p "))
+           (status (bash-completion-send
+                    (concat complete-p "&& type -t __emacs_complete_wrapper 
>/dev/null 2>&1"))))
     (setf (bash-completion--compgen-args comp)
           (cdr (car (bash-completion-build-alist
-                     (bash-completion--get-buffer process)))))))
+                     (bash-completion--get-buffer process)))))
+    (when (= 1 status)
+      (bash-completion--setup-bash-common process)))))
 
 (defun bash-completion-generate-line (comp)
   "Generate a bash command to call \"compgen\" for COMP.
@@ -1341,7 +1340,6 @@ is t."
   (let* ((process (get-buffer-process (current-buffer))))
     (unless process
       (error "No process is available in this buffer"))
-    (process-put process 'setup-done nil)
     (bash-completion--get-process)))
 
 ;;;###autoload

Reply via email to