emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] Changes to emacs/lisp/tabify.el [lexbind]


From: Miles Bader
Subject: [Emacs-diffs] Changes to emacs/lisp/tabify.el [lexbind]
Date: Tue, 14 Oct 2003 19:52:24 -0400

Index: emacs/lisp/tabify.el
diff -c /dev/null emacs/lisp/tabify.el:1.15.18.1
*** /dev/null   Tue Oct 14 19:52:23 2003
--- emacs/lisp/tabify.el        Tue Oct 14 19:51:25 2003
***************
*** 0 ****
--- 1,83 ----
+ ;;; tabify.el --- tab conversion commands for Emacs
+ 
+ ;; Copyright (C) 1985, 1994 Free Software Foundation, Inc.
+ 
+ ;; Maintainer: FSF
+ 
+ ;; 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 2, 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, Inc., 59 Temple Place - Suite 330,
+ ;; Boston, MA 02111-1307, USA.
+ 
+ ;;; Commentary:
+ 
+ ;; Commands to optimize spaces to tabs or expand tabs to spaces in a region
+ ;; (`tabify' and `untabify').  The variable tab-width does the obvious.
+ 
+ ;;; Code:
+ 
+ ;;;###autoload
+ (defun untabify (start end)
+   "Convert all tabs in region to multiple spaces, preserving columns.
+ Called non-interactively, the region is specified by arguments
+ START and END, rather than by the position of point and mark.
+ The variable `tab-width' controls the spacing of tab stops."
+   (interactive "r")
+   (save-excursion
+     (save-restriction
+       (narrow-to-region (point-min) end)
+       (goto-char start)
+       (while (search-forward "\t" nil t)      ; faster than re-search
+       (forward-char -1)
+       (let ((tab-beg (point))
+             (indent-tabs-mode nil)
+             column)
+         (skip-chars-forward "\t")
+         (setq column (current-column))
+         (delete-region tab-beg (point))
+         (indent-to column))))))
+ 
+ (defvar tabify-regexp "[ \t][ \t]+"
+   "Regexp matching whitespace that tabify should consider.
+ Usually this will be \"[ \\t][ \\t]+\" to match two or more spaces or tabs.
+ \"^[ \\t]+\" is also useful, for tabifying only initial whitespace.")
+ 
+ ;;;###autoload
+ (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.
+ Called non-interactively, the region is specified by arguments
+ START and END, rather than by the position of point and mark.
+ The variable `tab-width' controls the spacing of tab stops."
+   (interactive "r")
+   (save-excursion
+     (save-restriction
+       ;; Include the beginning of the line in the narrowing
+       ;; since otherwise it will throw off current-column.
+       (goto-char start)
+       (beginning-of-line)
+       (narrow-to-region (point) end)
+       (goto-char start)
+       (while (re-search-forward tabify-regexp nil t)
+       (let ((column (current-column))
+             (indent-tabs-mode t))
+         (delete-region (match-beginning 0) (point))
+         (indent-to column))))))
+ 
+ (provide 'tabify)
+ 
+ ;;; arch-tag: c83893b1-e0cc-4e57-8a09-73fd03466416
+ ;;; tabify.el ends here




reply via email to

[Prev in Thread] Current Thread [Next in Thread]