From cc2b2b6cc88717e761f6abb05b5b754412ea47f8 Mon Sep 17 00:00:00 2001 From: "Richard M. Stallman" Date: Fri, 6 Mar 1998 05:51:51 +0000 Subject: [PATCH] (backward-delete-char-untabify-method): New user option. (backward-delete-char-untabify): Obey it. This implements "hungry" delete. --- lisp/simple.el | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/lisp/simple.el b/lisp/simple.el index 91527bd4e15..27f977a5fb4 100644 --- a/lisp/simple.el +++ b/lisp/simple.el @@ -322,12 +322,22 @@ column specified by the function `current-left-margin'." (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 @@ and KILLP is t if a prefix arg was specified." (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. -- 2.39.2