默认情况下,Emacs中的Dvorak布局?

时间:2012-04-01 19:34:07

标签: emacs

我最近切换到在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")))

2 个答案:

答案 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")))