[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/crdt 21f62ad 14/80: various fixes
From: |
ELPA Syncer |
Subject: |
[elpa] externals/crdt 21f62ad 14/80: various fixes |
Date: |
Sat, 28 Aug 2021 10:57:32 -0400 (EDT) |
branch: externals/crdt
commit 21f62adda97ad4660325d7b56f43033f07f4da7a
Author: Qiantan Hong <qhong@mit.edu>
Commit: Qiantan Hong <qhong@mit.edu>
various fixes
- add version
- fix crdt-stop-session bug (usage with no argument)
- add Users column to session-menu
---
crdt.el | 94 +++++++++++++++++++++++++++++++++++++++++++----------------------
1 file changed, 62 insertions(+), 32 deletions(-)
diff --git a/crdt.el b/crdt.el
index 5eb534a..5a5753d 100644
--- a/crdt.el
+++ b/crdt.el
@@ -5,6 +5,7 @@
;; Author: Qiantan Hong <qhong@mit.edu>
;; Maintainer: Qiantan Hong <qhong@mit.edu>
;; Keywords: collaboration crdt
+;; Version: 0.0.0
;;
;; crdt.el is free software: you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
@@ -359,6 +360,8 @@ to avoid recusive calling of CRDT synchronization
functions.")
(crdt--defvar-session crdt--contact-table nil
"A hash table that maps SITE-ID to
CRDT--CONTACT-METADATAs.")
+(defvar-local crdt--active-users-tmp nil)
+
(cl-defstruct (crdt--overlay-metadata
(:constructor crdt--make-overlay-metadata
(lamport-timestamp species front-advance
rear-advance plist))
@@ -516,7 +519,8 @@ Otherwise use a dedicated buffer for displaying active
users on CRDT-BUFFER."
(define-derived-mode crdt-buffer-menu-mode tabulated-list-mode
"CRDT User List"
(setq tabulated-list-format [("Buffer" 15 t)
- ("Network Name" 15 t)]))
+ ("Network Name" 15 t)
+ ("Users" 15 t)]))
(defun crdt-list-buffer (&optional crdt-buffer display-buffer)
"Display a list of buffers shared in the current CRDT session.
@@ -535,15 +539,38 @@ Otherwise use a dedicated buffer for displaying active
users on CRDT-BUFFER."
(setq display-buffer (crdt--buffer-menu-buffer)))
(with-current-buffer crdt--status-buffer
(crdt-refresh-buffers display-buffer))
- (switch-to-buffer-other-window display-buffer)))
+ (if crdt--network-process
+ (switch-to-buffer display-buffer)
+ (switch-to-buffer-other-window display-buffer))))
+
+(defmacro crdt--with-current-buffer (buffer &rest body)
+ `(let ((crdt--the-buffer ,buffer))
+ (when crdt--the-buffer
+ (with-current-buffer crdt--the-buffer
+ ,@body))))
(defun crdt-refresh-buffers (display-buffer)
(with-current-buffer display-buffer
(crdt-buffer-menu-mode)
(setq tabulated-list-entries nil)
(maphash (lambda (k v)
- (push (list v (vector (buffer-name v) k))
- tabulated-list-entries))
+ (crdt--with-current-buffer
+ (gethash (crdt--contact-metadata-focused-buffer-name v)
+ (crdt--buffer-table))
+ (push (crdt--contact-metadata-display-name v)
crdt--active-users-tmp)))
+ (crdt--contact-table))
+ (crdt--with-current-buffer
+ (gethash (crdt--focused-buffer-name) (crdt--buffer-table))
+ (push (crdt--local-name)
+ crdt--active-users-tmp))
+ (maphash (lambda (k v)
+ (push (list v (vector (buffer-name v) k
+ (mapconcat #'identity
+ (with-current-buffer v
crdt--active-users-tmp)
+ ", ")))
+ tabulated-list-entries)
+ (with-current-buffer v
+ (setq crdt--active-users-tmp nil)))
(crdt--buffer-table))
(tabulated-list-init-header)
(tabulated-list-print)))
@@ -591,7 +618,7 @@ Otherwise use a dedicated buffer for displaying active
users on CRDT-BUFFER."
(unless display-buffer
(unless (and (crdt--user-menu-buffer) (buffer-live-p
(crdt--user-menu-buffer)))
(setf (crdt--user-menu-buffer)
- (generate-new-buffer (concat (buffer-name (current-buffer))
+ (generate-new-buffer (concat (car (rassq (crdt--network-process)
crdt--session-alist))
" users")))
(crdt--assimilate-status-buffer (crdt--user-menu-buffer)))
(setq display-buffer (crdt--user-menu-buffer)))
@@ -630,7 +657,7 @@ Otherwise use a dedicated buffer for displaying active
users on CRDT-BUFFER."
(defsubst crdt--refresh-users-maybe ()
(when (and (crdt--user-menu-buffer) (buffer-live-p (crdt--user-menu-buffer)))
(crdt-refresh-users (crdt--user-menu-buffer)))
- (crdt--refresh-sessions-maybe))
+ (crdt--refresh-buffers-maybe))
;;; CRDT insert/delete
@@ -1312,37 +1339,40 @@ If SESSION-NAME is empty, use the buffer name of the
current buffer."
(push (cons session-name new-session) crdt--session-alist)
new-session))
-(defun crdt-stop-session (session-name)
+(defun crdt-stop-session (&optional session-name)
"Stop sharing the current session."
(interactive
(list (completing-read "Choose a session (create if not exist): "
crdt--session-alist nil t
(when crdt--status-buffer
(car (rassq (crdt--network-process)
crdt--session-alist))))))
- (let ((status-buffer
- (process-get (cdr (assoc session-name crdt--session-alist))
'status-buffer)))
- (with-current-buffer status-buffer
- (dolist (client crdt--network-clients)
- (when (process-live-p client)
- (delete-process client))
- (when (process-buffer client)
- (kill-buffer (process-buffer client))))
- (when crdt--user-menu-buffer
- (kill-buffer crdt--user-menu-buffer))
- (maphash
- (lambda (k v)
- (with-current-buffer v
- (setq crdt--status-buffer nil)
- (crdt-mode 0)))
- crdt--buffer-table)
- (setq crdt--session-alist
- (delq (cl-find-if (lambda (p) (eq (cdr p) crdt--network-process))
- crdt--session-alist)
- crdt--session-alist))
- (crdt--refresh-sessions-maybe)
- (delete-process crdt--network-process)
- (message "Disconnected."))
- (kill-buffer status-buffer)))
+ (let ((session (if session-name
+ (cdr (assoc session-name crdt--session-alist))
+ (crdt--network-process))))
+ (let ((status-buffer
+ (process-get session 'status-buffer)))
+ (with-current-buffer status-buffer
+ (dolist (client crdt--network-clients)
+ (when (process-live-p client)
+ (delete-process client))
+ (when (process-buffer client)
+ (kill-buffer (process-buffer client))))
+ (when crdt--user-menu-buffer
+ (kill-buffer crdt--user-menu-buffer))
+ (maphash
+ (lambda (k v)
+ (with-current-buffer v
+ (setq crdt--status-buffer nil)
+ (crdt-mode 0)))
+ crdt--buffer-table)
+ (setq crdt--session-alist
+ (delq (cl-find-if (lambda (p) (eq (cdr p) crdt--network-process))
+ crdt--session-alist)
+ crdt--session-alist))
+ (crdt--refresh-sessions-maybe)
+ (delete-process crdt--network-process)
+ (message "Disconnected."))
+ (kill-buffer status-buffer))))
(defun crdt-connect (address port &optional name)
"Connect to a CRDT server running at ADDRESS:PORT.
@@ -1376,7 +1406,7 @@ Open a new buffer to display the shared content."
(defun crdt-test-client ()
(interactive)
- (crdt-connect "127.0.0.1" 1333))
+ (crdt-connect "127.0.0.1" 6530))
(defun crdt-test-server ()
(interactive)
- [elpa] branch externals/crdt created (now 8cbd0fd), ELPA Syncer, 2021/08/28
- [elpa] externals/crdt f224e8a 06/80: add doc. add error handler in network filter, ELPA Syncer, 2021/08/28
- [elpa] externals/crdt 22910f2 01/80: initial commit, ELPA Syncer, 2021/08/28
- [elpa] externals/crdt 7ebbd5e 05/80: cleanup debug code, ELPA Syncer, 2021/08/28
- [elpa] externals/crdt 21f62ad 14/80: various fixes,
ELPA Syncer <=
- [elpa] externals/crdt 958394a 08/80: doc, ELPA Syncer, 2021/08/28
- [elpa] externals/crdt 6b320c7 11/80: bug fix, ELPA Syncer, 2021/08/28
- [elpa] externals/crdt bfce95c 17/80: formatting, ELPA Syncer, 2021/08/28
- [elpa] externals/crdt 692d2cc 24/80: initial work for lazily pulling buffer, ELPA Syncer, 2021/08/28
- [elpa] externals/crdt b8cd461 22/80: Minor improvements, ELPA Syncer, 2021/08/28
- [elpa] externals/crdt 8307092 29/80: better read function, tab width wider, ELPA Syncer, 2021/08/28
- [elpa] externals/crdt 4c7e12d 37/80: documentation, ELPA Syncer, 2021/08/28
- [elpa] externals/crdt 53e5676 33/80: fix bug with org table, ELPA Syncer, 2021/08/28
- [elpa] externals/crdt fcc6a47 38/80: fix upper/lowercase convention, ELPA Syncer, 2021/08/28
- [elpa] externals/crdt e1b0fe9 02/80: Fixed silly typo!, ELPA Syncer, 2021/08/28