Last update: 2023-11-28

行を挿入する時に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)