8 个版本
0.1.8 | 2023 年 6 月 14 日 |
---|---|
0.1.7 | 2023 年 6 月 14 日 |
0.1.3 | 2022 年 8 月 27 日 |
0.1.2 | 2022 年 6 月 7 日 |
#485 在 命令行工具
每月 59 次下载
34KB
849 行
关于
mph 是一个用于与守护进程模式的 emacs 交互的 Rust CLI 工具。它负责以跨平台方式启动 emacs,并在某些方面比 emacsclient
更方便。
mph
是一个正在进行中的项目 - 它现在非常简单且组织混乱,但会随着时间的推移有机地发展,以执行其他任务。
安装
您可以使用 cargo 安装 mph
cargo install mph
命令
$ mph --help
mph 0.1.0
a rusty swiss army knife for emacs
USAGE:
mph [FILE] [SUBCOMMAND]
ARGS:
<FILE>
OPTIONS:
-h, --help
Print help information
-V, --version
Print version information
SUBCOMMANDS:
client
help
Print this message or the help of the given subcommand(s)
restart
start
status
stop
启动、停止和重启
Linux
在 Linux 上,这些命令调用 systemctl,假设 emacs.service
已配置为用户单元。它应该会自动运行守护进程。
macOS
在 macOS 上,这些命令将使用 osascript
和 open
启动由 homebrew tap 安装的 Emacs.app
。您的 emacs 配置需要启动守护进程!
Windows
在 Windows 上,这些命令使用 Windows PowerShell 启动由 winget 安装的 runemacs.exe
。您的 emacs 配置需要启动守护进程!
打开文件
如果您尝试使用 mph
打开文件,它将
- 使用
emacsclient
检查守护进程是否正在运行,并在必要时调用启动钩子 - 运行一个 emacs lisp 片段来检查是否已打开桌面框架
- 如果已存在,则只创建一个新的框架
开发
此项目有一个 justfile,其中包含基本的配方,这些配方包装了 emacs 和 cargo 相关的构建步骤。
elisp
此项目使用 org-babel 作为交互式 emacs lisp 开发环境。然后,这些片段被纠缠以供 rust 导入。
此任务尝试调用 doom emacs 的 org-tangle{.verbatim}
脚本来自动纠缠 ./elisp.org。它依赖于 emacs 的运行,因此任务被配置为尽力而为,并在失败时发出警告。
要手动纠缠文件,请将其在 emacs 中打开并按 C-v C-t
。
README
本项目的README是用org编写的,但crates.io只支持Markdown。使用just readme
命令将使用pandoc生成Markdown格式的README。由于它不那么挑剔,因此它不会像elisp tangling那样优雅地失败。
构建、测试、检查、运行和发布
这些命令封装了它们的cargo等价命令,但首先尝试将lisp代码进行tangle并生成Markdown格式的README。
请注意,测试并不能有效地覆盖命令行当前的功能 - 您可以运行它们,但要确保应用程序正常工作,您还需要尝试交互式操作。
许可证
mph使用Mozilla公共许可证2.0。有关更多信息,请参阅./LICENSE。请注意,它不是emacs的一部分,而是第三方工具。
附录1:Lisp解释器
mph最有趣的功能依赖于使用emacsclient
执行emacs lisp代码片段并解释结果。当前的调用只需要检查一个真值。然而,我希望从emacs解析更复杂的结果。
由emacsclient返回的文本旨在被解析为lisp。它不一定是运行的目的 - 许多对象不可序列化 - 但它可以被解析并作为结构化结果进行交互。
为此,我阅读了Bodil关于解析器组合器的教程,将新知识转换为nom,并开始编写正确的解析器。
此代码位于./src/elisp.rs,部分已完成。对于解析器有测试,大约有一半成功。
在我实现字符串、符号和cons单元格解析之前,它不会特别有用,并且是惰性的。然而,如果完成解析器,我计划将来用它来处理其他emacs lisp调用中emacsclient
的结果。
附录2:远程服务器
我已经很久以前就一直在考虑在远程服务器上运行emacs的想法,使用ssh访问它,并使用计划任务和文件监视来生成和发布org内容,例如wiki。
|-[docker container]--------------------------------|
_|______ __________________ |
->| sshd |---------->| emacsclient -t | |
|______|<-, |________________| |
| '-------, | (unix socket) |
| (child | | |
_|_______ processes | ____v___________ |
<-| caddy |<------------| emacs --daemon |<-, |
|_______| |________________| | |
| ^ (child process)> | | |
| | _________v________ | <(edits) |
| | <(serves) | emacs --batch \ | | |
| | | publish.el | | |
| | |_________________| | |
| | (publishes)> | ^ <(loads) | |
| _|______________v____ ___|___________v__ |
|__| published volume |__| content volume |_______|
|___________________| |_________________|
这个项目超出了mph本身的范围,至少有三段yak shaves,但如果真的发生,它很可能会使用mph作为依赖项。
依赖项
~4–14MB
~176K SLoC