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

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

Re: Can Emacs pipe a buffer through another one?


From: Kevin Rodgers
Subject: Re: Can Emacs pipe a buffer through another one?
Date: Fri, 18 Jun 2004 09:24:32 -0600
User-agent: Mozilla/5.0 (X11; U; SunOS i86pc; en-US; rv:0.9.4.1) Gecko/20020406 Netscape6/6.2.2

J Krugman wrote:
> In <address@hidden> Barry Margolin <address@hidden> writes:
>>In article <address@hidden>,
>>J Krugman <address@hidden> wrote:
>
>>>Suppose I have two buffers A and B, not necessarily associated with
>>>a file on disk, and furthermore, suppose that B's content is a
>>>script (bash, perl, python, etc.) that prints to STDOUT a transform
>>>of whatever it reads from STDIN.  (Assume that the first line of
>>>B is a suitable shebang line.)  It would be really cool if, without
>>>leaving Emacs, and without creating any new files on disk, one
>>>could feed the contents of buffer A as STDIN to the script in buffer
>>>B, and take the resulting output and insert them in some other
>>>buffer C (possibly replacing some or all of C's contents).  (Of
>>>course, there should be no reason why these buffers should all be
>>>different from each other.  For instance, B could be a script that
>>>rewrites itself.)
>>>
>>>Even cooler would be if instead of using whole buffers for program
>>>and data as described above, one could use regions.
>>>
>>>Can one already do any of this in Emacs?  If not, can someone give
>>>me a clue about how to write such a thing in Emacs Lisp?
>
>>I can't think of any way this could be done.  If the script isn't put in
>>a file, then the way to feed the script to the interpreter would be
>>through its stdin.  But if the interpreter is reading the script on
>>stdin, then where will it read the data from?
>
> Perl at least will let one give it code as the argument to the -e
> flag, which leaves STDIN available for input.  For bash apparently
> something similar holds for the -c flag (but I have no experience
> with it).  I imagine other scripting languages have similar
> mechanisms.  Anyway, as long as the interpreter reads the entire
> script before it executes it (and I don't know of any interpreted
> language for which this isn't the case), then STDIN could serve
> both for feeding the script to the interpreter, and then feeding
> input to the running script[1].  The two tasks do not overlap in time,
> so it should be possible to accommodate both, no?

Cool!

(with-current-buffer (get-buffer "A")
  (shell-command-on-region (point-min)
                           (point-max)
                           (with-current-buffer (get-buffer "B")
                             (buffer-string))
                           (get-buffer "C")))

--
Kevin Rodgers



reply via email to

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