前面写的太啰嗦了,这里做些补充
-
为什么
window-system
的变化会带来混乱?Daemon 启动(也就是整个配置文件加载)时,是被当作终端对待的,所以针对终端的各种配置/hook都已经加载了,针对 GUI 的则被忽略。当启动一个 GUI client 时,它执行的有一部分可能是针对终端的配置。
.--------. | Daemon | '--------' | | window-system: nil | | .-------------. | | Client(GUI) | | '-------------' | | |---------->| | | v | window-system: nil |\ | | create frame |/ | window-system: ns | v
-
为什么要在
(if window-system ...)
里面定义函数?有什么区别?感觉这样会快一些(想当然),区别嘛,用 c 语言对比更明了:
;; elisp ;; c ;;-------------------------------------------- (if window-system ;; void foo () { (defun foo () ;; #ifdef WINDOW_SYSTEM BODY-AAA) ;; BODY_AAA (defun foo () ;; #else BODY-BBB)) ;; BODY_BBB ;; #end ;; } ;;-------------------------------------------- (defun foo () ;; void foo () { (if window-system ;; if (WINDOW_SYSTEM) { BODY-AAA ;; BODY_AAA BODY-BBB)) ;; } else { ;; BODY_BBB ;; } ;; }