
Когда я запускаю emacs, он всегда полноэкранный. Я не могу найти конфигурацию, чтобы emacs запускалсянетв полноэкранном режиме (максимум). Я не единственный с такой проблемой:
http://ubuntuforums.org/showthread.php?t=2282182
Система:
- Делл XPS 15
- Ubuntu 14.04 (установлена на заводе)
- Emacs 24.3.1 (установлен на заводе, обновлен)
Я попробовал эту --geometry
опцию, и она работает из командной строки, но не меняет поведение значка дока. Даже когда я удаляю значок, запускаю из командной строки с помощью custom --geometry
и блокирую новый значок — он просто снова запускается на весь экран. Мне тоже не повезло с *-frame-alist
настройками. Какая еще конфигурация может это делать?
решение1
У меня также есть Dell XPS с экраном HiDPI, и у меня была та же проблема. Оказалось, что Emacs хотел занять больше места на экране, чем было доступно, потому что в моих файлах запуска Emacs я установил ширину рамки в 88 символов, которая удваивалась, потому что я установил свой коэффициент масштабирования пользовательского интерфейса равным 2, чтобы сделать все читаемым на дисплее HiDPI. Поэтому менеджер окон (справедливо) открыл Emacs в полноэкранном режиме вместо этого. Я понял это, когда попробовал решение ennob наhttp://ubuntuforums.org/showthread.php?t=2282182. В коде ennob размер фрейма составляет 40 x 25 символов, что привело к размеру фрейма 80x50 на моей системе. Небольшой эксперимент подтвердил, что Emacs умножает запрошенную ширину и высоту текста на масштабный коэффициент при установке фактической ширины и высоты фрейма.
Коэффициент масштабирования можно получить из dconf:
dconf read /com/ubuntu/user-interface/scale-factor
что в моей системе возвращает {'eDP1': 16}
. Коэффициент масштабирования 1 дает {'eDP1': 8}
. Поэтому я обобщил код ennob и добавил его в свой файл запуска Emacs (для меня это ~/.emacs.d/init.el)
:
(defun my:window-setup-hook ()
(when (and (string= system-type "gnu/linux") window-system)
(toggle-frame-maximized)
(let* ((dconf-entry
(shell-command-to-string
"dconf read /com/ubuntu/user-interface/scale-factor"))
(scale-factor (progn (string-match "'[eD][FD]P1': \\([0-9]+\\)[,\}]"
dconf-entry)
(string-to-int (match-string 1 dconf-entry))))
(text-width (truncate (/ desired-width (/ scale-factor 8.0))))
(text-height (truncate (/ desired-height (/ scale-factor 8.0)))))
(message "set-frame-size is %dx%d, scale-factor is %s"
text-width text-height scale-factor)
(set-frame-size (selected-frame) text-width text-height))))
(setq window-setup-hook 'my:window-setup-hook)
Это работает для меня при масштабных коэффициентах >= 2 и когда мой шрифт по умолчанию — 14 pt ( (set-face-attribute 'default nil :height 140)
). Так что я все еще не понимаю бесчисленных факторов, которые играют роль, но моя непосредственная проблема решена, и я надеюсь, что это поможет и вам.
решение2
Ответ от @chris-simpkins почти сработал у меня, но функция переключения на полноэкранный режим по какой-то причине не сработала :/ Согласно моему комментарию, вот код, который у меня работает (я предпочитаю более узкий экран):
(defun toggle-fullscreen-x11 ()
"Toggle full screen on X11"
(interactive)
(when (eq window-system 'x)
(set-frame-parameter
nil 'fullscreen
(when (not (frame-parameter nil 'fullscreen)) 'fullboth))))
(defun my:window-setup-hook ()
(toggle-fullscreen-x11)
(when window-system
(let* ((dconf-entry
(shell-command-to-string
"dconf read /com/ubuntu/user-interface/scale-factor"))
(scale-factor (progn (string-match "{'eDP1': \\([0-9]+\\)}"
dconf-entry)
(string-to-int (match-string 1 dconf-entry))))
;; text-width make room for gutter and fringes
(text-width (truncate (/ 48 (/ scale-factor 8.0))))
(text-height (truncate (/ 50 (/ scale-factor 8.0)))))
(set-frame-size (selected-frame) text-width text-height))))
(setq window-setup-hook 'my:window-setup-hook)