Doom EmacsでSKKを使うと困る
以下のようなことに困ってないだろうか。
- C-gを連打するといつの間にかSKKが終了してしまう
- インサートモードでSKKのC-jが
+default/newline
に食われてしまってskk-j-modeにならない - org-modeでSKKのC-jが
org-down-element
に食われてしまってskk-j-modeにならない
下二つは本家にも困っている人がいるようだが放置気味。
これはそんな不具合を改善するTipsだ。
解決策
以下のコードを$DOOMDIR/config.el
に入れておこう。
;; +bindingsで+default/newlineに上書きされているのでnilにしておく
(map! :i "C-j" nil)
;; insert modeのC-gはevil-escapeに上書きされるとSKKと相性が悪い
(map! :i "C-g" nil)
(map! :after evil-org
:map evil-org-mode-map
;; lang/org/configでorg-down-elementに上書きされているのでnilにしておく
:i "C-j" (cmds! (org-at-table-p) #'org-table-next-row nil)
)
(use-package! skk
:bind ("C-x C-j" . #'skk-mode)
:config
;; input/japanese/config.elでaddされているhookを削除する
;; (これだとC-gしたらSKKが終了してしまう)
(remove-hook 'doom-escape-hook #'skk-mode-exit)
:hook
;; normalモードに入るときにSKKをlatin-modeにするにはこう
(evil-normal-state-entry-hook
. (lambda ()
(when (bound-and-true-p skk-mode)
(skk-latin-mode-on)))))
;; ついでにpackage.elでjapaneseを有効にするとpangu-spacingまで強制有効になるのはどうかと思う向きは
(use-package! pangu-spacing
:config
;; input/japanese/config.elでtext-mode-hookに挿入されているので削除する
(remove-hook 'text-mode-hook #'pangu-spacing-mode))
^Hはバックスペースとして動いて欲しい向きは以下だ。
;; ^Hは削除であって欲しい
(global-set-key (kbd "C-h") #'delete-backward-char)
(map! :after vertico
:map vertico-map
"C-h" #'vertico-directory-delete-char)
(map! :after evil-org
:map evil-org-mode-map
;; lang/org/configでorg-down-elementに上書きされているのでnilにしておく
:i "C-j" (cmds! (org-at-table-p) #'org-table-next-row nil)
;; ^Hは削除であって欲しい
:i "C-h" (cmds! (org-at-table-p) #'org-table-previous-field nil)
)