Подтвердить что ты не робот

Как максимизировать Emacs в Windows при запуске?

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

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

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

    (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))))))
    
  • Пробовал вышеуказанные методы как в начале, так и в конце моего файла инициализации, чтобы попытаться устранить помехи от других вещей init.

К сожалению, ничего из этого не работает!! Для некоторых из вышеперечисленных я вижу, что мои окна emacs правильно изменяются в течение секунды, прежде чем возвращаться к небольшому размеру по умолчанию. И если я запустил вышеописанные методы после инициализации, то окна emacs правильно изменяют размер. Что здесь происходит в мире?

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


Update:

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

(tool-bar-mode -1)

Что в мире делает панель инструментов для максимального увеличения окон?

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

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


Решение: (или, по крайней мере, то, что работает для меня сейчас)

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

Windows Registry Editor Version 5.00

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

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

4b9b3361

Ответ 1

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

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

(w32-send-sys-command 61488)

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

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

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

Ответ 2

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

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

Ответ 3

Dudes, что не так с

emacs -mm?

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

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

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

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

И все персиковое и lispy:)

Ответ 4

На 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)))

Ответ 5

Во-первых, спасибо за подсказку об ошибке с (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 http://stackoverflow.com/questions/815239/how-to-maximize-emacs-on-windows-at-startup)
    (tool-bar-mode 1)
    (w32-send-sys-command 61488)
    (tool-bar-mode -1)
)

Ответ 6

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

(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- *!

Ответ 7

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

(add-to-list 'initial-frame-alist '(fullscreen . maximized))

Ответ 8

Эй - хорошая функция! Спасибо за публикацию

Я думаю, что это может не работать для вас, потому что у вас есть код, который выглядит как следуя где-нибудь еще в вашем файле инициализации. Используется атрибут default-frame-alist после создания кадра. Я удалил элементы размера и позиции, и вы отлично работает при загрузке emacs.

   (setq default-frame-alist
     (list
      (cons 'left                 350)
      (cons 'top                  0)
      (cons 'width                80)
      (cons 'height               45)
     ......

Ответ 9

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

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

Ответ 10

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

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

Я ищу Wiki Eamcs, найду полезный метод.

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

MS Windows

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

Кроме того, здесь доступен патч, который делает полноэкранный кадр действительно полноэкранным в 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)

Ответ 11

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

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

Ответ 12

(defun resize-frame ()
"Set size"
(interactive)
(set-frame-width (selected-frame) 110)
(set-frame-height (selected-frame) 33)
(set-frame-position (selected-frame) 0 1))

следующая - последняя функция, называемая в моих файлах .emacs, устанавливает высоту и ширину экрана, на которых она работает как на emacs 22, так и на emacs 23 на debian и mac os x. задайте значения высоты и ширины в соответствии с вашим экраном.

Ответ 13

Чтобы отключить панель инструментов, добавьте строку

(tool-bar-mode nil)

к вашему файлу настройки (обычно .emacs в корневом каталоге).

Ответ 15

Следующий фрагмент из emacswiki работал отлично от меня: (добавьте в конфигурационный файл запуска)

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