C-eとC-aを便利にする

このまえC-aを便利にするとか言うのを書いたけど、日本語を書いていたら何となく不自由したので、日本語を書くことも意識して表示行の先頭と末尾に移動するようにしてみた。

■具体的に何をするか
C-aの説明
 表示行の行頭に移動する。既に表示行の行頭にカーソルがある場合はインデントした文字の所まで移動する。インデントした所にカーソルがある場合は表示行の行頭に移動する。ダラダラ日本語で書いている場合で表示行の行頭カーソルがある場合は段落の始めに移動する。

C-eの説明
 表示行の行末に移動する。既に表示行の行末にカーソルがある場合は、本当の行末に移動する。日本語の場合は段落の終わりとかに移動するようになる感じ。

;;C-aを便利に
(defun toggle-beginning-or-indentation-of-line ()
  (interactive "p")
  (let ((p1 (point)) (p2))
	(goto-virtual-bol)
	(setq p2 (point))
	(if (= p1 p2)
		(back-to-indentation))
  ))

(global-set-key #\C-a 'toggle-beginning-or-indentation-of-line)

;;C-eを便利に
(defun virtual-eol-or-eol ()
  (interactive "p")
  (let ((p1 (point)) (p2))
	(goto-virtual-eol)
	(setq p2 (point))
	(if (= p1 p2)
			(goto-eol))
	))

(global-set-key #\C-e 'virtual-eol-or-eol)

単純な段落移動なら"ESC {"とか"ESC }"とかでできるんだけど、キーを押しなれていないので中々自分は押せない。しかし、日本語かいてるときじゃないと段落単位の移動とかは余りしないなぁとか思ったので、日本語のときに上手くいきそうに考えてみた。