# HG changeset patch # User Richard M. Stallman # Date 889163511 0 # Node ID 926d7b2358dc4f3b48f37837a1611be9274ea7f8 # Parent 82e7d581bad18dbea7655477d84dd3524fd4c878 (backward-delete-char-untabify-method): New user option. (backward-delete-char-untabify): Obey it. This implements "hungry" delete. diff -r 82e7d581bad1 -r 926d7b2358dc lisp/simple.el --- a/lisp/simple.el Fri Mar 06 03:48:15 1998 +0000 +++ b/lisp/simple.el Fri Mar 06 05:51:51 1998 +0000 @@ -322,12 +322,22 @@ (if (eq arg '-) (setq arg -1)) (kill-region (point) (forward-point (- arg)))) +(defcustom backward-delete-char-untabify-method 'untabify + "*The method for untabifying when deleting backward. +Can be `untabify' -- turn a tab to many spaces, then delete one space. + `hungry' -- delete all whitespace, both tabs and spaces. + nil -- just delete one character." + :type '(choice (const untabify) (const hungry) (const nil)) + :group 'killing) + (defun backward-delete-char-untabify (arg &optional killp) "Delete characters backward, changing tabs into spaces. +The exact behavior depends on `backward-delete-char-untabify-method'. Delete ARG chars, and kill (save in kill ring) if KILLP is non-nil. Interactively, ARG is the prefix arg (default 1) and KILLP is t if a prefix arg was specified." (interactive "*p\nP") + (when (eq backward-delete-char-untabify-method 'untabify) (let ((count arg)) (save-excursion (while (and (> count 0) (not (bobp))) @@ -338,8 +348,14 @@ (insert-char ?\ col) (delete-char 1))) (forward-char -1) - (setq count (1- count))))) - (delete-backward-char arg killp)) + (setq count (1- count)))))) + (delete-backward-char + (if (eq backward-delete-char-untabify-method 'hungry) + (let ((wh (- (point) (save-excursion (skip-chars-backward " \t") + (point))))) + (+ arg (if (zerop wh) 0 (1- wh)))) + arg) + killp)) (defun zap-to-char (arg char) "Kill up to and including ARG'th occurrence of CHAR.