emacs27能不能在early-init.el里面判断emacs是否运行在terminal里面?

看完TI脑子有点乱,一句话一张图就能解释的问题扯这么久。这个问题你有解决思路或办法吗?

(framep (car (frame-list)))

找到一个变量window-system-version, 它没有给它太多的信息, 在linux下可以用来在early-init.el判断运行环境。变量的值没有都列出来,从文件上面可以看到有针对不同系统赋的不同值。

但是这个变量要是不是被抛弃了?

在init.el中加载主题没啥问题吧,为啥非要在early-init.el中呢?

闲得无聊吧,就想试试在默认主题加载前,加载主题,字体什么的。

可以在终端导出一个环境变量:

$ cat early-init.el
(error (getenv "NOWIN"))

$ export NOWIN=-nw; emacs --debug-init $NOWIN
Debugger entered--Lisp error: (error "-nw")
  signal(error ("-nw"))
  error("-nw")
  eval-buffer(#<buffer  *load*> nil "~/.emacs.d/early-init.el" nil t)  ; Reading at buffer position 25
  load-with-code-conversion("~/.emacs.d/early-init.el" "~/.emacs.d/early-init.el" t t)
  load("~/.emacs.d/early-init" noerror nomessage)
  load-user-init-file(#f(compiled-function () #<bytecode 0x400c36a1>))
  command-line()
  normal-top-level()

本来以为 command-line-args 会包含完整的命令行参数 ("/path/to/emacs" "--debug-init" "-nw"),然而在 early-init.el 中只能得到 ("/path/to/emacs"),难道是有意阻止用户判断?

各种平台上的Emacs,这个变量都只能返回运行路径,没有参数。

原本是有的,但是在 (command-line) 函数执行的过程中一个个删除了,到 *init.el 文件就没了。