2009-05-02 13 views
42

Esto me está volviendo loco: simplemente quiero que Emacs maximice a cualquier resolución de pantalla que tenga al inicio. Idealmente, me gusta una solución multiplataforma (Windows & Linux) que funciona con cualquier resolución de pantalla, pero ni siquiera puedo hacer que funcione solo en Windows XP con tamaños incluso codificados.¿Cómo maximizar Emacs en Windows al inicio?

Éstos son lo que he intentado:

  1. Ajuste del fotograma-a-lista inicial con altura adecuada/anchura
  2. Ajuste del default-frame-a-lista
  3. (material específico de Windows) está enviando el mensaje a la ventanas emacs diciéndole que se maximizan a través de (w32-send-sys-command 61488)
  4. probado este función que he encontrado en alguna parte:

    (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. Probé los métodos anteriores tanto en el inicio como en el final de mi archivo init para tratar de eliminar la interferencia de otras cosas init.

Desafortunadamente, ninguno de los anteriores funciona !! Para algunas de las anteriores, puedo ver que las ventanas de mi emacs cambian de tamaño correctamente durante una fracción de segundo antes de volver al tamaño predeterminado más pequeño. Y si ejecuto los métodos anteriores después de la inicialización, la ventana de emacs cambia de tamaño correctamente. ¿Qué demonios está pasando aquí?

[p.s. hay otros SO preguntas sobre esto, pero ninguna de las respuestas funcionan]


Actualización:

Las respuestas me hacen pensar que algo más en mi archivo de inicio está causando el problema. ¡Y de hecho lo es! Después de algunos intentos y errores, encontré al culpable. Si os comentaba la siguiente línea, todo funciona a la perfección:

(tool-bar-mode -1) 

Lo que en el mundo no la barra de herramientas tiene que ver con la maximización de ventanas?

Entonces la pregunta ahora es: ¿cómo puedo deshabilitar la barra de herramientas (después de todo, la barra de herramientas de emacs es fea y ocupa una valiosa pantalla inmobiliaria) Y maximizar las ventanas tanto en mi archivo init? ¿Es posiblemente un error que la barra de herramientas interfiera con el tamaño de las ventanas?

Aclaración: (tool-bar-mode -1) apaga la barra de herramientas, pero esta línea interfiere con la maximización de las ventanas de Emacs. Entonces, si intento poner funciones para maximizar las ventanas y desactivar la barra de herramientas, la parte de maximizar fallará; si la parte de la barra de herramientas está comentada, la parte de maximizar funcionará bien. Ni siquiera importa qué soluciones use (entre las 4 que enumeré).


Solución: (o al menos lo que el trabajo para mí ahora)

Esto es probablemente un error en Emacs. La solución alternativa es deshabilitar la barra de herramientas a través del Registro, no en .emacs. Guarde lo siguiente como a.archivo del registro, y ejecutar ese archivo en el Explorador de Windows:

Windows Registry Editor Version 5.00 

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

(Esta solución es una versión de trabajo de lo que sugirió OtherMichael).

+0

¿Estás comenzando emacs a través de acceso directo o desde la línea de comandos? –

+0

Lo inicio con el contenedor runemacs.exe, que, si lo entiendo correctamente, simplemente ejecute el binario de emacs sin un indicador de línea de comando en Windows. Si está a punto de sugerir la opción de -geometría, eso no es útil para mí, ya que tengo demasiados lugares que comienzan emacs de forma independiente con otras opciones y cambiar todos ellos para incluir la opción -geometry no es práctico ... – polyglot

+0

Iba a sugerir -fs, pero la misma diferencia en términos de practicidad. –

Respuesta

25

He encontrado an answer a year-or-so back que explica que tiene que manipular el registro para hacer las cosas bien:

Para iniciar Emacs maximizada poner esta línea al final de su archivo ~/.emacs:

(w32-send-sys-command 61488) 

Si no desea que la barra de herramientas de Emacs puede agregar la línea (herramienta-bar-mode-1) [NOTA: el valor es 0 en la página original] en su archivo ~/.emacs, pero Emacs no maximizará en este caso - la propiedad real ocupada por la barra de herramientas es perdida. Usted tiene que desactivar la barra de herramientas en el registro de recuperarlo:

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

Si nos fijamos en el EmacsWiki bajo W32SendSys command-codes usted encontrará que es 61488maximizar cuadro actual

+0

Ya tengo el comando w32-send-sys en mi archivo .emacs, y funciona SÓLO SI no especifiqué (tool-bar-mode -1) en mi archivo .emacs en algún lugar. El truco de registro para desactivar la barra de herramientas no funciona para mí, aunque ... – polyglot

+0

Después de algunos retoques, descubro que en lugar de crear una clave, Emacs responderá a Emacs.Toolbar como un valor dentro de la clave de Emacs. También el valor debe ser -1. Entonces voila, finalmente! Publiqué una solución de trabajo en mi pregunta como una actualización. – polyglot

+0

Comprobé dos veces, y aunque la página original dice (tool-bar-mode 0), my .emacs tiene (tool-bar-mode -1); ahora reflejado arriba. Sin embargo, mi valor de registro sigue siendo 0, no -1. hunh. –

1

¡Hola, buena función! Gracias por publicar

Creo que puede no estar funcionando para usted porque tiene un código que se parece al siguiendo en otro lugar en su archivo init. Al-frame-alist predeterminado se aplica después de crear el marco. Eliminé los elementos de tamaño y posición y tu función funciona muy bien en el arranque de emacs.

(setq default-frame-alist 
    (list 
     (cons 'left     350) 
     (cons 'top     0) 
     (cons 'width    80) 
     (cons 'height    45) 
    ...... 
0
(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)) 

siguiente es la última función llamada en mi .emacs archivos que establece el alto y el ancho de la pantalla que hace el trabajo en ambos emacs emacs 22 y 23 en debian y Mac OS X. establece los números de alto y ancho de acuerdo a tu pantalla.

0

Para desactivar la barra de herramientas, agregue la línea

(tool-bar-mode nil) 

a su archivo de personalización (por lo general .emacs en el directorio raíz).

+0

Creo que malinterpretaste mi pregunta. (tool-bar-mode nil) y (tool-bar-mode -1) hace lo mismo, y (tool-bar-mode -1) es exactamente lo que tengo en mi archivo .emacs Y es la causa de Emacs no maximizando correctamente – polyglot

10

En X.org la llamada al sistema es (ya que lo preguntas originalmente para una solución multiplataforma):

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

¡Gracias! Esto funciona bien para mi. (Usando Xubuntu.) Cuando enlace el comando a un botón, y lo presiono repetidamente, el cuadro cambia cíclicamente entre tres estados: normal, maximizado y algún estado extraño donde es un poco más alto de lo normal, pero no tan alto como sea posible. Pero ese es un problema menor. –

2

Otra forma de resolver ese problema es poner retardo entre

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

y puesta en marcos funciones *. Por ejemplo:

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

¡También es esencial poner retraso entre las funciones set-frame- *!

3

Primero, gracias por la sugerencia sobre el error con (tool-bar-mode -1); me salvó un montón de problemas! Prefiero mantener todo dentro del archivo .emacs (no hay modificaciones de registro para mí), por lo que si se enciende la barra de herramientas antes de maximización, y luego lo apaga de nuevo, usted puede maximizar muy bien:

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

esta es la solución más simple que trabajó para mí:

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

Ah, establecer las variables directamente en _emacs no funcionó para mí, pero sí lo hizo al configurarlas a través de window-setup-hook. Gracias. –

1

Si realmente desea ejecutar Emacs pantalla completa sin cromo ventana (barra de título y el botón mAX/mIN/cerrar), y luego probar el modo a continuación. Esto funcionó para mí con Emacs 23.3.1 en XP SP3.

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

1

cada uno. emacs 23.3.1, el código de soplado no es válido. porque (menu-bar-mode -1) puede causar windows no a pantalla completa también.

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

I buscar Eamcs wiki, encontrar un método utilizable.

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

MS Windows

Si está utilizando MS Windows, y desea utilizar “pantalla completa real”, es decir, deshacerse de la barra de título superior y todo, ver w32-pantalla completa en el sitio para el modo de cuarto oscuro

Como alternativa, hay un parche disponible aquí que hace que el parámetro de cuadro de pantalla completa sea realmente una pantalla completa en Windows.

para obtener una ventana maximizada puede utilizar: (w32-send-sys-comando # xf030)

¡Atención! Si quieres que Emacs se inicia maximizada, usted tiene que poner este código en el fichero .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) 
+0

hi ~ Me parece que el problema final resuelto el error method.full-screen, es la preocupación con el retraso de arranque. puede agregar el código siguiente en su función de pantalla completa, por ejemplo: (w32-send-sys-command 61488) (sleep-for 0.2) ;; demora 2 segundos, funciona en emacs 23.3.1, ¡vale! – zw963

+0

Otra manera más elegante: (run-with-idle-timer 0 nil 'maximize-frame), cuando se ejecuta la función maximize-frame, permanecerá inactivo 0 segundos, esto hará que frame pueda maximizarse correctamente – zw963

11

Dudes, lo que está mal con

emacs -mm?

Esto inicia Emacs totalmente maximizado. Póngalo en su atajo, realmente depende del administrador de ventana que use; Yo mismo lo alisto en mi .*shrc.

En una nota diferente, pero no sin relación, que, de hecho, inicie Emacs de una manera que si ya está iniciado, el archivo seleccionado se acaba de abrir un nuevo buffer en mi sesión de Emacs existente:

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

Este Puse un ~/bin/e y acabo de lanzar Emacs con "e". Hice clic derecho en un archivo de texto en el administrador de archivos, seleccioné "abrir con otro programa" e ingresé "e", y ahora solo hago doble clic en los archivos y todos se abren prolijamente en la misma sesión.

Y todo es color de rosa y lispy :)

+1

Este es de lejos el más fácil opción en mi opinión. – sma

0

El siguiente fragmento de emacswiki funcionó bien de mí: (añadir a su archivo de configuración de inicio)

(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

me encontré con un comando que parece funcionar (toggle-frame-maximized), que funciona en Linux & Windows.

acabo de cargar que cerca del final de mi archivo de inicio después de configurar todo, haciendo la suposición de que para el final de la configuración de todo voluntad no maximizarse, y listo, funciona.

2

Esto funciona de forma fiable en Emacs 24.5.1 (i686-pc-mingw32):

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