Mercurial > emacs
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 |