[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 <barmar-6C3FE7.17253017062004@comcast.dca.giganews.com> Barry Margolin
<barmar@alum.mit.edu> writes:
>>In article <cat1ar$c18$1@reader2.panix.com>,
>>J Krugman <jkrugman345@yahbitoo.com> 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
Re: Can Emacs pipe a buffer through another one?, Marco Parrone, 2004/06/29