From 609c3b3c144e8f58851f7cf50adaed94a0fcdf0e Mon Sep 17 00:00:00 2001 From: Nicolas Goaziou Date: Sat, 23 Jul 2016 10:34:37 +0200 Subject: [PATCH] ob-shell: Improve `org-babel-shell-name' customization * lisp/ob-shell.el (org-babel-shell-initialize): New function (org-babel-shell-names): Properly update execute functions whenever the variable is modified outside the Customize interface. --- lisp/ob-shell.el | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/lisp/ob-shell.el b/lisp/ob-shell.el index 1d9486233..4d24bbc44 100644 --- a/lisp/ob-shell.el +++ b/lisp/ob-shell.el @@ -43,18 +43,25 @@ (defcustom org-babel-shell-names '("sh" "bash" "csh" "ash" "dash" "ksh" "mksh" "posh") - "List of names of shell supported by babel shell code blocks." + "List of names of shell supported by babel shell code blocks. +Call `org-babel-shell-initialize' when modifying this variable +outside the Customize interface." :group 'org-babel :type '(repeat (string :tag "Shell name: ")) :set (lambda (symbol value) (set-default symbol value) - (dolist (name value) - (eval `(defun ,(intern (concat "org-babel-execute:" name)) - (body params) - ,(format "Execute a block of %s commands with Babel." name) - (let ((shell-file-name ,name)) - (org-babel-execute:shell body params))) - t)))) + (org-babel-shell-initialize))) + +(defun org-babel-shell-initialize () + "Define execution functions associated to shell names. +This function has to be called whenever `org-babel-shell-names' +is modified outside the Customize interface." + (dolist (name org-babel-shell-names) + (eval `(defun ,(intern (concat "org-babel-execute:" name)) + (body params) + ,(format "Execute a block of %s commands with Babel." name) + (let ((shell-file-name ,name)) + (org-babel-execute:shell body params)))))) (defun org-babel-execute:shell (body params) "Execute a block of Shell commands with Babel. -- 2.11.4.GIT