用 Clojure 给 Emacs 写插件
Emacs
2024-09-21 1342字

Cloel

Cloel 是一个结合 Clojure 和 Elisp 的协同编程框架, 利用 Clojure 的生态和多线程能力来扩展 Emacs。

主要优势:

  1. 速度快: 耗时代码在外部 Clojure 进程执行, 避免卡住 Emacs
  2. 多线程: 利用 Clojure 的多线程, 保证快速响应
  3. Lisp 风格: 用 Clojure 写插件也能保持 Lisp 风格
  4. 强大生态: 可访问 JVM 和 Python 的软件包生态
  5. 低门槛: 开箱即用的框架, 简化 Emacs 的 Clojure 扩展开发

安装

  1. 安装 Clojure, 参考 官方手册

  2. 安装 parseedn

  3. 安装 Cloel Elisp 部分:
    • 克隆仓库并添加到 Emacs 配置:
      (add-to-list 'load-path "<path-to-cloel>")
      (require 'cloel)
      
  4. 安装 Cloel Clojure 部分:
    cd cloel
    clojure -X:jar
    clojure -X:install
    
  5. 测试:
    • 执行 M-x load-file 选择 cloel/demo/app.el
    • 执行 M-x cloel-demo-test
    • 如果显示 “Cloel rocks!” 则安装成功, 没有成功请查看 *cloel-demo-clojure-server* buffer 以反馈报错信息

版本更新

每次更新 Cloel 后都需要执行 clojure -X:jar; clojure -X:install 来更新 Clojure 代码, 避免版本升级后的兼容性问题。

开发

开发时可通过 grep “STEP” 关键字来理解 Demo 程序结构。

以下是 API 详情, 将 app 替换为你的应用名:

Elisp API:

Clojure API:

Clojure 可以被重载的接口:

在 Clojure 中, 我们可以使用 alter-var-root 在应用端重载上面的接口实现, 具体请看 demo/app.clj