反馈问题之前请先使用 emacs -Q 排查自己配置的影响

没有 --debug-init 启动看提示么?

谢谢懒猫!这个确实很困扰,很多人反馈问题描述不清晰,也没有排除过原因。总结下来,绝大多数都是个人配置问题或者环境问题。emacs -Q是第一步,还有描述问题一定要清晰,否则浪费大量时间。提问之前可以想想,如果我是作者,这些描述能解决问题么~~~ 这跟码农们天天抱怨QA是一样的道理 :joy:

2 个赞

这个确实是,怎么就忘记了呢

emmm, 怎么感觉是因为我才 :joy:

不是的哈, 和你没关系。

很久以前就想给论坛增加 emacs -Q 的提示了, 只是前两天读 Discourse 的文档才发现最终怎么弄回复模板。 :grimacing:

文本框 Placeholder 很容易被忽视。

如果可以像 Github 那样定制发帖指引、预置问题模板,论坛会有序很多。

懒惰是人的天性,主观视角(不换位思考,不为看问题的人着想)是惯性。没有模板,很多人会倾向自由发挥,书写不按条理。有了模板,在【删除模板】和【按模板要求填写】之间,我相信大部分人会选择后者。

Discourse 其实也有个很弱鸡的模板,可以针对每个 Category 设置一个模板,但是问题明显:

  1. 如果先输入内容,再选择 Category,就看不到模板。
  2. 一个 Category 只能设置一个模板不够用,例如 Emacs-general 不会只有求助帖。

emmmm:rofl:

论坛又不是Github 的Issue有必要这个吗

1 个赞

本论坛显然承担了大量答疑解惑的任务。要不然楼主也不会发这个贴。

不管在哪里,提问者都有责任把问题交待清楚。

有求于别人,就该多站在别人的角度想一想。

不要认为别人回答问题是理所当然。

不要认为别人看懂问题是理所当然。

如果没有这点意识,我不客气的说,就是巨婴。

3 个赞

主帖第一张图,“电子邮件……绝不会向公众显示:hushed:

显示自己的当然没问题(

提一下一个emacs 29的小技巧,最近emacs master分支给emacs加入了 --init-directory 选项,例如,可以让用户可以在 ~/emacs-dummy (当然这个路径在哪里叫什么名字都无所谓,随你) 开个新配置,然后用 emacs --init-directory ~/emacs-dummy 启动emacs,emacs就会使用 ~/emacs-dummy 路径下的配置,用来debug非常方便,chemacs2之类的可以退役了。

参考: emacs/NEWS at a03d7630f133d08b457a6d08b9ce2050566800ff · emacs-mirror/emacs · GitHub

6 个赞

如果 debug 配置不是太复杂,不想创建 dummy 目录,可以用我这个脚本:GitHub - twlz0ne/emacsq-sh: Helper script to run `emacs -Q`

直接在命令行上写配置,即用即弃。

4 个赞

另外,如果你使用 Doom 而不使用 Emacs 29,那贴心的 Doom 已经把这个功能 backport 过去了,doom 用户即使在 emacs 27/28 上也可以用 --init-directoryfeat: backport --init-directory for 27/28 users · doomemacs/doomemacs@5108ffc · GitHub

新手总是问一些基本的错误 “遇到错误 xxx, 怎么办?"

我今天给论坛输入框加入了更多提示

为提高大家的交流效率, 请反馈问题之前先自我排查, 以下是排查方法。

排查是否是因为自己配置文件引起的问题:
1. 用 emacs -Q 启动 Emacs
2. 只加载测试插件和最小配置
3. 如果 emacs -Q 启动没有问题,请使用二分注释法排查自己的配置代码

排查Emacs启动时就报错的问题:
1. 用命令 emacs --debug-init 启动Emacs
2. Emacs会在启动时报错告诉你报错位置和调用堆栈
3. 如果第二步看不懂, 请截图Emacs报错到论坛

排查Minibuffer的报错:
1. 请执行 M-x toggle-debug-on-error 命令
2. 再次执行你触发错误的操作, Emacs会告诉你报错位置和调用堆栈
3. 如果第二步看不懂, 请截图Emacs报错到论坛

排查输出消息的命令:
1. 你在Minibuffer看到某种 message 但没有报错, 此时可以通过在 ielm 中执行代码 (setq debug-on-message "xxx")
2. 当Emacs输出 xxx 时,  Emacs 就会启动 debugger ,告诉我们哪行代码输出了消息
3. 通过分析第二步堆栈信息, 你可以定制Emacs的行为, 避免输出不必要的消息

希望定制某个函数的行为, 但却不想改插件源代码, 请善用 advice:
1. 学习连接在 https://www.gnu.org/software/emacs/manual/html_node/elisp/Advising-Functions.html

希望在加载某个模式时执行某些代码, 请善用 hook:
1. 学习连接在 https://www.gnu.org/software/emacs/manual/html_node/emacs/Hooks.html

希望大家求助前先自助, 老手的时间很宝贵。

11 个赞

论坛输入框增加了 profiler-start 和 profiler-report 的用法, 方便告诉那些不知道用这两个命令排查性能问题的新手。

1 个赞

在Minibuffer看到某种 message 但没有报错, 此时可以通过在 ielm 中执行代码 (setq debug-on-message “xxx”)

学到新知识。↑

我排错最常忽略的情况是,配置是对的,但 .elc / .eln 是旧的,以前不懂的时候只能靠运气解决。如果在配置头部加上 (setq load-prefer-newer t) 应该能解决?

捉两个虫:

  1. “rebuilder” → “re-builder”
  2. “interaction-log” 是第三方包,要主动安装。

错误已经更新, 感谢反馈。

1 个赞

(setq load-prefer-newer t) 会有一点点的额外时间消耗,所以我自用的方案是保存时自动重新编译

(defun auto-recompile-file-maybe ()
  (when (and (fboundp 'vc-root-dir)
			 (string= (vc-root-dir) user-emacs-directory))
	(byte-compile-file buffer-file-name)))

(defun add-after-save-hook ()
  (add-hook 'after-save-hook 'auto-recompile-file-maybe nil t))

(add-hook 'emacs-lisp-mode-hook #'add-after-save-hook)
1 个赞

之前使用的 auto-compile 中的 auto-compile-on-save-mode,挺方便的。但我使用 1s 自动保存文件,一保存就会报错。即使修改完了,那个 compile 错误提示框还会一直保留,闹心,暂时关掉了。

我试试你的,多谢分享。