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

emacs27加入了新特性,可以创建early-init.el,我在想有没有方法emacs加载的早期就判断emacs是否运行在X Window或者terminal中。

我试了下 window-system 变量,发现 early-init.el 文件中该变量的值都是 nil

还有那个 display-graphic-p 测试的结果也都是 nil

所以估计不可以,或许有而我不知道

看了下源码没什么头绪,顺便吐槽一下为什么emacs的源码会有tab和空格混用的情况。

问一下,你为什么要在这里判定呢?感觉好像没啥必要啊,后续进行判断也一样使用啊

试一下 (frame-parameter nil 'window-id)

这个表达式返回 emacs 的 x window xid, 不知道终端中会不会是 nil ?

「用 Tab 缩进也无法避免有需要用空格对齐」之外的情况应该就算作是「历史遗留问题」。

(info "(emacs) Early Init File") 以及 C-h n 里有一些 early-init.el 的介绍,根据这些介绍,直觉上不能判断,而且你应该把这样的配置放到 init.el 里。

试了一下,也一样不能够判断,同样的无论终端还是图形下都是返回 nil

有个变通的, 我用在我的 lazycat-emacs 中

在 /usr/share/emacs/site-lisp/site-start.el 里面写代码, site-start.el 的代码会在 ~/.emacs 之前执行, 表达式执行结果和 ~/.emacs 里面一样.

我看到有人在early-init.el里面设置menu-bar和tool-bar在一开始就不初始化,解决了启动emacs时menu-bar和tool-bar出现后再消失的问题。 我就在想可不可以在启动前针对不同的运行环境做一些不同的设置。

这个也有办法啊,在early-init.el中关闭menu-bar和tool-bar,然后在init.el中根据运行环境再打开不就行了?

如果在early-init.el中预先设置theme,如果我想在不同的环境里面使用不同的主题就没有办法了。

你看源码的速度好快

那么多源码一下就看完了

C-h f查看一下函数的定义,跳转到源文件,研究一下实现方法,应该不难吧?

判定当前的运行环境 应该用的是C source

C-h f 倒是也能找到C source的源码

判定当前的运行环境可以用el文件里面的函数,也可以用C文件里面的函数,它们都提供了方法。

难道你用C-h f从来没有看到过这样一句话 XXXXXX is a built-in function in C source code

那应该是我对源码这个词有理解错误。

C-h f car

我的意思是打开C文件

你没编译过emacs吗?

make 我会用

只要 emacs 是在本地编绎的并留下源碼就能用 C-h f 跳转到 C 源碼,不是本地编绎只要指定 C 源碼位置一樣可跳转