Я думаю, что самый простой способ - создать фреймы напрямую, emacs создаст фрейм после переменной:
ELISP> initial-frame-alist
((fullscreen . maximized)
(left-fringe . 10)
(right-fringe . 0))
У меня есть это на моем init.el
;; Default frame size
(add-to-list 'initial-frame-alist '(fullscreen . maximized))
Iтакже используйте fringe-mode
;; Turn on the left fringe
(set-fringe-mode '(10 . 0)) ;; 10px left, 0px right
Так что это моя первоначальная настройка emacs, затем, когда мне нужен новый кадр, я нажимаю Cx 5-2 и у меня нет проблем с тем, куда emacs помещает это.но если вам нужно, чтобы создать его.Я рекомендую вам поэкспериментировать с ielm (M-x ielm
) и с фреймами:
Сначала функция для создания фреймов make-frame:
ELISP> (make-frame)
#<frame Emacs 0x1158fc150>
ELISP>
Это создаст и точно emacs frameкак созданный с помощью Cx 5-2
Давайте переместим этот кадр:
ELISP> (set-frame-position nil 50 50)
t
Теперь давайте рассмотримфункция кадра (Ch f):
(make-frame и необязательные ПАРАМЕТРЫ)
Возвращает вновь созданный кадр, отображающий текущий буфер.Необязательный аргумент PARAMETERS - это список параметров кадра для нового кадра.Каждый элемент PARAMETERS должен иметь форму (NAME. VALUE), например:
(name. STRING). Кадр должен иметь имя STRING.
(width. NUMBER). Кадр должен бытьКоличество символов в ширину.(высота. NUMBER) Высота фрейма должна быть NUMBER.
(минибуфер. t) Рама должна иметь минибуфер.(минибуфер. ноль) На раме не должно быть минибуфера.(только минибуфер). Рама должна содержать только минибуфер.(минибуфер. WINDOW) Кадр должен использовать WINDOW в качестве окна минибуфера.
(window-system. nil) Кадр должен отображаться на оконечном устройстве.(window-system. x) Кадр должен отображаться в окне X.
(display. ": 0") Кадр должен отображаться на дисплее: 0.
(терминал. TERMINAL) В кадре должен использоваться терминальный объект TERMINAL.
Кроме того, применяется любой параметр, указанный в 'default-frame-alist', но не присутствующий в PARAMETERS.
Перед созданием кадра(через 'frame-creation-function'), эта функция запускает ловушку 'before-make-frame-hook'.После создания фрейма он запускает ловушку 'after-make-frame-functions' с одним аргументом, вновь созданным фреймом.
Если задан параметр отображения, а оконная система - нет, угадайте окно-система с дисплея.
На графических дисплеях эта функция сама не делает новый кадр выбранным кадром.Тем не менее, оконная система может выбрать новый кадр в соответствии со своими собственными правилами.
Мы не можем найти здесь реальную информацию, но проверяем функцию, глядя на исходный файл: мы обнаруживаем, что кадр имеет этопараметры: top',
left ', width',
height', user-size' and
user-position 'параметры.
Таким образом, мы можем указать при создании нового фрейма эти 4 вещи, теперь мы собираемся взять толькоположение (это также зависит от вашего оконного менеджера, пикселей и того, как вы хотите поставить)
ELISP> (make-frame '((top . 100) (left . 100) (width . 100) (height . 30)))
#<frame Emacs 0x111ca8c00>
ELISP> (make-frame '((top . 50) (left . 50) (width . 100) (height . 10)))
#<frame Emacs 0x115a5ed50>
ELISP> (make-frame '((top . 100) (left . 100) (width . 100) (height . 10)))
#<frame Emacs 0x1116e77a0>
ELISP> (make-frame '((top . 150) (left . 150) (width . 100) (height . 10)))
#<frame Emacs 0x111ac5aa0>
ELISP> (make-frame '((top . 200) (left . 200) (width . 100) (height . 10)))
#<frame Emacs 0x115c32e00>
И вы получите это:
(позволяет использовать