From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Charles C. Berry" Subject: Re: Tangling flow control Date: Wed, 9 Nov 2016 09:54:03 -0800 Message-ID: References: Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII; format=flowed Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:36032) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1c4X4e-0000rn-LY for emacs-orgmode@gnu.org; Wed, 09 Nov 2016 12:54:16 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1c4X4Z-0005kG-Ps for emacs-orgmode@gnu.org; Wed, 09 Nov 2016 12:54:12 -0500 Received: from iport-acv3-out.ucsd.edu ([132.239.0.4]:50341) by eggs.gnu.org with esmtps (TLS1.0:RSA_ARCFOUR_SHA1:16) (Exim 4.71) (envelope-from ) id 1c4X4Z-0005iv-DA for emacs-orgmode@gnu.org; Wed, 09 Nov 2016 12:54:07 -0500 In-Reply-To: List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Sender: "Emacs-orgmode" To: Philip Hudson Cc: emacs orgmode-mailinglist On Tue, 8 Nov 2016, Philip Hudson wrote: [snip] > > How do you do "looping" flow control? > > For context, what I'm trying to write is a single Org file from which > I can tangle out a number of =~/.ssh/config= files, one for each of > several hosts on a LAN. Within this file I need to repeatedly place a > template =BEGIN_SRC ssh-config= block, each time with a few words and > numbers changed. Do you do this anywhere? If so, how have you > implemented it? > It sounds like what you want is a template for the src block and another src block that does substitutions in that template using a table of values inside a loop. Just to get you started, with this template: #+NAME: template #+BEGIN_SRC org ,#+BEGIN_SRC shell :tangle %to-file ls -lt %filename ,#+END_SRC #+END_SRC and this helper src-block #+NAME: get-body #+BEGIN_SRC emacs-lisp :var src-block-name="c-code" (save-excursion (org-babel-goto-named-src-block src-block-name) (cadr (org-babel-get-src-block-info))) #+END_SRC running #+header: :wrap src org :var tmpl=get-body("template") #+BEGIN_SRC emacs-lisp (org-fill-template tmpl '(("to-file" . "abc.sh")("filename" . "my-dir"))) #+END_SRC yields #+RESULTS: #+BEGIN_src org ,#+BEGIN_SRC shell :tangle abc.sh ls -lt my-dir ,#+END_SRC #+END_src To revise this for your application, you need to provide a table of the associated values for the "to-file" and "filename" keys in the alist, read that table using a :var header, loop thru the table reconstructing the alist each time creating src blocks, and send the output to an org tempfile. Then you tangle the tempfile. Alternatively, you simply write the script files directly without bothering to write to an org tempfile. HTH, Chuck