From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Eric Schulte" Subject: Re: [Update Config] Babel changes -- security updates and final integration push Date: Mon, 05 Jul 2010 18:09:55 -0700 Message-ID: <87r5jhl8kc.fsf@gmail.com> References: <87d3v1srun.fsf@gmail.com> <2E30CC30-7897-451A-AB4D-4F2CBED2DCBC@tsdye.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Return-path: Received: from [140.186.70.92] (port=59277 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1OVwfh-0003s9-Vq for emacs-orgmode@gnu.org; Mon, 05 Jul 2010 21:10:03 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.69) (envelope-from ) id 1OVwff-00059B-TP for emacs-orgmode@gnu.org; Mon, 05 Jul 2010 21:10:01 -0400 Received: from mail-pv0-f169.google.com ([74.125.83.169]:64054) by eggs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1OVwff-000594-G6 for emacs-orgmode@gnu.org; Mon, 05 Jul 2010 21:09:59 -0400 Received: by pvc30 with SMTP id 30so45382pvc.0 for ; Mon, 05 Jul 2010 18:09:58 -0700 (PDT) In-Reply-To: <2E30CC30-7897-451A-AB4D-4F2CBED2DCBC@tsdye.com> (Thomas S. Dye's message of "Mon, 5 Jul 2010 14:59:11 -1000") 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: "Thomas S. Dye" Cc: Org Mode Hi Tom, Thanks for finding this error, the problem is that org-table is not being required before the source-code block is run. As a temporary fix you can put (require 'org-table) somewhere in your configuration. As a long term solution I would want to talk to Carsten about how best to ensure that org-table is required when org-babel has been required as I believe it may require some change in the org require tree. Carsten, do you have any suggestion? I've tried a couple of approaches but most result in a recursive require error. Thanks -- Eric "Thomas S. Dye" writes: > Hi Eric, > > Thanks for all your work integrating Babel into Org-mode. > > I've pulled the latest Org-mode and changed my initialization > according to your message. I also pulled the latest starter-kit, so I > think I have all the latest code. > > When I try to evaluate this code block I get an error that orgtbl-to- > orgtbl is void. > > #+begin_src emacs-lisp > (list 1 (+ 2 3)) > #+end_src > > Here is a backtrace: > > Debugger entered--Lisp error: (void-function orgtbl-to-orgtbl) > (orgtbl-to-orgtbl (if (or ... ...) result (list result)) (quote > (:fmt ...))) > (concat (orgtbl-to-orgtbl (if ... result ...) (quote ...)) "\n") > (insert (concat (orgtbl-to-orgtbl ... ...) "\n")) > (cond ((not ...) (insert ...) (goto-char beg) (when ... ...)) > ((member "file" result-params) (insert result)) ((member "html" > result- > params) (insert ...)) ((member "latex" result-params) (insert ...)) > ((member "code" result-params) (insert ...)) ((or ... ...) (save- > excursion ...) (if ... ...)) (t (org-babel-examplize-region > ... ... results-switches))) > (let ((existing-result ...) (results-switches ...) beg end) (when > existing-result (goto-char existing-result) (save-excursion ... ...) > (forward-line 1) (setq beg ...) (cond ... ... ...)) (setq results- > switches (if results-switches ... "")) (cond (... ... ... ...) > (... ...) (... ...) (... ...) (... ...) (... ... ...) (t ...)) (setq > end (if ... ... ...)) (when (and indent ... ...) (indent-rigidly beg > end indent))) > (save-excursion (let (... ... beg end) (when existing- > result ... ... ... ... ...) (setq results-switches ...) (cond > ... ... ... ... ... ... ...) (setq end ...) (when ... ...))) > (if (and result-params (member "silent" result-params)) (progn > (message ...) result) (when (and ... ...) (setq result ...)) (save- > excursion (let ... ... ... ... ... ...)) (message "finished")) > (if (= (length result) 0) (if (member "value" result-params) > (message "No result returned by source block") (message "Source block > produced no output")) (if (and result-params ...) (progn ... result) > (when ... ...) (save-excursion ...) (message "finished"))) > org-babel-insert-result((1 5) ("replace") ("emacs-lisp" "(list 1 (+ > 2 3))\n" ((:cache . "no") (:colnames . "no") (:comments . "") > (:exports . "code") (:hlines . "yes") (:noweb . "yes") (:results . > "replace") (:session . "none") (:shebang . "") (:tangle . "")) "" nil > nil 0) nil 0 "emacs-lisp") > (if (and (not arg) new-hash (equal new-hash old-hash)) (save- > excursion (goto-char ...) (end-of-line 1) (forward-char 1) (setq > result ...) (message ...) result) (setq result (funcall cmd body > params)) (if (eq result-type ...) (setq result ...)) > (org-babel-insert- > result result result-params info new-hash indent lang) (run-hooks > (quote org-babel-after-execute-hook)) result) > (progn (fset (quote call-process-region) (function* ...)) (unless > (fboundp cmd) (error "No org-babel-execute function for %s!" lang)) > (if (and ... new-hash ...) (save-excursion ... ... ... ... ... result) > (setq result ...) (if ... ...) (org-babel-insert-result result result- > params info new-hash indent lang) (run-hooks ...) result)) > (unwind-protect (progn (fset ... ...) (unless ... ...) (if ... ... ... ... ... ... result)) (if --cl-letf-bound-- (fset ... -- > cl-letf-save--) (fmakunbound ...))) > (let* ((--cl-letf-bound-- ...) (--cl-letf-save-- ...)) (unwind- > protect (progn ... ... ...) (if --cl-letf-bound-- ... ...))) > (letf ((... ...)) (unless (fboundp cmd) (error "No org-babel- > execute function for %s!" lang)) (if (and ... new-hash ...) (save- > excursion ... ... ... ... ... result) (setq result ...) (if ... ...) > (org-babel-insert-result result result-params info new-hash indent > lang) (run-hooks ...) result)) > (letf* ((... ...)) (unless (fboundp cmd) (error "No org-babel- > execute function for %s!" lang)) (if (and ... new-hash ...) (save- > excursion ... ... ... ... ... result) (setq result ...) (if ... ...) > (org-babel-insert-result result result-params info new-hash indent > lang) (run-hooks ...) result)) > (flet ((call-process-region ... ...)) (unless (fboundp cmd) (error > "No org-babel-execute function for %s!" lang)) (if (and ... new- > hash ...) (save-excursion ... ... ... ... ... result) (setq result > ...) (if ... ...) (org-babel-insert-result result result-params info > new-hash indent lang) (run-hooks ...) result)) > (unwind-protect (flet (...) (unless ... ...) (if > ... ... ... ... ... ... result)) (setq call-process-region (quote > org-babel-call-process-region-original))) > (let* ((info ...) (evaluation-confirmed ...) (lang ...) (params ...) > (new-hash ...) (old-hash ...) (body ...) (result- > params ...) (result-type ...) (cmd ...) (dir ...) (default- > directory ...) (org-babel-call-process-region-original ...) (indent > ...) result) (unwind-protect (flet ... ... ...) (setq call- > process-region ...))) > org-babel-execute-src-block(nil ("emacs-lisp" "(list 1 (+ 2 3)) > \n" ((:cache . "no") (:colnames . "no") (:comments . "") (:exports > . "code") (:hlines . "yes") (:noweb . "yes") (:results . "replace") > (:session . "none") (:shebang . "") (:tangle . "")) "" nil nil 0)) > (progn (org-babel-execute-src-block current-prefix-arg info) t) > (if info (progn (org-babel-execute-src-block current-prefix-arg > info) t) nil) > (let ((info ...)) (if info (progn ... t) nil)) > (if (not org-babel-no-eval-on-ctrl-c-ctrl-c) (let (...) (if info > ... nil)) nil) > org-babel-execute-src-block-maybe() > run-hook-with-args-until-success(org-babel-execute-src-block-maybe) > (cond ((or ... org-occur-highlights org-latex-fragment-image- > overlays) (and ... ...) (org-remove-occur-highlights) (org-remove- > latex-fragment-image-overlays) (message "Temporary highlights/overlays > removed from current buffer")) ((and ... ...) (funcall org-finish- > function)) ((run-hook-with-args-until-success ...)) ((or ... ...) > (call-interactively ...)) ((org-on-target-p) (call-interactively ...)) > ((and ... ...) (call-interactively ...)) ((org-on-heading-p) (call- > interactively ...)) ((org-at-table\.el-p) (message "Use C-c ' to edit > table.el tables")) ((org-at-table-p) (org-table-maybe-eval-formula) > (if arg ... ...) (call-interactively ...)) ((or ... ...) (call- > interactively ...)) ((org-at-item-checkbox-p) (call- > interactively ...)) ((org-at-item-p) (if arg ... ...)) ((save- > excursion ... ...) (beginning-of-line 1) (save-excursion ...)) ((save- > excursion ... ...) (cond ... ...)) ((org-clock-update-time-maybe)) (t > (error "C-c C-c can do nothing useful at this location"))) > (let ((org-enable-table-editor t)) (cond (... ... ... ... ...) > (... ...) (...) (... ...) (... ...) (... ...) (... ...) (... ...) > (... ... ... ...) (... ...) (... ...) (... ...) (... ... ...) > (... ...) (...) (t ...))) > org-ctrl-c-ctrl-c(nil) > call-interactively(org-ctrl-c-ctrl-c nil nil) > > > All the best, > Tom > On Jul 5, 2010, at 8:31 AM, Eric Schulte wrote: > >> Hi, >> >> I've just merged a large set of Babel related security measures and >> layout/initialization updates into the master branch of the git >> repository. >> >> These changes will require existing babel users to update their >> configuration, see the following instructions for details -- even if >> you >> think you've read similar instructions before these are worth reading. >> http://eschulte.github.com/babel-dev/DONE-document-configuration-changes-for-Babel-integration.html >> >> From here on out Babel development in the master branch will settle >> down >> along with the rest of the current Org-mode feature freeze. >> >> Thanks -- Eric >> >> please reply to this email with any question or problems you >> encounter, >> a text export of the contents of the web page linked above is provided >> below. >> >> DONE document configuration changes for Babel integration >> ========================================================== >> Babel took the integration into Org-mode as an opportunity to do >> some much needed house cleaning. Most importantly we have >> simplified the enabling of language support, and cleared out >> unnecessary configuration variables -- which is great unless you >> already have a working configuration under the old model. >> >> The most important changes regard the /location/ and /enabling/ >> of Babel (both core functionality and language specific support). >> >> Babel: Babel is now part of the core of Org-mode, so it is >> now loaded along with the rest of Org-mode. That means that >> there is /no configuration/ required to enable the main >> Babel functionality. For current users, this means that >> statements like >> >> (require 'org-babel) >> >> or >> >> (require 'org-babel-init) >> >> that may by lying around in your configuration must now be >> removed. >> >> load path: Babel (including all language specific files -- >> aside from those which are located in the =contrib/= >> directory for reasons of licencing) now lives in the base of >> the Org-mode lisp directory, so /no additional directories/ >> need to be added to your load path to use babel. For Babel >> users this means that statements adding babel-specific >> directories to your load-path should now be removed from >> your config. >> >> language support: It is no longer necessary to require >> language specific support on a language-by-language basis. >> Specific language support should now be managed through the >> `org-babel-load-languages' variable. This variable can be >> customized using the Emacs customization interface, or >> through the addition of something like the following to your >> configuration (note: any language not mentioned will /not/ >> be enabled, aside from =emacs-lisp= which is enabled by >> default) >> >> (org-babel-do-load-languages >> 'org-babel-load-languages >> '((R . t) >> (ditaa . t) >> (dot . t) >> (emacs-lisp . t) >> (gnuplot . t) >> (haskell . nil) >> (ocaml . nil) >> (python . t) >> (ruby . t) >> (screen . nil) >> (sh . t) >> (sql . nil) >> (sqlite . t))) >> >> Despite this change it is still possible to add >> language support through the use of =require= >> statements, however to conform to Emacs file-name >> regulations all Babel language files have changed >> prefix from =org-babel-*= to =ob-*=, so the require >> lines must also change e.g. >> >> (require 'org-babel-R) >> >> should be changed to >> >> (require 'ob-R) >> >> We have eliminated the =org-babel-tangle-w-comments= variable as >> well as the two main internal lists of languages, namely >> - =org-babel-interpreters= and >> - =org-babel-tangle-langs= >> >> so any config lines which mention those variables, can/should be >> stripped out in their entirety. This includes any calls to the >> =org-babl-add-interpreter= function, whose sole purpose was to >> add languages to the =org-babel-interpreters= variable. >> >> With those calls stripped out, we may still in some cases want to >> associate a file name extension with certain languages, for >> example we want all of our emacs-lisp files to end in a =.el=, we >> can do this will the =org-babel-tangle-lang-exts= variable. In >> general you shouldn't need to touch this as it already has >> defaults for most common languages, and if a language is not >> present in org-babel-tangle-langs, then babel will just use the >> language name, so for example a file of =c= code will have a =.c= >> extension by default, shell-scripts (identified with =sh=) will >> have a =.sh= extension etc... >> >> The configuration of /shebang/ lines now lives in header >> arguments. So the shebang for a single file can be set at the >> code block level, e.g. >> >> >> #+begin_src clojure :shebang #!/usr/bin/env clj >> (println "with a shebang line, I can be run as a script!") >> #+end_src >> >> Note that whenever a file is tangled which includes a /shebang/ >> line, Babel will make the file executable, so there is good >> reason to only add /shebangs/ at the source-code block level. >> However if you're sure that you want all of your code in some >> language (say shell scripts) to tangle out with shebang lines, >> then you can customize the default header arguments for that >> language, e.g. >> >> >> ;; ensure this variable is defined defined >> (unless (boundp 'org-babel-default-header-args:sh) >> (setq org-babel-default-header-args:sh '())) >> >> ;; add a default shebang header argument >> (add-to-list 'org-babel-default-header-args:sh >> '(:shebang . "#!/bin/bash")) >> >> The final important change included in this release is the >> addition of new security measures into Babel. These measures are >> in place to protect users from the accidental or uninformed >> execution of code. Along these lines /every/ execution of a code >> block will now require an explicit confirmation from the user. >> These confirmations can be stifled through customization of the >> `org-confirm-babel-evaluate' variable, e.g. >> >> ;; I don't want to be prompted on every code block evaluation >> (setq org-confirm-babel-evaluate nil) >> >> In addition, it is now possible to remove code block evaluation >> form the =C-c C-c= keybinding. This can be done by setting the >> =org-babel-no-eval-on-ctrl-c-ctrl-c= variable to a non-nil value, >> e.g. >> >> ;; I don't want to execute code blocks with C-c C-c >> (setq org-babel-no-eval-on-ctrl-c-ctrl-c t) >> >> An additional keybinding has been added for code block >> evaluation, namely =C-c C-v e=. >> >> Whew! that seems like a lot of effort for a /simplification/ of >> configuration. >> >> _______________________________________________ >> 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