¿Cómo configuro el tamaño de la ventana de Emacs?

103

Estoy tratando de detectar el tamaño de la pantalla en la que estoy iniciando emacs y ajustar el tamaño y la posición de la ventana en la que comienza (supongo que ese es el marco en emacs-speak) en consecuencia. Estoy tratando de configurar mi .emacs para que siempre tenga una ventana "razonablemente grande" con su esquina superior izquierda cerca de la parte superior izquierda de mi pantalla.

Supongo que esta es una gran pregunta para el caso general, así que para reducir un poco las cosas, lo que más me interesa es GNU Emacs 22 en Windows y (Debian) Linux.

Tom Dunham
fuente

Respuestas:

89

Si desea cambiar el tamaño de acuerdo con la resolución, puede hacer algo como esto (ajustando el ancho y las resoluciones preferidas de acuerdo con sus necesidades específicas):

(defun set-frame-size-according-to-resolution ()
  (interactive)
  (if window-system
  (progn
    ;; use 120 char wide window for largeish displays
    ;; and smaller 80 column windows for smaller displays
    ;; pick whatever numbers make sense for you
    (if (> (x-display-pixel-width) 1280)
           (add-to-list 'default-frame-alist (cons 'width 120))
           (add-to-list 'default-frame-alist (cons 'width 80)))
    ;; for the height, subtract a couple hundred pixels
    ;; from the screen height (for panels, menubars and
    ;; whatnot), then divide by the height of a char to
    ;; get the height we want
    (add-to-list 'default-frame-alist 
         (cons 'height (/ (- (x-display-pixel-height) 200)
                             (frame-char-height)))))))

(set-frame-size-according-to-resolution)

Tenga en cuenta que el sistema de ventanas está obsoleto en las versiones más recientes de emacs. Un reemplazo adecuado es (display-graphic-p). Vea esta respuesta a la pregunta ¿Cómo detectar que emacs está en modo terminal? para un poco más de antecedentes.

Bryan Oakley
fuente
Me gustan los números diferentes, así que (como sugieres) modifiqué el mío. Sin embargo, esto funciona muy bien; ¡gracias!
lindes
Por otra parte, en realidad me gusta más esta versión , mucho más simple (fácil de leer y modificar) y se adapta bien a mis necesidades. ¡Sin embargo, ambas son buenas respuestas! +1
lindes
1
Tenga cuidado con la altura, al menos en Emacs 24.2 en OS X. Si lo establece en una fila demasiado alta, las ventanas se atascarán en un estado en el que la primera fila del búfer no es visible: el punto puede navegar allí, pero la ventana no se desplazará para mostrarlo.
Greg Hendershott
2
Hay un artefacto menor con este método (y con otros enumerados aquí). Emacs se abrirá con un cierto tamaño y después de una fracción de segundo se redimensionará al tamaño w / e que establezcamos. Pero la transición es visible. ¿Hay alguna manera de decirle a emacs que se dibuja a sí mismo con el tamaño deseado de t = 0 seg?
Stathisk
48

Tengo lo siguiente en mi .emacs:

(if (window-system)
  (set-frame-height (selected-frame) 60))

También puede buscar en las funciones set-frame-size, set-frame-positiony set-frame-width. Utilice C-h f(también conocido como M-x describe-function) para mostrar documentación detallada.

No estoy seguro de si hay una forma de calcular la altura / ancho máximo de un marco en el entorno de ventanas actual.

Chris Conway
fuente
12
¡Hurra! (if (window-system) (set-frame-size (selected-frame) 124 40))para ganar, tan agradable y conciso, y me da el tamaño predeterminado de mi Terminal, lo cual es agradable y familiar. :) (Ajuste según las preferencias, por supuesto.) ¡Gracias!
lindes
1
Solo para aclarar: si pones esto init.el, solo se aplica al marco inicial. Si crea un nuevo marco después de eso, la función anterior no tendrá efecto; el nuevo marco tendrá los ajustes establecidos default-frame-alist.
David J.
Esto funciona para mí, excepto que (set-frame-size (selected-frame) 80 24)me da un marco de 161 por 48; Estoy en una pantalla de 4K HIDPI, pero no esperaría que eso afectara el recuento de personajes.
charliegreen
21

Tomado de: http://www.gnu.org/software/emacs/windows/old/faq4.html

