[Emacs] M-; の連続タイプで => を入力する方法
はじめに
開発効率が256倍になると言われている、るびきち先生の lispxmp や rcodetools の Rust 版を自分用に作ったのだけど M-;
の連続タイプで =>
を入力する方法がわからなかったので先生のコードを参考にしながらコピペ改造してみる。
lispxmp
(defmacro lispxmp-comment-advice (func)
`(defadvice ,func (around lispxmp-hack activate)
,(format "If `%s' is successively called, add => mark." func)
(if (and (eq major-mode 'emacs-lisp-mode)
(eq last-command ',func)
(not (member "=>" (list (ignore-errors (buffer-substring (- (point) 2) (point)))
(ignore-errors (buffer-substring (point) (+ (point) 2)))))))
(insert " =>")
ad-do-it)))
(lispxmp-comment-advice comment-dwim)
(lispxmp-comment-advice paredit-comment-dwim)
よくわからないけど major-mode
が emacs-lisp-mode
のときに last-command
が指定のコマンドと同じ、つまり2連続のときに insert
を実行していることだけはわかる。
rcodetools
(defadvice comment-dwim (around rct-hack activate)
"If comment-dwim is successively called, add => mark."
(if (and (eq major-mode 'ruby-mode)
(eq last-command 'comment-dwim)
;; TODO =>check
)
(insert "=>")
ad-do-it))
;; To remove this advice.
;; (progn (ad-disable-advice 'comment-dwim 'around 'rct-hack) (ad-update 'comment-dwim))
こちらは comment-dwim
だけに反応するようにしている。
lispxmp
の方と比べると TODO のところは M-;
を3連続でタイプしたときに insert
を実行しないようにする処理だったことがわかる。
とりあえず =>
がさくっと入力できればよいのでここは省いてよい。
あと自分で advice
を書くといつも解除できなくなって困っていたので advice
を解除する方法がわかってよかった。
rust-mode 版
(defadvice comment-dwim (around rustxmp-hack activate)
"If comment-dwim is successively called, add => mark."
(if (and (eq major-mode 'rust-mode)
(eq last-command 'comment-dwim)
;; TODO =>check
)
(insert "=>")
ad-do-it))
;; To remove this advice.
;; (progn (ad-disable-advice 'comment-dwim 'around 'rustxmp-hack) (ad-update 'comment-dwim))
rcodetools 版をコピペ&一部置換しただけだけどこれで問題なく動いた。
応用
コメントを書くときに TODO:
や FIXME:
などのマークを必ず入れるようにしている場合は =>
のかわりに入力するようにしても良さそう。
Author And Source
この問題について([Emacs] M-; の連続タイプで => を入力する方法), 我々は、より多くの情報をここで見つけました https://zenn.dev/megeton/articles/583bee3ec04403著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Collection and Share based on the CC protocol