From mboxrd@z Thu Jan 1 00:00:00 1970 Path: main.gmane.org!not-for-mail From: Kevin Rodgers Newsgroups: gmane.emacs.help Subject: Re: Can Emacs pipe a buffer through another one? Date: Fri, 18 Jun 2004 09:24:32 -0600 Sender: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane.org@gnu.org Message-ID: <40D30930.6090309@yahoo.com> References: NNTP-Posting-Host: deer.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit X-Trace: sea.gmane.org 1088537102 22223 80.91.224.253 (29 Jun 2004 19:25:02 GMT) X-Complaints-To: usenet@sea.gmane.org NNTP-Posting-Date: Tue, 29 Jun 2004 19:25:02 +0000 (UTC) Original-X-From: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane.org@gnu.org Tue Jun 29 21:24:55 2004 Return-path: Original-Received: from lists.gnu.org ([199.232.76.165]) by deer.gmane.org with esmtp (Exim 3.35 #1 (Debian)) id 1BfO8P-0005lo-00 for ; Tue, 29 Jun 2004 21:19:13 +0200 Original-Received: from localhost ([127.0.0.1] helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.33) id 1BfOA5-0002Uf-9r for geh-help-gnu-emacs@m.gmane.org; Tue, 29 Jun 2004 15:20:57 -0400 Original-Path: shelby.stanford.edu!newsfeed.stanford.edu!newsmi-us.news.garr.it!newsmi-eu.news.garr.it!NewsITBone-GARR!fu-berlin.de!uni-berlin.de!not-for-mail Original-Newsgroups: gnu.emacs.help Original-Lines: 52 Original-X-Trace: news.uni-berlin.de iNvRK1GMVEY5rH36OEQ5QAfjq4WkDZ0AxIQuSHxd+QAb/Lw/I= User-Agent: Mozilla/5.0 (X11; U; SunOS i86pc; en-US; rv:0.9.4.1) Gecko/20020406 Netscape6/6.2.2 X-Accept-Language: en-us Original-Xref: shelby.stanford.edu gnu.emacs.help:123827 Original-To: help-gnu-emacs@gnu.org X-BeenThere: help-gnu-emacs@gnu.org X-Mailman-Version: 2.1.4 Precedence: list List-Id: Users list for the GNU Emacs text editor List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane.org@gnu.org Xref: main.gmane.org gmane.emacs.help:19214 X-Report-Spam: http://spam.gmane.org/gmane.emacs.help:19214 J Krugman wrote: > In Barry Margolin writes: >>In article , >>J Krugman 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