emacsq.sh: 让 emacs -Q 更省心

只需专注验证问题,不用担心包内不内置、如何安装。

用例:(通常只需-P -M,很少一次用这么多参数)

emacsq.sh \
    -p emacs-27 \
    -ud .cask/27.1 \
    -L /path/to/foo-pkg \
    -L /path/to/bar-pkg \
    -P foo,bar \
    -M foo-mode,bar-mode \
    --eval "(progn ...)"

参数释义:

-p /path/to/emacs           # 可选。指定 Emacs 可执行文件。

-ud /path/to/emacs-user-dir # 可选。用来指定 user-emacs-directory
                            # 如果没指定则以此试探以下路径:
                            # - ~/.emacs.d/{EMACS-VERSION}/
                            # - ~/.emacs.d/{MAJOR-VERSION}.{MINOR-VERSION}/
                            # - ~/.emacs.d/
                            # 另外还可以指定 '<tmp>' 创建一个临时目录作为
                            # user-emacs-directory 以确保纯净无污染。

-L /path/to/package         # 把本地包加入 load-path。可多次使用。
                            # 当前目录默认加入 load-path。

-P package1,package2,...    # 加载包,多个包用逗号分割。如果在 load-path 中
                            # 找不到包,则自动安装。

-M mode1,mode2,..           # 起用 mode 或执行函数。

--eval expr                 # Emacs 参数。所有 Emacs 参数都必需放在后面。

更多信息详见 REAME。

15 个赞

真实用例 1:( completion buffer有没有可能像lsp-bridge、company那种方式显示? - #4,来自 twlz0ne )

  1. 终端运行: emacsq.sh -P company -M global-company-mode -nw -f run-python
  2. 在刚刚启动的 Emacs 中输入:import os\nos.

emacs-acm-terminal

真实用例 2:( [已解决] Emacs 27, rust-mode, 如何让单引号自动的 autopair, 但是,单引号前面如果是 & 则例外。 - #20,来自 twlz0ne )

$ emacsq.sh -P rust-mode,smartparens -M electric-pair-mode,smartparens-global-strict-mode --eval \
            "(progn
              (rust-mode)
              (require 'smartparens-rust) ;; ++
              (insert \"let str: &\")
              (execute-kbd-macro (string-to-vector \"'\")) ;; 触发补全
              (message (buffer-string)))" -nw --batch

let str: &'

更多 >>>

6 个赞

排查问题的时候相当好用。

首先用单个包,emacs -Q 来判断,是否是包的bug。 如果没有问题,在二分法逐渐添加你认为可能引起问题的包。

过来顶一下。

Emacs 29 引入了加载不同的 emacs.d 文件夹的功能,应该是可以代替 chemacs2 这类工具了。

--init-directory=DIR        use DIR when looking for the Emacs init files.

我还没用过,这几天试试。

1 个赞

楼主的这个包的好处是,可以不用新建一个不同的 emacs.d 文件夹。

复用已有的包目录。只是可以单独指定你需要加载的包。可以几乎不修改配置,相当的方便。

路线不同,要实现的目标是类似的。

我是打算重新尝试 Doom 和 Spacemacs,之前用过一次 chemacs2 感觉太繁琐了。

chemacs2 既要改配置,又要在 zshrc 里弄个 alias 指定启动参数。

目标不同。

#5 说得没错,这个脚本就是用来测试/除错的。目的是为了使用 emacs -Q 时,尽量减少安装依赖、设置路径等等烦恼。可以复用现存的包,也可以开辟一个临时目录重新下载。适用于用完即弃、无须维护的场合。

chemacs2 和 --init-directory=DIR 是为了多个配置共存。

也可以换种思路理解 chemacs2 和 --init-directory,这俩家伙可以算是拆家式的排错方案。 :laughing:

为大佬在 shell 中嵌入 elisp 的高超技艺点赞。

1 个赞