What you want to achieve might be tricky (if not impossible) to achieve. But it seems that all you want is to keep the helm-sources
(the helm
window) and the minibuffer in same direction so that you can view them without have move your eyes around much. I think this can be achieved using on of the methods below
1) Customize helm
so that the "helm window" is always in the bottom-left window.
Since the minibuffer is always positioned at bottom-left of the screen, this would mean that you can view helm-sources and the minibuffer at once.
We can achieve that by writing a custom function to select the window to display the helm buffer. And set helm-split-window-preferred-function
to this function. I am providing one such function below
;; So that helm does not use current window to display the helm window
(setq helm-split-window-in-side-p nil)
(defun my-helm-split-window (window)
(if (one-window-p t)
;; With just window helm does the right thing
(split-window
(selected-window) nil (if (eq helm-split-window-default-side 'other)
'below helm-split-window-default-side))
;; If there are multiple windows, select the bottom-left window
(while (window-in-direction 'left)
(select-window (window-in-direction 'left)))
(while (window-in-direction 'below)
(select-window (window-in-direction 'below)))
(selected-window)))
(setq helm-split-window-preferred-function #'my-helm-split-window)
2) Another solution is to echo the input to helm, in the header line
This way the input can be seen at the top of the helm
window irrespective of the position of the window
To achieve this set helm-echo-input-in-header-line
to t
. Additionally you can use some tips mentioned in this reddit thread to show input only in the header