From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Stefan Monnier Newsgroups: gmane.emacs.help Subject: Re: Maybe we can improve this function call-process-to-string? Date: Thu, 08 Apr 2021 13:49:42 -0400 Message-ID: References: Mime-Version: 1.0 Content-Type: text/plain Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="26559"; mail-complaints-to="usenet@ciao.gmane.io" User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) To: help-gnu-emacs@gnu.org Cancel-Lock: sha1:cCNKHvqxZymMkkF2UqXt+6an8pU= Original-X-From: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane-mx.org@gnu.org Thu Apr 08 19:50:12 2021 Return-path: Envelope-to: geh-help-gnu-emacs@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1lUYnE-0006pa-CZ for geh-help-gnu-emacs@m.gmane-mx.org; Thu, 08 Apr 2021 19:50:12 +0200 Original-Received: from localhost ([::1]:33852 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lUYnD-0004ZN-EE for geh-help-gnu-emacs@m.gmane-mx.org; Thu, 08 Apr 2021 13:50:11 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:39566) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lUYmr-0004ZC-Fh for help-gnu-emacs@gnu.org; Thu, 08 Apr 2021 13:49:49 -0400 Original-Received: from ciao.gmane.io ([116.202.254.214]:45782) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lUYmq-0003kx-3c for help-gnu-emacs@gnu.org; Thu, 08 Apr 2021 13:49:49 -0400 Original-Received: from list by ciao.gmane.io with local (Exim 4.92) (envelope-from ) id 1lUYmo-0006H0-G9 for help-gnu-emacs@gnu.org; Thu, 08 Apr 2021 19:49:46 +0200 X-Injected-Via-Gmane: http://gmane.org/ Received-SPF: pass client-ip=116.202.254.214; envelope-from=geh-help-gnu-emacs@m.gmane-mx.org; helo=ciao.gmane.io X-Spam_score_int: -15 X-Spam_score: -1.6 X-Spam_bar: - X-Spam_report: (-1.6 / 5.0 requ) BAYES_00=-1.9, HEADER_FROM_DIFFERENT_DOMAINS=0.25, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: help-gnu-emacs@gnu.org X-Mailman-Version: 2.1.23 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-mx.org@gnu.org Original-Sender: "help-gnu-emacs" Xref: news.gmane.io gmane.emacs.help:128905 Archived-At: > (defun call-process-to-string (program &optional infile display &rest args) > (let* ((buffer-name "Output") > (buffer (generate-new-buffer buffer-name)) > (status (apply #'call-process program infile buffer display args)) > (current-buffer (current-buffer)) > (output (if status > (progn > (switch-to-buffer buffer) > (buffer-string)) > ""))) > (switch-to-buffer current-buffer) > output)) The docstring of `switch-to-buffer` is fairly long, but the first 5 lines are recommended reading: Display buffer BUFFER-OR-NAME in the selected window. WARNING: This is NOT the way to work on another buffer temporarily within a Lisp program! Use `set-buffer' instead. That avoids messing with the window-buffer correspondences. Also the above code forgot to kill the buffer you created. I recommend `with-temp-buffer` here instead: (with-temp-buffer (apply #'call-process program infile t display args) (buffer-string)) -- Stefan