[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.
- [elpa] externals/crdt updated (cfe7748 -> 70ae7ba), ELPA Syncer, 2021/08/29
- [elpa] externals/crdt 8c4a3f4 3/7: More fix on narrowing,
ELPA Syncer <=
- [elpa] externals/crdt 9f5882c 6/7: Use overlay instead of font-lock-face for crdt-visualize-author-mode, ELPA Syncer, 2021/08/29
- [elpa] externals/crdt 3e64983 1/7: fix narrowing behavior, ELPA Syncer, 2021/08/29
- [elpa] externals/crdt 3122172 2/7: Fix narrowing, ELPA Syncer, 2021/08/29
- [elpa] externals/crdt 301b7b1 4/7: Merge branch 'master' into fix, ELPA Syncer, 2021/08/29
- [elpa] externals/crdt a05eb1e 5/7: refactor hook (un)install, ELPA Syncer, 2021/08/29
- [elpa] externals/crdt 70ae7ba 7/7: Merge branch 'fix' into 'master', ELPA Syncer, 2021/08/29