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

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

[elpa] externals/crdt 8c4a3f4 3/7: More fix on narrowing


From: ELPA Syncer
Subject: [elpa] externals/crdt 8c4a3f4 3/7: More fix on narrowing
Date: Sun, 29 Aug 2021 22:57:08 -0400 (EDT)

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

    More fix on narrowing
---
 crdt.el | 125 ++++++++++++++++++++++++++++++++--------------------------------
 1 file changed, 63 insertions(+), 62 deletions(-)

diff --git a/crdt.el b/crdt.el
index e19400e..265635f 100644
--- a/crdt.el
+++ b/crdt.el
@@ -1045,10 +1045,12 @@ Always return a message otherwise."
               (overlays-in (point-max) (point-max))))
       (setq crdt--last-point point)
       (setq crdt--last-mark mark)
-      (let ((point-id-base64 (base64-encode-string (crdt--get-id point)))
-            (mark-id-base64 (when mark (base64-encode-string (crdt--get-id 
mark)))))
-        `(cursor ,crdt--buffer-network-name ,(crdt--session-local-id 
crdt--session)
-                 ,point ,point-id-base64 ,mark ,mark-id-base64)))))
+      (save-restriction
+        (widen)
+        (let ((point-id-base64 (base64-encode-string (crdt--get-id point)))
+              (mark-id-base64 (when mark (base64-encode-string (crdt--get-id 
mark)))))
+          `(cursor ,crdt--buffer-network-name ,(crdt--session-local-id 
crdt--session)
+                   ,point ,point-id-base64 ,mark ,mark-id-base64))))))
 
 (defun crdt--post-command ()
   "Post command hook used by CRDT-MODE.
@@ -1059,12 +1061,9 @@ Send message to other peers about any changes."
      (crdt--format-message `(focus ,(crdt--session-local-id crdt--session) 
,crdt--buffer-network-name)))
     (setf (crdt--session-focused-buffer-name crdt--session) 
crdt--buffer-network-name)
     (crdt--refresh-users-maybe))
-  (save-restriction
-    (widen)
-    (let ((cursor-message (crdt--local-cursor)))
-      (when cursor-message
-        (crdt--broadcast-maybe (crdt--format-message cursor-message))))))
-
+  (let ((cursor-message (crdt--local-cursor)))
+    (when cursor-message
+      (crdt--broadcast-maybe (crdt--format-message cursor-message)))))
 
 ;;; CRDT ID (de)serialization
 
@@ -1183,58 +1182,60 @@ The overlay is FRONT-ADVANCE and REAR-ADVANCE, and lies 
between BEG and END."
   "Send messages to a client about the full state of BUFFER.
 The network process for the client connection is PROCESS."
   (with-current-buffer buffer
-    (process-send-string process
-                         (crdt--format-message
-                          `(sync
-                            ,crdt--buffer-network-name
-                            ,@ (crdt--dump-ids (point-min) (point-max) nil nil 
t))))
-    (process-send-string process (crdt--format-message `(ready 
,crdt--buffer-network-name ,major-mode)))
-
-    ;; synchronize cursor
-    (maphash (lambda (site-id ov-pair)
-               (cl-destructuring-bind (cursor-ov . region-ov) ov-pair
-                 (let* ((point (overlay-start cursor-ov))
-                        (region-beg (overlay-start region-ov))
-                        (region-end (overlay-end region-ov))
-                        (mark (if (eq point region-beg)
-                                  (unless (eq point region-end) region-end)
-                                region-beg))
-                        (point-id-base64 (base64-encode-string (crdt--get-id 
point)))
-                        (mark-id-base64 (when mark (base64-encode-string 
(crdt--get-id mark)))))
-                   (process-send-string process
-                                        (crdt--format-message
-                                         `(cursor ,crdt--buffer-network-name 
,site-id
-                                                  ,point ,point-id-base64 
,mark ,mark-id-base64))))))
-             crdt--pseudo-cursor-table)
-    (process-send-string process (crdt--format-message (crdt--local-cursor 
nil)))
-
-    ;; synchronize tracked overlay
-    (maphash (lambda (k ov)
-               (let ((meta (overlay-get ov 'crdt-meta)))
-                 (process-send-string
-                  process
-                  (crdt--format-message (crdt--overlay-add-message
-                                         (car k) (cdr k)
-                                         (crdt--overlay-metadata-species meta)
-                                         (crdt--overlay-metadata-front-advance 
meta)
-                                         (crdt--overlay-metadata-rear-advance 
meta)
-                                         (overlay-start ov)
-                                         (overlay-end ov))))
-                 (cl-loop for (prop value) on (crdt--overlay-metadata-plist 
meta) by #'cddr
-                       do (process-send-string
-                           process
-                           (crdt--format-message `(overlay-put 
,crdt--buffer-network-name
-                                                               ,(car k) ,(cdr 
k) ,prop ,value))))))
-             crdt--overlay-table)
-
-    ;; synchronize process marker if there's any
-    (let ((buffer-process (get-buffer-process buffer)))
-      (when buffer-process
-        (let ((mark-pos (marker-position (process-mark buffer-process))))
-          (process-send-string process
-                               (crdt--format-message
-                                `(process-mark ,crdt--buffer-network-name
-                                               ,(crdt--get-id mark-pos) 
,mark-pos))))))))
+    (save-restriction
+      (widen)
+      (process-send-string process
+                           (crdt--format-message
+                            `(sync
+                              ,crdt--buffer-network-name
+                              ,@ (crdt--dump-ids (point-min) (point-max) nil 
nil t))))
+     (process-send-string process (crdt--format-message `(ready 
,crdt--buffer-network-name ,major-mode)))
+
+     ;; synchronize cursor
+     (maphash (lambda (site-id ov-pair)
+                (cl-destructuring-bind (cursor-ov . region-ov) ov-pair
+                  (let* ((point (overlay-start cursor-ov))
+                         (region-beg (overlay-start region-ov))
+                         (region-end (overlay-end region-ov))
+                         (mark (if (eq point region-beg)
+                                   (unless (eq point region-end) region-end)
+                                 region-beg))
+                         (point-id-base64 (base64-encode-string (crdt--get-id 
point)))
+                         (mark-id-base64 (when mark (base64-encode-string 
(crdt--get-id mark)))))
+                    (process-send-string process
+                                         (crdt--format-message
+                                          `(cursor ,crdt--buffer-network-name 
,site-id
+                                                   ,point ,point-id-base64 
,mark ,mark-id-base64))))))
+              crdt--pseudo-cursor-table)
+     (process-send-string process (crdt--format-message (crdt--local-cursor 
nil)))
+
+     ;; synchronize tracked overlay
+     (maphash (lambda (k ov)
+                (let ((meta (overlay-get ov 'crdt-meta)))
+                  (process-send-string
+                   process
+                   (crdt--format-message (crdt--overlay-add-message
+                                          (car k) (cdr k)
+                                          (crdt--overlay-metadata-species meta)
+                                          
(crdt--overlay-metadata-front-advance meta)
+                                          (crdt--overlay-metadata-rear-advance 
meta)
+                                          (overlay-start ov)
+                                          (overlay-end ov))))
+                  (cl-loop for (prop value) on (crdt--overlay-metadata-plist 
meta) by #'cddr
+                        do (process-send-string
+                            process
+                            (crdt--format-message `(overlay-put 
,crdt--buffer-network-name
+                                                                ,(car k) ,(cdr 
k) ,prop ,value))))))
+              crdt--overlay-table)
+
+     ;; synchronize process marker if there's any
+     (let ((buffer-process (get-buffer-process buffer)))
+       (when buffer-process
+         (let ((mark-pos (marker-position (process-mark buffer-process))))
+           (process-send-string process
+                                (crdt--format-message
+                                 `(process-mark ,crdt--buffer-network-name
+                                                ,(crdt--get-id mark-pos) 
,mark-pos)))))))))
 
 (defun crdt--greet-client (process)
   "Send initial information when a client connects.



reply via email to

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