C-. でバッファ切り替えしたいのに etags がでしゃばってきて困る
隣接するバッファに瞬時に移動する - gan2 の Ruby 勉強日記にある
C-.でバッファ切り替えがruby-modeのときに動作しなくて困っている。
C-.を入力すると、ミニバッファに以下のメッセージが表示される。
No tags table loaded; try M-x visit-tags-table
make-command-summaryを使って調べてみたら、
C-.がcomplete-tagにバインドされていることが分かった。
他のモードを使っているときは大丈夫なので、
ruby-modeを使っているときだけ、
etagsの設定が優先されるようになっている?みたい。
これをどうにかして解除したいのだけど、その方法が分からない・・・(´・ω・`)
しょうがないので、1つ思いついた別の方法を試してみた。
ruby-modeのときにC-.をフックするというものだ。
でもetagsの設定の方が優先されちゃうみたいでうまくいかなかった。
そもそもetagsのためにわざわざフックするのはおかしい気がする。
やっぱりetagsの設定を解除するようにしたいよー。
追記
http://www.pqrs.org/~tekezo/emacs/doc/keyjack-mode/index.html
で紹介されている方法で無事解決することができました。
この情報はコメントから教えて頂きました。
どうもありがとうございますm(_ _)m
具体的には、隣接するバッファに瞬時に移動する - gan2 の Ruby 勉強日記
のコードのすぐ下に以下のコードを付け足すことで解決しました。
;;; あらゆるモードで有効なキーバインドの設定 ;; http://www.pqrs.org/~tekezo/emacs/doc/keyjack-mode/index.html ;; C-.がetagsなどに邪魔されずにいつでも使えるようにする (setq my-keyjack-mode-map (make-sparse-keymap)) (mapcar (lambda (x) (define-key my-keyjack-mode-map (car x) (cdr x)) (global-set-key (car x) (cdr x))) '(([?\C-,] . (lambda () (interactive) (my-operate-buffer 1))) ([?\C-.] . (lambda () (interactive) (my-operate-buffer 2))) )) (easy-mmode-define-minor-mode my-keyjack-mode "Grab keys" t " Keyjack" my-keyjack-mode-map)
今回はとりあえずC-.とC-,の設定だけしましたが、
global-set-keyで設定しているキーバインドは、
全部この方法でまとめてしまうのがよさそうです。
僕もその内やろうと思っています。
あー、意図した通りにキーバインドが使えるっていいなぁ(´ ▽`)