Domanda

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 si avvia (immagino che sia il frame in emacs).Sto cercando di impostare il mio .emacs in modo da avere sempre una finestra "ragionevolmente grande" con l'angolo in alto a sinistra vicino all'angolo in alto a sinistra dello schermo.

Immagino che questo sia un grande chiedi il caso generale, quindi per restringere un po' il campo mi interessa di più GNU Emacs 22 su Windows e (Debian) Linux.

È stato utile?

Soluzione

Se vuoi modificare 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)

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

Altri suggerimenti

Ho quanto segue nel mio .emacs:

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

Potresti anche dare un'occhiata alle funzioni set-frame-size, set-frame-position, E set-frame-width.Utilizzo C-h f (aka M-x describe-function) per visualizzare la documentazione dettagliata.

Non sono sicuro che esista un modo per calcolare l'altezza/larghezza massima di un frame nell'attuale ambiente di finestre.

Preso 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 appare all'avvio.La seconda impostazione aggiunge ulteriori attributi al primo fotogramma.Questo perché a volte è utile conoscere il frame originale in cui si avvia emacs.

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

Emacs.geometry: 80x70

Dovresti essere in grado di aggiungergli il suffisso +0+0 coordinate di posizione per forzarlo nell'angolo in alto a sinistra del display.(il motivo per cui non lo faccio è che occasionalmente genera nuovi frame e crea confusione se appaiono esattamente nella stessa 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.

Prova ad aggiungere il seguente codice a .emacs

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

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

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

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)

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

(defun w32-maximize-frame ()
  "Maximize the current frame"
  (interactive)
  (w32-send-sys-command 61488))
(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))
(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 ambientazioni di Bryan Oakley.Comunque, il 'altezza non funziona correttamente nel mio GNU Emacs 24.1.1.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top