ITADN
alphapapa/ement.el

版本发布 8

v0.17
? · 2025-11-16

**Additions** - Command `ement-room-download-file`, which downloads the file in the event at point (for image, audio, video, and file messages). ([#323](https://github.com/alphapapa/ement.el/pull/323). Thanks to [Arto Jantunen](https://github.com/viiru-).) - Customization groups for faces. (Thanks to [Phil Sainty](https://github.com/phil-s).) - Option `ement-room-hide-redacted-message-content`, which hides the content of redacted messages by default. It may be disabled to keep redacted content visible with a strikethrough face, which may be useful for room moderators, but users should keep in mind that doing so will leave unpleasant content visible in the current session, even after being redacted by moderators. - Option `ement-room-list-avatar-generation`: if disabled, SVG-based room avatars are not generated. This option automatically tests whether SVG support is available in Emacs, and should allow use with builds of Emacs that lack `librsvg` support. **Changes** - Disable underline for faces `ement-room-list-direct` and `ement-room-list-name` (in case a face they inherit from enables it, e.g. when themed). **Fixes** - Call `eww-browse-url` instead of `browse-url` in `ement-room-browse-mxc` (because the latter is not useful for authenticated media if the user has configured it to use a different browser). ([#323](https://github.com/alphapapa/ement.el/pull/323). Thanks to [Arto Jantunen](https://github.com/viiru-).) - Workaround change in `magit-section` that broke fontification in room-list and directory buffers. (See [#331](https://github.com/alphapapa/ement.el/issues/331).) - Handle non-symbol commands in `command-history`. ([#330](https://github.com/alphapapa/ement.el/issues/330). Thanks to [Alex Bennée](https://github.com/stsquad) for reporting.)

v0.16
? · 2024-10-12

**Compatibility** - Use authenticated media requests (part of Matrix 1.11; see [MSC3916](https://github.com/matrix-org/matrix-spec-proposals/pull/3916) and [matrix.org's sunsetting unauthenticated media](https://matrix.org/blog/2024/06/26/sunsetting-unauthenticated-media/)). **Additions** - When option `ement-room-images` is disabled (preventing automatic download and display of images), individual images may be shown by clicking the button in their events. **Changes** - Option `ement-room-coalesce-events` may now be set to (and defaults to) a maximum number of events to coalesce together. (This avoids potential performance problems in rare cases. See [#247](https://github.com/alphapapa/ement.el/issues/247). Thanks to [Arto Jantunen](https://github.com/viiru-) for reporting and [Sergio Durigan Junior](https://github.com/sergiodj) for testing.) **Fixes** - Replies to edited messages are correctly sent to the original event (whereas previously they were sent to the edit, which caused reactions to not be shown). ([#230](https://github.com/alphapapa/ement.el/issues/230), [#277](https://github.com/alphapapa/ement.el/issues/277). Thanks to [Phil Sainty](https://github.com/phil-s) for suggesting, and to [dionisos](https://github.com/dionisos2) for reporting.) - Set `filter-buffer-substring-function` in room buffers to prevent undesired text properties from being included in copied text. ([#278](https://github.com/alphapapa/ement.el/pull/278). Thanks to [Phil Sainty](https://github.com/phil-s).) - Command `ement-disconnect` no longer shows an error message. ([#208](https://github.com/alphapapa/ement.el/issues/208).) - Retrieval of earlier events in a just-joined room. ([#148](https://github.com/alphapapa/ement.el/issues/148). Thanks to [Richard Brežák](https://github.com/MagicRB) for reporting, and to [Phil Sainty](https://github.com/phil-s) for testing.) - Cache computed displaynames in rooms (avoiding unnecessary reiteration and recalculation). ([#298](https://github.com/alphapapa/ement.el/issues/298). Thanks to [Rutherther](https://github.com/Rutherther) for reporting and testing, and to [Phil Sainty](https://github.com/phil-s).) - Customization group for options `ement-room-mode-hook` and `ement-room-self-insert-mode`. (Thanks to [Phil Sainty](https://github.com/phil-s).) - Inheritance for some faces. ([#303](https://github.com/alphapapa/ement.el/pull/303). Thanks to [Jonas Bernoulli](https://github.com/tarsius).)

v0.15.1
? · 2024-06-06

**Fixes** - Handle unnamed rooms in `ement-directory` list. (See [#248](https://github.com/alphapapa/ement.el/issues/248). Thanks to [Hunter Jozwiak](https://github.com/hjozwiak) and [Bharath Palavalli](https://github.com/bmp) for reporting.) - Don't use `cl-type` `pcase` form in Emacs versions before 28. ([#279](https://github.com/alphapapa/ement.el/issues/279). Thanks to [Adam Bark](https://github.com/AdamBark) for reporting.)

v0.15
? · 2024-04-16

**Additions** - **Configurable emoji picker for sending reactions. ([#199](https://github.com/alphapapa/ement.el/issues/199), [#201](https://github.com/alphapapa/ement.el/pull/201). Thanks to [Omar Antolín Camarena](https://github.com/oantolin).):** - Option `ement-room-reaction-picker` sets the default picker. Within that, the user may press `C-g` to choose a different one with a key bound in `ement-room-reaction-map`. - **A variety of enhancements for using compose buffers. ([#140](https://github.com/alphapapa/ement.el/issues/140). Thanks to [Phil Sainty](https://github.com/phil-s).):** Chiefly, messages can now be composed in small windows below room windows, rather than in the minibuffer or a full-sized window. A variety of options and commands are available related to these features. See [compose buffer enhancements](#compose-buffer-enhancements). - **Global minor mode `ement-room-self-insert-mode` enables "just typing" to start a message. (Thanks to [Phil Sainty](https://github.com/phil-s).):** See [ement-room-self-insert-mode](#ement-room-self-insert-mode). - **Options affecting how images are displayed in room buffers.:** See [image display](#image-display). **Changes** - Improve prompt used when viewing a room that is not joined. ([#241](https://github.com/alphapapa/ement.el/issues/241). Thanks to [Phil Sainty](https://github.com/phil-s).) - Format "was kicked and rejoined" membership event pairs. - Enclose reasons for membership events in quotes for clarity. - Improve default room list grouping. - When editing or replying to a message in a compose buffer, the related room event is highlighted persistently until the compose buffer is killed. (Thanks to [Phil Sainty](https://github.com/phil-s).) - In compose buffers `dabbrev` will prioritise firstly the associated room, and secondly all other rooms, before looking to other buffers for completions. (Thanks to [Phil Sainty](https://github.com/phil-s).) - Aborted messages are now added to `ement-room-message-history` rather than the kill-ring. (Thanks to [Phil Sainty](https://github.com/phil-s).) - Prefix bindings in `ement-room-mode-map` now have named labels in `which-key` and similar. (Thanks to [Phil Sainty](https://github.com/phil-s).) - Option: `ement-room-use-variable-pitch` (previously named `ement-room-shr-use-fonts`) enables variable-pitch fonts for all message types. (This option previously supported formatted messages, but now works for plain text messages as well.) Note: users who have customized the `ement-room-message-text` face to be variable-pitch should revert that change, as it causes problems for formatted messages, and is no longer necessary. ([#174](https://github.com/alphapapa/ement.el/issues/174). Thanks to [Phil Sainty](https://github.com/phil-s).) **Fixes** - Edits to previous edit events are correctly sent to the server as edits to the original message event. ([#230](https://github.com/alphapapa/ement.el/issues/230). Thanks to [Phil Sainty](https://github.com/phil-s).) - Completion at point works more reliably in compose buffers. (Thanks to [Phil Sainty](https://github.com/phil-s).) - Toggling images to fill the window body no longer triggers unintended scrolling. (Thanks to [Phil Sainty](https://github.com/phil-s).) - Recognition of mentions after a newline. ([#267](https://github.com/alphapapa/ement.el/issues/267). Thanks to [Phil Sainty](https://github.com/phil-s).) - Newlines in `ement-room-message-format-spec` are considered when calculating the wrap-prefix. (Thanks to [Phil Sainty](https://github.com/phil-s).) - Weight of face `ement-room-list-direct` (now correctly bold in room list heading). <a id="compose-buffer-enhancements"></a> # Compose buffer enhancements - Option `ement-room-compose-buffer-display-action` declares how and where a new compose buffer window should be displayed. (By default, in a new window below the associated room buffer.) - Option `ement-room-compose-buffer-window-dedicated` determines whether compose buffers will have dedicated windows. - Option `ement-room-compose-buffer-window-auto-height` causes dynamic scaling of the compose buffer window height so that the full message is visible at all times. - Option `ement-room-compose-buffer-window-auto-height-min` specifies the minimum window height when `ement-room-compose-buffer-window-auto-height` is enabled. - Option `ement-room-compose-buffer-window-auto-height-max` specifies the maximum window height when `ement-room-compose-buffer-window-auto-height` is enabled. - Option `ement-room-compose-method` chooses between minibuffer-centric or compose-buffer-centric behaviour. - Command `ement-room-dispatch-new-message` starts writing a new message using your chosen `ement-room-compose-method`. (Bound to `RET` in room buffers.) - Command `ement-room-dispatch-new-message-alt` starts writing a new message using the alternative method. (Bound to `M-RET` in room buffers.) - Command `ement-room-dispatch-edit-message` edits a message using your chosen `ement-room-compose-method`. (Bound to `<insert>` in room buffers.) - Command `ement-room-dispatch-reply-to-message` replies to a message using your chosen `ement-room-compose-method`. (Bound to `S-<return>` in room buffers.) - Command `ement-room-compose-edit` edits a message using a compose buffer. - Command `ement-room-compose-reply` replies to a message using a compose buffer. - Command `ement-room-compose-send-direct` sends a message directly from a compose buffer (without the minibuffer). (Bound to `C-x C-s` in compose buffers.) - Command `ement-room-compose-abort` kills the compose buffer and delete its window. (Bound to `C-c C-k` in compose buffers.) - Command `ement-room-compose-abort-no-history` does the same without adding to `ement-room-message-history`. (Equivalent to `C-u C-c C-k`.) - Command `ement-room-compose-history-prev-message` cycles backwards through `ement-room-message-history`. (Bound to `M-p` in compose buffers.) - Command `ement-room-compose-history-next-message` cycles forwards through `ement-room-message-history`. (Bound to `M-n` in compose buffers.) - Command `ement-room-compose-history-isearch-backward` initiates an isearch through `ement-room-message-history`. (Bound to `M-r` in compose buffers; continue searching with `C-r` or `C-s`.) - Command `ement-room-compose-history-isearch-backward-regexp` initiates a regexp isearch through `ement-room-message-history`. (Bound to `C-M-r` in compose buffers; continue searching with `C-r` or `C-s`.) <a id="ement-room-self-insert-mode"></a> # `ement-room-self-insert-mode` - Option `ement-room-self-insert-commands` determines which commands will start a new message when `ement-room-self-insert-mode` is enabled (defaulting to `self-insert-command` and `yank`). - Option `ement-room-self-insert-chars` determines which typed characters will start a new message when `ement-room-self-insert-mode` is enabled (regardless of whether they are bound to `self-insert-command`). - Option `ement-room-mode-map-prefix-key` defines a prefix key for accessing the full `ement-room-mode-map` when `ement-room-self-insert-mode` is enabled. (By default this key is `DEL`.) <a id="image-display"></a> # Image display - Option `ement-room-image-margin` is the number of pixels of margin around image thumbnails. - Option `ement-room-image-relief` is the number of pixels of shadow rectangle around image thumbnails. - Option `ement-room-image-thumbnail-height` is the window body height multiple to use when toggling full-sized images to thumbnails (by default, 0.2). - Option `ement-room-image-thumbnail-height-min` is the minimum pixel height for thumbnail images (by default, 30 pixels).

v0.14
? · 2024-01-26

**Additions** - Audio events are rendered as a link to the audio file. (Thanks to [Arto Jantunen](https://github.com/viiru-).) - Customization group `ement-room-list`. - Option `ement-room-list-space-prefix` is applied to space names in the room list (e.g. set to empty string for cleaner appearance). - Option `ement-room-reaction-names-limit` sets how many senders of a reaction are shown in the buffer (more than that many are shown in the tooltip). **Changes** - Bind `TAB` / `BACKTAB` to move between links in room and like buffers. ([#113](https://github.com/alphapapa/ement.el/issues/113). Thanks to [Eric S. Fraga](https://github.com/ericsfraga) for suggesting.) **Fixes** - Insertion of sender headers (when using "Elemental" message format). (Refactoring contributed by [Steven Allen](https://github.com/Stebalien).) - Some room event data was being unintentionally serialized to disk when caching the room list visibility state. ([#256](https://github.com/alphapapa/ement.el/issues/256)) - Notifications buffer restores properly when bookmarked. - Command `ement-room-send-reaction` checks for an event at point. (Thanks to [Phil Sainty](https://github.com/phil-s).)

v0.13
? · 2023-10-03

**Additions** - Group joined direct rooms in directory buffers. - Command `end-of-buffer` is bound to `N` in room buffers. **Changes** - Command `ement-room-image-show` use frame parameters to maximize the frame, making it easier for users to override. ([#223](https://github.com/alphapapa/ement.el/issues/223). Thanks to [Nicholas Vollmer](https://github.com/progfolio).) **Fixes** - Name for direct rooms in directory buffers. - Editing a message from the compose buffer would be sent as a reply to the edited message. (Fixes [#189](https://github.com/alphapapa/ement.el/issues/189). Thanks to [Phil Sainty](https://github.com/phil-s) for reporting.) - Editing an already-edited message. ([#226](https://github.com/alphapapa/ement.el/issues/226). Thanks to [Phil Sainty](https://github.com/phil-s) for reporting.) - Replying to an already-edited message. ([#227](https://github.com/alphapapa/ement.el/issues/227). Thanks to [Phil Sainty](https://github.com/phil-s) for reporting.) - Rendering redactions of edited messages. ([#228](https://github.com/alphapapa/ement.el/issues/228). Thanks to [Phil Sainty](https://github.com/phil-s) for reporting.) - Redacting an edited message. ([#228](https://github.com/alphapapa/ement.el/issues/228). Thanks to [Phil Sainty](https://github.com/phil-s) for reporting.) - Command `ement-room-flush-colors` maintains point position.

v0.12
? · 2023-09-15

**Additions** - Command `ement-notifications` shows recent notifications, similar to the pane in the Element client. (This new command fetches recent notifications from the server and allows scrolling up to retrieve older ones. Newly received notifications, as configured in the `ement-notify` options, are displayed in the same buffer. This functionality will be consolidated in the future.) - Face `ement-room-quote`, applied to quoted parts of replies. **Changes** - Commands `ement-room-goto-next` and `ement-room-goto-prev` work more usefully at the end of a room buffer. (Now pressing `n` on the last event moves point to the end of the buffer so it will scroll automatically for new messages, and then pressing `p` skips over any read marker to the last event.) - Room buffer bindings: - `ement-room-goto-next` and `ement-room-goto-prev` are bound to `n` and `p`, respectively. - `ement-room-goto-fully-read-marker` is bound to `M-g M-p` (the mnemonic being "go to previously read"). - The quoted part of a reply now omits the face applied to the rest of the message, helping to distinguish them. - Commands that read a string from the minibuffer in `ement-room` buffers and `ement-connect` user ID prompts use separate history list variables. - Use Emacs's Jansson-based JSON-parsing functions when available. (This results in a 3-5x speed improvement for parsing JSON responses, which can be significant for large initial sync responses. Thanks to [Ryan Rix](https://github.com/rrix/) for discovering this!) **Fixes** - File event formatter assumed that file size metadata would be present (a malformed, e.g. spam, event might not have it). - Send correct file size when sending files/images. - Underscores are no longer interpreted as denoting subscripts when sending messages in Org format. (Thanks to [Phil Sainty](https://github.com/phil-s).) - Add workaround for `savehist-mode`'s serializing of the `command-history` variable's arguments. (For `ement-` commands, that may include large data structures, like `ement-session` structs, which should never be serialized or reused, and `savehist`'s doing so could cause noticeable delays for users who enabled it). (See [#216](https://github.com/alphapapa/ement.el/issues/216). Thanks to [Phil Sainty](https://github.com/phil-s) and other users who helped to discover this problem.)

v0.10
? · 2023-06-14

**Security Fixes** - When uploading a GPG-encrypted file (i.e. one whose filename ends in `.gpg`), if the recipient's private key or the symmetric encryption key were cached by Emacs (or a configured agent, like `gpg-agent`), Emacs would automatically decrypt the file while reading its contents and then upload the decrypted contents. (This happened because the function `insert-file-contents` was used, which does many things automatically, some of which are not even mentioned in its docstring; refer to its entry in the Elisp Info manual for details. The fix is to use `insert-file-contents-literally` instead.) Thanks to `@welkinsl:matrix.org` for reporting. **Additions** - Support for Single Sign-On (SSO) authentication. ([#24](https://github.com/alphapapa/ement.el/issues/24). Thanks to [Jeffrey Stoffers](https://github.com/Necronian) for development, and to [Phil Sainty](https://github.com/phil-s), [Jakub Kadlčík](https://github.com/FrostyX), and [Juanjo Presa](https://github.com/oneingan) for testing.) - Bind `m` in room buffers to `ement-room-mark-read` (which moves read markers to point). **Changes** - Activating a space in the room list uses `ement-view-space` (which shows a directory of rooms in the space) instead of `ement-view-room` (which shows events in the space, which is generally not useful). - Command `ement-view-room`, when used for a space, shows a footer explaining that the buffer is showing a space rather than a normal room, with a button to call `ement-view-space` for it (which lists rooms in the space). - Command `ement-describe-room` shows whether a room is a space or a normal room. - Command `ement-view-space` shows the space's name and alias. - Command `ement-room-scroll-up-mark-read` moves the fully read marker to the top of the window (when the marker's position is within the range of known events), rather than only moving it when at the end of the buffer. (This eases the process of gradually reading a long backlog of messages.) - Improve readme export settings. **Fixes** - Extra indentation of some membership events. (Thanks to [Steven Allen](https://github.com/Stebalien).) - Customization group for faces. - Don't reinitialize `ement-room-list-mode` when room list buffer is refreshed. ([#146](https://github.com/alphapapa/ement.el/issues/146). Thanks to [Ted Reed](https://github.com/treed) for reporting.) - Don't fetch old events when scrolling to the bottom of a room buffer (only when scrolling to the top). (Thanks to [Steven Allen](https://github.com/Stebalien).) - Minor improvements to auto-detection of homeserver URIs. (See [#24](https://github.com/alphapapa/ement.el/issues/24#issuecomment-1569518713). Thanks to [Phil Sainty](https://github.com/phil-s).) - Uploading of certain filetypes (e.g. Emacs would decompress some archives before uploading). Thanks to `@welkinsl:matrix.org` for reporting. - Messages edited multiple times sometimes weren't correctly replaced.