Windows下利用make-frame-invisible函数变相实现Emacs Daemon

将启动Emacs的快捷方式路径改为 D:\Emacs\bin\emacsclientw.exe -c -n -e "(raise-frame)" -a "D:\Emacs\bin\runemacs.exe"

然后在配置中设置默认启动server:

(defun my/set-gui ()
  (set-font "Cascadia Code" "HarmonyOS Sans SC" 32 32)
  (set-frame-position (selected-frame) 100 100)
  ;;设置宽和高,我的十寸小本是110,33,大家可以调整这个参数来适应自己屏幕大小
  (set-frame-width (selected-frame) 170)
  (set-frame-height (selected-frame) 30)
)

(if (not (server-running-p))
    (progn (server-start)
           (add-hook 'server-after-make-frame-hook #'my/set-gui)
           ))

再将 C-x C-c 绑定到 make-frame-invisible 函数上:

(global-set-key (kbd "C-x C-c") (lambda () (interactive) (make-frame-invisible nil t)))

这样一来,按组合键时就会让当前窗口消失,再次点击上述快捷方式又能呼出新窗口;点击任意窗口右上角为彻底关闭当前Emacs程序。

在实现Daemon、Client的功能同时,避免了直接使用Emacs-Server导致的GUI、配置加载等问题

4 个赞

有啥问题?建议报 bug

主要是daemon模式的配置加载等问题,刚才又在reddit看见一帖:

https://www.reddit.com/r/emacs/comments/1e3jv06/emacs_refuses_to_render_left_and_right_quotes/

https://emacs.stackexchange.com/a/77767/39388

很久以前的帖子了,不知道能不能解决你的问题…

我之前遇到过,daemon模式,lsp补全导致buffer文本错乱