From 9b3756c796d6b1182da428cc1a856b4701741495 Mon Sep 17 00:00:00 2001 From: Adam Porter Date: Sat, 7 May 2022 09:28:01 -0500 Subject: [PATCH] Add/Change: Sync bindings with Transient menu, update readme --- README.org | 79 ++++++++++++++++++------- ement-room.el | 135 ++++++++++++++++++++++++++++--------------- images/transient.png | Bin 0 -> 31966 bytes 3 files changed, 146 insertions(+), 68 deletions(-) create mode 100644 images/transient.png diff --git a/README.org b/README.org index 97cddb2..b5163bc 100644 --- a/README.org +++ b/README.org @@ -123,6 +123,7 @@ If you want to install it manually, it's simple enough, but you should know what These bindings are common to all of the following buffer types: ++ Switch to a room buffer: ~M-g M-r~ + Switch to the room list buffer: ~M-g M-l~ + Switch to the mentions buffer: ~M-g M-m~ + Switch to the notifications buffer: ~M-g M-n~ @@ -131,34 +132,68 @@ These bindings are common to all of the following buffer types: + Show command menu: ~?~ -*Sending messages* +[[images/transient.png]] -+ Write new message: ~RET~ -+ Write reply to event at point (when region is active, only quote marked text) : ~S-RET~ -+ Complete members and rooms at point: ~C-M-i~ (standard ~completion-at-point~ command). -+ Compose message in a separate buffer (while writing in minibuffer): ~C-c '~ (Use command ~ement-room-compose-org~ to activate Org mode in the compose buffer.) -+ Send emote: ~e~ -+ Send reaction (a type of annotation) to event at point, or send same reaction at point: ~a~ -+ Delete message at point: ~C-k~ +*Movement* -*Viewing rooms* ++ Next event: ~TAB~ ++ Previous event: ~~ ++ Scroll up and mark read: ~SPC~ ++ Scroll down: ~S-SPC~ ++ Jump to fully-read marker: ~M-SPC~ ++ Load older messages: at top of buffer, scroll contents up (i.e. ~S-SPC~, ~M-v~ or ~mwheel-scroll~) -+ Move between events: ~TAB~ / ~~ -+ Scroll down (at the end of a room buffer, mark it as read and bury it): ~SPC~ -+ Scroll up: ~S-SPC~ -+ Move to the fully-read marker: ~M-SPC~ -+ Load older messages: at top of buffer, scroll up (i.e. ~S-SPC~, ~M-v~ or ~mwheel-scroll~) -+ Search messages (~occur~-style): ~o~ -+ Show source of event at point: ~v~ -+ Show another room: ~r~ -+ Show room list buffer: ~R~ -+ Sync new messages (not necessary if auto sync is enabled; with prefix to force new sync): ~g~ +*Switching* -*Viewing images* ++ List rooms: ~M-g M-l~ ++ Switch to other room: ~M-g M-r~ ++ Switch to mentions buffer: ~M-g M-m~ ++ Switch to notifications buffer: ~M-g M-n~ ++ Quit window: ~q~ -+ Toggle scale of image at point (between fit-to-window and thumbnail): ~mouse-1~ +*Messages* + ++ Write message: ~RET~ ++ Write reply to event at point (when region is active, only quote marked text) : ~S-RET~ ++ Compose message in buffer: ~M-RET~ (while writing in minibuffer: ~C-c ')~ (Use command ~ement-room-compose-org~ to activate Org mode in the compose buffer.) ++ Edit message: ~~ ++ Delete message: ~C-k~ ++ Send reaction to event at point, or send same reaction at point: ~s r~ ++ Send emote: ~s e~ ++ Send file: ~s f~ ++ Send image: ~s i~ ++ View event source: ~v~ ++ Complete members and rooms at point: ~C-M-i~ (standard ~completion-at-point~ command). + +*Images* + ++ Toggle scale of image (between fit-to-window and thumbnail): ~mouse-1~ + Show image in new buffer at full size: ~double-mouse-1~ +*Users* + ++ Send direct message: ~u RET~ ++ Invite user: ~u i~ ++ Ignore user: ~u I~ + +*Room* + ++ Occur search in room: ~M-s o~ ++ Set topic: ~r t~ ++ Set message format: ~r f~ ++ Tag/untag room: ~r T~ + +*Room membership* + ++ Create room: ~R c~ ++ Join room: ~R j~ ++ Leave room: ~R l~ ++ Forget room: ~R F~ + +*Other* + ++ Sync new messages (not necessary if auto sync is enabled; with prefix to force new sync): ~g~ + *** Room list buffer + Show buffer of room at point: ~RET~ @@ -202,7 +237,7 @@ Emacs may not display certain symbols and emojis well by default. Based on [[ht Ement.el doesn't support encrypted rooms natively, but it can be used transparently with the E2EE-aware reverse proxy daemon [[https://github.com/matrix-org/pantalaimon/][Pantalaimon]]. After configuring it according to its documentation, call ~ement-connect~ with the appropriate hostname and port, like: #+BEGIN_SRC elisp - (ement-connect :uri-prefix "http://localhost:8009") + http://localhost:8009: ment-connect :uri-prefix "") #+END_SRC * Rationale diff --git a/ement-room.el b/ement-room.el index b306999..f42dbc2 100644 --- a/ement-room.el +++ b/ement-room.el @@ -105,27 +105,54 @@ Used to, e.g. call `ement-room-compose-org'.") (defvar ement-room-mode-map (let ((map (make-sparse-keymap))) (define-key map (kbd "?") #'ement-room-transient) - (define-key map (kbd "a") #'ement-room-send-reaction) - (define-key map (kbd "e") #'ement-room-send-emote) - (define-key map (kbd "g") #'ement-room-sync) - (define-key map (kbd "o") #'ement-room-occur) - (define-key map (kbd "r") #'ement-view-room) - (define-key map (kbd "R") #'ement-room-list) - (define-key map (kbd "q") #'quit-window) - (define-key map (kbd "v") #'ement-room-view-event) - (define-key map (kbd "RET") #'ement-room-send-message) + + ;; Movement + (define-key map (kbd "TAB") #'ement-room-goto-next) + (define-key map (kbd "") #'ement-room-goto-prev) (define-key map (kbd "SPC") #'ement-room-scroll-up-mark-read) (define-key map (kbd "S-SPC") #'ement-room-scroll-down-command) (define-key map (kbd "M-SPC") #'ement-room-goto-fully-read-marker) - (define-key map (kbd "S-") #'ement-room-send-reply) - (define-key map (kbd "") #'ement-room-goto-prev) - (define-key map (kbd "TAB") #'ement-room-goto-next) - (define-key map (kbd "C-k") #'ement-room-delete-message) (define-key map [remap scroll-down-command] #'ement-room-scroll-down-command) (define-key map [remap mwheel-scroll] #'ement-room-mwheel-scroll) + + ;; Switching (define-key map (kbd "M-g M-l") #'ement-room-list) + (define-key map (kbd "M-g M-r") #'ement-view-room) (define-key map (kbd "M-g M-m") #'ement-notify-switch-to-mentions-buffer) (define-key map (kbd "M-g M-n") #'ement-notify-switch-to-notifications-buffer) + (define-key map (kbd "q") #'quit-window) + + ;; Messages + (define-key map (kbd "RET") #'ement-room-send-message) + (define-key map (kbd "S-") #'ement-room-send-reply) + (define-key map (kbd "M-RET") #'ement-room-compose-message) + (define-key map (kbd "") #'ement-room-edit-message) + (define-key map (kbd "C-k") #'ement-room-delete-message) + (define-key map (kbd "s r") #'ement-room-send-reaction) + (define-key map (kbd "s e") #'ement-room-send-emote) + (define-key map (kbd "s f") #'ement-room-send-file) + (define-key map (kbd "s i") #'ement-room-send-image) + (define-key map (kbd "v") #'ement-room-view-event) + + ;; Users + (define-key map (kbd "u RET") #'ement-send-direct-message) + (define-key map (kbd "u i") #'ement-invite) + (define-key map (kbd "u I") #'ement-ignore-user) + + ;; Room + (define-key map (kbd "M-s o") #'ement-room-occur) + (define-key map (kbd "r t") #'ement-room-set-topic) + (define-key map (kbd "r f") #'ement-room-set-message-format) + (define-key map (kbd "r T") #'ement-tag-room) + + ;; Room membership + (define-key map (kbd "R c") #'ement-create-room) + (define-key map (kbd "R j") #'ement-join-room) + (define-key map (kbd "R l") #'ement-leave-room) + (define-key map (kbd "R f") #'ement-forget-room) + + ;; Other + (define-key map (kbd "g") #'ement-room-sync) map) "Keymap for Ement room buffers.") @@ -4039,40 +4066,56 @@ For use in `completion-at-point-functions'." (require 'transient) -(transient-define-prefix ement-room-transient () +(transient-define-prefix ement-room-transient () "Transient for Ement Room buffers." - ["Messaging" - ("RET" "Write message" ement-room-send-message) - ("S-RET" "Write reply" ement-room-send-reply) - ("c" "Compose message in buffer" ement-room-compose-message) - ("e" "Edit message at point" ement-room-edit-message) - ("C-k" "Delete message at point" ement-room-delete-message) - ("s e" "Send emote" ement-room-send-emote) - ("s r" "Send reaction" ement-room-send-reaction) - ("s f" "Send file" ement-room-send-file) - ("s i" "Send image" ement-room-send-image)] - ["Room" - ("r c" "Create room" ement-create-room) - ("r j" "Join room" ement-join-room) - ("r l" "Leave room" ement-leave-room) - ("r F" "Forget room" ement-forget-room) - ("r o" "Occur search in room" ement-room-occur) - ("r t" "Tag/untag room" ement-tag-room) - ("r T" "Set topic" ement-room-set-topic - :description (lambda () - (format "Set topic: %s" (propertize (ement-room-topic ement-room) - 'face 'font-lock-doc-face)))) - ("r f" "Set message format" ement-room-set-message-format - :description (lambda () - (format "Set message format: %s" (propertize ement-room-message-format-spec - 'face 'font-lock-doc-face))))] - ["Rooms" - ("R l" "List rooms" ement-taxy-room-list) - ("R v" "View other room" ement-view-room)] - ["Users" - ("u RET" "Send direct message to user" ement-send-direct-message) - ("u i" "Invite user" ement-invite) - ("u I" "Ignore user" ement-ignore-user)]) + [:pad-keys t + ["Movement" + ("TAB" "Next event" ement-room-goto-next) + ("" "Previous event" ement-room-goto-prev) + ("SPC" "Scroll up and mark read" ement-room-scroll-up-mark-read) + ("S-SPC" "Scroll down" ement-room-scroll-down-command) + ("M-SPC" "Jump to fully-read marker" ement-room-goto-fully-read-marker)] + ["Switching" + ("M-g M-l" "List rooms" ement-taxy-room-list) + ("M-g M-r" "Switch to other room" ement-view-room) + ("M-g M-m" "Switch to mentions buffer" ement-notify-switch-to-mentions-buffer) + ("M-g M-n" "Switch to notifications buffer" ement-notify-switch-to-notifications-buffer) + ("q" "Quit window" quit-window)]] + [:pad-keys t + ["Messages" + ("RET" "Write message" ement-room-send-message) + ("S-RET" "Write reply" ement-room-send-reply) + ("M-RET" "Compose message in buffer" ement-room-compose-message) + ("" "Edit message" ement-room-edit-message) + ("C-k" "Delete message" ement-room-delete-message) + ("s r" "Send reaction" ement-room-send-reaction) + ("s e" "Send emote" ement-room-send-emote) + ("s f" "Send file" ement-room-send-file) + ("s i" "Send image" ement-room-send-image) + ("v" "View event" ement-room-view-event)] + ["Users" + ("u RET" "Send direct message" ement-send-direct-message) + ("u i" "Invite user" ement-invite) + ("u I" "Ignore user" ement-ignore-user)] + ] + [:pad-keys t + ["Room" + ("M-s o" "Occur search in room" ement-room-occur) + ("r t" "Set topic" ement-room-set-topic) + ("r f" "Set message format" ement-room-set-message-format) + ("r T" "Tag/untag room" ement-tag-room)] + ["Room membership" + ("R c" "Create room" ement-create-room) + ("R j" "Join room" ement-join-room) + ("R l" "Leave room" ement-leave-room) + ("R F" "Forget room" ement-forget-room)] + ] + ["Other" + ("g" "Sync new messages" ement-room-sync + :if (lambda () + (interactive) + (or (not ement-auto-sync) + (not (map-elt ement-syncs ement-session)))))]) ;;;; Footer diff --git a/images/transient.png b/images/transient.png new file mode 100644 index 0000000000000000000000000000000000000000..cbdae9224c5485b8b0c4172e7b1c06bbf731844c GIT binary patch literal 31966 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 literal 0 HcmV?d00001