最近在研究用use-package配置启动文件 ,有两个小问题不知道怎么解决,求大神指导一下:
1、auto-complete在加载ivy或ido以后再进行加载,而具体想实现的功能是在运行conunsel-find-file
或ido-find-file这两个命令之后进行加载。现在用的代码如下:
(use-package auto-complete
:after (:any ivy ido)
:config
(ac-config-default)
(global-auto-complete-mode t)
(message “Loading Auto-complete…DONE”)
)
请问如何用命令对auto-complete模式进行启动?
2、server的启动:
(use-package server
:if window-system
:unless (server-running-p)
:config
(server-start)
(message “Emacs Server …DONE”)
)
这块代码不能工作,提示“Symbol’s function definition is void: server-running-p”
想实现的功能是:如果没有运行server,则运行。如果运行了那么就不要再运行一次。
Youmu
2
auto-complete
这个包太老了吧,现在基本没有人用了,推荐切换至 company-mode
.
如果非得使用的话,可以使用 advise
, 但是这块我不太懂,期待后面的人回答一下。
server-running-p
这个符号在 server 包里面,必须先要 (require 'server)
之后才能用。
对应的 use-package
写法是
(use-package server
:ensure nil
:config
(unless (server-running-p)
(server-start)))
- 第一个问题, 可以使用
advice-add
来实现
(defun run-auto-complete-a (&rest _)
(when (require 'auto-complete)
(ac-config-default)
(global-auto-complete-mode t)
(message “Loading Auto-complete…DONE”)
(advice-remove 'ido-find-file #'run-auto-complete-a)
(advice-remove 'counsel-find-file #'run-auto-complete-a)))
(advice-add 'ido-find-file :after #'run-auto-complete-a)
(advice-add 'counsel-find-file :after #'run-auto-complete-a)
- 第二个问题是:
server-running-p
函数没有使用 autoload
功能,需要在 server 包被导入后才可以使用它。
- 解决方法一
(autoload 'server-running-p "server" nil t)
(use-package server
:if window-system
:unless (server-running-p)
:config
(server-start)
(message "Emacs Server …DONE"))
- 解决方法 二
(use-package server
:if window-system
:commands (server-running-p)
:init
(unless (server-running-p)
(server-start)
(message "Emacs Server …DONE")))
楼上几位都回答了,只是来凑下热闹。为啥大家都不用 server-mode
呢?
按照 @casouri 给出的链接,这样应该就可以判断了 (boundp-and-true server-process)
。不过只能用在当前 instance 中,再启动一个 Emacs 还是返回 nil。
server-running-p
确实令人费解,其实是考虑了多个实例的情况,包括 TCP 模式,是按照 Unix 的方法设计的,启动生成一个 lock 文件,存在就表示启动了,否则就是没有。
1 个赞
感谢回复。server-mode确实有效。已经换到这个了。server-running-p的话重新打开一个实例后还会再运行一次server。感谢@casouri的链接