[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/crdt e06e6e7236 21/44: add history support for CRDT-REA
From: |
ELPA Syncer |
Subject: |
[elpa] externals/crdt e06e6e7236 21/44: add history support for CRDT-READ-SETTINGS |
Date: |
Sat, 2 Jul 2022 22:57:33 -0400 (EDT) |
branch: externals/crdt
commit e06e6e7236bc896f364addc8d5fb731c1d79e597
Author: Qiantan Hong <qhong@mit.edu>
Commit: Qiantan Hong <qhong@mit.edu>
add history support for CRDT-READ-SETTINGS
---
crdt.el | 135 ++++++++++++++++++++++++++++++++++++----------------------------
1 file changed, 77 insertions(+), 58 deletions(-)
diff --git a/crdt.el b/crdt.el
index 8c9ef77a7c..1b08215de4 100644
--- a/crdt.el
+++ b/crdt.el
@@ -76,6 +76,13 @@
"Start tuntox proxy for CRDT servers."
:type '(choice boolean (const confirm)))
+(defcustom crdt-read-settings-help-string
+ (concat "\\[forms-next-field]:Next Field, \\[forms-prev-field]:Prev Field\n"
+ "\\[forms-next-record]:History Next, \\[forms-prev-record]:History
Prev\n"
+ "\\[exit-recursive-edit]:OK, \\[abort-recursive-edit]:Cancel\n")
+ "Help string for `crdt-read-settings'."
+ :type 'string)
+
(defcustom crdt-default-session-command-functions
'((crdt-get-write-access)
crdt-xref-command-function)
@@ -1902,73 +1909,85 @@ Current user means the user corresponding to
CRDT--PROCESS."
(unless (memq symbol crdt--ephemeral-advices)
(advice-remove symbol wrapped-advice)))))
-(forms--mode-commands)
-
(defvar crdt-read-settings-map
- (let ((map (copy-keymap forms-mode-map)))
+ (let ((map (make-sparse-keymap)))
(define-key map (kbd "<tab>") #'forms-next-field)
(define-key map (kbd "<backtab>") #'forms-prev-field)
- (define-key map (kbd "DEL") nil) ;; without this, DEL somehow get mapped
to forms-prev-record
- (define-key map (kbd "RET") #'exit-recursive-edit)
- (define-key map (kbd "C-g") #'abort-recursive-edit)
- (define-key map [remap forms-next-record] 'ignore)
- (define-key map [remap forms-prev-record] 'ignore)
- (define-key map [remap forms-first-record] 'ignore)
- (define-key map [remap forms-last-record] 'ignore)
+ (define-key map "\C-m" #'exit-recursive-edit)
+ (define-key map "\C-g" #'abort-recursive-edit)
+ (define-key map "\M-n" 'forms-next-record)
+ (define-key map "\M-p" 'forms-prev-record)
+ (define-key map (kbd "M->") 'forms-first-record)
+ (define-key map (kbd "M-<") 'forms-last-record)
(define-key map [remap forms-insert-record] 'ignore)
- (define-key map [remap forms-jump-record] 'ignore)
+ ;; (define-key map [remap forms-jump-record] 'ignore)
(define-key map [remap forms-exit] 'ignore)
map))
-(defun crdt--read-settings (buffer-name settings-list)
+(defun crdt-read-settings (buffer-name settings-list)
+ "Display a form in a buffer for editing some settings.
+Use the buffer with BUFFER-NAME to display the form (create if
+not exist). Use the buffer with BUFFER-NAME prepended by a space
+to store history (create if not exist).
+SETTINGS-LIST should be a list with elements of the form
+ (PROMPT DEFAULT-CONTENT &optional FUNCTION). FUNCTION, if
+non-nil, is called on the user entered string to get the settings
+value. Returns a list of settings values correpsonding to
+SETTINGS-LIST."
(with-current-buffer (get-buffer-create buffer-name)
(let ((enable-local-eval t)
- (data-buffer (generate-new-buffer (concat " " buffer-name))))
+ (data-buffer (get-buffer-create (concat " " buffer-name)))
+ (default-content-string
+ (cl-loop for entry in settings-list
+ concat (cadr entry)
+ concat "\t")))
+ (aset default-content-string (1- (length default-content-string)) ?\n)
+ (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
+ crdt-read-settings-help-string))
+ ,@(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
+ (save-excursion
+ (goto-char (point-max))
+ (forward-line -1)
+ (unless (looking-at-p (regexp-quote
default-content-string))
+ (goto-char (point-max))
+ (insert default-content-string)))
+ (current-buffer))
+ (funcall orig-func file)))
+ #'forms-mode)))
(unwind-protect
(progn
- (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)))))
+ (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)))
+ (forms-last-record)
+ (let ((debug-on-error nil))
+ ;; avoid reaching start/end of history cause recursive edit to
abort
+ (recursive-edit))
+ (forms--update)
+ (cl-mapcar (lambda (entry data)
+ (funcall (or (caddr entry) #'identity) data))
+ settings-list forms--the-record-list))
+ (kill-buffer (current-buffer))
+ (unless (< (length (window-list)) 2)
+ (delete-window (get-buffer-window (current-buffer))))))))
(defun crdt--share-buffer (buffer session)
"Add BUFFER to CRDT SESSION."
@@ -2026,7 +2045,7 @@ Create a new one if such a CRDT session doesn't exist."
(current-buffer)
(or session
(apply #'crdt-new-session
- (crdt--read-settings
+ (crdt-read-settings
(format "*Settings for %s*" session-name)
`(("Port: " "6530" ,(crdt--settings-make-ensure-type
'numberp))
("Session Name: " ,session-name
,(crdt--settings-make-ensure-nonempty session-name))
@@ -2182,7 +2201,7 @@ If SESSION is nil, disconnect from the current session."
Open a new buffer to display the shared content.
Join with DISPLAY-NAME."
(interactive
- (crdt--read-settings
+ (crdt-read-settings
"*CRDT Connect Settings*"
`(("URL: " ":6530" ,(lambda (url)
(let (parsed-url)
- [elpa] externals/crdt 39c308368e 36/44: Also add (kbd "d") binding for *-kill-*, (continued)
- [elpa] externals/crdt 39c308368e 36/44: Also add (kbd "d") binding for *-kill-*, ELPA Syncer, 2022/07/02
- [elpa] externals/crdt dfc98d3525 38/44: add crdt-goto-{next, prev}-user, ELPA Syncer, 2022/07/02
- [elpa] externals/crdt dc9ec07fbd 43/44: Revise README, ELPA Syncer, 2022/07/02
- [elpa] externals/crdt 5d90bf0ce2 03/44: generate uninteresting process buffers instead, ELPA Syncer, 2022/07/02
- [elpa] externals/crdt 1dfa6f7c30 02/44: many changes, ELPA Syncer, 2022/07/02
- [elpa] externals/crdt 2c68377c15 01/44: Merge branch 'master' into development, ELPA Syncer, 2022/07/02
- [elpa] externals/crdt 102498e84f 12/44: remove tramp for now, keep it simple, ELPA Syncer, 2022/07/02
- [elpa] externals/crdt 357f4b7174 18/44: more sensible version message, ELPA Syncer, 2022/07/02
- [elpa] externals/crdt b222966674 19/44: fix DEL key in forms mode, ELPA Syncer, 2022/07/02
- [elpa] externals/crdt 5e67684793 20/44: fix bug of hanging data buffer when CRDT--READ-SETTINGS errors, ELPA Syncer, 2022/07/02
- [elpa] externals/crdt e06e6e7236 21/44: add history support for CRDT-READ-SETTINGS,
ELPA Syncer <=
- [elpa] externals/crdt fae016ba25 08/44: Preliminary url support, ELPA Syncer, 2022/07/02
- [elpa] externals/crdt 28c5f6bd0e 27/44: Also `crdt--refresh-users-maybe' when `crdt-stop-follow', ELPA Syncer, 2022/07/02
- [elpa] externals/crdt f81f5297fa 28/44: Improve naming for user and buffer list, ELPA Syncer, 2022/07/02
- [elpa] externals/crdt 0743dd15f0 29/44: change `crdt--session-name' to `crdt--session-urlstr', ELPA Syncer, 2022/07/02
- [elpa] externals/crdt 9f83928758 32/44: Merge branch 'master' into development, ELPA Syncer, 2022/07/02
- [elpa] externals/crdt 7548a9420e 33/44: :name->:urlstr, and fix TLS downgrade, ELPA Syncer, 2022/07/02
- [elpa] externals/crdt 01551d66c9 34/44: Fix default theme bug and other bugs., ELPA Syncer, 2022/07/02
- [elpa] externals/crdt 949f4a1afd 37/44: reflect key binding addition in README.org, ELPA Syncer, 2022/07/02
- [elpa] externals/crdt 780478a090 39/44: Fix crdt--cycle-user bug with different buffer/window, ELPA Syncer, 2022/07/02
- [elpa] externals/crdt df8954b9c3 40/44: feat: Option to put tuntox password in copied URL, ELPA Syncer, 2022/07/02