【问题标题】:Dvorak layout in Emacs by default?默认情况下,Emacs 中的 Dvorak 布局?
【发布时间】:2021-01-12 18:31:37
【问题描述】:

我最近改用 Dvorak 布局打字。但过了一段时间,我决定只在 Emacs 中使用 Dvorak - 这样我系统上的所有其他键绑定都不会被搞砸。

所以,我从 StackOverflow.com 上的一些问题中得到以下内容:

(defadvice switch-to-buffer (after activate-input-method activate)
  (activate-input-method "english-dvorak"))

它将所有新缓冲区中的输入法切换为 dvorak。它工作正常,但存在问题 - 暂存缓冲区保持其默认的英文布局,并且所有选择“对话框”(C-x C-f)的文件也保留它 - 这有点烦人,因为它需要我切换“打字心态”一分钟几次。

有没有办法在 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")))

【问题讨论】:

    标签: emacs


    【解决方案1】:

    您可以尝试类似(保证 100% 未经测试的代码):

    (define-minor-mode dvorak-minor-mode "Use Dvorak IM." :lighter nil
      (if dvorak-minor-mode (activate-input-method "english-dvorak")))
    (define-global-minor-mode dvorak-mode dvorak-minor-mode dvorak-minor-mode)
    

    【讨论】:

    • 奇怪 - 它看起来不错,但它什么都没有 - 完全没有。也没有错误。
    • @Rogach:如果您阅读代码(并尝试根据它使用的标识符猜测它的作用),它只定义了一个(嗯,两个)次要模式。如果要使其生效,则必须激活该次要模式。例如。在末尾添加(dvorak-mode 1)
    • 好的,添加 (dvorak-mode 1) 使该代码运行,但它无法找到活动输入方法标识符。与此同时,我用另一种方式解决了这个问题:)
    • @Rogach:这只是一个错字,应该是activate-input-method。既然你提到了它,我的解决方案可能没有解决 minibuffer 的情况,所以你可能仍然需要add-hook 'minibuffer-setup-hook
    • 在 Emacs 28 中没有激活输入方法,而是设置输入方法。
    【解决方案2】:

    我使用带有 emacsclient 的 Emacs 版本 28。为了让 Emacs 服务器成功启动,我不得不稍微调整一下@Stefan 的答案——这是我用来在所有缓冲区中启用 dvorak 的完整代码:

    (define-minor-mode dvorak-minor-mode "Use english-dvorak input method." :lighter nil
      (if (and dvorak-minor-mode (not (minibufferp)))
        (activate-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")))
    

    【讨论】:

      猜你喜欢
      • 2011-05-24
      • 1970-01-01
      • 1970-01-01
      • 2012-02-29
      • 1970-01-01
      • 2010-12-02
      • 2012-11-24
      • 2013-12-08
      • 1970-01-01
      相关资源
      最近更新 更多