gpt4 book ai didi

emacs - 在 Emacs 中使用守护进程/客户端在新框架上运行命令

转载 作者:行者123 更新时间:2023-12-02 20:17:28 24 4
gpt4 key购买 nike

这也许很简单,但我在谷歌搜索时没有发现任何有用的东西。所以就这样了:)

我在守护进程模式下使用 Emacs (emacs --daemon),它真的很方便。我还使用 dvorak,并发现从长远来看,将 C-j 重新映射到 C-c (反之亦然)非常方便,并使用以下内容进行翻译:

(keyboard-translate ?\C-j ?\C-c)
(keyboard-translate ?\C-c ?\C-j)

使用 Emacs 作为守护进程时,这非常有用。当我启动新客户端 (cli/gui) 时,C-j 不再绑定(bind)到 C-c。什么?

所以我想在创建新的客户端框架后我需要运行keyboard-translate,但我不知道该怎么做。我尝试过在某处找到的 defadvice,但无法使其工作,所以我放弃并删除了它。

最佳答案

C-h f keyboard-translate RET 表示:

This variable has a separate binding for each terminal. See Info node`(elisp)Multiple displays'.

这为我们指明了正确的方向,尽管该文档中存在错误,因为引用的信息节点不存在。搜索表明该节点实际上被重命名为(elisp)Multipleterminals,您也可以在此处阅读:http://www.gnu.org/s/emacs/manual/html_node/elisp/Multiple-Terminals.html

On GNU and Unix systems, each X display is a separate graphical terminal [...] Emacs can even connect to other text-only terminals, by interacting with the emacsclient program.

因此,当您将 emacs 作为守护进程启动时,您还没有连接到终端(或者至少没有连接到对您有用的终端),因此您的命令不会为需要的终端生成绑定(bind)。你最终会使用。

after-make-frame-functions 变量提供了一种解决此问题的方法。

(defun my-dvorak-translations (&optional frame)
"Re-map keys in the current terminal."
(with-selected-frame (or frame (selected-frame))
(keyboard-translate ?\C-j ?\C-c)
(keyboard-translate ?\C-c ?\C-j)))
;; Evaluate both now (for non-daemon emacs) and upon frame creation
;; (for new terminals via emacsclient).
(my-dvorak-translations)
(add-hook 'after-make-frame-functions 'my-dvorak-translations)

从实验上看,重复命令似乎是安全的,因此我们不必担心每个终端只执行一次(但如果这样做,我们可以使用 (get-device-terminal FRAME) 来帮助解决这个问题)。

关于emacs - 在 Emacs 中使用守护进程/客户端在新框架上运行命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5064390/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com