Last active
September 20, 2023 22:23
-
-
Save mokrates/c9131f2f04c01dfc58ee10bc351ccccf to your computer and use it in GitHub Desktop.
allow markdown in ement, allow C-$ to switch compose modes.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
;; stuff taken and modified from ement-room.el -- ement-room-compose-org | |
(require 'ement) | |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | |
;;;;;;;; revert to fundamental composing | |
(defun ement-room-compose-fundamental () | |
"Activate `fundamental-mode' in current compose buffer. | |
Configures the buffer appropriately so that saving it will not use any filter" | |
(interactive) | |
(unless ement-room-compose-buffer | |
(user-error "This command should be run in a compose buffer. Use `ement-room-compose-message' first")) | |
;; Calling `fundamental-mode' seems to wipe out local variables. | |
(let ((room ement-room) | |
(session ement-session)) | |
(fundamental-mode) | |
(ement-room-init-compose-buffer room session)) | |
(setq-local ement-room-send-message-filter nil)) | |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | |
;;;;;;; markdown composing | |
(defun ement-room-compose-md () | |
"Activate `markdown-mode' in current compose buffer. | |
Configures the buffer appropriately so that saving it will export | |
the markdown buffer's contents." | |
(interactive) | |
(unless ement-room-compose-buffer | |
(user-error "This command should be run in a compose buffer. Use `ement-room-compose-message' first")) | |
;; Calling `markdown-mode' seems to wipe out local variables. | |
(let ((room ement-room) | |
(session ement-session)) | |
(markdown-mode) | |
(ement-room-init-compose-buffer room session)) | |
(setq-local ement-room-send-message-filter #'ement-room-send-md-filter)) | |
(defun ement-room-send-md-filter (content room) | |
"Return event CONTENT for ROOM having processed its markdown content. | |
The CONTENT's body is exported with | |
`markdown' (with some adjustments for | |
compatibility), and the result is added to the CONTENT as | |
\"formatted_body\"." | |
;; The CONTENT alist has string keys before being sent. | |
(let ((md-buf-name (format "*md export output %s*" (random)))) | |
(pcase-let* ((body (alist-get "body" content nil nil #'equal)) | |
(formatted-body | |
(save-window-excursion | |
(with-temp-buffer | |
(insert (ement--format-body-mentions body room | |
:template "[%s](https://matrix.to/#/%s)")) | |
(markdown md-buf-name) | |
(with-current-buffer md-buf-name | |
(prog1 (string-trim (buffer-string)) | |
(kill-buffer))))))) | |
(setf (alist-get "formatted_body" content nil nil #'equal) formatted-body | |
(alist-get "format" content nil nil #'equal) "org.matrix.custom.html") | |
content))) | |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | |
;; switching compose modes | |
(defun adv-ement-room-init-compose-buffer (room session) | |
;; map all the keys you want to have in compose buffer here | |
(use-local-map (if (current-local-map) | |
(copy-keymap (current-local-map)) | |
(make-sparse-keymap))) | |
(let ((compose-mode-map (make-sparse-keymap "Use Mode"))) | |
(define-key compose-mode-map (kbd "o") | |
(cons "Org mode" #'ement-room-compose-org)) | |
(define-key compose-mode-map (kbd "m") | |
(cons "Markdown mode" #'ement-room-compose-md)) | |
(define-key compose-mode-map (kbd "f") | |
(cons "Fundamental mode" #'ement-room-compose-fundamental)) | |
(local-set-key (kbd "C-$") | |
(cons "Switch to mode" compose-mode-map)))) | |
(advice-add 'ement-room-init-compose-buffer | |
:before | |
'adv-ement-room-init-compose-buffer) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Also:
https://gist.github.com/viiru-/685134a1781816e83df68520a4862599
dependecy: tracking.el (available on melpa)