Come imposto la dimensione della finestra di Emacs?


103

Sto cercando di rilevare la dimensione dello schermo su cui sto avviando emacs e di regolare di conseguenza le dimensioni e la posizione della finestra in cui inizia (immagino che sia il frame in emacs-speak). Sto cercando di impostare il mio .emacs in modo da ottenere sempre una finestra "ragionevolmente grande" con l'angolo in alto a sinistra vicino all'angolo in alto a sinistra dello schermo.

Immagino che questa sia una grande richiesta per il caso generale, quindi per restringere un po 'le cose sono più interessato a GNU Emacs 22 su Windows e (Debian) Linux.

Risposte:


89

Se vuoi cambiare le dimensioni in base alla risoluzione puoi fare qualcosa del genere (regolando la larghezza e le risoluzioni preferite in base alle tue esigenze specifiche):

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

Nota che il sistema a finestre è deprecato nelle versioni più recenti di emacs. Un sostituto adatto è (display-graphic-p). Vedi questa risposta alla domanda Come rilevare che emacs è in modalità terminale? per un po 'più di sfondo.


Mi piacciono i numeri diversi, quindi (come suggerisci) ho modificato il mio. Funziona benissimo, però; grazie!
Lindes

Poi di nuovo, in realtà mi piace di più questa versione - molto più semplice (facile da leggere e modificare) e si adatta bene alle mie esigenze. Entrambe sono buone risposte, però! +1
Lindes

1
Fai attenzione all'altezza, almeno su Emacs 24.2 su OS X. Se imposti una riga troppo alta, le finestre saranno bloccate in uno stato in cui la prima riga del buffer non è visibile - point può navigare lassù, ma la finestra non scorre per visualizzarlo.
Greg Hendershott

2
C'è un artefatto minore con questo metodo (e con altri elencati qui). Emacs si aprirà con una certa dimensione e dopo una frazione di secondo si ridimensionerà alla dimensione che abbiamo impostato. Ma la transizione è visibile. C'è un modo per dire a emacs di disegnare se stesso alla dimensione desiderata da t = 0 sec?
stathisk

48

Ho quanto segue nel mio .emacs:

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

Si potrebbe anche guardare le funzioni set-frame-size, set-frame-positione set-frame-width. Usa C-h f(aka M-x describe-function) per visualizzare la documentazione dettagliata.

Non sono sicuro che ci sia un modo per calcolare l'altezza / larghezza massima di un frame nell'ambiente a finestre corrente.


12
Sìì! (if (window-system) (set-frame-size (selected-frame) 124 40))per la vittoria - così carino e conciso, e mi fa ottenere le dimensioni predefinite del mio terminale, che è carino e familiare. :) (Regola in base alle preferenze, ovviamente.) Grazie!
Lindes

1
Giusto per chiarire: se ci metti questo init.elsi applica solo al frame iniziale. Se si crea un nuovo frame dopo di che, la funzione sopra non avrà effetto; il nuovo frame avrà le impostazioni impostate in default-frame-alist.
David J.

Questo funziona per me tranne che (set-frame-size (selected-frame) 80 24)mi dà un frame 161 per 48; Sono su uno schermo hidpi 4K, ma non mi aspetto che ciò influisca sul conteggio dei caratteri.
charliegreen

21

Tratto da: 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 prima impostazione si applica a tutti i frame di emacs incluso il primo che compare all'avvio. La seconda impostazione aggiunge ulteriori attributi al primo fotogramma. Questo perché a volte è bello conoscere il frame originale in cui avvii emacs.


Ho usato quel metodo per molto tempo per impostare l'altezza e la larghezza del frame ( (width . 80) (height . 40)), ma per qualche motivo ha smesso di funzionare dopo aver aggiornato la mia versione di Xubuntu dalla 12.04 alla 13.10: al momento del lancio, la dimensione del frame era quella predefinita. Sono quindi passato a utilizzare la risposta di Chris Conway, che per me funziona.
Teemu Leisti

17

Il modo più semplice che ho trovato per farlo in un ambiente X-Window è attraverso risorse X . La parte rilevante dei miei .Xdefaults è simile a questa:

Emacs.geometry: 80x70

Dovresti essere in grado di aggiungere come suffisso + 0 + 0 coordinate di posizione per forzarlo nell'angolo in alto a sinistra del display. (il motivo per cui non lo faccio è che di tanto in tanto generano nuovi fotogrammi e rende le cose confuse se appaiono nella stessa identica posizione del precedente)

Secondo il manuale, questa tecnica funziona anche su MS Windows , memorizzando le risorse come coppie chiave / valore nel registro. Non l'ho mai provato. Potrebbe essere fantastico, potrebbe essere molto più un inconveniente rispetto alla semplice modifica di un file.


1
yeap funziona anche per Windows. Il wiki di Emacs fornisce maggiori dettagli: emacswiki.org/emacs/MsWindowsRegistry
Sa'ad

17

Prova ad aggiungere il seguente codice a .emacs

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

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

12

Puoi anche usare il parametro -geometry quando attivi emacs: emacs -geometry 80x60+20+30ti darà una finestra larga 80 caratteri, alta 60 righe, con l'angolo in alto a sinistra di 20 pixel a destra e 30 pixel in basso dall'angolo in alto a sinistra dello sfondo.


7

Su Ubuntu fai:

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

5

Su Windows, puoi massimizzare il frame di emacs usando questa funzione:

(defun w32-maximize-frame ()
  "Maximize the current frame"
  (interactive)
  (w32-send-sys-command 61488))

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

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)

Preferisco le impostazioni di Bryan Oakley. Tuttavia l 'altezza non funziona correttamente nel mio GNU Emacs 24.1.1.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.