<div dir="auto">The code referenced on Stackoverflow.com seems to work perfectly for my use case.<div dir="auto">If you have time to read the code you will probably learn a lot about emacs lisp - I certainly did! </div><div dir="auto"><br><div dir="auto"><div dir="auto">My explanation in email yesterday was slightly misleading.</div><div dir="auto">org-babel-execute-source-block always runs save-excursion and then hands over to a language-specific handler, in this case <span style="font-family:sans-serif">org-babel-execute:emacs-lisp, which runs save-window-excursion. It's the emacs-lisp handler that causes the problem we saw. </span></div><div dir="auto"><br></div><div dir="auto">save-excursion saves the identity of the current buffer and its value of point (the cursor position) but ignores the window layout. save-window-excursion saves the current window layout. </div><div dir="auto"><br></div><div dir="auto">In my use-case of running ediff-files I rely on ediff-files itself to save the window configuration including my org-mode buffer which is then restored when I quit the ediff session. </div></div></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Thu, 27 Jun 2019, 02:32 Gary Phillips, <<a href="mailto:gary.phillips@rolmo.com">gary.phillips@rolmo.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div>Thanks everyone for a great Emacs night which I found very inspiring.</div><div><br></div><div>Tonight we looked at a problem I had hit with running Emacs Lisp code “interactively” inside an org-mode buffer.</div><div><br></div><div>This is the best solution I’ve found so far (not yet tried for my example but it looks good).</div><div><div dir="ltr"><a href="https://emacs.stackexchange.com/questions/42096/running-elisp-within-an-orgmode-code-block?rq=1" target="_blank" rel="noreferrer">https://emacs.stackexchange.com/questions/42096/running-elisp-within-an-orgmode-code-block?rq=1</a><br></div></div><div><br></div><div>We evaluate the following code block and only see the buffer name which ediff-files creates and not the interactive ediff session we expect.</div><div><div> #+begin_src elisp</div></div><div>(ediff-files “foo.s” “bar.s”)</div><div> #+end_src<br></div><div><br></div><div>Causing the problem is the Emacs macro ’save-excursion’ which saves and restores all window settings after executing the code given as its parameter.</div><div>’save-excursion’  is used by org-babel whenever it evaluates code.</div><div>In the case of ediff-files, all the correct buffers and windows are created but when the setup is finished it returns to save-excursion and everything is put back as before. [I’ve omitted stuff about the Emacs event loop which may or may not be recursive.]</div><div><br></div><div>Lisp macros are executed and expanded at compile-time and so we can’t just replace save-excursion with a new temporary function of the same name.</div><div><br></div><div>The solution shown on stackexchange is quite complicated because it must rewrite the ’save-excursion’ macro inside  ‘org-babel-execute:emacs-lisp’.</div><div>There may be a better solution if we can modify the source code of ‘org-babel-execute:emacs-lisp’.</div><div><br></div><div>Cheers</div><div>Gary</div><div><br></div></div></div></div></div></div></div></div></div></div></div>
</blockquote></div>