Mercurial > emacs
annotate lisp/tabify.el @ 99613:785924da433d
(Splitting Windows, Deleting Windows)
(Selecting Windows, Cyclic Window Ordering)
(Buffers and Windows, Displaying Buffers, Choosing Window)
(Dedicated Windows, Window Point, Window Start and End)
(Textual Scrolling, Vertical Scrolling, Horizontal Scrolling)
(Size of Window, Resizing Windows, Window Configurations)
(Window Parameters): Avoid @var at beginning of sentences and
reword accordingly.
author | Martin Rudalics <rudalics@gmx.at> |
---|---|
date | Sun, 16 Nov 2008 10:15:30 +0000 |
parents | ee5932bf781d |
children | a9dc0e7c3f2b |
rev | line source |
---|---|
658
7cbd4fcd8b0f
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
258
diff
changeset
|
1 ;;; tabify.el --- tab conversion commands for Emacs |
7cbd4fcd8b0f
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
258
diff
changeset
|
2 |
74442 | 3 ;; Copyright (C) 1985, 1994, 2001, 2002, 2003, 2004, |
79721 | 4 ;; 2005, 2006, 2007, 2008 Free Software Foundation, Inc. |
841 | 5 |
775
1ca26ccad38e
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
658
diff
changeset
|
6 ;; Maintainer: FSF |
36 | 7 |
8 ;; This file is part of GNU Emacs. | |
9 | |
94678
ee5932bf781d
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
79721
diff
changeset
|
10 ;; GNU Emacs is free software: you can redistribute it and/or modify |
36 | 11 ;; it under the terms of the GNU General Public License as published by |
94678
ee5932bf781d
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
79721
diff
changeset
|
12 ;; the Free Software Foundation, either version 3 of the License, or |
ee5932bf781d
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
79721
diff
changeset
|
13 ;; (at your option) any later version. |
36 | 14 |
15 ;; GNU Emacs is distributed in the hope that it will be useful, | |
16 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of | |
17 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
18 ;; GNU General Public License for more details. | |
19 | |
20 ;; You should have received a copy of the GNU General Public License | |
94678
ee5932bf781d
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
79721
diff
changeset
|
21 ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. |
36 | 22 |
2315
9e7ec92a4fdf
Added or corrected Commentary headers
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
1497
diff
changeset
|
23 ;;; Commentary: |
9e7ec92a4fdf
Added or corrected Commentary headers
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
1497
diff
changeset
|
24 |
9e7ec92a4fdf
Added or corrected Commentary headers
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
1497
diff
changeset
|
25 ;; Commands to optimize spaces to tabs or expand tabs to spaces in a region |
9e7ec92a4fdf
Added or corrected Commentary headers
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
1497
diff
changeset
|
26 ;; (`tabify' and `untabify'). The variable tab-width does the obvious. |
9e7ec92a4fdf
Added or corrected Commentary headers
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
1497
diff
changeset
|
27 |
775
1ca26ccad38e
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
658
diff
changeset
|
28 ;;; Code: |
36 | 29 |
258 | 30 ;;;###autoload |
36 | 31 (defun untabify (start end) |
32 "Convert all tabs in region to multiple spaces, preserving columns. | |
1497 | 33 Called non-interactively, the region is specified by arguments |
34 START and END, rather than by the position of point and mark. | |
35 The variable `tab-width' controls the spacing of tab stops." | |
36 | 36 (interactive "r") |
37 (save-excursion | |
38 (save-restriction | |
2467
a3bdf5ac2e9d
(untabify): Don't really change where restriction starts.
Richard M. Stallman <rms@gnu.org>
parents:
2315
diff
changeset
|
39 (narrow-to-region (point-min) end) |
36 | 40 (goto-char start) |
41 (while (search-forward "\t" nil t) ; faster than re-search | |
18344
dca9b4a8155e
(untabify): Handle consecutive tabs all at once.
Karl Heuer <kwzh@gnu.org>
parents:
14169
diff
changeset
|
42 (forward-char -1) |
5715
a7f72ce7bac4
(tabify): Don't delete back before initial START.
Richard M. Stallman <rms@gnu.org>
parents:
5165
diff
changeset
|
43 (let ((tab-beg (point)) |
18344
dca9b4a8155e
(untabify): Handle consecutive tabs all at once.
Karl Heuer <kwzh@gnu.org>
parents:
14169
diff
changeset
|
44 (indent-tabs-mode nil) |
dca9b4a8155e
(untabify): Handle consecutive tabs all at once.
Karl Heuer <kwzh@gnu.org>
parents:
14169
diff
changeset
|
45 column) |
dca9b4a8155e
(untabify): Handle consecutive tabs all at once.
Karl Heuer <kwzh@gnu.org>
parents:
14169
diff
changeset
|
46 (skip-chars-forward "\t") |
dca9b4a8155e
(untabify): Handle consecutive tabs all at once.
Karl Heuer <kwzh@gnu.org>
parents:
14169
diff
changeset
|
47 (setq column (current-column)) |
5715
a7f72ce7bac4
(tabify): Don't delete back before initial START.
Richard M. Stallman <rms@gnu.org>
parents:
5165
diff
changeset
|
48 (delete-region tab-beg (point)) |
36 | 49 (indent-to column)))))) |
50 | |
72126
9c3a4ec55477
(tabify-regexp): Use more specific regexps.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68651
diff
changeset
|
51 (defvar tabify-regexp " [ \t]+" |
18344
dca9b4a8155e
(untabify): Handle consecutive tabs all at once.
Karl Heuer <kwzh@gnu.org>
parents:
14169
diff
changeset
|
52 "Regexp matching whitespace that tabify should consider. |
74161
ccff63c8ae4c
(tabify-regexp): Doc fix.
Juanma Barranquero <lekktu@gmail.com>
parents:
72126
diff
changeset
|
53 Usually this will be \" [ \\t]+\" to match a space followed by whitespace. |
72126
9c3a4ec55477
(tabify-regexp): Use more specific regexps.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68651
diff
changeset
|
54 \"^\\t* [ \\t]+\" is also useful, for tabifying only initial whitespace.") |
18344
dca9b4a8155e
(untabify): Handle consecutive tabs all at once.
Karl Heuer <kwzh@gnu.org>
parents:
14169
diff
changeset
|
55 |
258 | 56 ;;;###autoload |
36 | 57 (defun tabify (start end) |
58 "Convert multiple spaces in region to tabs when possible. | |
59 A group of spaces is partially replaced by tabs | |
60 when this can be done without changing the column they end at. | |
1497 | 61 Called non-interactively, the region is specified by arguments |
62 START and END, rather than by the position of point and mark. | |
63 The variable `tab-width' controls the spacing of tab stops." | |
36 | 64 (interactive "r") |
65 (save-excursion | |
66 (save-restriction | |
11421
c53961dfba50
(tabify): Include entire first line in narrowing.
Richard M. Stallman <rms@gnu.org>
parents:
7304
diff
changeset
|
67 ;; Include the beginning of the line in the narrowing |
c53961dfba50
(tabify): Include entire first line in narrowing.
Richard M. Stallman <rms@gnu.org>
parents:
7304
diff
changeset
|
68 ;; since otherwise it will throw off current-column. |
c53961dfba50
(tabify): Include entire first line in narrowing.
Richard M. Stallman <rms@gnu.org>
parents:
7304
diff
changeset
|
69 (goto-char start) |
c53961dfba50
(tabify): Include entire first line in narrowing.
Richard M. Stallman <rms@gnu.org>
parents:
7304
diff
changeset
|
70 (beginning-of-line) |
c53961dfba50
(tabify): Include entire first line in narrowing.
Richard M. Stallman <rms@gnu.org>
parents:
7304
diff
changeset
|
71 (narrow-to-region (point) end) |
36 | 72 (goto-char start) |
72126
9c3a4ec55477
(tabify-regexp): Use more specific regexps.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68651
diff
changeset
|
73 (let ((indent-tabs-mode t)) |
9c3a4ec55477
(tabify-regexp): Use more specific regexps.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68651
diff
changeset
|
74 (while (re-search-forward tabify-regexp nil t) |
9c3a4ec55477
(tabify-regexp): Use more specific regexps.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68651
diff
changeset
|
75 ;; The region between (match-beginning 0) and (match-end 0) is just |
9c3a4ec55477
(tabify-regexp): Use more specific regexps.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68651
diff
changeset
|
76 ;; spacing which we want to adjust to use TABs where possible. |
9c3a4ec55477
(tabify-regexp): Use more specific regexps.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68651
diff
changeset
|
77 (let ((end-col (current-column)) |
9c3a4ec55477
(tabify-regexp): Use more specific regexps.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68651
diff
changeset
|
78 (beg-col (save-excursion (goto-char (match-beginning 0)) |
9c3a4ec55477
(tabify-regexp): Use more specific regexps.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68651
diff
changeset
|
79 (skip-chars-forward "\t") |
9c3a4ec55477
(tabify-regexp): Use more specific regexps.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68651
diff
changeset
|
80 (current-column)))) |
9c3a4ec55477
(tabify-regexp): Use more specific regexps.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68651
diff
changeset
|
81 (if (= (/ end-col tab-width) (/ beg-col tab-width)) |
9c3a4ec55477
(tabify-regexp): Use more specific regexps.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68651
diff
changeset
|
82 ;; The spacing (after some leading TABs which we wouldn't |
9c3a4ec55477
(tabify-regexp): Use more specific regexps.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68651
diff
changeset
|
83 ;; want to touch anyway) does not straddle a TAB boundary, |
9c3a4ec55477
(tabify-regexp): Use more specific regexps.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68651
diff
changeset
|
84 ;; so it neither contains a TAB, nor will we be able to use |
9c3a4ec55477
(tabify-regexp): Use more specific regexps.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68651
diff
changeset
|
85 ;; a TAB here anyway: there's nothing to do. |
9c3a4ec55477
(tabify-regexp): Use more specific regexps.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68651
diff
changeset
|
86 nil |
9c3a4ec55477
(tabify-regexp): Use more specific regexps.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68651
diff
changeset
|
87 (delete-region (match-beginning 0) (point)) |
9c3a4ec55477
(tabify-regexp): Use more specific regexps.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68651
diff
changeset
|
88 (indent-to end-col)))))))) |
658
7cbd4fcd8b0f
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
258
diff
changeset
|
89 |
5165 | 90 (provide 'tabify) |
91 | |
72126
9c3a4ec55477
(tabify-regexp): Use more specific regexps.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68651
diff
changeset
|
92 ;; arch-tag: c83893b1-e0cc-4e57-8a09-73fd03466416 |
658
7cbd4fcd8b0f
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
258
diff
changeset
|
93 ;;; tabify.el ends here |