Как мне найти размер дисплея моей системы в Emacs? - PullRequest
4 голосов
/ 18 августа 2010

Я использую один и тот же .emacs для нескольких машин, операционных систем и платформ.Я хотел бы, чтобы размер кадра Emacs по умолчанию при вызове относился к доступному размеру экрана (например, 96 строк очень хорошо работают на экране рабочего стола 1600x1200, но на ноутбуке 1280x800 мне нужно указать не более 68 строк).

Существует ли выражение emacs-lisp, которое возвращает ширину и высоту экрана системы?

Обновление: я только что нашел подобный вопрос , но по какой-то причине ни один (x-display-pixel-width) или (display-pixel-width) можно найти в моем GNU Emacs 23.2 в системе Windows XP.Продолжая исследования ...

Ответы [ 3 ]

2 голосов
/ 19 августа 2010

Я делаю это плохо, для несколько более старой версии.

(tool-bar-mode nil)

(mapc (lambda (x) (add-to-list 'default-frame-alist x))
   (list
          (cons 'top 0) (cons 'left 0)
          (cons 'font "-outline-Courier New-normal-r-normal-normal-11-82-96-96-c-*-iso10646-1")
          (cons 'height 67) (cons 'width 176)
))

Фрейм по умолчанию создается после запуска .emacs из default-frame-alist. Я никогда не слышал о первоначальном frame-alist.

2 голосов
/ 18 августа 2010

Я использую Gnu Emacs 23.2.1 на XP Pro и функции

(x-display-pixel-width)

и

(x-display-pixel-height) 

оба работают просто отлично. Они являются частью источника c и должны присутствовать.

Вы МОЖЕТЕ запустить emacs за пределами терминала, которому он доверяет?

Вот документация из моего текущего emacs:

x-display-pixel-height - это встроенная функция в `C исходном коде '.

(x-display-pixel-height &optional TERMINAL)

Возвращает высоту в пикселях X TERMINAL. Необязательный аргумент TERMINAL указывает, о каком отображении следует спрашивать. ТЕРМИНАЛ должен быть терминальным объектом, фреймом или отображаемым именем (строкой). Если опущен или ноль, это означает, что дисплей выбранного кадра.

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

1 голос
/ 19 августа 2010

Благодаря ответу и комментариям Криса и Скотта мне удалось найти следующую рабочую строку в моем .emacs:

(set-frame-size  (selected-frame)  96 (/ (* (x-display-pixel-height) 46) 600) ) 

Это хорошо работает, когда я выполняю eval-buffer на.emacs, но когда я дважды щелкаю по ярлыку Emacs в Windows XP, это утверждение полностью игнорируется.

Я знаю, что (selected-frame) не является (initial-frame), поэтому я тоже попробовал:

(setq initial-frame-alist
    '((top . 1) (left . 288) (width . 96) (height . (/ (* (x-display-pixel-height) 46) 600))))

Но это работает только тогда, когда я делаю eval-buffer на чтение .emacs.Он не работает при запуске Emacs (из командной строки или двойным щелчком по его ярлыку).Странно.

Обновление: в итоге я установил начальный размер в команде вызова в поле Цель ярлыка:

C:\emacs-23.2\bin\runemacs.exe -geometry 96x78+240+0

Ужасное решение, я знаю, но в настоящее время это единственное решение, котороеделает трюк.

...