J'essaie de détecter la taille de l'écran sur lequel je démarre emacs, et d'ajuster la taille et de positionner la fenêtre dans laquelle il démarre (je suppose que c'est le cadre dans emacs-speak) en conséquence. J'essaie de configurer mon .emacs de manière à toujours avoir 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 un gros demander le cas général, donc pour affiner un peu les choses, je suis le plus intéressé par GNU Emacs 22 sur Windows et (Debian) Linux.
Si vous souhaitez modifier la taille en fonction de la résolution, vous pouvez faire quelque chose comme ceci (en ajustant 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 le système de fenêtres est déconseillé 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 ce qui suit dans mon .emacs
:
(if (window-system)
(set-frame-height (selected-frame) 60))
Vous pouvez également consulter les fonctions set-frame-size
, set-frame-position
, et set-frame-width
. Utilisation C-h f
(alias 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.
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 façon la plus simple que j'ai trouvée de le faire dans un environnement X-Window est d'utiliser 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 affichage. (la raison pour laquelle je ne le fais pas est que je crée occasionnellement de nouveaux cadres, et cela rend les choses confuses si elles apparaissent exactement au même endroit que le précédent)
Selon le manuel, cette technique fonctionne également sur MS Windows , stockant les ressources sous forme de paires clé/valeur dans le registre. Je n'ai jamais testé ça. Cela pourrait être génial, cela pourrait être bien plus gênant que de simplement modifier un fichier.
Essayez d'ajouter 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 lors du lancement d'emacs: emacs -geometry 80x60+20+30
vous 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 vers le bas à partir du coin supérieur gauche de l'arrière-plan.
Sur ubuntu do:
(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)
Sous 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, 'height ne fonctionne pas correctement dans mon GNU Emacs 24.1.1.