summaryrefslogtreecommitdiff
path: root/lisp/tabify.el
diff options
context:
space:
mode:
authorJoseph Arceneaux <jla@gnu.org>1989-10-31 16:00:07 +0000
committerJoseph Arceneaux <jla@gnu.org>1989-10-31 16:00:07 +0000
commita2535589a9b419920395f37ef658a3c88bf13ecb (patch)
tree0ad1d0f49cfeefe0012f44708b76adcd902806eb /lisp/tabify.el
parent0d20f9a04efa7cfbe205e4967b6797b89fc64fe7 (diff)
downloademacs-a2535589a9b419920395f37ef658a3c88bf13ecb.tar.gz
Initial revision
Diffstat (limited to 'lisp/tabify.el')
-rw-r--r--lisp/tabify.el51
1 files changed, 51 insertions, 0 deletions
diff --git a/lisp/tabify.el b/lisp/tabify.el
new file mode 100644
index 00000000000..2d660c82c61
--- /dev/null
+++ b/lisp/tabify.el
@@ -0,0 +1,51 @@
+;; Tab conversion commands for Emacs
+;; Copyright (C) 1985 Free Software Foundation, Inc.
+
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 1, or (at your option)
+;; any later version.
+
+;; GNU Emacs is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs; see the file COPYING. If not, write to
+;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+
+
+(defun untabify (start end)
+ "Convert all tabs in region to multiple spaces, preserving columns.
+The variable tab-width controls the action."
+ (interactive "r")
+ (save-excursion
+ (save-restriction
+ (narrow-to-region start end)
+ (goto-char start)
+ (while (search-forward "\t" nil t) ; faster than re-search
+ (let ((start (point))
+ (column (current-column))
+ (indent-tabs-mode nil))
+ (skip-chars-backward "\t")
+ (delete-region start (point))
+ (indent-to column))))))
+
+(defun tabify (start end)
+ "Convert multiple spaces in region to tabs when possible.
+A group of spaces is partially replaced by tabs
+when this can be done without changing the column they end at.
+The variable tab-width controls the action."
+ (interactive "r")
+ (save-excursion
+ (save-restriction
+ (narrow-to-region start end)
+ (goto-char start)
+ (while (re-search-forward "[ \t][ \t][ \t]*" nil t)
+ (let ((column (current-column))
+ (indent-tabs-mode t))
+ (delete-region (match-beginning 0) (point))
+ (indent-to column))))))