I would like to make
set-window-dedicated-p a NOP when called from
xref--show-pos-in-buf. Below is an attempt to do so using advice. It doesn't work, I think because
fset is not really copying the original function definition, just pointing things at each other. How can I either fix this approach to make it work, or use an alternative approach to accomplish my overall goal?
Overall goal: The way I have things set up, when I run an xref command like
*xref* is shown in a full window which is how I like. But, when I hit
RET to visit a reference, the location opens in a new frame. From what I can tell, this is because
*xref* which seems to cause
display-buffer to think the best solution is to display the buffer in a new frame. I never want a new frame, so my overall goal here is that
*xref* and anything I select in it always open in the same frame I am already using.
(defun sham-set-window-dedicated-p (win flag) "Don't dedicate WIN, only return FLAG." flag) (fset 'original-set-window-dedicated-p (symbol-function 'set-window-dedicated-p)) (defadvice xref--show-pos-in-buf (around my-xref--show-pos-in-buf activate) "Monkey patch set-window-dedicated-p so it doesn't do anything." (fset 'set-window-dedicated-p sham-set-window-dedicated-p)) ad-do-it (fset 'set-window-dedicated-p (symbol-function 'original-set-window-dedicated-p)))