(setq default-frame-alist
      '((top . 200) (left . 400)
        (width . 80) (height . 40)
        (cursor-color . "white")
        (cursor-type . box)
        (foreground-color . "yellow")
        (background-color . "black")
        (font . "-*-Courier-normal-r-*-*-13-*-*-*-c-*-iso8859-1")))

(setq initial-frame-alist '((top . 10) (left . 30)))

La primera configuración se aplica a todos los marcos de emacs, incluido el primero que aparece cuando comienzas. La segunda configuración agrega atributos adicionales al primer cuadro. Esto se debe a que a veces es bueno conocer el marco original en el que inicia emacs.


fuente
Había usado ese método durante mucho tiempo para configurar la altura y el ancho del marco ( (width . 80) (height . 40)), pero por alguna razón, dejó de funcionar después de que actualicé mi versión de Xubuntu de 12.04 a 13.10: en el lanzamiento, el tamaño del marco era el predeterminado. Luego pasé a usar la respuesta de Chris Conway, que funciona para mí.
Teemu Leisti
17

La manera más fácil que he encontrado para hacer que en un entorno X-Window es a través de recursos X . La parte relevante de mi .Xdefaults se ve así:

Emacs.geometry: 80x70

Debería poder agregarle el sufijo + 0 + 0 coordenadas de ubicación para forzarlo a la esquina superior izquierda de su pantalla. (la razón por la que no lo hago es que ocasionalmente genero nuevos marcos, y hace que las cosas sean confusas si aparecen exactamente en la misma ubicación que la anterior)

Según el manual, esta técnica también funciona en MS Windows , almacenando los recursos como pares clave / valor en el registro. Nunca probé eso. Podría ser genial, podría ser un inconveniente mucho mayor en comparación con simplemente editar un archivo.

JB.
fuente
1
yeap también funciona para Windows. La wiki de Emacs ofrece más detalles: emacswiki.org/emacs/MsWindowsRegistry
Sa'ad
17

Intente agregar el siguiente código a .emacs

(add-to-list 'default-frame-alist '(height . 24))

(add-to-list 'default-frame-alist '(width . 80)) 
norbux
fuente
12

También puede usar el parámetro -geometry al encender emacs: emacs -geometry 80x60+20+30le dará una ventana de 80 caracteres de ancho, 60 filas de alto, con la esquina superior izquierda 20 píxeles a la derecha y 30 píxeles hacia abajo desde la esquina superior izquierda del fondo.

Graeme Perrow
fuente
7

En ubuntu hacer:

(defun toggle-fullscreen ()
  (interactive)
  (x-send-client-message nil 0 nil "_NET_WM_STATE" 32
                 '(2 "_NET_WM_STATE_MAXIMIZED_VERT" 0))
  (x-send-client-message nil 0 nil "_NET_WM_STATE" 32
                 '(2 "_NET_WM_STATE_MAXIMIZED_HORZ" 0))
)
(toggle-fullscreen)
ftravers
fuente
5

En Windows, puede maximizar el marco de emacs usando esta función:

(defun w32-maximize-frame ()
  "Maximize the current frame"
  (interactive)
  (w32-send-sys-command 61488))
Jérôme Radix
fuente
1
(setq initial-frame-alist
        (append '((width . 263) (height . 112) (top . -5) (left . 5) (font . "4.System VIO"))
                initial-frame-alist))

(setq default-frame-alist
        (append '((width . 263) (height . 112) (top . -5) (left . 5) (font . "4.System VIO"))
                default-frame-alist))
NN
fuente
0
(defun set-frame-size-according-to-resolution ()
  (interactive)
  (if window-system
  (progn
    ;; use 120 char wide window for largeish displays
    ;; and smaller 80 column windows for smaller displays
    ;; pick whatever numbers make sense for you
    (if (> (x-display-pixel-width) 1280)
           (add-to-list 'default-frame-alist (cons 'width 120))
           (add-to-list 'default-frame-alist (cons 'width 80)))
    ;; for the height, subtract a couple hundred pixels
    ;; from the screen height (for panels, menubars and
    ;; whatnot), then divide by the height of a char to
    ;; get the height we want
    (add-to-list 'default-frame-alist 
         (cons 'height (/ (- (x-display-pixel-height) 200)
                             (frame-char-height)))))))

(set-frame-size-according-to-resolution)

Prefiero la configuración de Bryan Oakley. Sin embargo, la 'altura no funciona correctamente en mi GNU Emacs 24.1.1.

SabiduríaFusión
fuente