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 源碼位置一樣可跳转