文章摘要
文章指出Emacs虽非操作系统,但能像OS一样协调应用和工具,通过内置系统服务接口和运行外部程序的能力,让用户将各种计算需求转化为客户端模式,实现“只生活在Emacs中”的理念,强调在Emacs中一切皆可视为服务。
文章总结
好的,这是根据您的要求,对原文进行的中文重述:
标题:在 Emacs 中,一切皆服务
常有人说 Emacs 是一个操作系统,这并不准确。但它之所以常被拿来与操作系统比较,是因为它具备在操作系统内核之上编排各种应用和工具的能力。Emacs 内置了对文件系统、网络等系统服务的访问,并能运行外部程序,这使得在 Emacs 内部模拟客户端行为变得非常普遍。因此,Emacs 用户可以通过各种客户端模式完成许多计算任务,这也支撑了“只生活在 Emacs 中”的理念。
本文探讨了 Emacs 如何让你构建一个客户端。其核心观点是:在 Emacs 中,一切看起来都像是一个服务。
客户端-服务器模型
客户端-服务器模型是一种常见的计算机交互模式,它将任务分为资源提供方(服务)和资源请求方(客户端)。客户端向服务器发出请求,服务器返回响应。这种交互可以发生在网络上,也可以是系统内部的。
Emacs 作为客户端
在客户端-服务器模型中,客户端通常负责三个部分:用户界面(UI)、负责与服务通信的子系统(客户端边缘)以及本地数据库(用于存储与服务器交换或同步的数据)。
针对这些需求,Emacs 提供了丰富的内置和第三方库。例如: * UI:Minibuffers、Buffers、Completion 等。 * 客户端边缘:URL、Socket、SMTP 以及 JSON/XML 的序列化/反序列化库。 * 本地数据库:Association Lists、Hash Tables 以及 SQLite。
实现 Emacs 客户端的复杂度取决于具体需求。如果存在一个能完成“繁重工作”的命令行工具,那么该工具可以被重新定义为可通过 shell 调用访问的“服务”。
Elisp
上述所有库都通过 Emacs Lisp (Elisp) 编程语言访问。Elisp 是一种动态编程语言,允许在运行时进行高度灵活的调整。这种能力使得 Emacs 可以复杂地编排任何可用的行为,从 Elisp 函数到 shell 命令。
示例:wttr.in 客户端
wttr.in 是一个面向控制台的天气预报网络服务。我们可以构建一个 Emacs 的 wttr 命令,它会提示输入地点,发起 HTTP 请求,处理 JSON 响应,并在 minibuffer 中显示结果。
实现过程包括:
1. wttr 函数作为顶层命令,获取地点参数。
2. wttr--request-url 函数构建 wttr.in 的 URL。
3. fetch-json-as-hash-table 函数负责获取 URL 内容并将 JSON 响应解析为 Elisp 的哈希表。
4. wttr--report-message 函数从解析后的数据中提取温度、天气描述等信息,并生成报告消息。
整个 wttr.el 的代码量仅为 67 行。
另一种实现方式
如果觉得上述实现还是太复杂,可以设想另一种方案:将实际的网络请求和 JSON 处理交给一个名为 weather 的 Python 脚本完成。那么,Emacs 中的命令就简化为调用该 shell 脚本并显示结果。此时,shell 命令本身就成了一个“服务”。
总结
Emacs 提供的许多 API 都在高抽象层次上工作。由于 Elisp 是一种动态编程语言,它允许以灵活的方式将 Elisp 库与命令行工具集成。这种能力对于那些认识到其潜力的用户来说极具吸引力。
评论总结
根据评论内容,总结如下:
主要观点一:Emacs 的“操作系统”特性与灵活性 - 多位用户强调 Emacs 的极端灵活性和类似操作系统的能力。mimo84 表示:“Started because I wanted to try out org mode and stayed for the extreme flexibility it offers.”(评分:None) - kandros 认为:“One of the pivotal moments in my career has been when I used Emacs just enough to truly understand what 'Emacs is an operating system' means...”(评分:None) - pjmlp 补充历史背景,指出 Emacs 的“操作系统”比喻源于 Lisp 机器未普及,并引用相关演示链接。(评分:None)
主要观点二:Emacs 作为客户端/服务器架构的争议
- 部分用户质疑将 Emacs 归类为客户端/服务器架构的实用性。deng 批评道:“This just proves that you can cram pretty much anything into the client/server dichotomy... I don't know what you would gain from these things.”(评分:None)
- SoftTalker 指出 Emacs 确实支持本地客户端/服务器模式(emacs --daemon 和 emacsclient),但“Unfortunately it only works locally.”(评分:None)
主要观点三:Emacs 的独特哲学与使用体验 - bitwize 描述 Emacs 的“整体性”:“In Emacs, everything looks like a part of the core system... The whole thing is just one unvariegated blob of Lisp.”(评分:None) - agentultra 将其比作编程环境:“eMacs is more like a programming environment that has a text editor built in. Sort of like some SmallTalk images.”(评分:None) - kleiba2 分享实际困境:因雇主强制统一工具而无法使用 Emacs,导致效率下降:“I'm using lots of one-purpose tools... a good deal less efficiently than I could use Emacs.”(评分:None)
主要观点四:Emacs 与其他编辑器的比较 - girvel 提出疑问:“I see no argument that Emacs has more service-like interaction with other apps or its plugins than say vim or vscode.”(评分:None) - floathub 推荐一个面向非用户的 Emacs 入门视频链接。(评分:None)
平衡性总结:评论呈现了 Emacs 的极端灵活性(类似操作系统)与实用限制(如本地客户端/服务器、雇主政策)之间的张力。支持者强调其 Lisp 核心的整合能力,质疑者则指出其架构定义的模糊性及实际使用中的局限性。