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