我最近切换到在Dvorak布局上打字。但是过了一段时间,我决定只在Emacs中使用Dvorak - 所以我系统上的所有其他键绑定都不会被搞砸。
所以,我从StackOverflow.com上的一些问题中采取了以下内容:
(defadvice switch-to-buffer (after activate-input-method activate)
(activate-input-method "english-dvorak"))
它将所有新缓冲区中的输入方法切换为dvorak。它工作正常,但有问题 - 暂存缓冲区保持默认的英文版布局,所有文件选择“对话框”(Cx Cf)也保留它 - 这有点烦人,因为它要求我切换“打字心态”一次几分钟。
有没有办法在emacs中全局启用dvorak布局 - 并且仍然保留默认快捷方式(例如默认英文版的C-x)?
编辑:
我的问题的答案:
(defadvice switch-to-buffer (after activate-input-method activate)
(activate-input-method "english-dvorak"))
(add-hook 'minibuffer-setup-hook (lambda () (set-input-method "english-dvorak")))
答案 0 :(得分:3)
您可以尝试类似的(保证100%未经测试的代码):
(define-minor-mode dvorak-minor-mode "Use Dvorak IM." :lighter nil
(if dvorak-minor-mode (active-input-method "english-dvorak")))
(define-global-minor-mode dvorak-mode dvorak-minor-mode dvorak-minor-mode)
答案 1 :(得分:0)
我将Emacs版本28与emacsclient一起使用。我必须稍微调整@Stefan的答案才能使Emacs服务器成功启动-这是我用来在所有缓冲区中启用dvorak的完整代码:
(define-minor-mode dvorak-minor-mode "Use english-dvorak input method." :lighter nil
(if
(not (string= " *Minibuf-0*" (buffer-name (current-buffer))))
(if dvorak-minor-mode (set-input-method "english-dvorak"))))
(define-global-minor-mode global-dvorak-mode dvorak-minor-mode dvorak-minor-mode)
(global-dvorak-mode t)
(add-hook 'minibuffer-setup-hook (lambda () (set-input-method "english-dvorak")))