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

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 démarre (je pense que c’est le cadre dans emacs-speak) en conséquence. J’essaie de configurer mes .emacs pour avoir toujours une fenêtre “raisonnablement grande” avec son coin supérieur gauche en haut à gauche de mon écran.

Je suppose que c’est un gros problème pour le cas général, donc je suis plus intéressé par GNU Emacs 22 sur Windows et (Debian) Linux.

Si vous voulez changer la taille en fonction de la résolution, vous pouvez faire quelque chose comme ça (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 que emacs est en mode terminal? pour un peu plus de fond

J’ai le suivant dans mes .emacs :

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

Vous pouvez également regarder les fonctions set-frame-size , set-frame-position et set-frame-width . Utilisez Ch f (aka Mx describe-function ) pour faire apparaître une documentation détaillée.

Je ne suis pas sûr qu’il existe un moyen de calculer la hauteur / largeur maximale d’une image dans l’environnement de fenêtrage actuel.

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 à toutes les images emacs, y compris la première qui apparaît lorsque vous démarrez. Le second paramètre ajoute des atsortingbuts supplémentaires à la première image. C’est parce qu’il est parfois agréable de connaître le cadre d’origine dans lequel vous démarrez emacs.

Le moyen le plus simple de le faire dans un environnement X-Window consiste à utiliser des ressources X. La partie pertinente de mes .Xdefaults ressemble à ceci:

 Emacs.geometry: 80x70 

Vous devriez pouvoir le suffixer avec les coordonnées de position + 0 + 0 pour le forcer dans le coin supérieur gauche de votre affichage. (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 en tant que 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 de simplement éditer un fichier.

Essayez d’append le code suivant à .emacs

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

Vous pouvez également utiliser le paramètre -geometry lorsque vous emacs -geometry 80x60+20+30 emacs: emacs -geometry 80x60+20+30 vous donnera une fenêtre de 80 caractères de largeur, 60 lignes de haut, le coin supérieur gauche 20 pixels à droite et 30 pixels plus bas. coin gauche de l’arrière-plan.

Sur Ubuntu faire:

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

Sur Windows, vous pouvez maximiser le cadre emacs en utilisant cette fonction:

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

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