Як встановити розмір вікна Emacs?


103

Я намагаюся визначити розмір екрана, на якому я запускаю emacs, і відповідно відрегулювати розмір і розташувати вікно, в якому воно починається (я думаю, що це кадр в emacs-говорінні). Я намагаюся налаштувати свій .emacs так, щоб я завжди отримував "досить велике" вікно з його лівим верхнім кутом біля верхнього лівого екрана.

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

Відповіді:


89

Якщо ви хочете змінити розмір відповідно до роздільної здатності, ви можете зробити щось подібне (регулюючи бажану ширину та роздільну здатність відповідно до ваших конкретних потреб):

(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

Потім знову мені справді подобається ця версія - набагато простіша (легка для читання та налаштування), і добре відповідає моїм потребам. І те, і інше - хороші відповіді! +1
лінди

1
Будьте обережні з висотою, принаймні на Emacs 24.2 в ОС X. Якщо встановити його на один рядок занадто високо, вікна будуть застрягати в стані, коли перший рядок буфера не видно - точка може переміщатися туди, але вікно не прокручується, щоб показати його.
Грег Хендершотт

2
З цим методом (і з іншими переліченими тут) є незначний артефакт. Emacs відкриється з певним розміром і після частки секунди змінить розмір до встановленого нами розміру. Але перехід видно. Чи є спосіб сказати Emacs намалювати себе в потрібному розмірі від t = 0 сек?
stathisk

48

У мене є таке .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) для отримання детальної документації.

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


12
Так! (if (window-system) (set-frame-size (selected-frame) 124 40))бо виграш - такий приємний і стислий, і отримує мені розмір за замовчуванням у Терміналі, який є приємним і знайомим. :) (Звичайно, підкоригуйте вподобання.) Дякую!
лінди

1
Просто для уточнення: якщо ви помістите це, init.elце стосується лише початкового кадру. Якщо після цього створити новий кадр, вищевказана функція не матиме ефекту; для нового кадру будуть встановлені налаштування default-frame-alist.
Девід Дж.

Це працює для мене, за винятком того, що (set-frame-size (selected-frame) 80 24)дає мені кадр 161 на 48; Я на екрані 4K hidpi, але я не очікував, що це вплине на кількість персонажів.
charliegreen

21

Взято з: 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

17

Найпростіший спосіб я знайшов , щоб зробити це в середовищі X-Window через X ресурсів . Відповідна частина моїх .Xdefaults виглядає приблизно так:

Emacs.geometry: 80x70

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

Відповідно до посібника, ця методика працює і в MS Windows , зберігаючи ресурси як пари ключів / значень у реєстрі. Я ніколи цього не тестував. Це може бути чудово, це може бути набагато більше незручностей порівняно з простою редагуванням файлу.


1
дріждж працює і для вікон. Emacs вікі дає більш детальну інформацію: emacswiki.org/emacs/MsWindowsRegistry
Саад

17

Спробуйте додати наступний код до .emacs

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

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

12

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


7

У 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)

5

У Windows ви можете зробити рамки emacs максимально використаними за допомогою цієї функції:

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

1
(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))

0
(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.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.