Wie stelle ich die Größe des Emacs-Fensters ein?

103

Ich versuche, die Größe des Bildschirms zu ermitteln, auf dem ich Emacs starte, und die Größe anzupassen und das Fenster, in dem es gestartet wird, entsprechend zu positionieren (ich denke, das ist der Rahmen in Emacs-Sprache). Ich versuche, meine .emacs so einzurichten, dass ich immer ein "einigermaßen großes" Fenster mit der oberen linken Ecke oben links auf meinem Bildschirm erhalte.

Ich denke, dies ist eine große Frage für den allgemeinen Fall. Um die Dinge ein wenig einzugrenzen, bin ich am meisten an GNU Emacs 22 unter Windows und (Debian) Linux interessiert.

Tom Dunham
quelle

Antworten:

89

Wenn Sie die Größe entsprechend der Auflösung ändern möchten, können Sie Folgendes tun (Anpassung der bevorzugten Breite und Auflösung entsprechend Ihren spezifischen Anforderungen):

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

Beachten Sie, dass das Fenstersystem in neueren Versionen von Emacs veraltet ist. Ein geeigneter Ersatz ist (display-graphic-p). Siehe diese Antwort auf die Frage Wie erkennt man, dass sich Emacs im Terminalmodus befinden? für ein bisschen mehr Hintergrund.

Bryan Oakley
quelle
Ich mag verschiedene Zahlen, also habe ich (wie Sie vorschlagen) meine angepasst. Das funktioniert aber großartig; Danke!
Lindes
Andererseits mag ich diese Version tatsächlich besser - viel einfacher (leicht zu lesen und zu optimieren) und passt gut zu meinen Bedürfnissen. Beides sind jedoch gute Antworten! +1
Lindes
1
Seien Sie vorsichtig mit der Höhe, zumindest unter Emacs 24.2 unter OS X. Wenn Sie eine Zeile zu hoch einstellen, bleiben die Fenster in einem Zustand hängen, in dem die erste Zeile des Puffers nicht sichtbar ist. Der Punkt kann dort nach oben navigieren. Das Fenster wird jedoch nicht gescrollt, um es anzuzeigen.
Greg Hendershott
2
Es gibt ein kleines Artefakt bei dieser Methode (und bei anderen hier aufgeführten). Emacs wird mit einer bestimmten Größe geöffnet und nach Sekundenbruchteilen auf die von uns festgelegte Größe angepasst. Aber der Übergang ist sichtbar. Gibt es eine Möglichkeit, zu erkennen, dass sich Emacs ab t = 0 Sek. In der gewünschten Größe zeichnen?
Stathisk
48

Ich habe folgendes in meinem .emacs:

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

Sie können auch auf die Funktionen aussehen set-frame-size, set-frame-positionund set-frame-width. Verwenden Sie C-h f(aka M-x describe-function), um eine detaillierte Dokumentation aufzurufen.

Ich bin mir nicht sicher, ob es eine Möglichkeit gibt, die maximale Höhe / Breite eines Rahmens in der aktuellen Fensterumgebung zu berechnen.

Chris Conway
quelle
12
Yay! (if (window-system) (set-frame-size (selected-frame) 124 40))für den Sieg - so schön und prägnant, und ich bekomme die Größe, die mein Terminal standardmäßig verwendet, was nett und vertraut ist. :) (Natürlich nach Belieben anpassen.) Danke!
Lindes
1
Nur zur Verdeutlichung: Wenn Sie dies init.eleingeben, gilt dies nur für den Anfangsrahmen. Wenn Sie danach einen neuen Frame erstellen, hat die obige Funktion keine Auswirkung. Für den neuen Frame werden die Einstellungen vorgenommen default-frame-alist.
David J.
Dies funktioniert für mich, außer dass (set-frame-size (selected-frame) 80 24)ich einen Rahmen von 161 mal 48 habe. Ich bin auf einem 4K-Hidpi-Bildschirm, aber ich würde nicht erwarten, dass sich dies auf die Anzahl der Zeichen auswirkt.
Charliegreen
21

Entnommen aus: 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)))

Die erste Einstellung gilt für alle Emacs-Frames, einschließlich des ersten, der beim Start angezeigt wird. Die zweite Einstellung fügt dem ersten Frame zusätzliche Attribute hinzu. Dies liegt daran, dass es manchmal schön ist, den Originalrahmen zu kennen, in dem Sie Emacs starten.


quelle
Ich hatte diese Methode lange Zeit verwendet, um die Höhe und Breite des Rahmens festzulegen ( (width . 80) (height . 40)), aber aus irgendeinem Grund funktionierte sie nicht mehr, nachdem ich meine Xubuntu-Version von 12.04 auf 13.10 aktualisiert hatte: Beim Start war die Rahmengröße die Standardeinstellung. Ich wechselte dann zu Chris Conways Antwort, die für mich funktioniert.
Teemu Leisti
17

Der einfachste Weg, dies in einer X-Window-Umgebung zu tun, sind X- Ressourcen . Der relevante Teil meiner .Xdefaults sieht folgendermaßen aus:

Emacs.geometry: 80x70

Sie sollten in der Lage sein, es mit + 0 + 0 Positionskoordinaten zu versehen, um es in die obere linke Ecke Ihrer Anzeige zu zwingen. (Der Grund, warum ich das nicht mache, ist, dass ich gelegentlich neue Frames spawne, und es macht die Dinge verwirrend, wenn sie genau an der gleichen Stelle wie die vorherige erscheinen.)

Laut Handbuch funktioniert diese Technik auch unter MS Windows und speichert die Ressourcen als Schlüssel / Wert-Paare in der Registrierung. Das habe ich nie getestet. Es könnte großartig sein, es könnte viel unangenehmer sein, als einfach eine Datei zu bearbeiten.

JB.
quelle
1
yeap funktioniert auch für Windows. Emacs Wiki gibt weitere Details: emacswiki.org/emacs/MsWindowsRegistry
Sa'ad
17

Versuchen Sie, den folgenden Code hinzuzufügen .emacs

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

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

Sie können auch den Parameter -geometry verwenden, wenn Sie Emacs starten: emacs -geometry 80x60+20+30Sie erhalten ein Fenster mit einer Breite von 80 Zeichen und einer Höhe von 60 Zeilen, wobei die obere linke Ecke 20 Pixel nach rechts und 30 Pixel nach unten von der oberen linken Ecke des Hintergrunds entfernt ist.

Graeme Perrow
quelle
7

Auf Ubuntu tun:

(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
quelle
5

Unter Windows können Sie den Emacs-Frame mit dieser Funktion maximieren:

(defun w32-maximize-frame ()
  "Maximize the current frame"
  (interactive)
  (w32-send-sys-command 61488))
Jérôme Radix
quelle
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
quelle
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)

Ich bevorzuge Bryan Oakleys Einstellungen. Allerdings funktioniert die Höhe in meinem GNU Emacs 24.1.1 nicht richtig.

WisdomFusion
quelle