emacs-变相在windows上使用emacs-client
在配置中设置默认启动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)
)
(setq server-auth-dir "~/emacs-local")
(if (not (server-running-p))
(progn (server-start)
(add-hook 'server-after-make-frame-hook #'my/set-gui)
))
然后将启动Emacs的快捷方式路径改为
D:\Emacs\bin\emacsclientw.exe -c -n -f %APPDATA%\emacs-local\server -e "(raise-frame)" -a "D:\Emacs\bin\runemacs.exe"
再将 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、配置加载等问题。
%APPDATA%
这个系统变量自动化为每台电脑创建一个不同的Server文件。
注意此时若使用org-captude的chrome插件 ,需要将reg文件用bat批量生成(以便自动化嵌入系统名称)。
创建emacs-org-protocol.bat文件,内容如下:
@echo off
echo REGEDIT4 >t1.reg
echo [HKEY_CLASSES_ROOT\org-protocol] >>e1.reg
echo @="URL:Org Protocol" >>e1.reg
echo "URL Protocol"="" >>e1.reg
echo [HKEY_CLASSES_ROOT\org-protocol\shell] >>e1.reg
echo [HKEY_CLASSES_ROOT\org-protocol\shell\open] >>e1.reg
echo [HKEY_CLASSES_ROOT\org-protocol\shell\open\command] >>e1.reg
echo @="\"D:\\Emacs\\bin\\emacsclientw.exe\" -f %APPDATA%\emacs-local\server \"%%1\"" >>e1.reg
然后新电脑运行该文件,再运行生成后的e1.reg就完成了协议注册。
1. 新版方式
;; 这里面只设置字体
(defun my/set-gui ()
(if (eq system-type 'darwin)
(progn
;; (set-font "Cascadia Code" "HarmonyOS Sans SC" 18 18)
(set-font "Cascadia Code NF" "FangSongCode" 20 20)
(toggle-frame-maximized)
;; (add-to-list 'default-frame-alist '(undecorated . t))
(sis-set-english))
(progn
(cond ((string= (system-name) "DZB-114514");;OFFICE
(set-font "Cascadia Code NF SemiLight" "FangSongCode" 40 40))
((string= (system-name) "DESKTOP-FR36SPM");;H
(set-font "Cascadia Code NF SemiLight" "FangSongCode" 40 40)))
(let* ((display-width (display-pixel-width))
(display-height (display-pixel-height))
(frame-width (floor (* 0.9 display-width)))
(frame-height (floor (* 0.8 display-height)))
(left-offset (floor (* 0.05 display-width)))
(top-offset (floor (* 0.05 display-height))))
(set-frame-position (selected-frame) left-offset top-offset)
(set-frame-size (selected-frame) frame-width frame-height t))
(sis-set-english))
))
(add-hook 'server-after-make-frame-hook #'my/set-gui)
;; 强制删除旧server文件避免占用
(server-force-delete)
;; 直接启动服务器,无视警告
(ignore-errors (server-start))
;; 当前窗口隐藏
(make-frame-invisible nil t)
然后参考这个指南配置自启动runemacs.exe
。这样一来,开机之后Emacs就会完全载入配置且作为daemon模式存在,通过上面的快捷方式路径或listary等软件即可快速呼出新client窗口。