Je recherche un moyen d'ajouter une nouvelle fenêtre pleine hauteur à une configuration de fenêtre existante (divisée). Parce que je ne sais pas comment l'expliquer correctement, je posterai juste quelques graphiques ASCII montrant le comportement souhaité pour deux exemples de configurations de fenêtres:
from to +-------------------------+ +---------------------+---+ | | | | | | | | | | | A | => | A | E | | | | | | | | | | | +-------------------------+ +---------------------+---+ +------------+------------+ +----------+----------+---+ | | B | | | B | | | A +------------+ | A +----------+ | | | C | => | | C | E | +------------+------------+ +----------+----------+ | | D | | D | | +-------------------------+ +---------------------+---+
où la fonction accepte la largeur souhaitée de la nouvelle fenêtre E
et se rétrécit la largeur de A
, B
, C
, et en D
conséquence. Edit2 : Notez que les deux dessins ci-dessus sont des exemples du comportement attendu pour un cas concret. Je cherche une fonction générale qui le fait indépendamment de la configuration dans la colonne from (c'est-à-dire que le nombre de fenêtres [splits] dans la colonne from devrait être arbitraire).
Je recherche également cette fonctionnalité sur le côté gauche et en haut et en bas d'un cadre.
Edit: À partir du commentaire de @ Nsukami_, j'ai réalisé que la fonctionnalité que je recherche est un cas particulier d'un problème plus abstrait. Je vais donc formuler ce problème:
Comment stockez-vous une configuration de fenêtre (composée d'un certain nombre de fenêtres et de tampons) et "collez" la configuration stockée dans une fenêtre existante?
La "pâte" devrait alors conserver les tailles de fenêtre relatives et le fractionnement; naturellement, la configuration collée résultante est une copie à l'échelle.
split-window-right
asC-u -width C-x 3
. Changez lewidth
en ce que vous voulez et notez le signe négatif.A
,B
,C
etD
), puis insérer cette disposition dans une nouvelle fenêtre? Ensuite, mon problème pourrait être résolu en 1) stockant la configuration de la fenêtre actuelle, 2) en changeant la disposition pour afficher une seule fenêtre qui est ensuite divisée horizontalement [formant essentiellement la fenêtre pourE
et la fenêtre d'espace réservé pour les autres, appelons-laZ
], 3 ) enfin insertion de la mise en page d'origine dans la fenêtre de gauche (Z
)Réponses:
La fonction suivante devrait faire ce que vous voulez. L'astuce consiste à diviser la fenêtre racine de l'image actuelle.
Appelez la fonction avec la direction dans laquelle vous divisez la fenêtre et la taille de la nouvelle fenêtre. Ce qui précède renvoie la fenêtre nouvellement créée. Le concept, les fenêtres et les cadres sont très bien expliqués dans le manuel de référence GNU Emacs Lisp .
la source
Je ne sais pas si la meilleure solution, car pas assez abstraite, je ne résous en fait qu'un seul cas d'utilisation. L'astuce consiste à écrire une fonction pour passer de layoutX à layoutY, et une autre pour passer de layoutY à layoutX
J'espère que cette solution vous aidera
Je viens de trouver un package nommé layout.el , je ne l'ai jamais utilisé mais il semble être ce que vous cherchez, vous nous direz si ça va.
ÉDITER:
En essayant de trouver une solution plus générique, il semble que vous pouvez utiliser
M-x switch-to-buffer-other-frame
pour passer d'un tampon dans un cadre, disons avec une disposition X, à un autre tampon dans un autre cadre avec une disposition Y.Vous pouvez également être dans une disposition X, stocker cette disposition dans un registre
C-x r f
(frame-configuration-to-register), passer à une autre disposition et, si nécessaire, revenir à la précédente, en appelant ce qui se trouve à l'intérieur du registreC-x r j
(jump- enregistrer)la source
layout.el
revient àwinner
: (re) stocker la configuration de la fenêtre du cadre complet, ne pas stocker la configuration complète et la restaurer dans une fenêtre existante. Par contre, la fonction que vous avez écrite n'est pas la solution générale que je recherche. Ils résolvent mon deuxième exemple, qui n'était pas censé être le problème concret mais seulement un exemple. Je recherche une solution qui fonctionne dans le cas général.switch-to-buffer-other-frame
si «de» est un cadre et «à» est un autre cadre