使用Emacs daemon使得配置变得更加复杂了,因为在启动daemon的时候,没有任何X Frame生成,某些对X Frame的定制代码可能出错,比如:
(setq x-select-enable-clipboard t)
这段代码一定要在X Frame生成之后运行,解决方法是把定制添加到after-make-frame-functions
这个hook里面。
(add-hook 'after-make-frame-functions (lambda (frame) (with-selected-frame frame (when window-system (scroll-bar-mode -1) (setq x-select-enable-clipboard t)))))
发现如果这样配置以后,正常运行emacs有一些配置不会被执行了, 所以我就自己加了一个这样的代码,你看看没问题给大家分享一下把。
(add-hook 'after-make-frame-functions
(lambda (frame)
(with-selected-frame frame
(when window-system
(config-not-in-tty-mode)
))))
+(if (equal (daemonp) nil)
+ ;; 非Daemon模式
+ (config-not-in-tty-mode))
还有一个问题,就是我在emacsclient -t 的时候报错
k@ubuntu:~$ emacsclient -t .emacs
*ERROR*: Cannot open termcap database file
怎么解决呢?
不好意思,我偷懒了,我使用的完整配置是
(if (and (fboundp 'daemonp) (daemonp))
(add-hook 'after-make-frame-functions
(lambda (frame)
(with-selected-frame frame
(set-fontset-font "fontset-default"
'chinese-gbk "AR PL UKai CN 20"))))
(set-fontset-font "fontset-default" 'chinese-gbk "AR PL UKai CN 20"))
和你的基本一样。
emacsclient启动报错,我想你是自己编译的emacs吧,应该是系统里缺少ncurses的开发包,不同的系统可能包的名字不一样。