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窗口。