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: Mon, 21 Jun 2004 12:32:13 -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> Kevin Rodgers <address@hidden> writes:
>>J Krugman wrote:
>>>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")))
>>
>
> You lost me there!  I don't see how this could possibly do what I
> described.

You want buffer A's contents passed as standard input to the script in
buffer B, with the output going to buffer C.  So:

a. First select buffer buffer A, and pass its contents as standard input
   to a shell command whose output goes to buffer C.

b. The shell command comes from the contents of buffer B, which is
   passed via the -c option to the shell.

`C-h f shell-command-on-region' et al.

> Can you give me an example of how to use this?

Here's what I did:

1. Create buffer A with `C-x b A', and put some text in it:
one
two
three

2. Create buffer B with `C-x b B', and put a simple script in it:
cd ~; pwd
wc
cd /tmp; pwd

3. Create buffer C with `C-x b C'.  This step could be avoided by using
   (get-buffer-create "C") instead of (get-buffer "C").

4. Copy-and-paste the above form in the *scratch* buffer, and type `C-x
   C-e' or `C-j' (see the "Lisp Interaction" and "Lisp Eval" nodes in
   the Emacs manual).

5. Buffer C now contains:
/home/kevinr
       3       6      28
/tmp

--
Kevin Rodgers



reply via email to

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