https://github.com/axelf4/earl
🧛 Emacs implementation of the Erlang distribution protocol
https://github.com/axelf4/earl
emacs-package erlang
Last synced: 11 months ago
JSON representation
🧛 Emacs implementation of the Erlang distribution protocol
- Host: GitHub
- URL: https://github.com/axelf4/earl
- Owner: axelf4
- License: gpl-3.0
- Created: 2023-07-19T19:44:14.000Z (almost 3 years ago)
- Default Branch: master
- Last Pushed: 2024-10-20T18:54:12.000Z (over 1 year ago)
- Last Synced: 2025-06-24T02:02:53.484Z (12 months ago)
- Topics: emacs-package, erlang
- Language: Emacs Lisp
- Homepage:
- Size: 88.9 KB
- Stars: 14
- Watchers: 2
- Forks: 2
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# earl
Earl is an Emacs Lisp library for communicating with Erlang nodes,
that provides an Erlang-like process concurrency abstraction.
In other words, it is full rewrite of the library part of [Distel],
differing in the following ways:
* Processes run generator functions defined via the `generator` package,
meaning they do not have to be manually written in trampolined style.
This makes `receive` expressions easier to write
since the `saved-vars` argument becomes unnecessary.
* Pattern matching for `receive` expressions uses `pcase` patterns,
instead of a bespoke syntax.
* Processes are not backed by Emacs buffers.
Therefore, the main Emacs Lisp execution context can be an implicit process,
meaning it is possible to use `receive` everywhere
instead of only in functions passed to `spawn`.
* Works with newer Erlang/OTP releases (at least 25 and 26).
* Modernized code base (e.g. uses lexical binding).
## Planned features
Some features of the Distel extended Erlang editing mode are planned:
* [ ] Expression evaluation
* [ ] Completion-at-point function
* [ ] Xref backend
* [ ] Eldoc documentation function
* [ ] Reloading modified modules
Everything else, such as debugger and profiler integration, is out of scope,
with the intention that the public API should allow
for those things to be implemented separately.
[Distel]: https://github.com/massemanet/distel