Comment définir la taille de la fenêtre d'Emacs?

103

J'essaie de détecter la taille de l'écran sur lequel je lance emacs, et d'ajuster la taille et la position de la fenêtre dans laquelle il commence (je suppose que c'est le cadre dans emacs-speak) en conséquence. J'essaye de configurer mes .emacs de sorte que j'obtienne toujours une fenêtre "raisonnablement grande" avec son coin supérieur gauche près du coin supérieur gauche de mon écran.

Je suppose que c'est une grande demande pour le cas général, donc pour affiner un peu les choses, je suis plus intéressé par GNU Emacs 22 sous Windows et (Debian) Linux.

Tom Dunham
la source

Réponses:

89

Si vous souhaitez modifier la taille en fonction de la résolution, vous pouvez faire quelque chose comme ceci (ajuster la largeur et les résolutions préférées en fonction de vos besoins spécifiques):

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

Notez que window-system est obsolète dans les nouvelles versions d'emacs. Un remplacement approprié est (display-graphic-p). Voir cette réponse à la question Comment détecter qu'emacs est en mode terminal? pour un peu plus de fond.

Bryan Oakley
la source
J'aime des nombres différents, alors (comme vous le suggérez) j'ai modifié le mien. Cela fonctionne très bien, cependant; Merci!
lindes
Là encore, j'aime mieux cette version - beaucoup plus simple (facile à lire et à modifier), et convient bien à mes besoins. Les deux sont de bonnes réponses, cependant! +1
lindes
1
Soyez prudent avec la hauteur, au moins sur Emacs 24.2 sous OS X. Si vous le définissez une ligne trop haut, les fenêtres seront bloquées dans un état où la première ligne du tampon n'est pas visible - le point peut naviguer vers le haut, mais la fenêtre ne défilera pas pour l'afficher.
Greg Hendershott
2
Il y a un artefact mineur avec cette méthode (et avec d'autres énumérés ici). Emacs s'ouvrira avec une certaine taille et après une fraction de seconde se redimensionnera à la taille w / e que nous avons définie. Mais la transition est visible. Existe-t-il un moyen de dire à emacs de se dessiner à la taille souhaitée à partir de t = 0 sec?
stathisk
48

J'ai ce qui suit dans mon .emacs:

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

Vous pouvez regarder également les fonctions set-frame-size, set-frame-positionet set-frame-width. Utilisez C-h f(aka M-x describe-function) pour afficher une documentation détaillée.

Je ne sais pas s'il existe un moyen de calculer la hauteur / largeur maximale d'un cadre dans l'environnement de fenêtrage actuel.

Chris Conway
la source
12
Yay! (if (window-system) (set-frame-size (selected-frame) 124 40))pour la victoire - si beau et concis, et me donne la taille par défaut de mon terminal, ce qui est agréable et familier. :) (Ajustez selon vos préférences, bien sûr.) Merci!
lindes
1
Juste pour clarifier: si vous mettez cela, init.elcela ne s'applique qu'à l'image initiale. Si vous créez un nouveau cadre après cela, la fonction ci-dessus n'aura aucun effet; le nouveau cadre aura les paramètres définis default-frame-alist.
David J.
Cela fonctionne pour moi sauf que cela (set-frame-size (selected-frame) 80 24)me donne un cadre de 161 par 48; Je suis sur un écran 4K hidpi, mais je ne m'attendrais pas à ce que cela affecte le nombre de caractères.
charliegreen
21

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

Le premier paramètre s'applique à tous les cadres emacs, y compris le premier qui apparaît lorsque vous démarrez. Le deuxième paramètre ajoute des attributs supplémentaires à la première image. En effet, il est parfois agréable de connaître le cadre d'origine dans lequel vous démarrez emacs.


la source
J'avais utilisé cette méthode pendant un long moment pour définir la hauteur et la largeur du cadre ( (width . 80) (height . 40)), mais pour une raison quelconque, cela a cessé de fonctionner après la mise à niveau de ma version Xubuntu de 12.04 à 13.10: au lancement, la taille du cadre était la valeur par défaut. Je suis ensuite passé à la réponse de Chris Conway, qui fonctionne pour moi.
Teemu Leisti
17

La meilleure façon que je l' ai trouvé à faire dans un environnement X Window est par les ressources X . La partie pertinente de mon .Xdefaults ressemble à ceci:

Emacs.geometry: 80x70

Vous devriez pouvoir le suffixer avec les coordonnées de localisation + 0 + 0 pour le forcer dans le coin supérieur gauche de votre écran. (la raison pour laquelle je ne le fais pas est que je crée occasionnellement de nouvelles images, et cela rend les choses confuses si elles apparaissent exactement au même endroit que la précédente)

Selon le manuel, cette technique fonctionne également sur MS Windows , en stockant les ressources sous forme de paires clé / valeur dans le registre. Je n'ai jamais testé ça. Cela peut être génial, cela peut être beaucoup plus gênant que la simple modification d'un fichier.

JB.
la source
1
yeap fonctionne également pour Windows. Le wiki Emacs donne plus de détails: emacswiki.org/emacs/MsWindowsRegistry
Sa'ad le
17

Essayez d'ajouter le code suivant à .emacs

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

(add-to-list 'default-frame-alist '(width . 80)) 
Norbux
la source
12

Vous pouvez également le paramètre -geometry lors du lancement d'emacs: emacs -geometry 80x60+20+30vous donnera une fenêtre de 80 caractères de large, 60 lignes de haut, avec le coin supérieur gauche à 20 pixels à droite et 30 pixels en bas à partir du coin supérieur gauche de l'arrière-plan.

Graeme Perrow
la source
7

Sur ubuntu faites:

(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)
traverseurs
la source
5

Sous Windows, vous pouvez agrandir le cadre emacs en utilisant cette fonction:

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

Je préfère les réglages de Bryan Oakley. Cependant, la hauteur ne fonctionne pas correctement dans mon GNU Emacs 24.1.1.

SagesseFusion
la source