help-gnu-emacs
[Top][All Lists]
Advanced

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

Re: Emacs as a command line tool


From: Floyd Davidson
Subject: Re: Emacs as a command line tool
Date: Tue, 17 Feb 2004 04:35:09 -0900
User-agent: gnus 5.10.6/XEmacs 21.4.15/Linux 2.6.0

David Rasmussen <address@hidden> wrote:
>Is it possible to use the many emacs tools from the command line?
>
>Specifically, I would like to do untabify on several files. I am
>sure that it can be done easily from within emacs. But it would
>still be useful if I could just do something like
>
>emacs -e untabify *.cpp
>
>Is it possible?

Yes.

Note that both /col/ and /expand/ will also fix your tabs, and
probably will be much easier if that is the only thing you might
want to do.  But, to do multiple files, you need to learn a
little shell scripting.

Emacs, on the other hand, can basically do *anything* in batch
mode that it can do as an interactive program; hence, it can do
a great deal more than just change spaces to tabs.  The down
side is, instead of shell scripting, you need to learn a little
eLisp.

Here is a short elisp program that does untabify on a buffer
and then writes it back to disk:

  (untabify (point-min) (point-max))
  (save-buffer)

So if you save that to foo.el, you can untabify file bar.txt
with this command line (and note that the order of arguments
on the command line makes a difference, as the files must
be loaded before the -l option),

  emacs -q -batch bar.txt -l foo.el

However...  to do a number of files, here is a foo.el that will
untabify them all from one command:

 (if (< 1 (count-windows))
     (delete-other-windows (selected-window)))
 (catch 'tag
   (while t
     (untabify (point-min) (point-max))
     (if buffer-file-name  ; nil for *scratch* buffer
         (progn
           (write-file buffer-file-name)
           (kill-buffer (current-buffer)))
       (throw 'tag t))))

Emacs would be invoked with a list of file names,

  emacs -q -batch *.txt bar.* -l foo.el

which will untabify all *.txt and all bar.* files in the current
directory.

That will work with both GNU Emacs and with XEmacs, though there
is a significant incompatibility between them.  GNU Emacs has to
delete-other-windows, even though none are actually being
displayed.  XEmacs not only doesn't have to, but will throw a
segmentation fault and crash if told to!

--
Floyd L. Davidson           <http://web.newsguy.com/floyd_davidson>
Ukpeagvik (Barrow, Alaska)                         address@hidden


reply via email to

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