行を挿入する時にDrawerを避けたい Emacs Evil
Evilで行を挿入する時は、Normal Stateで o を押下して、次の行からInsert Stateが始まるのだが、 Headingにいる時にProperties Drowerを飛ばして欲しい時がある。
具体的には次のような場合、カーソル ⏐ の位置で次の行を挿入すると、
新しい行はHeadingのすぐ次に挿入される。
* Awesome heading⏐ :PROPERTIES: :CUSTOM_ID: hoge :END:
↓ o で行を挿入するとPropertiesの位置を動かしてしまう。
* Awesome heading ⏐ :PROPERTIES: :CUSTOM_ID: hoge :END:
コンテンツを編集する時には、実際には :END: の次の行に挿入しなければならない。
うっかりPropertiesの前に挿入してしまったら、Propertiesが無効になってしまうので事故る。
advice して解決することにした。
(defun my/evil-move-to-end-of-drawer ()
(when (org-at-heading-p)
(org-end-of-meta-data) ; drawerの最後まで移動する
(goto-char (- (point) 1)))) ; 行きすぎるので戻る。次のHeadingまで行ってしまうことがある。
(defun my/advice-evil-open-below-at-heading (old-func count)
(my/evil-move-to-end-of-drawer)
(funcall old-func count))
(advice-add #'evil-open-below :around #'my/advice-evil-open-below-at-heading)