From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Eric Schulte" Subject: Re: org-babel-read should have option NOT to interpret as elisp Date: Sun, 27 Feb 2011 08:51:37 -0700 Message-ID: <877hclbgxz.fsf@gmail.com> References: Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" Return-path: Received: from [140.186.70.92] (port=45751 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1Ptj8f-0001yo-Ku for emacs-orgmode@gnu.org; Sun, 27 Feb 2011 11:06:34 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Ptj8a-0002J5-DJ for emacs-orgmode@gnu.org; Sun, 27 Feb 2011 11:06:29 -0500 Received: from mail-pw0-f41.google.com ([209.85.160.41]:52753) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Ptj8Z-0002Ir-N9 for emacs-orgmode@gnu.org; Sun, 27 Feb 2011 11:06:24 -0500 Received: by pwi10 with SMTP id 10so909042pwi.0 for ; Sun, 27 Feb 2011 08:06:22 -0800 (PST) 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: Vladimir Alexiev Cc: emacs-orgmode@gnu.org --=-=-= Content-Type: text/plain Vladimir Alexiev writes: > I keep perl regexps in a table, and some of them start with "(". > I'd like these to be left alone (returned unmodified as a string). > > (info "(org)var") doesn't mention special processing of table cells, > but the doc of org-babel-read says: > > Convert the string value of CELL to a number if appropriate. > Otherwise if cell looks like lisp (meaning it starts with a > "(" or a "'") then read it as lisp, otherwise return it > unmodified as a string. > > So it seems to me that this special behavior of org-babel-read > should be documented in info, and controllable by a user option. > When passing values directly through header arguments the solution would be to wrap the string in double-quotes so that it is interpreted as a literal string, e.g., #+begin_src perl :var it="(+ 1 1)" :results output printf "passed in %s", $it #+end_src #+results: : passed in (+ 1 1) However I do agree that this would be onerous to have to wrap every cell of a table in double quotes... I'm attaching a patch which inhibits the lisp evaluation of values read from tables and lists. This should solve your issue above. I'm not directly applying this patch, because it would be a breaking change for anyone who is currently relying on the ability to fill a table or list with to-be-evaluated emacs-lisp statements. If anyone is in that situation please respond to this email in the next couple of days, otherwise I am leaning towards applying this patch to the main repository. Best -- Eric p.s. this patch can be applied with the "git am" command. --=-=-= Content-Type: text/x-diff Content-Disposition: attachment; filename=0001-ob-inhibit-lisp-evaluation-of-values-read-from-table.patch >From f57ff0b724f0420751dd90600553d988aec507f1 Mon Sep 17 00:00:00 2001 From: Eric Schulte Date: Sun, 27 Feb 2011 08:47:36 -0700 Subject: [PATCH] ob: inhibit lisp evaluation of values read from tables and lists * lisp/ob.el (org-babel-read-table): Inhibit lisp evaluation of values when reading from tables. (org-babel-read-list): Inhibit lisp evaluation of values when reading from lists. (org-babel-read): Add optional argument which can be used to inhibit lisp evaluation of value. --- lisp/ob.el | 23 ++++++++++++----------- 1 files changed, 12 insertions(+), 11 deletions(-) diff --git a/lisp/ob.el b/lisp/ob.el index 6e98263..b4ce3cd 100644 --- a/lisp/ob.el +++ b/lisp/ob.el @@ -1386,12 +1386,13 @@ following the source block." "Read the table at `point' into emacs-lisp." (mapcar (lambda (row) (if (and (symbolp row) (equal row 'hline)) row - (mapcar #'org-babel-read row))) + (mapcar (lambda (el) (org-babel-read el 'inhibit-lisp-eval)) row))) (org-table-to-lisp))) (defun org-babel-read-list () "Read the list at `point' into emacs-lisp." - (mapcar #'org-babel-read (mapcar #'cadr (cdr (org-list-parse-list))))) + (mapcar (lambda (el) (org-babel-read el 'inhibit-lisp-eval)) + (mapcar #'cadr (cdr (org-list-parse-list))))) (defvar org-link-types-re) (defun org-babel-read-link () @@ -1901,18 +1902,18 @@ block but are passed literally to the \"example-block\"." (apply #'string (reverse out))))) str)))) -(defun org-babel-read (cell) +(defun org-babel-read (cell &optional inhibit-lisp-eval) "Convert the string value of CELL to a number if appropriate. -Otherwise if cell looks like lisp (meaning it starts with a -\"(\" or a \"'\") then read it as lisp, otherwise return it -unmodified as a string. - -This is taken almost directly from `org-read-prop'." +Otherwise if cell looks like lisp (meaning it starts with a \"(\" +or a \"'\") then read it as lisp, otherwise return it unmodified +as a string. Optional argument NO-LISP-EVAL inhibits lisp +evaluation for situations in which is it not appropriate." (if (and (stringp cell) (not (equal cell ""))) (or (org-babel-number-p cell) - (if (or (equal "(" (substring cell 0 1)) - (equal "'" (substring cell 0 1)) - (equal "`" (substring cell 0 1))) + (if (and (not inhibit-lisp-eval) + (or (equal "(" (substring cell 0 1)) + (equal "'" (substring cell 0 1)) + (equal "`" (substring cell 0 1)))) (eval (read cell)) (progn (set-text-properties 0 (length cell) nil cell) cell))) cell)) -- 1.7.1 --=-=-= Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ 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 --=-=-=--