my-kill-line

emacs の kill-line には元々「行頭〜ポイントを kill」という動作があるそうだ。
Emacsでカーソル位置から行頭まで削除する方法 - はてブロ@ama_ch
xyzzy でもあるんかなと調べたら、同様に C-u 0 C-k でいけるっぽい。C-u 0 も M-0 もめんどいのに C-u C-k が C-u 4 C-k 扱いされる必要を感じないので C-u C-k で「行頭〜ポイントを kill」にしておいた。*1

(defun my-kill-line (&optional arg)
  (interactive "*p")
  (if arg
      (let ((*prefix-value* (if (eql *prefix-args* 'universal-argument)
                                0
                              *prefix-value*)))
        (call-interactively 'kill-line))
    (multiple-value-bind (from to)
         ;; 以下略

以下略んとこは

  • C-a の後なら1行丸ごと
  • eolp なら次の行のインデント(空白)まで
  • 現在の行のインデント部分にポイントがあれば1行丸ごと

とかなんかそんなことしてる。

生の kill-line 使うなら

(defun kill-line-wrapper (&optional arg)
   (interactive "*p")
   (let ((*prefix-value (if (eql *prefix-args* 'universal-argument)
                            0
                          *prefix-value*)))
     (call-interactively 'kill-line)))

でいいのかな。

でも行頭で C-u C-k したら前の行が殺されるのはちょっとビビった。慣れると便利なのかもしれないのでそのままにしておいてみる。

*1:qwerty だとそーでもないかもしれんけど、dvorak だと u と k を連続で押すのがすごい楽