![]() | Name | Last modified | Size | Description |
---|---|---|---|---|
![]() | Parent Directory | - | ||
![]() | README.html | 2022-09-21 17:03 | 39K | |
![]() | ement.html | 2024-10-13 05:03 | 90K | |
Next: Installation [Contents]
https://elpa.gnu.org/packages/ement.svg
Ement.el is a Matrix client for Emacs. It aims to be simple, fast, featureful, and reliable.
Feel free to join us in the chat room: https://img.shields.io/matrix/ement.el:matrix.org.svg?label=%23ement.el:matrix.org
• Installation | ||
• Usage | ||
• Rationale | ||
• Changelog | ||
• Development | ||
• License | ||
— The Detailed Node Listing — Installation | ||
---|---|---|
• GNU ELPA | ||
• GNU Guix | ||
• Debian | ||
• Git master | ||
• Manual | ||
Usage | ||
• Bindings | ||
• Tips | ||
• Encrypted room support through Pantalaimon | ||
Bindings | ||
• Room buffers | ||
• Room list buffer | ||
• Mentions/notifications buffers | ||
Tips | ||
• Displaying symbols and emojis | ||
Changelog | ||
• 0.2 | ||
• 0.1.4 | ||
• 0.1.3 | ||
• 0.1.2 | ||
• 0.1.1 | ||
• 0.1 | ||
Development | ||
• Copyright Assignment | ||
• Matrix spec in Org format | ||
• GNU ELPA | ||
• GNU Guix | ||
• Debian | ||
• Git master | ||
• Manual |
Next: GNU Guix, Up: Installation [Contents]
Ement.el is published in GNU ELPA, so it may be installed in Emacs with the command M-x package-install RET ement RET
. This is the recommended way to install Ement.el, as it will install the current stable release.
Next: Debian, Previous: GNU ELPA, Up: Installation [Contents]
Ement.el is also available in GNU Guix as emacs-ement
.
Next: Git master, Previous: GNU Guix, Up: Installation [Contents]
Ement.el is also available in Debian as elpa-ement.
Next: Manual, Previous: Debian, Up: Installation [Contents]
The master
branch of the Git repository is intended to be usable at all times; only minor bugs are expected to be found in it before a new stable release is made. To install from this, it is recommended to use quelpa-use-package, like this:
;; Install and load `quelpa-use-package'. (package-install 'quelpa-use-package) (require 'quelpa-use-package) ;; Install Ement. (use-package ement :quelpa (ement :fetcher github :repo "alphapapa/ement.el"))
One might also use systems like Straight (which is also used by DOOM) to install from Git, but the author cannot offer support for them.
Previous: Git master, Up: Installation [Contents]
Ement.el is intended to be installed with Emacs’s package system, which will ensure that the required autoloads are generated, etc. If you choose to install it manually, you’re on your own.
Next: Rationale, Previous: Installation, Up: Top [Contents]
ement-connect
to connect. Multiple sessions are supported, so you may call the command again to connect to another account.
ement-list-rooms
to view the list of joined rooms.
ement-view-room
to view a room’s buffer, selected with completion.
ement-create-room
to create a new room.
ement-invite-user
to invite a user to a room.
ement-join-room
to join a room.
ement-leave-room
to leave a room.
ement-forget-room
to forget a room.
ement-tag-room
to add (or with interactive prefix, remove) a tag on a room (including favorite/low-priority status).
ement-list-members
to list members in a room.
ement-send-direct-message
to send a direct message to a user (in an existing direct room, or creating a new one automatically).
ement-room-edit-message
to edit a message at point.
ement-room-send-file
to send a file.
ement-room-send-image
to send an image.
ement-room-set-topic
to set a room’s topic.
ement-room-occur
to search in a room’s known events.
ement-ignore-user
to ignore a user (or with interactive prefix, un-ignore).
ement-room-set-message-format
to set a room’s message format buffer-locally.
• Bindings | ||
• Tips | ||
• Encrypted room support through Pantalaimon |
These bindings are common to all of the following buffer types:
M-g M-r
M-g M-l
M-g M-m
M-g M-n
• Room buffers | ||
• Room list buffer | ||
• Mentions/notifications buffers |
Next: Room list buffer, Up: Bindings [Contents]
?
Movement
TAB
<backtab>
SPC
S-SPC
M-SPC
S-SPC
, M-v
or mwheel-scroll
)
Switching
M-g M-l
M-g M-r
M-g M-m
M-g M-n
q
Messages
RET
S-RET
M-RET
(while writing in minibuffer: C-c ')
(Use command ement-room-compose-org
to activate Org mode in the compose buffer.)
<insert>
C-k
s r
s e
s f
s i
v
C-M-i
(standard completion-at-point
command).
Images
mouse-1
double-mouse-1
Users
u RET
u i
u I
Room
M-s o
r m
r t
r f
r T
Room membership
R c
R j
R l
R F
Other
g
Next: Mentions/notifications buffers, Previous: Room buffers, Up: Bindings [Contents]
RET
SPC
TAB
/ <backtab>
Previous: Room list buffer, Up: Bindings [Contents]
TAB
/ <backtab>
RET
S-RET
Next: Encrypted room support through Pantalaimon, Previous: Bindings, Up: Usage [Contents]
ement-room-send-message-filter
(which enables Org format by default), or by calling ement-room-compose-org
in a compose buffer (which enables it for a single message). Then Org-formatted messages are automatically converted and sent as HTML-formatted messages (with the Org syntax as the plain-text fallback). You can send syntax such as:
:exports both
)
SPC
repeatedly, you can cycle through and read all rooms with unread buffers. (If a room doesn’t have a buffer, it will not be included.)
ement
group.
setq
should not be used for certain options, because it will not call the associated setter function. Users who have an aversion to the customization system may experience problems.
• Displaying symbols and emojis |
Emacs may not display certain symbols and emojis well by default. Based on this question and answer, you may find that the simplest way to fix this is to install an appropriate font, like Noto Emoji, and then use this Elisp code:
(setf use-default-font-for-symbols nil) (set-fontset-font t 'unicode "Noto Emoji" nil 'append)
Ement.el doesn’t support encrypted rooms natively, but it can be used transparently with the E2EE-aware reverse proxy daemon Pantalaimon. After configuring it according to its documentation, call ement-connect
with the appropriate hostname and port, like:
(ement-connect :uri-prefix "http://localhost:8009")
Why write a new Emacs Matrix client when there is already matrix-client.el, by the same author, no less? A few reasons:
matrix-client
uses an older version of the Matrix spec, r0.3.0, with a few elements of r0.4.0 grafted in. Bringing it up to date with the current version of the spec, r0.6.1, would be more work than to begin with the current version. Ement.el targets r0.6.1 from the beginning.
matrix-client
does not use Matrix’s lazy-loading feature (which was added to the specification later), so initial sync requests can take a long time for the server to process and can be large (sometimes tens of megabytes of JSON for the client to process!). Ement.el uses lazy-loading, which significantly improves performance.
matrix-client
automatically makes buffers for every room a user has joined, even if the user doesn’t currently want to watch a room. Ement.el opens room buffers on-demand, improving performance by not having to insert events into buffers for rooms the user isn’t watching.
matrix-client
was developed without the intention of publishing it to, e.g. MELPA or ELPA. It has several dependencies, and its code does not always install or compile cleanly due to macro-expansion issues (apparently depending on the user’s Emacs config). Ement.el is designed to have minimal dependencies outside of Emacs (currently only one, plz
, which could be imported into the project), and every file is linted and compiles cleanly using makem.sh.
matrix-client
uses EIEIO, probably unnecessarily, since few, if any, of the benefits of EIEIO are realized in it. Ement.el uses structs instead.
matrix-client
uses bespoke code for inserting messages into buffers, which works pretty well, but has a few minor bugs which are difficult to track down. Ement.el uses Emacs’s built-in (and perhaps little-known) ewoc
library, which makes it much simpler and more reliable to insert and update messages in buffers, and enables the development of advanced UI features more easily.
matrix-client
was, to a certain extent, designed to imitate other messaging apps. The result is, at least when used with the matrix-client-frame
command, fairly pleasing to use, but isn’t especially "Emacsy." Ement.el is intended to better fit into Emacs’s paradigms.
matrix-client
’s long name makes for long symbol names, which makes for tedious, verbose code. ement
is easy to type and makes for concise, readable code.
matrix-client
and hopes to write simpler, more readable, more maintainable code in Ement.el. It’s hoped that this will enable others to contribute more easily.
Note that, while matrix-client
remains usable, and probably will for some time to come, Ement.el has now surpassed it in every way. The only reason to choose matrix-client
instead is if one is using an older version of Emacs that isn’t supported by Ement.el.
Next: Development, Previous: Rationale, Up: Top [Contents]
• 0.2 | ||
• 0.1.4 | ||
• 0.1.3 | ||
• 0.1.2 | ||
• 0.1.1 | ||
• 0.1 |
Changes
window-scroll-functions
, which sometimes caused a strange race condition that could cause Emacs to become unresponsive or crash.)
ement-taxy-room-list
view no longer automatically refreshes the list if the region is active in the buffer. (This allows the user to operate on multiple rooms without the contents of the buffer changing before completing the process.)
Fixes
Fixed
Fixed
Fixed
ement-room-sync
correctly updates room-list buffers. (Thanks to Visuwesh.)
Fixed
ement-room-scroll-up-mark-read
selects the correct room window.
ement-room-list-avatars
defaults to what function display-images-p
returns.
After almost two years of development, the first tagged release. Submitted to GNU ELPA.
Bug reports, feature requests, suggestions — oh my!
• Copyright Assignment | ||
• Matrix spec in Org format |
Next: Matrix spec in Org format, Up: Development [Contents]
Ement.el is published in GNU ELPA and is considered part of GNU Emacs. Therefore, cumulative contributions of more than 15 lines of code require that the author assign copyright of such contributions to the FSF. Authors who are interested in doing so may contact assign@gnu.org to request the appropriate form.
Previous: Copyright Assignment, Up: Development [Contents]
An Org-formatted version of the Matrix spec is available in the meta/spec branch.
Previous: Development, Up: Top [Contents]
GPLv3