The splitting behaviour isbehavior can be controlled by setting the variable display-buffer-alist
. You can customize this variable to get the desired splitting.
Please refer https://www.gnu.org/software/emacs/manual/html_node/elisp/Display-Action-Functions.html
In particular, note display-buffer-below-selected
.
An easier to achieve the same is using the package shackle (my personal choice)
For example, the below code aligns all helm
buffers to the bottom of the screen, covering 40% of the screen
(setq shackle-rules '(("\\`\\*helm.*?\\*\\'" :align 'below :size 0.4)))
You could do the same for buffers with a given mode, try something like
(setq shackle-rules '((slime-mode :align 'below)))