backspaceも便利に使いたい

 最近はxyzzylispを良く触っているので自動インデントは便利に思っているんだけど、行頭とかでbackspaceすると、インデント分の空白がいらないので一々削るのが面倒。自分は表示行数を制限しているので、コメントとかも長くなると改行して表示するようにしているんだけどインデント部分を削除するのがだるい。と言うことで、行頭の辺りでbackspaceしたらインデント部分も削除する感じのを作ってみた。行頭だけでそれが機能したほうがいいのか、インデント部分でした場合にも機能したほうがいいのか、中々悩ましかったので二つ作って試してみることにした。

■具体的に何をするか

  1. 行頭でbackspaceするとインデントも消す
  2. インデントしている辺りでbackspaceするとカーソルより前のスペースとその前の改行も消す
;カーソルが行頭にある場合にのみ削除
(defun my-backspace ()
  (interactive)
  (if (bolp);カーソルが行頭ならば
	  (progn
		(backward-delete-char-untabify-or-selection);削除して
		(delete-horizontal-spaces));スペースを削除
	(backward-delete-char-untabify-or-selection)));行頭でなければ唯の削除

;カーソルがインデント部分あるばあいインデント削除したいならばこちら
(defun my-backspace ()
  (interactive)
  (let ((cp (point)) (ip))
	(save-excursion
	  (goto-bol)
	  (skip-chars-forward " \t")
	  (setq ip (point)))
	(if (>= ip cp)
	  (progn
		(delete-region cp (progn (goto-bol)(point)));スペースを削除して
		(backward-delete-char-untabify-or-selection));改行部分を削除
	  (backward-delete-char-untabify-or-selection))));インデント部分でなければ唯の削除
;キー設定
;(global-set-key #\C-h 'my-backspace) ;これはいらないかも。
(define-key  ed::*lisp-mode-map* #\C-h 'my-backspace)
(define-key ed::*lisp-interaction-mode-map* #\C-h 'my-backspace)

しばらく使ってみてどちらがいいか、試してみる。というか、lispモードとかじゃなければ必要ない可能性もあるので、それも試して見る予定。

■追記
少しキーを押す位気にしないならば
M-\ (delete-horizontal-spaces)
を押すと綺麗に消える。