关于Emacs更新到26之后的配置更新汇总
Contents
更新的Emacs26之后还是给我带来了一些bug问题,浪费点时间调试(主要还是自己不懂),总结下惠及大家,我抛砖引玉了:
- daemon的启动和emacsclient链接问题,
- transparent titlebar的加载问题,
- 新的native line number display。
运行deamon和emacsclient链接问题: 26相比25严格了许多
比如原来25,OSX下可以用tcp:emacs --daemon=main
加(setq server-use-tcp t)
启动,用emacsclient -nc --server-file=main
链接;关闭server的话野蛮的直接kill掉,重新再运行上述命令,server依然可以启动。重复运行(不关闭原来的main server)也不会有报错,查看会有多个进程用同样的server名字main。这是我原来默认的方式。
现在不行了,直接kill掉相应daemon的进程,下次运行会报错,因为tcp方式会在~/.emacs.d/server/
生成一个名为main
的文件(之前例子给的daemon名字)。正常在emacsclient的frame中运行kill-emacs
关闭emacs server的话会删掉这个问题。Emacs25不管这些,26会检查报错。同时现在也不能运行多个同server名字的进程了(这个很合理;原来只是不报错)。
查了查发现,其实Linux/Unix下,local socket是更好的方式,(如果还想野蛮的通过kill关daemon进程):
emacs --daemon=main
(名字main随便给)emacsclient -nc --socket-name=main
用来连接、创建frame
另外,现在daemon有了两个模式,--bg-daemon
和--fg-daemon
,arch linux中的emacs.service文件建议用fg-daemon
。另外,Linux想在emacs中用fctix打中文(我很少输中文,可能一直都有这个问题吧,没发现),需要加前缀改LC_CTYPE
,但直接
ExecStart=LC_CTYPE=zh_CN.UTF-8 /usr/bin/emacs --fg-daemon
systemd语法报错,不懂为什么懒得深究,重新创建一个bash文档把它wrap成一个新命令就行了。
Transparent titlebar的加载问题
(add-to-list 'default-frame-alist '(ns-transparent-titlebar . t))
这个别卸载你的ui loading函数中(就是daemon下,你需要push到after-make-frame-functions
中,用来加载theme,修改modeline,修改字体等的函数),尽量靠前写,不然第一个frame不是透明标题栏,第二个就好了。
根据不同的theme设置用于ns-transparent-titlebar的底色:
|
|
这里有个比较蛋疼的问题我解决不了(daemon
模式下):
我运行两个daemon分别使用亮色和暗色的主题,上面那个设置的位置就很纠结了:
- 首先它得放在
load-theme
之后,不然我不可能知道主题的background-mode是light还是dark - 它又“该”放在load-theme之前,不然第一个frame创建时使用默认的值light(当用dark-theme时)
我暂时折衷用的第一方案,所以emacsclient的第一个frame的titlebar底色设置是不对的(其实只影响标题的字体颜色,背景色是正确的),如果使用dark theme。关了再开一个frame就好了😝
Native line numbering
下面是我用的设置,分享给伸手党们 :)
|
|
Author oracleyue
LastMod 2018-05-31