Как максимизировать Emacs на Windows при запуске? - PullRequest
42 голосов
/ 02 мая 2009

Это сводит меня с ума: я просто хочу, чтобы Emacs максимизировал до любого разрешения экрана при запуске. В идеале мне нравится кроссплатформенное (Windows & Linux) решение, которое работает на любом разрешении экрана, но я даже не могу заставить его работать только на Window XP даже с жестко заданными размерами.

Вот что я попробовал:

  1. Установка начального-кадрового списка с соответствующей высотой / шириной
  2. Настройка default-frame-alist
  3. (специфичные для Windows вещи) Отправка сообщения в окна emacs с указанием увеличить его до (w32-send-sys-command 61488)
  4. Пробовал эту функцию, которую я где-то нашел:

    (defun toggle-fullscreen ()
      "toggles whether the currently selected frame consumes the entire display
    or is decorated with a window border"
      (interactive)
      (let ((f (selected-frame)))
        (modify-frame-parameters 
         f
         `((fullscreen . ,(if (eq nil (frame-parameter f 'fullscreen)) 
                              'fullboth
                            nil))))))
    
  5. Пробовал вышеуказанные методы в начале и конце моего файла инициализации, чтобы попытаться устранить помехи от других вещей инициализации.

К сожалению, ничего из вышеперечисленного не работает !! Для некоторых из вышеперечисленных я могу видеть, что мои окна emacs изменяют размеры корректно в течение доли секунды, прежде чем вернуться к небольшому размеру по умолчанию. И если я запустил методы выше после инициализации, то окна emacs ДЕЙСТВИТЕЛЬНО изменят размер. Что в мире здесь происходит?

[p.s. есть и другие вопросы по этому вопросу, но ни один из ответов не работает]


Обновление:

Ответы заставляют меня думать, что что-то еще в моем файле инициализации вызывает проблему. И это действительно так! После некоторых проб и ошибок я нашел виновника. Если я закомментировал следующую строку, все работает отлично:

(tool-bar-mode -1)

Какое отношение имеет панель инструментов к максимизации окон?

Таким образом, теперь возникает вопрос: как я могу отключить панель инструментов (в конце концов, панель инструментов emacs уродлива и занимает драгоценное пространство экрана) И развернуть окна как в моем файле инициализации? Возможно ли это ошибка, что панель инструментов мешает размеру окна?

Уточнение: (tool-bar-mode-1) отключает панель инструментов, но эта строка мешает максимизировать окна Emacs. Поэтому, если я попытаюсь поставить функции для максимизации окон и выключить панель инструментов, часть максимизации потерпит неудачу; если часть панели инструментов закомментирована, то часть максимизации будет работать нормально. Не имеет значения, какие решения я использую (среди 4, которые я перечислил).


Решение: (или хотя бы то, что у меня сейчас работает)

Это, вероятно, ошибка в Emacs. Обходной путь - отключить панель инструментов через Реестр, а не в .emacs. Сохраните следующее как файл .reg и запустите этот файл в проводнике Windows:

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\GNU\Emacs]
"Emacs.Toolbar"="-1"

(Это решение является рабочей версией того, что предложил OtherMichael).

Ответы [ 15 ]

25 голосов
/ 04 мая 2009

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

Чтобы Emacs развернулся, поставьте эту строку в конце вашего файла ~ / .emacs:

(w32-send-sys-command 61488)

Если вы не хотите панель инструментов Emacs Вы можете добавить строку (режим панели инструментов -1) [ПРИМЕЧАНИЕ: значение равно 0 на исходной странице] в ваш файл ~ / .emacs, но Emacs не будет полностью максимизировать в этом случае - реальный имущество, занимаемое панелью инструментов потерял. Вы должны отключить панель инструментов в реестре вернуть его:

[HKEY_LOCAL_MACHINE\SOFTWARE\GNU\Emacs\Emacs.Toolbar]
@="0"

Если вы загляните в EmacsWiki под Коды команд W32SendSys , вы обнаружите, что 61488 равно максимизировать текущий кадр

12 голосов
/ 02 января 2011

Это самое простое исправление, которое сработало для меня:

(w32-send-sys-command #xf030)
(add-hook 'window-setup-hook (lambda () (tool-bar-mode -1)))
11 голосов
/ 23 февраля 2012

Чувак, что не так с

emacs -mm?

Это запускает Emacs полностью развернутым. Поместите его в ярлык, это действительно зависит от используемого вами оконного менеджера; Я сам просто псевдоним это в моем . * Shrc .

На другой, но не связанной ноте, я фактически запускаю Emacs таким образом, что, если он уже запущен, выбранный файл просто открывается как новый буфер в моей существующей сессии Emacs:

if [ "$(pidof emacs)" ] ; then
    emacsclient "$@"
else
    emacs -mm "$@"
fi

Это я помещаю в ~ / bin / e и просто запускаю Emacs с "e". Я щелкнул правой кнопкой мыши текстовый файл в файловом менеджере, выбрал «открыть с помощью другой программы» и ввел «e», а теперь просто дважды щелкаю файлы, и все они аккуратно открываются в одном сеансе.

И все персиковое и гадкое:)

10 голосов
/ 22 июня 2009

На X.org системный вызов (поскольку вы изначально запрашивали кроссплатформенное решение):

(defun x11-maximize-frame () "Maximize the current frame (to full screen)" (interactive) (x-send-client-message nil 0 nil "_NET_WM_STATE" 32 '(2 "_NET_WM_STATE_MAXIMIZED_HORZ" 0)) (x-send-client-message nil 0 nil "_NET_WM_STATE" 32 '(2 "_NET_WM_STATE_MAXIMIZED_VERT" 0)))
3 голосов
/ 06 октября 2015

Надежно работает на Emacs 24.5.1 (i686-pc-mingw32):

(add-to-list 'initial-frame-alist '(fullscreen . maximized))
3 голосов
/ 25 ноября 2009

Во-первых, спасибо за подсказку об ошибке с (tool-bar-mode -1); избавил меня от многих хлопот! Я предпочел бы хранить все в файле .emacs (без модов для меня), так что если вы включите панель инструментов перед максимизацией, а затем снова выключите ее, вы сможете приятно максимизировать:

(defun maximize-current-frame () "Resizes the current frame to fill the screen"
    (interactive)
    ;; There is a bug in tool-bar-mode that prevents it from being
    ;; maximized, so turn it on before maximizing.
    ;; See /792663/kak-maksimizirovat-emacs-na-windows-pri-zapuske)
    (tool-bar-mode 1)
    (w32-send-sys-command 61488)
    (tool-bar-mode -1)
)
2 голосов
/ 14 сентября 2009

Другим способом решения такой проблемы является задержка между

(menu-bar-mode -1)
(tool-bar-mode -1)
(tooltip-mode -1)
(scroll-bar-mode 1)

и set-frame- * функции. Например:

 (tool-bar-mode -1)
 (when window-system
  (run-at-time (format "%d sec" 1) nil '(lambda () (set-frame-position (selected-frame) 1 1)))
  (run-at-time (format "%d sec" 2) nil '(lambda () (set-frame-width (selected-frame) 150 t)))
  (run-at-time (format "%d sec" 3) nil '(lambda () (set-frame-height (selected-frame) 60 t)))
  )

Важно также установить задержку между функциями set-frame- *! 1007 *

1 голос
/ 10 сентября 2015

Я столкнулся с одной командой, которая работает (toggle-frame-maximized), которая работает как в Linux, так и в Windows.

Я просто помещаю это в конец моего файла инициализации после настройки всего, делая предположение, что к концу установки все не будет развернуто, и вуаля, это работает.

1 голос
/ 12 мая 2011

каждый. emacs 23.3.1, код удара недействителен. потому что (menu-bar-mode -1) может вызвать не окна полноэкранный тоже.

(w32-send-sys-command #xf030)
(add-hook 'window-setup-hook (lambda () (tool-bar-mode -1)))

Я ищу вики Eamcs, нахожу подходящий метод.

http://www.emacswiki.org/emacs/FullScreen#toc3

MS Windows

Если вы используете MS Windows и хотите использовать «настоящий полноэкранный режим», т. Е. Избавиться от верхней панели заголовков и всего остального, см. W32-fullscreen на сайте для режима darkroom-mode

В качестве альтернативы, здесь доступно исправление, которое делает полноэкранный параметр кадра действительно полноэкранным в Windows.

Чтобы получить развернутое окно, вы можете использовать: (w32-send-sys-command # xf030)

Внимание! Если вы хотите, чтобы emacs запускался максимально, вы должны поместить этот код в ваш файл .emacs:

(defun jbr-init ()
  "Called from term-setup-hook after the default
terminal setup is
done or directly from startup if term-setup-hook not
used.  The value
0xF030 is the command for maximizing a window."
  (interactive)
  (w32-send-sys-command #xf030)
  (ecb-redraw-layout)
  (calendar)
)
(setq term-setup-hook 'jbr-init)
(setq window-setup-hook 'jbr-init)
1 голос
/ 10 мая 2011

Если вы действительно хотите запустить Emacs в полноэкранном режиме без оконного хрома (строка заголовка и кнопка max / min / close), попробуйте режим ниже. У меня это работало с Emacs 23.3.1 на XP SP3.

http://www.martyn.se/code/emacs/darkroom-mode/

...