I would re-arrange the psudo-code of Yaroslav a bit to include the
limit on the number of windows that can be made. It also deals with
the case where switching and splitting are both off, and there is more
than one window, the user may want the execution buffer to be
displayed in one of the other windows.
Consider the case where switching is off, splitting is on, there are 2
windows neither of which are showing *Python*, and
py-max-split-windows = 2 (which I think is equivalent to splitting
being turned off). What we want is this case is to put *Python* in the
window that our code is not in. This generalizes to more than 2 windows
directly by selecting the least recently used window.
(I wrote the psudo-code like python because I assume everyone
interested in this mode can read python. )
if py-manage-buffers-on-execute-p:
# we want to make sure the user can see the output
if *Python* buffer is visible:
# we can already see *Python*, thus we are done
p_win = window *Python* is in
pass
else:
# we need to try and make *Python* visible
if py-split-windows-on-execute-p and count-windows < py-max-split-windows:
# we can make a new window
do the split and put *Python* in the new window
p_win = new window
else:
if count-windows > 1: seleect some other window and put *Python* in it p_win = window *Python* was put in
else:
# this is the only branch where *Python* is not visible at the end p_win = None
do nothing
if py-switch-buffers-on-execute-p:
if p_win:
switch focus to p_win
else:
# this is the only branch that replaces the code window with the output
switch the buffer displayed in the current window, replacing the code
else:
# DO NOTHING
pass
To deal with the use case where the user wants to always replace
the code window with the output (with what I think is a reasonable
exception of *Python* being already visible, in which case it behaves
like switching is turned on and splitting is turned off), we need to
add another flag. If this flag (py-replace-code-on-execute-p) is set,
the values of the split and switch flag are irrelevant.
This logic is not in the lisp yet.
if py-manage-buffers-on-execute-p:
# we want to make sure the user can see the output
if *Python* buffer is visible:
# we can already see *Python*, thus we are done
p_win = window *Python* is in
pass
else:
if py-replace-code-on-execute-p:
p_win = None
# we need to try and make *Python* visible
elif py-split-windows-on-execute-p and count-windows < py-max-split-windows:
# we can make a new window
do the split and put *Python* in the new window
p_win = new window
else:
if count-windows > 1: seleect some other window and put *Python* in it p_win = window *Python* was put in
else:
# this is the only branch where *Python* is not visible at the end p_win = None
do nothing
if py-switch-buffers-on-execute-p or py-replace-code-on-execute-p:
if p_win:
switch focus to p_win
else:
# this is the only branch that replaces the code window with the output
switch the buffer displayed in the current window, replacing the code
else:
# DO NOTHING
pass
I would re-arrange the psudo-code of Yaroslav a bit to include the
limit on the number of windows that can be made. It also deals with
the case where switching and splitting are both off, and there is more
than one window, the user may want the execution buffer to be
displayed in one of the other windows.
Consider the case where switching is off, splitting is on, there are 2 split-windows = 2 (which I think is equivalent to splitting
windows neither of which are showing *Python*, and
py-max-
being turned off). What we want is this case is to put *Python* in the
window that our code is not in. This generalizes to more than 2 windows
directly by selecting the least recently used window.
(I wrote the psudo-code like python because I assume everyone
interested in this mode can read python. )
if py-manage- buffers- on-execute- p: windows- on-execute- p and count-windows < py-max- split-windows:
seleect some other window and put *Python* in it
p_win = window *Python* was put in
p_win = None
# we want to make sure the user can see the output
if *Python* buffer is visible:
# we can already see *Python*, thus we are done
p_win = window *Python* is in
pass
else:
# we need to try and make *Python* visible
if py-split-
# we can make a new window
do the split and put *Python* in the new window
p_win = new window
else:
if count-windows > 1:
else:
# this is the only branch where *Python* is not visible at the end
do nothing
if py-switch- buffers- on-execute- p:
if p_win:
switch focus to p_win
else:
# this is the only branch that replaces the code window with the output
switch the buffer displayed in the current window, replacing the code
else:
# DO NOTHING
pass
To deal with the use case where the user wants to always replace code-on- execute- p) is set,
the code window with the output (with what I think is a reasonable
exception of *Python* being already visible, in which case it behaves
like switching is turned on and splitting is turned off), we need to
add another flag. If this flag (py-replace-
the values of the split and switch flag are irrelevant.
This logic is not in the lisp yet.
if py-manage- buffers- on-execute- p: code-on- execute- p: windows- on-execute- p and count-windows < py-max- split-windows:
seleect some other window and put *Python* in it
p_win = window *Python* was put in
p_win = None
# we want to make sure the user can see the output
if *Python* buffer is visible:
# we can already see *Python*, thus we are done
p_win = window *Python* is in
pass
else:
if py-replace-
p_win = None
# we need to try and make *Python* visible
elif py-split-
# we can make a new window
do the split and put *Python* in the new window
p_win = new window
else:
if count-windows > 1:
else:
# this is the only branch where *Python* is not visible at the end
do nothing
if py-switch- buffers- on-execute- p or py-replace- code-on- execute- p:
if p_win:
switch focus to p_win
else:
# this is the only branch that replaces the code window with the output
switch the buffer displayed in the current window, replacing the code
else:
# DO NOTHING
pass