From mboxrd@z Thu Jan 1 00:00:00 1970 From: Dan Davison Subject: Re: [BABEL] [PROPOSAL] Seemless editing of Babel Blocks Date: Sun, 05 Sep 2010 11:58:35 -0400 Message-ID: <87wrr0npw4.fsf@stats.ox.ac.uk> References: <4C459236.3@gmail.com> <87k4opu5fk.fsf@gmail.com> <81hbivx88y.fsf@gmail.com> <8139ueykvc.fsf_-_@gmail.com> <878w3j1zos.fsf@stats.ox.ac.uk> <81k4n13mww.fsf@gmail.com> <87r5h9czxf.fsf@gmail.com> <818w3gv7j7.fsf@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Return-path: Received: from [140.186.70.92] (port=43286 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1OsHcD-0005yU-34 for emacs-orgmode@gnu.org; Sun, 05 Sep 2010 11:58:46 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.69) (envelope-from ) id 1OsHcB-0000uL-Nw for emacs-orgmode@gnu.org; Sun, 05 Sep 2010 11:58:45 -0400 Received: from markov.stats.ox.ac.uk ([163.1.210.1]:62005) by eggs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1OsHcB-0000u4-FQ for emacs-orgmode@gnu.org; Sun, 05 Sep 2010 11:58:43 -0400 In-Reply-To: <818w3gv7j7.fsf@gmail.com> (Jambunathan K.'s message of "Sun, 05 Sep 2010 15:25:40 +0530") List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org To: Jambunathan K Cc: emacs-orgmode@gnu.org Jambunathan K writes: > > jambu> How about providing user-accessible tapping points within > jambu> 'org-babel-map-src-blocks' (or a variation thereof) that would > jambu> enable me have a custom command in my .emacs. > jambu> > jambu> For the sake of record, my suggestion is very closely related to > jambu> what is discussed here. > jambu> > jambu> http://eschulte.github.com/babel-dev/PROPOSED-tangle-entire-org-mode-file-in-comments.html > > Eric> I've just pushed up an implementation of the functionality > Eric> described at the link above, see [1] for examples and details. > Eric> > Eric> Is this sufficient to satisfy the need you were addressing? If > Eric> not how could it be improved? > > Eric> Footnotes: > Eric> [1] http://eschulte.github.com/babel-dev/DONE-tangle-entire-org-mode-file-in-comments.html > > I am making a request for an API from BABEL core which roughly parallels > org's org-map-entries. > > Using this API a user should be able to 'traverse' babel and non-babel > blocks within a given scope (region, buffer), examine the local state > (say a tag or a user-defined property on a subtree), provide a verdict > on it's inclusion (yes I want it, no skip it) or possibly return a > transformed custom content (as a list). > > 'org-babel-map-src-blocks' has the skeletal structure for this API. All > it needs is some minimal tinkering to take on a more user-pluggable > form. > The proposed API would make UseCase-1 and UseCase-2 possible. > > UseCase-1: > http://article.gmane.org/gmane.emacs.orgmode/28823 > > Section-6 provides an illustration. > Section-5 helps one visualize the essentials of the propsed API. > > a) org-to-org-src-view => potential consumer of the proposed API. > b) beg-org, end-org, beg-babel, end-babel => strategic 'points' of > user-interest. > c) body, body1 => Hooks for user Hi Jambunathan, I assume that beg-babel and end-babel are the start and end of the current code block. What exactly are beg-org and end-org here? > > UseCase-2: Tangling with custom pragmas. > http://article.gmane.org/gmane.emacs.orgmode/29805 > > Additional Note: Thinking out loud here (aka contrived, over-the-top > requirement). > > A user might want to override the in-buffer babel-control parameters > while tangling or execution. > > Think of this scenario, I would like to tangle but with comments and > line nos as a one-off (say for circulating to my colleagues). The > in-buffer 'static/default' settings suppresses comments. I couldn't be > bothered to edit the in-buffer settings just for this one-off case. Is > there a possible way I can achieve this? Many of the core org-babel functions accept an optional argument named `info'. This is a data structure which contains all the relevant settings: language, the body, the header args, etc. If this argument is provided, then no attempt is made to obtain the settings from the buffer. So the way to do this is to construct your own info data structure and then pass it to the org-babel function you are using (e.g. org-babel-execute-src-block). Typically, the info structure is created from the buffer using org-babel-get-src-block-info. See the docstring of that function for a definition of the data structure. As an example of on-the-fly construction of an info data structure (and thus a "virtual" code block that doesn't exist in any buffer), see the way Eric implemented #+lob calls in `org-babel-lob-execute' (it's quite clever). Also note in those functions that there is a useful function `org-babel-merge-params': In org-babel code, "params" generally means an association list of header argument (argument, value) pairs. `org-babel-merge-params' allows you to construct the params alist from a variety of different sources (the buffer settings, and your own settings): later arguments have priority over earlier ones. Grepping for org-babel-merge-params in the code shows some examples of using it to construct the "params" part of the "info" structure, e.g.: ob-ref.el:162: (setq params (org-babel-merge-params params args '((:results . "silent")))) ob-table.el:119: (org-babel-merge-params '((:results . "silent")) params)))) Based on a very quick look, it seems that tangle is gloing to be slightly different from execute. For tangle, you might want to use a let-binding to bind a temporary value of org-babel-default-header-args, constructed using org-babel-merge-params as on line 146 of ob-tangle.el. Dan > > Jambunathan K. > > > > _______________________________________________ > Emacs-orgmode mailing list > Please use `Reply All' to send replies to the list. > Emacs-orgmode@gnu.org > http://lists.gnu.org/mailman/listinfo/emacs-orgmode