From: "Eric Schulte" <schulte.eric@gmail.com>
To: "Thomas S. Dye" <tsd@tsdye.com>
Cc: Org Mode <emacs-orgmode@gnu.org>
Subject: Re: [Update Config] Babel changes -- security updates and final integration push
Date: Mon, 05 Jul 2010 18:09:55 -0700 [thread overview]
Message-ID: <87r5jhl8kc.fsf@gmail.com> (raw)
In-Reply-To: <2E30CC30-7897-451A-AB4D-4F2CBED2DCBC@tsdye.com> (Thomas S. Dye's message of "Mon, 5 Jul 2010 14:59:11 -1000")
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" <tsd@tsdye.com> 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
next prev parent reply other threads:[~2010-07-06 1:10 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-07-05 18:31 [Update Config] Babel changes -- security updates and final integration push Eric Schulte
2010-07-06 0:59 ` Thomas S. Dye
2010-07-06 1:09 ` Eric Schulte [this message]
2010-07-06 1:48 ` Thomas S. Dye
2010-07-06 5:42 ` Carsten Dominik
2010-07-07 2:03 ` Bernt Hansen
2010-07-07 2:54 ` Eric Schulte
2010-07-07 3:03 ` Bernt Hansen
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87r5jhl8kc.fsf@gmail.com \
--to=schulte.eric@gmail.com \
--cc=emacs-orgmode@gnu.org \
--cc=tsd@tsdye.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.