Mercurial > emacs
changeset 21074:926d7b2358dc
(backward-delete-char-untabify-method): New user option.
(backward-delete-char-untabify): Obey it.
This implements "hungry" delete.
author | Richard M. Stallman <rms@gnu.org> |
---|---|
date | Fri, 06 Mar 1998 05:51:51 +0000 |
parents | 82e7d581bad1 |
children | 0c95fb73e090 |
files | lisp/simple.el |
diffstat | 1 files changed, 18 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- 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.