Как мне установить размер окна Emacs?

Я пытаюсь определить размер экрана, на котором я запускаю emacs, и соответствующим образом отрегулировать размер и положение окна, в котором он запускается (я предполагаю, что это фрейм в emacs-speak). Я пытаюсь настроить свой .emacs так, чтобы я всегда получал «достаточно большое» окно с его левым верхним углом в верхнем левом углу моего экрана.

Я предполагаю, что это запрос большой для общего случая, поэтому, чтобы немного сузить круг вопросов, меня больше всего интересует GNU Emacs 22 для Windows и (Debian) Linux.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
105
0
60 184
10
Перейти к ответу Данный вопрос помечен как решенный

Ответы 10

(setq initial-frame-alist
        (append '((width . 263) (height . 112) (top . -5) (left . 5) (font . "4.System VIO"))
                initial-frame-alist))

(setq default-frame-alist
        (append '((width . 263) (height . 112) (top . -5) (left . 5) (font . "4.System VIO"))
                default-frame-alist))

Взято из: http://www.gnu.org/software/emacs/windows/old/faq4.html

(setq default-frame-alist
      '((top . 200) (left . 400)
        (width . 80) (height . 40)
        (cursor-color . "white")
        (cursor-type . box)
        (foreground-color . "yellow")
        (background-color . "black")
        (font . "-*-Courier-normal-r-*-*-13-*-*-*-c-*-iso8859-1")))

(setq initial-frame-alist '((top . 10) (left . 30)))

Первый параметр применяется ко всем фреймам emacs, включая первый, который появляется при запуске. Второй параметр добавляет дополнительные атрибуты к первому кадру. Это потому, что иногда полезно знать исходный фрейм, в котором вы запускаете emacs.

Я долгое время использовал этот метод для установки высоты и ширины кадра ((width . 80) (height . 40)), но по какой-то причине он перестал работать после того, как я обновил свою версию Xubuntu с 12.04 до 13.10: при запуске размер кадра был по умолчанию. Затем я переключился на ответ Криса Конвея, который мне подходит.

Teemu Leisti 19.02.2014 16:48

Самый простой способ сделать это в среде X-Window - использовать X ресурсы. Соответствующая часть моих .Xdefaults выглядит так:

Emacs.geometry: 80x70

У вас должна быть возможность добавить к нему суффикс + 0 + 0 координат местоположения, чтобы заставить его перемещаться в верхний левый угол вашего дисплея. (причина, по которой я этого не делаю, заключается в том, что я иногда создаю новые кадры, и это сбивает с толку, если они появляются в том же месте, что и предыдущий)

Согласно руководству, этот метод работает и в MS Windows, хранение ресурсов в виде пар ключ / значение в реестре. Я никогда этого не проверял. Это могло бы быть здорово, могло бы быть намного больше неудобств по сравнению с простым редактированием файла.

yeap работает и для окон. Emacs wiki дает более подробную информацию: emacswiki.org/emacs/MsWindowsRegistry

Sa'ad 07.06.2012 18:13

У меня в .emacs есть следующее:

(if (window-system)
  (set-frame-height (selected-frame) 60))

Вы также можете посмотреть на функции set-frame-size, set-frame-position и set-frame-width. Используйте C-h f (также известный как M-x describe-function), чтобы получить подробную документацию.

Я не уверен, есть ли способ вычислить максимальную высоту / ширину фрейма в текущей оконной среде.

Ура! (if (window-system) (set-frame-size (selected-frame) 124 40)) для победы - такой красивый и лаконичный, он дает мне размер, установленный в моем Терминале по умолчанию, что приятно и знакомо. :) (Конечно, отрегулируйте в соответствии с предпочтениями.) Спасибо!

lindes 05.03.2011 13:50

Просто чтобы уточнить: если вы поместите это в init.el, это применимо только к начальному кадру. Если после этого вы создадите новый фрейм, вышеуказанная функция не будет работать; новая рама будет иметь настройки, установленные в default-frame-alist.

David J. 22.01.2013 19:01

Это работает для меня, за исключением того, что (set-frame-size (selected-frame) 80 24) дает мне кадр 161 на 48; У меня экран с разрешением 4K hidpi, но я не ожидал, что это повлияет на количество символов.

charliegreen 20.12.2017 21:48
Ответ принят как подходящий

