C-o(open-line)に負引数を与えた場合、現在行の上に改行を入れるように拡張する

open-lineはポイント位置はそのままに改行を入れてくれる関数。自分は、C-mよりよく使ってるかもしれない。
正の前置引数を与えると改行を複数入れてくるのだけど、負だと動作しないから、拡張してみた。



例えば、以下のようなファイルがあったとして、rの後にカーソルがあった時、

abc def ghi
jkl mno pqr

C-- C-oなんてすると、以下のようになって欲しいなーと思って、open-lineにadviceをしてみた。
# Emacsでは、デフォルトで、C-oにopen-lineが割り当てられている…はず。少くとも自分はそう。

abc def ghi

jkl mno pqr


なんか、あんまり綺麗じゃない気がするけど、こんな感じのadviceがでけた。

(defadvice open-line
  (around open-line-plus-negative-arg (arg))
  (cond
   ((> 0 arg)
    (cond
     ((bolp)
      (forward-line 0)
      (newline (- arg)))
     (t
      (save-excursion
        (save-restriction
          (forward-line 0)
          (newline (- arg))))))
    (scroll-down arg))
   (t
    ad-do-it)))
(ad-activate 'open-line)
;;(ad-deactivate 'open-line)

改行だけの行でやると、(save-excursion (save-restriction …))とかの部分だけじゃ上手く動作しなかったので、
ポイントが行頭にあったときを特別扱いして対処した。スマートじゃないなあ…。

更新時刻

  • 2009/0611/00:05