Comment changer la taille des fenêtres Emacs en écran partagé?

172

J'ai emacs divisé horizontalement - en haut j'édite du code Perl, le bas est le shell. Par défaut, emacs rend les deux fenêtres égales en taille, mais j'aimerais que le tampon shell soit plus petit (peut-être la moitié de la taille?). Je me demandais comment je pourrais faire cela.

Steve
la source

Réponses:

294

Avec la souris, vous pouvez faire glisser les tailles de fenêtre.

Cliquez n'importe où sur la ligne de mode qui n'est pas autrement «active» (le nom de la mémoire tampon est sûr, ou toute zone inutilisée sur le côté droit), et vous pouvez faire glisser vers le haut ou vers le bas.

Le glissement côte à côte nécessite un clic très précis à l'endroit où les deux lignes de mode se rejoignent.

C-x -( shrink-window-if-larger-than-buffer) réduira une fenêtre pour l'adapter à son contenu.

C-x +( balance-windows) donnera aux fenêtres les mêmes hauteurs et largeurs.

C-x ^( enlarge-window) augmente la hauteur d'une ligne ou la valeur du préfixe arg. Un argument négatif réduit la fenêtre. par exemple, C-- C-1 C-6 C-x ^se réduit de 16 lignes, comme le fait C-u - 1 6 C-x ^.

