我的 init 文件被设置成我的.emacs文件是一个符号链接,指向一个特定于操作系统的 init,它依次加载主 init 文件和不受操作系统影响的配置。我对非服务器 emacs 的这个设置没有问题。
但是,在使用 emacsclient 时它不能正常工作。例如,我有一个设置,org-mode以便在 OSX 上的终端S-Tab中映射到 backtab 以便它正常工作,而不是抛出有关未定义键的错误。如果我不使用 emacs 服务器,此设置工作正常。当我使用 emacsclient 时,我收到未定义键绑定的错误。
我知道我所有的 init 文件都被正确加载,因为当服务器启动时,我放入文件中的任何(消息“无论如何”)行都显示正常。所以它不像 emacs 服务器以某种方式丢失了文件。就好像为服务器加载了映射的键,但在客户端连接时忘记了。我什eval至在 emacsclient 缓冲区中尝试过一次键映射,但没有错误,但没有更改。有任何想法吗?
(顺便说一句,--debug-init没有显示任何奇怪的东西。一切都在正确加载。)
我认为您的问题是您的 .emacs 文件设置了类似local-function-key-map或input-decode-map但这些变量是终端本地的,这意味着每个“终端”(您的 GUI 是一个“终端”,并且文本终端上的每个 emacsclient 连接都将是另一个"terminal") 获取此变量的不同值。
因此,您需要为每个新终端重新运行该代码。您可以after-make-frame-functions按照 reza.safiyat 的建议执行此操作,但它会比需要的运行频率更高(每帧一次,而不是每个终端一次)。但由于这可能仅适用于“xterm”终端,另一个不错的选择是从terminal-init-xterm-hook:
(defun my-text-terminal-keys ()
(define-key input-decode-map ...)
(define-key local-function-key-map ...))
(add-hook 'terminal-init-xterm-hook #'my-text-terminal-keys)
Run Code Online (Sandbox Code Playgroud)
顺便说一句,有时另一种选择是使用function-key-map,因为这是一个全局变量并且同样适用于所有终端。
| 归档时间: |
|
| 查看次数: |
2418 次 |
| 最近记录: |