C-k(kill-line)も便利に使いたい

 紹介してもらったページを眺めていて便利そうなのを見つけた。C-kを便利にする。行頭にカーソルがある場合はその行を丸ごと削除する。何となく便利そうに思った。けど、良く考えると行は削除して欲しくないときも結構多いなぁとか、思ってみたので、悩ましい。
 考えていて気づいたのは行末にある場合でC-kを使うことはないということ。行末だったらC-dとC-kは同じような動作になるので、多分C-dを押す。kill-lineのLINEを0にした場合の逆の方が何となくいい感じ。

■具体的に何をするか

  • カーソルがある位置より後ろを行末まで削除する。
  • セレクションがあればセレクションを削除、(yankはできる)
  • カーソルが行末にあれば行頭に向かって削除する。
(defun my-C-k(&optional arg)
  (interactive "*p")
  (if (pre-selection-p)
	  (kill-selection)
	(if (eolp)
		(kill-line 0)
	  (kill-line arg)
	  )))
;キー設定
(define-key *global-keymap* #\C-k 'my-C-k)

■何となく感想
 最近他の人のlispをみると、とても丁寧に作ってあるようなので、何となく気が引ける。速度を気にして居るんじゃないかなぁとか思う人とか、丁寧に確認しまくっている人とか、色々人によって好みがあるようだ。自分の奴は動けばいい主義で、かなり適当。 (:D)| ̄|_

■ついでに

  • カーソルが行頭にあれば行を削除する

機能をパクって加えたのも試したけど、動きがなれない。普通のDeleteのようにC-kを使っていると何となく消して空のラインを其のまま何か打つ場合も結構多いので、迷う。

(defun tester(&optional arg)
  (interactive "*p")
  (cond ((pre-selection-p)
		 (kill-selection))
		((bolp)
		 (let
					((point (point))
					 (lines (cond ((or (null arg)
									   (<= arg 1))
								   0)
								  (t
								   (- arg 1)))))
				  (kill-region point
							   (progn
								 (forward-line lines)
								 (goto-eol)
								 (forward-char)
								 (point)))))
		((eolp)
		 (kill-line 0)
		 (kill-line arg))
		))

今の所は慣れもあるし前のままでいいかと思うことにした。


■関係ないけど
ついでに見つけたbolpなる関数が便利そうなので他の奴も何か使っていたのとかはその内修正しようかと思った。タグジャンプできないところを見ると元々入っているCで作った奴のようなので、速度もよさそう。