AH, THISI S SUPER-HELPFUL, aARON. MANY THANK. i'M HOPING THAT BY THE TIME i RETIRE i WILL BEGIN TO UNDERSTAND LEXICAL SCOPING IN LISP... On Tue, Nov 6, 2018 at 10:35 AM Aaron Ecay wrote: > Hi Matt, > > 2018ko azaroak 6an, Matt Price-ek idatzi zuen: > > > > Hi, > > > > I was writing a function to quickly post the ocntents of subtrees to the > > Canvas Learning Management System. I was trying to strip down the > exported > > HTML to an absolute minimum and had forgotten about the body-only > paramter > > to org-export-as (!!). So, my solution was to try to rebind > > 'org-html--build-meta-info to always just return "". However, I can't > > seem to do it properly and I'm wondering if someone can help me figure > out > > what's wrong. It's my first time using cl-flet! And I know there are > > various approaches, but I odn't understnad whyt this is notworking, when > > for instance, this does work for me: > > > > (cl-flet ((+ > > (lambda (&rest args) (message "no plus!")))) > > (+ "whoops")) > > ;; "no plus!" > > > > Meanwhile, here's my non-functional code: > > Quoting from the info page (info "(cl) Function Bindings"): > > The bindings are lexical in scope. This means that all references > to the named functions must appear physically within FORMS. > > I believe that you can accomplish what you are trying to do with: > > (cl-letf (((symbol-function 'org-html--build-meta-info) > (lambda (&rest args) ""))) > your-code-here) > > You could also do something like: > > (let ((my-advice (lambda (&rest _) ""))) > (advice-add 'org-html--build-meta-info :override my-advice) > (unwind-protect > (progn > your-code-here) > (advice-remove 'org-html--build-meta-info my-advice))) > > (Why do I think this is better, despite being more verbose? Advice-add > is specifically designed to change the binding of functions at runtime, > and so it does some specialized things that cl-letf doesnʼt do. This in > turn means that it should be a more robust way of accomplishing the > desired outcome.) > > -- > Aaron Ecay >