(Il n'y a pas de liaison par défaut pour shrink-window.)

C-x }( enlarge-window-horizontally) fait de même, horizontalement.
C-x {( shrink-window-horizontally) est également lié par défaut.

Suivre l'une de ces commandes avec repeat( C-x zpour lancer, et juste zpour la répétition continue) permet d'obtenir assez facilement la taille exacte que vous voulez.

Si vous souhaitez régulièrement le faire avec une valeur spécifique, vous pouvez enregistrer une macro de clavier pour le faire ou utiliser quelque chose comme
(global-set-key (kbd "C-c v") (kbd "C-u - 1 6 C-x ^"))

Ou ca:
(global-set-key (kbd "C-c v") (kbd "C-x o C-x 2 C-x 0 C-u - 1 C-x o"))

Ce qui est un petit piratage, alors ce serait mieux:

(defun halve-other-window-height ()
  "Expand current window to use half of the other window's lines."
  (interactive)
  (enlarge-window (/ (window-height (next-window)) 2)))

(global-set-key (kbd "C-c v") 'halve-other-window-height)

Tangentiellement, j'aime aussi winner-modece qui vous permet d'annuler à plusieurs reprises les modifications apportées aux configurations de fenêtres avec C-c left(que le changement soit la taille / le nombre / la disposition des fenêtres, ou simplement quel tampon est affiché). C-c rightvous ramène à la configuration la plus récente. Définissez-le globalement avec(winner-mode 1)

phils
la source
3
Génial, exactement ce que je voulais! Merci beaucoup!
Steve
1
+1: merci pour le conseil du mode gagnant «annuler». btw, dans mon cas, un clic sur le nom du tampon ouvre le tampon suivant. Mais il est facile de voir quand vous pouvez redimensionner en regardant la forme du curseur de la souris.
jfs
34

Je les mets dans mon .emacs:

(global-set-key (kbd "<C-up>") 'shrink-window)
(global-set-key (kbd "<C-down>") 'enlarge-window)
(global-set-key (kbd "<C-left>") 'shrink-window-horizontally)
(global-set-key (kbd "<C-right>") 'enlarge-window-horizontally)
Wilbeibi
la source
Les deux premiers ne fonctionnent pas pour moi dans Emacs 24.3.1 sur Mac OSX 10.9.1
Oskar Persson
1
@OskarPersson Cela pourrait être le conflit avec les raccourcis globaux. Découvrez-le de préférence ou remappez le contrôle au verrouillage des majuscules (à ma façon), cela devrait fonctionner alors.
wilbeibi le
J'ai eu le même problème et j'ai découvert que C-gauche et C-droite étaient en conflit avec les raccourcis Mission Control dans les préférences système OS X, comme décrit par @Wilbeibi.
Doug Richardson
1
Ces clés sont déjà définies, désactivez d'abord les clés avec (global-set-key (kbd "<C-up>") nil)avant de les définir, mais il serait préférable de les utiliser à la M-leftplace
Mauricio Cortazar
@MauricioCortazar Je n'utilise pas Emacs depuis des années. Cette réponse peut ne pas s'appliquer maintenant. N'hésitez pas à le mettre à jour.
wilbeibi
14

essayons d'utiliser le document d'aide emacs.

C-h a

Tapez ensuite "agrandir" ou "fenêtre"

Vous trouverez ce que vous voulez.

Prendre plaisir!

maoyang
la source
Il est possible que l'on travaille dans un environnement qui C-hn'est pas disponible. Et alors?
Derrell Durrett
1
Si vous avez mis à mal la carte d'aide standard obligatoire, alors vous devriez certainement être au courant de ce que vous avez mis à mal ce avec . (À défaut, essayez <f1>quelle est l' autre liaison de carte d'aide standard.)
phils
6

C-x oà la fenêtre dont vous souhaitez agrandir la taille. À partir de là, C-x ^pour l'étendre.

vpit3833
la source
3
Si les liaisons sont différentes (les miennes le sont), la commande est enlarge-window. Une astuce supplémentaire consiste à utiliser un préfixe arg pour contrôler la quantité d'expansion.
Joseph Gay
Impressionnant! Merci beaucoup!
Steve
6

C-x ^prend des arguments numériques positifs et négatifs. En particulier, si vous souhaitez réduire la fenêtre où se trouve actuellement votre curseur de quatre lignes, vous pouvez appuyer sur C-u -4 C-x ^.

justinpc
la source
2

Ce n'est pas la réponse exacte que vous recherchez, mais je suis tombé sur cette question en recherchant la fonctionnalité dans spacemacs, donc j'écrirai ma réponse juste pour être complète.

L'option est d'utiliser <SPC> + w + .(cela fonctionne dans les spacemacs vanille)

Cela ouvre une fenêtre transitoire où l'on peut utiliser []{}pour redimensionner à un niveau granulaire.

Il n'y a pas besoin de Cx ou de souris ...

État transitoire de manipulation de fenêtre

Oui
la source
s'il y a quelque chose de similaire dans les emacs réguliers?
krokodil
Ce n'est probablement pas là, c'est pourquoi Drew a posé cette question en premier lieu ...
Oui
0

J'ai la même question. Voici ma solution.
Je définis d'abord une nouvelle fonction:

(defun buffer-resize ()
  (delete-other-windows)
  (split-window-vertically (floor (* 0.68 (window-height))))
  (other-window 1)
  (switch-to-buffer buf)
  (other-window 1))

Par exemple, je veux exécuter le schéma dans un tampon, donc je le réécris.
Et voici la définition, avec la fonction définie précédemment:

(defun run-scheme-here ()
  "Run a new scheme process at the directory of the current buffer.
   If a process is already running, switch to its buffer."
  (interactive)
  (let* ((proc (format "scheme: %s" default-directory))
         (buf (format "*%s*" proc)))
    (unless (comint-check-proc buf)
      (let ((cmd (split-string scheme-program-name)))
        (set-buffer
         (apply 'make-comint-in-buffer proc buf (car cmd) nil (cdr cmd)))
        (inferior-scheme-mode)
        (buffer-resize)))
    (pop-to-buffer buf)))

Alors maintenant, quand j'entre: Mx run-scheme-here, le tampon est redimensionné!
Et voici mon fichier de configuration, en espérant que cela vous aidera. https://github.com/judevc/dotfiles/blob/master/.emacs.d/scheme-conf.el


la source
3
votre lien est rompu :(
Ciprian Tomoiagă