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

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

[elpa] externals/crdt 5e67684793 20/44: fix bug of hanging data buffer w


From: ELPA Syncer
Subject: [elpa] externals/crdt 5e67684793 20/44: fix bug of hanging data buffer when CRDT--READ-SETTINGS errors
Date: Sat, 2 Jul 2022 22:57:33 -0400 (EDT)

branch: externals/crdt
commit 5e67684793e92730ade3933b4a830050ccd21782
Author: Qiantan Hong <qhong@mit.edu>
Commit: Qiantan Hong <qhong@mit.edu>

    fix bug of hanging data buffer when CRDT--READ-SETTINGS errors
---
 crdt.el | 85 ++++++++++++++++++++++++++++++++++-------------------------------
 1 file changed, 44 insertions(+), 41 deletions(-)

diff --git a/crdt.el b/crdt.el
index 52e6160838..8c9ef77a7c 100644
--- a/crdt.el
+++ b/crdt.el
@@ -1923,49 +1923,52 @@ Current user means the user corresponding to 
CRDT--PROCESS."
 (defun crdt--read-settings (buffer-name settings-list)
   (with-current-buffer (get-buffer-create buffer-name)
     (let ((enable-local-eval t)
-          (data-buffer (get-buffer-create (concat " " buffer-name))))
-      (let ((standard-output (current-buffer)))
-        (prin1
-         `(setq forms-file t
-                forms-number-of-fields ,(length settings-list)
-                forms-format-list
-                '(,(let ((overriding-local-map crdt-read-settings-map))
-                     (substitute-command-keys
-                      (concat "\\[forms-next-field]:Next Field, 
\\[forms-prev-field]:Prev Field\n"
-                              "\\[exit-recursive-edit]:OK, 
\\[abort-recursive-edit]:Cancel\n")))
-                  ,@(cl-loop for i from 1
-                          for entry in settings-list
-                          nconc (list (car entry) i "\n"))))))
-      (crdt--call-with-ephemeral-advice
-       'forms--help 'ignore
-       (lambda ()
-         (crdt--call-with-ephemeral-advice
-          'find-file-noselect
-          (lambda (orig-func file)
-            (if (eq file t)
-                (with-current-buffer data-buffer
-                  (cl-loop for entry in settings-list
-                        do (insert (cadr entry))
-                        do (insert "\t"))
-                  (backward-delete-char 1)
-                  (current-buffer))
-              (funcall orig-func file)))
-          #'forms-mode)))
+          (data-buffer (generate-new-buffer (concat " " buffer-name))))
       (unwind-protect
            (progn
-             (use-local-map crdt-read-settings-map)
-             (display-buffer (current-buffer)
-                             '(display-buffer-below-selected
-                               (window-height . fit-window-to-buffer)))
-             (select-window (get-buffer-window (current-buffer)))
-             (recursive-edit)
-             (forms--update)
-             (cl-mapcar (lambda (entry data)
-                          (funcall (or (caddr entry) #'identity) data))
-                        settings-list forms--the-record-list))
-        (forms-exit-no-save)
-        (unless (< (length (window-list)) 2)
-          (delete-window (get-buffer-window (current-buffer))))))))
+             (let ((standard-output (current-buffer)))
+               (prin1
+                `(setq forms-file t
+                       forms-number-of-fields ,(length settings-list)
+                       forms-format-list
+                       '(,(let ((overriding-local-map crdt-read-settings-map))
+                            (substitute-command-keys
+                             (concat "\\[forms-next-field]:Next Field, 
\\[forms-prev-field]:Prev Field\n"
+                                     "\\[exit-recursive-edit]:OK, 
\\[abort-recursive-edit]:Cancel\n")))
+                         ,@(cl-loop for i from 1
+                                 for entry in settings-list
+                                 nconc (list (car entry) i "\n"))))))
+             (crdt--call-with-ephemeral-advice
+              'forms--help 'ignore
+              (lambda ()
+                (crdt--call-with-ephemeral-advice
+                 'find-file-noselect
+                 (lambda (orig-func file)
+                   (if (eq file t)
+                       (with-current-buffer data-buffer
+                         (cl-loop for entry in settings-list
+                               do (insert (cadr entry))
+                               do (insert "\t"))
+                         (backward-delete-char 1)
+                         (current-buffer))
+                     (funcall orig-func file)))
+                 #'forms-mode)))
+             (unwind-protect
+                  (progn
+                    (use-local-map crdt-read-settings-map)
+                    (display-buffer (current-buffer)
+                                    '(display-buffer-below-selected
+                                      (window-height . fit-window-to-buffer)))
+                    (select-window (get-buffer-window (current-buffer)))
+                    (recursive-edit)
+                    (forms--update)
+                    (cl-mapcar (lambda (entry data)
+                                 (funcall (or (caddr entry) #'identity) data))
+                               settings-list forms--the-record-list))
+               (forms-exit-no-save)
+               (unless (< (length (window-list)) 2)
+                 (delete-window (get-buffer-window (current-buffer))))))
+        (kill-buffer data-buffer)))))
 
 (defun crdt--share-buffer (buffer session)
   "Add BUFFER to CRDT SESSION."



reply via email to

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