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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
b2e5081b9320 Update copyright years.
Glenn Morris <rgm@gnu.org>
parents: 74161
diff changeset
3 ;; Copyright (C) 1985, 1994, 2001, 2002, 2003, 2004,
79721
73661ddc7ac7 Add 2008 to copyright years.
Glenn Morris <rgm@gnu.org>
parents: 78236
diff changeset
4 ;; 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
841
2cdce064065f entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 807
diff changeset
5
775
1ca26ccad38e *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 658
diff changeset
6 ;; Maintainer: FSF
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
7
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
8 ;; This file is part of GNU Emacs.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
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
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
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
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
14
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
15 ;; GNU Emacs is distributed in the hope that it will be useful,
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
16 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
17 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
18 ;; GNU General Public License for more details.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
19
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
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
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
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
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
29
258
1e0bc00dca7a *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 36
diff changeset
30 ;;;###autoload
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
31 (defun untabify (start end)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
32 "Convert all tabs in region to multiple spaces, preserving columns.
1497
7117a3826501 Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 841
diff changeset
33 Called non-interactively, the region is specified by arguments
7117a3826501 Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 841
diff changeset
34 START and END, rather than by the position of point and mark.
7117a3826501 Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 841
diff changeset
35 The variable `tab-width' controls the spacing of tab stops."
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
36 (interactive "r")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
37 (save-excursion
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
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
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
40 (goto-char start)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
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
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
49 (indent-to column))))))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
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
1e0bc00dca7a *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 36
diff changeset
56 ;;;###autoload
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
57 (defun tabify (start end)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
58 "Convert multiple spaces in region to tabs when possible.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
59 A group of spaces is partially replaced by tabs
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
60 when this can be done without changing the column they end at.
1497
7117a3826501 Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 841
diff changeset
61 Called non-interactively, the region is specified by arguments
7117a3826501 Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 841
diff changeset
62 START and END, rather than by the position of point and mark.
7117a3826501 Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 841
diff changeset
63 The variable `tab-width' controls the spacing of tab stops."
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
64 (interactive "r")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
65 (save-excursion
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
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
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
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
619c0a9ddf86 Add a provide.
Richard M. Stallman <rms@gnu.org>
parents: 2467
diff changeset
90 (provide 'tabify)
619c0a9ddf86 Add a provide.
Richard M. Stallman <rms@gnu.org>
parents: 2467
diff changeset
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