Ответ 1
Посмотрите документацию для default-minibuffer-frame
и initial-frame-alist
vars. Похоже, что у вас может быть отдельный кадр для вашего минибуфера (который вы могли бы позиционировать в верхней части экрана), а затем генерировать безмасляные фреймы, которые его используют.
Обратите внимание, что в 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)
)))
Естественно, вы также можете комбинировать это с методом scottfrazer перемещения модели в верхнюю часть.
Это можно было бы обработать в window-setup-hook
?
Вы также должны посмотреть на встроенные библиотеки frame.el и dframe.el. Такие функции, как dframe-reposition-frame
, могут обеспечить удобный способ привязки рамки минибуфера к верхней части активного кадра редактирования.
Переменная minibuffer-auto-raise
также может быть сконфигурирована так, чтобы поднимать кадр минибуфера всякий раз, когда активируется минибуфер, что может уменьшить необходимость видеть его в остальное время.