Установка последовательных новых кадров на определенной ширине от предыдущего кадра в Emacs - PullRequest
0 голосов
/ 14 октября 2018

В моем init.el есть следующее:

(if (display-graphic-p)
    (progn
      (setq initial-frame-alist
            '((tool-bar-lines . 0)
              (width . 106) ; chars
              (height . 60) ; lines
              (left . 50)
              (top . 50)))
      (setq default-frame-alist
            '((tool-bar-lines . 0)
              (width . 106)
              (height . 60)
              (left . 50)
              (top . 50))))
  (progn
    (setq initial-frame-alist '((tool-bar-lines . 0)))
    (setq default-frame-alist '((tool-bar-lines . 0)))))

Я новичок в emacs и хочу знать, как открыть каждый последующий новый кадр (слева + 10) предыдущего кадра.

Я хочу, чтобы я мог видеть все кадры каждый раз, когда открываю новый кадр с C-x 5 2.При текущей настройке в init.el новые кадры перекрывают предыдущий кадр.

1 Ответ

0 голосов
/ 19 ноября 2018

Я думаю, что самый простой способ - создать фреймы напрямую, 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

moving frames

Теперь давайте рассмотримфункция кадра (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>

И вы получите это:

frmaes

(позволяет использовать

...