Если вы хотите изменить размер в соответствии с разрешением, вы можете сделать что-то вроде этого (отрегулировать предпочтительную ширину и разрешение в соответствии с вашими конкретными потребностями):

(defun set-frame-size-according-to-resolution ()
  (interactive)
  (if window-system
  (progn
    ;; use 120 char wide window for largeish displays
    ;; and smaller 80 column windows for smaller displays
    ;; pick whatever numbers make sense for you
    (if (> (x-display-pixel-width) 1280)
           (add-to-list 'default-frame-alist (cons 'width 120))
           (add-to-list 'default-frame-alist (cons 'width 80)))
    ;; for the height, subtract a couple hundred pixels
    ;; from the screen height (for panels, menubars and
    ;; whatnot), then divide by the height of a char to
    ;; get the height we want
    (add-to-list 'default-frame-alist 
         (cons 'height (/ (- (x-display-pixel-height) 200)
                             (frame-char-height)))))))

(set-frame-size-according-to-resolution)

Обратите внимание, что оконная система устарела в новых версиях emacs. Подходящая замена - (display-graphic-p). См. этот ответ к вопросу Как определить, что emacs находится в терминальном режиме? для получения дополнительной информации.

Мне нравятся разные числа, поэтому (как вы предлагаете) я изменил свои. Хотя это отлично работает; Спасибо!

lindes 05.03.2011 13:42

Опять же, мне на самом деле больше нравится эта версия - он намного проще (легко читается и настраивается) и хорошо соответствует моим потребностям. Но оба ответа хороши! +1

lindes 05.03.2011 13:48

Будьте осторожны с высотой, по крайней мере, в Emacs 24.2 в OS X. Если вы установите ее на одну строку выше, окна будут застрять в состоянии, когда первая строка буфера не видна - точка может перемещаться туда, но окно не прокручивается, чтобы показать это.

Greg Hendershott 01.01.2013 20:05

У этого метода (и других перечисленных здесь) есть незначительный артефакт. Emacs откроется с определенным размером и через долю секунды изменится до размера, который мы установили. Но переход виден. Есть ли способ сказать, что emacs отрисовывает себя в желаемом размере от t = 0 секунд?

stathisk 20.04.2014 15:51

Вы также можете использовать параметр -geometry при запуске emacs: emacs -geometry 80x60+20+30 предоставит вам окно шириной 80 символов, высотой 60 строк, с верхним левым углом на 20 пикселей вправо и на 30 пикселей вниз от верхнего левого угла фона.

В Windows вы можете сделать фрейм emacs максимальным, используя эту функцию:

(defun w32-maximize-frame ()
  "Maximize the current frame"
  (interactive)
  (w32-send-sys-command 61488))

В Ubuntu сделайте:

(defun toggle-fullscreen ()
  (interactive)
  (x-send-client-message nil 0 nil "_NET_WM_STATE" 32
                 '(2 "_NET_WM_STATE_MAXIMIZED_VERT" 0))
  (x-send-client-message nil 0 nil "_NET_WM_STATE" 32
                 '(2 "_NET_WM_STATE_MAXIMIZED_HORZ" 0))
)
(toggle-fullscreen)

(defun set-frame-size-according-to-resolution ()
  (interactive)
  (if window-system
  (progn
    ;; use 120 char wide window for largeish displays
    ;; and smaller 80 column windows for smaller displays
    ;; pick whatever numbers make sense for you
    (if (> (x-display-pixel-width) 1280)
           (add-to-list 'default-frame-alist (cons 'width 120))
           (add-to-list 'default-frame-alist (cons 'width 80)))
    ;; for the height, subtract a couple hundred pixels
    ;; from the screen height (for panels, menubars and
    ;; whatnot), then divide by the height of a char to
    ;; get the height we want
    (add-to-list 'default-frame-alist 
         (cons 'height (/ (- (x-display-pixel-height) 200)
                             (frame-char-height)))))))

(set-frame-size-according-to-resolution)

Я предпочитаю настройки Брайана Окли. Однако 'высота не работает должным образом в моем GNU Emacs 24.1.1.

Попробуйте добавить следующий код в .emacs

(add-to-list 'default-frame-alist '(height . 24))

(add-to-list 'default-frame-alist '(width . 80)) 

Другие вопросы по теме