LluĂ­s writes: > My elisp foo is quite poor, so this might well be a completely stupid approach > to the problem. > > I have a callback that gets automatically called, and uses some orgmode-specific > routines whose behaviour can be tuned through some customizable variables. > > The usual approach in orgmode is: > > (let ((org-v1 ...) (org-v2 ...)) (org-func ...)) > > As my function is automatically called (as a response to the D-Bus message), I'd > like to let the user specify a let-like form to let her temporarily override the > behaviour of the `org-func' that my package invokes: > > (setq my-cb-org-vars '((org-v1 ...) (org-v2 ...))) > (defun my-cb (...) > (programmatic-let my-cb-org-vars > (org-func ...))) > > Is it possible to implement `programmatic-let'? And if so, can you throw me a > pointer to the appropriate docs? You could use progv: > (progv SYMBOLS VALUES &rest BODY) > > Bind SYMBOLS to VALUES dynamically in BODY. > The forms SYMBOLS and VALUES are evaluated, and must evaluate to lists. > Each symbol in the first list is bound to the corresponding value in the > second list (or to nil if VALUES is shorter than SYMBOLS); then the > BODY forms are executed and their result is returned. This is much like > a `let' form, except that the list of symbols can be computed at run-time. However, given a defined set of variables, you could parse my-cb-org-vars yourself: (defvar my-cb-org-vars '((x ...) (y ...))) (defun my-cb (...) (let ((x (cdr (assoc 'x my-cb-org-vars))) (y (cdr (assoc 'y my-cb-org-vars)))) ....))