Ознакомьтесь с документацией для default-minibuffer-frame
и initial-frame-alist
переменных. Похоже, вы можете иметь отдельный кадр для вашего минибуфера (который вы можете расположить в верхней части экрана), а затем генерировать кадры без минибуфера, которые его используют.
Обратите внимание, что в initial-frame-alist
указано, что «если значение требует кадра без минибуфера, и вы сами не создали кадр минибуфера, кадр минибуфера создается в соответствии с minibuffer-frame-alist
», что звучит как именно то, что было бы нужно.
Существуют способы сохранения и восстановления конфигураций фреймов, поэтому, если это сработает, вы, вероятно, сможете автоматически воссоздать макет при запуске emacs.
Edit:
Очень базовый пример / подтверждение концепции ниже для использования этой структуры кадра. Кадр минибуфера нельзя удалить до тех пор, пока не будут удалены кадры, использующие его. Конечно, вы столкнетесь с проблемами, когда будете делать максимизацию фрейма редактора, поэтому, безусловно, нужно будет поработать, чтобы заставить эту систему работать более плавно.
(setq default-minibuffer-frame
(make-frame
'((name . "minibuffer")
(width . 80)
(height . 1)
(minibuffer . only)
(top . 0)
(left . 0)
)))
(setq new-frame
(make-frame
'((name . "editor")
(width . 80)
(height . 30)
(minibuffer . nil)
(top . 50)
(left . 0)
)))
Естественно, вы также можете комбинировать это с методом Скоттфразера по перемещению моделин наверх.
Это может быть обработано в window-setup-hook
?
Вам также следует взглянуть на встроенные библиотеки frame.el и dframe.el. Такие функции, как dframe-reposition-frame
, могут обеспечить удобный способ удержания рамки минибуфера «прикрепленной» к верхней части активной рамки редактирования.
Переменная minibuffer-auto-raise
также может быть настроена так, чтобы поднимать рамку минибуфера всякий раз, когда минибуфер активирован, что может уменьшить необходимость видеть его в остальное время.