人生ずっと勉強

人生ずっと勉強ですね。 https://twitter.com/KiyotakaGoto

anything のミニバッファで C-h が効かない件の対処法

方法

keyboard-translate で delete-backward-char を実現する。

(keyboard-translate ?\C-h ?\C-?)

背景

ずっと anything のミニバッファで C-h が効かなくて不便でした。
emacs では C-h に delete-backward-char を以下のように割り当てていました。

(global-set-key "\C-h" 'delete-backward-char ) 

ぐぐってみるとどうも以下のように anything-map でキーを割り当てるといいらしかったのですが、

(define-key anything-map (kbd "C-h") 'delete-backward-char)

これでも自分の環境では動きませんでした。

ほとほと困っていたところ、こちらで以下のようなコメントを発見。

;; anything-map だけ設定すると、'C-h' > delete-backward-char は思い通りの動作にならない事がある
;; 発生原因は不明だが、 何らかのanything系コマンドに絡んでいる
;; define-key による 'C-h' > delete-backward-char を実現するには
;; anything で使用される全ての map に再割り当ての必要がある
;; ※ anything-.*map$ は全て anything-map からのコピーなので、
;; anything-map だけ解決されていれば問題ないはず?
;; anything-map は minibuffer-local-map からのコピーを使用している。
;;
;; keyboard-translate によって delete-backward-char を実現している場合、下記の再割り当ては必要ない

面倒だし keyboard-translate でやろうと思い、そう変更したところ、
無事に anything のミニバッファでも動作しました。