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

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

[elpa] externals/corfu c187097 1/2: Workaround for bug#50470: Fix misbeh


From: ELPA Syncer
Subject: [elpa] externals/corfu c187097 1/2: Workaround for bug#50470: Fix misbehaving Capfs
Date: Mon, 13 Dec 2021 06:57:23 -0500 (EST)

branch: externals/corfu
commit c1870977f6a9107cef59c482446fca60991dfd4b
Author: Daniel Mendler <mail@daniel-mendler.de>
Commit: Daniel Mendler <mail@daniel-mendler.de>

    Workaround for bug#50470: Fix misbehaving Capfs
    
    - Ensure that Capfs do not manipulate the buffer
    - Redirect illegal calls to completion-in-region
---
 corfu.el | 14 +++++++++++++-
 1 file changed, 13 insertions(+), 1 deletion(-)

diff --git a/corfu.el b/corfu.el
index a36d119..0b5cc91 100644
--- a/corfu.el
+++ b/corfu.el
@@ -1153,7 +1153,19 @@ there hasn't been any input, then quit."
 (defun corfu--capf-wrapper (fun)
   "Wrapper for `completion-at-point' FUN.
 Determines if the capf is applicable at the current position."
-  (pcase (funcall fun)
+  (pcase
+      ;; bug#50470: Fix Capfs which illegally modify the buffer
+      ;; or which illegally call `completion-in-region'
+      (catch 'corfu--illegal-completion-in-region
+        (condition-case nil
+            (let ((buffer-read-only t)
+                  (inhibit-read-only nil)
+                  (completion-in-region-function
+                   (lambda (beg end coll pred)
+                     (throw 'corfu--illegal-completion-in-region
+                            (list beg end coll :predicate pred)))))
+              (funcall fun))
+          (buffer-read-only nil)))
     ((and res `(,beg ,end ,table . ,plist))
      (and (integer-or-marker-p beg) ;; Valid capf result
           (<= beg (point) end) ;; Sanity checking



reply via email to

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