2010-08-18 3 views
3

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

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

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

ответ

2

Я бегу 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 указывает, на какой дисплей нужно спросить. TERMINAL должен быть терминальным объектом, фреймом или отображаемым именем (строка). Если опущено или равно нулю, это означает, что дисплей выбранного кадра.

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

+1

Крис, спасибо. Как вызвать эти функции? Я попробовал M-x x-display-pixel-height из минибуфера, но Emacs не смог его найти. Как вы вызываете его в своей системе? BTW, «О Emacs» в моей системе отображает: GNU Emacs 23.2.1 (i386-mingw-nt5.1.2600) of 2010-05-08 on G41R2F1 –

+3

Они не являются интерактивными функциями. Вы можете вызвать их с помощью M-: (x-display-pixel-height) RET – scottfrazer

+0

Скотт, ваш комментарий был именно тем, что мне нужно. Alt + Shift + ':' на моей клавиатуре Windows XP вызывается приглашение «Eval:». Затем я набрал (x-display-pixel-height), нажал клавишу Enter и, конечно же, отобразился правильный результат: 1200. Спасибо! –

1

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

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

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

Я знаю, что (выбранный кадр) не является (начальный кадр), так что я тоже попытался это:

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

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

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

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

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

+1

При запуске на Emacs 23 нет 'selected-frame', из-за добавления режима демона, поддержки нескольких терминалов и т. П. Поэтому вам нужно установить initial-frame-alist или default-frame-alist. – JSON

+0

Попробуйте '(setq initial-frame-alist '((вверху 1) (слева. 288) (ширина 96))) (добавить к списку' initial-frame-alist (cons 'height (/ (* (x-display-pixel-height))))) ' Причина, по которой ваша текущая версия не работает, заключается в том, что вычисление высоты находится внутри указанного списка, поэтому не будет оцениваться. – JSON

+0

Ева, я использую 22.3.1 на своей рабочей машине. –

2

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

(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 из-по-умолчанию-alist. Я никогда не слышал об исходном кадре-алисте.

+0

John, ваш путь по существу эквивалентен (кроме стандартного и начального), но он не работает на Emacs 23.2. Какую версию Emacs вы используете? –

+0

'initial-frame-alist' влияет только на первый кадр. 'default-frame-alist' влияет на все созданные после этого фреймы. – JSON

Смежные вопросы