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

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

[nongnu] elpa/helm 93e9428400 5/5: Fix bug #2527 by deactivating minibuf


From: ELPA Syncer
Subject: [nongnu] elpa/helm 93e9428400 5/5: Fix bug #2527 by deactivating minibuffer-complete in
Date: Sat, 9 Jul 2022 12:58:40 -0400 (EDT)

branch: elpa/helm
commit 93e9428400154db2f5bd4f03f201e0554d5cc4ab
Author: Thierry Volpiatto <thievol@posteo.net>
Commit: Thierry Volpiatto <thievol@posteo.net>

    Fix bug #2527 by deactivating minibuffer-complete in
    
    `helm--completing-read-default`.
---
 helm-mode.el | 108 +++++++++++++++++++++++++++++++----------------------------
 1 file changed, 57 insertions(+), 51 deletions(-)

diff --git a/helm-mode.el b/helm-mode.el
index 8330b228c4..4c79e832d6 100644
--- a/helm-mode.el
+++ b/helm-mode.el
@@ -1230,57 +1230,63 @@ See documentation of `completing-read' and 
`all-completions' for details."
          ;; i.e (push ?\t unread-command-events).
          unread-command-events
          (default-handler
-           ;; If nothing is found in
-           ;; helm-completing-read-handlers-alist use default
-           ;; handler.
-           #'helm-completing-read-default-handler))
-    (when (eq def-com 'ido) (setq def-com 'ido-completing-read))
-    (unless (or (not entry) def-com)
-      ;; An entry in *read-handlers-alist exists but have
-      ;; a nil value, so we exit from here, disable `helm-mode'
-      ;; and run the command again with it original behavior.
-      ;; `helm-mode' will be restored on exit.
-      (cl-return-from helm--completing-read-default
-        (unwind-protect
-             (progn
-               (helm-mode -1)
-               (apply completing-read-function def-args))
-          (helm-mode 1))))
-    ;; If we use now `completing-read' we MUST turn off `helm-mode'
-    ;; to avoid infinite recursion and CRASH. It will be reenabled on exit.
-    (when (or (eq def-com 'completing-read)
-              ;; All specialized functions are prefixed by "helm"
-              (and (stringp str-defcom)
-                   (not (string-match "^helm" str-defcom))))
-      (helm-mode -1))
-    (unwind-protect
-         (cond (;; An helm specialized function exists, run it.
-                (and def-com helm-mode)
-                (apply def-com others-args))
-               (;; Try to handle `ido-completing-read' everywhere.
-                (and def-com (eq def-com 'ido-completing-read))
-                (setcar (memq collection def-args)
-                        (all-completions "" collection predicate))
-                (apply def-com def-args))
-               (;; User set explicitely `completing-read' or something similar
-                ;; in *read-handlers-alist, use this with exactly the same
-                ;; args as in `completing-read'.
-                ;; If we are here `helm-mode' is now disabled.
-                def-com
-                (apply def-com def-args))
-               (;; Use by default a in-buffer handler unless
-                ;; COLLECTION is a function.
-                t
-                (funcall default-handler
-                         prompt collection predicate require-match
-                         initial-input hist def inherit-input-method
-                         str-command buf-name)))
-      (helm-mode 1)
-      ;; When exiting minibuffer, `this-command' is set to
-      ;; `helm-exit-minibuffer', which is unwanted when starting
-      ;; on another `completing-read', so restore `this-command' to
-      ;; initial value when exiting.
-      (setq this-command current-command))))
+          ;; If nothing is found in
+          ;; helm-completing-read-handlers-alist use default
+          ;; handler.
+          #'helm-completing-read-default-handler))
+    ;; Some functions are calling `minibuffer-complete' within
+    ;; `minibuffer-setup-hook' when calling their `completing-read',
+    ;; like `woman-file-name' (bug #2527). This defeat Helm which is
+    ;; already completing minibuffer, so deactivate
+    ;; minibuffer-complete one time for all.
+    (cl-letf (((symbol-function 'minibuffer-complete) #'ignore))
+      (when (eq def-com 'ido) (setq def-com 'ido-completing-read))
+      (unless (or (not entry) def-com)
+        ;; An entry in *read-handlers-alist exists but have
+        ;; a nil value, so we exit from here, disable `helm-mode'
+        ;; and run the command again with it original behavior.
+        ;; `helm-mode' will be restored on exit.
+        (cl-return-from helm--completing-read-default
+          (unwind-protect
+               (progn
+                 (helm-mode -1)
+                 (apply completing-read-function def-args))
+            (helm-mode 1))))
+      ;; If we use now `completing-read' we MUST turn off `helm-mode'
+      ;; to avoid infinite recursion and CRASH. It will be reenabled on exit.
+      (when (or (eq def-com 'completing-read)
+                ;; All specialized functions are prefixed by "helm"
+                (and (stringp str-defcom)
+                     (not (string-match "^helm" str-defcom))))
+        (helm-mode -1))
+      (unwind-protect
+           (cond (;; An helm specialized function exists, run it.
+                  (and def-com helm-mode)
+                  (apply def-com others-args))
+                 (;; Try to handle `ido-completing-read' everywhere.
+                  (and def-com (eq def-com 'ido-completing-read))
+                  (setcar (memq collection def-args)
+                          (all-completions "" collection predicate))
+                  (apply def-com def-args))
+                 (;; User set explicitely `completing-read' or something 
similar
+                  ;; in *read-handlers-alist, use this with exactly the same
+                  ;; args as in `completing-read'.
+                  ;; If we are here `helm-mode' is now disabled.
+                  def-com
+                  (apply def-com def-args))
+                 (;; Use by default a in-buffer handler unless
+                  ;; COLLECTION is a function.
+                  t
+                  (funcall default-handler
+                           prompt collection predicate require-match
+                           initial-input hist def inherit-input-method
+                           str-command buf-name)))
+        (helm-mode 1)
+        ;; When exiting minibuffer, `this-command' is set to
+        ;; `helm-exit-minibuffer', which is unwanted when starting
+        ;; on another `completing-read', so restore `this-command' to
+        ;; initial value when exiting.
+        (setq this-command current-command)))))
 
 ;;; Generic read-file-name
 ;;



reply via email to

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