comparison lisp/tabify.el @ 18344:dca9b4a8155e

(untabify): Handle consecutive tabs all at once. (tabify-regexp): New var. (tabify): Use it.
author Karl Heuer <kwzh@gnu.org>
date Sat, 21 Jun 1997 00:35:11 +0000
parents 83f275dcd93a
children 695cf19ef79e d7ddb3e565de
comparison
equal deleted inserted replaced
18343:b5cee57a4a0f 18344:dca9b4a8155e
38 (save-excursion 38 (save-excursion
39 (save-restriction 39 (save-restriction
40 (narrow-to-region (point-min) end) 40 (narrow-to-region (point-min) end)
41 (goto-char start) 41 (goto-char start)
42 (while (search-forward "\t" nil t) ; faster than re-search 42 (while (search-forward "\t" nil t) ; faster than re-search
43 (forward-char -1)
43 (let ((tab-beg (point)) 44 (let ((tab-beg (point))
44 (column (current-column)) 45 (indent-tabs-mode nil)
45 (indent-tabs-mode nil)) 46 column)
46 (skip-chars-backward "\t" start) 47 (skip-chars-forward "\t")
48 (setq column (current-column))
47 (delete-region tab-beg (point)) 49 (delete-region tab-beg (point))
48 (indent-to column)))))) 50 (indent-to column))))))
51
52 (defvar tabify-regexp "[ \t][ \t]+"
53 "Regexp matching whitespace that tabify should consider.
54 Usually this will be \"[ \\t][ \\t]+\" to match two or more spaces or tabs.
55 \"^[ \\t]+\" is also useful, for tabifying only initial whitespace.")
49 56
50 ;;;###autoload 57 ;;;###autoload
51 (defun tabify (start end) 58 (defun tabify (start end)
52 "Convert multiple spaces in region to tabs when possible. 59 "Convert multiple spaces in region to tabs when possible.
53 A group of spaces is partially replaced by tabs 60 A group of spaces is partially replaced by tabs
62 ;; since otherwise it will throw off current-column. 69 ;; since otherwise it will throw off current-column.
63 (goto-char start) 70 (goto-char start)
64 (beginning-of-line) 71 (beginning-of-line)
65 (narrow-to-region (point) end) 72 (narrow-to-region (point) end)
66 (goto-char start) 73 (goto-char start)
67 (while (re-search-forward "[ \t][ \t][ \t]*" nil t) 74 (while (re-search-forward tabify-regexp nil t)
68 (let ((column (current-column)) 75 (let ((column (current-column))
69 (indent-tabs-mode t)) 76 (indent-tabs-mode t))
70 (delete-region (match-beginning 0) (point)) 77 (delete-region (match-beginning 0) (point))
71 (indent-to column)))))) 78 (indent-to column))))))
72 79