Encyclopédie de la gestion des fenêtres dans Emacs
(karthinks.com)- La gestion des fenêtres dans Emacs repose sur une structure souple où buffers et fenêtres sont séparés, sur laquelle viennent se greffer des manipulations de base un peu rustiques, si bien que l’utilisateur doit combiner outils et habitudes pour construire son flux de travail
- L’article ne se concentre ni sur les règles
display-bufferni sur les espaces de travail à base d’onglets, mais sur les manipulations manuelles dans une même frame Emacs : déplacement du focus, placement des buffers, division·suppression et tâches temporaires other-window,windmove,winum,ace-window, la souris,transpose-frame,window-prefix-map,other-window-prefixetwinner-modese répartissent respectivement la navigation cyclique, directionnelle, par numéro, par indices visuels, la transformation de layout et la restauration- Avec
ace-windowet Avy, on peut sélectionner une fenêtre précise puis lancer une commande, ou sauter directement à un emplacement de texte afin de réduire les changements de fenêtre eux-mêmes - La gestion des fenêtres d’Emacs ressemble moins à un système figé et complexe qu’à un problème ouvert ;
display-buffer-alist, Popper·Popwin, la manipulation de l’arbre des fenêtres et l’intégration avec un WM tiling sont puissants, mais coûteux à configurer et pas sans angles morts
Ce qu’Emacs appelle la gestion des fenêtres
- Dans Emacs, une fenêtre (window) est un viewport ou panneau à l’intérieur d’une frame, tandis qu’un buffer est un bloc de texte continu qui peut correspondre à un fichier… ou non
- Beaucoup d’IDE et d’éditeurs fusionnent de fait les concepts de fenêtre et de buffer pour réduire la charge cognitive, mais Emacs les sépare, ce qui permet une disposition plus souple
- Voir deux fois le même fichier est simple
- Les buffers sans correspondance directe avec un fichier se gèrent naturellement
- Les indirect buffers d’Emacs ressemblent à une copie « vivante » de l’ensemble du buffer
- Cette séparation a aussi un coût pour les nouveaux utilisateurs
- Il faut placer les fenêtres où on le souhaite à l’intérieur de la frame
- Il faut mettre le buffer voulu dans la fenêtre voulue
- Au début, la charge de manipulation se fait sentir avant les avantages de cette séparation
Ce que cet article ne couvre pas
- Les règles automatiques d’affichage des buffers qui contrôlent totalement
display-bufferne sont pas le sujet principal- L’API
display-bufferdemande des connaissances de détail surwindow-parameters, les slots ou les fenêtres dédiées - Pour aller plus loin, on peut consulter l’article de Mickey Peterson, la vidéo de Protesilaos Stavrou et le manuel Emacs Lisp
- L’API
- Les onglets, espaces de travail, l’isolation des buffers et la persistance de session sont aussi hors du périmètre principal
- Outils associés : tab-bar, tabspaces, eyebrowse, tab-bookmark, desktop.el, persp-mode.el, perspective, project-tab-groups, beframe, activities.el
- Les alternatives radicales qui font d’Emacs une sorte de gestionnaire de fenêtres à part entière restent elles aussi en dehors du texte
- Le vrai sujet, ce sont les manipulations manuelles du quotidien
- Changer le focus entre les fenêtres
- Déplacer des buffers entre fenêtres
- Diviser et supprimer des fenêtres
- Contrôler la fenêtre cible d’affichage pendant l’exécution d’une commande
Déplacement de base : other-window et la « fenêtre suivante »
other-windowest la commande de base pour changer de fenêtre, apprise dans le tutoriel Emacs ; son raccourci par défaut estC-x o- L’ordre de sélection tourne globalement dans le sens horaire à l’intérieur de la frame
- Avec peu de fenêtres, c’est simple et suffisamment pratique
- Plus il y a de fenêtres, plus il faut répéter la commande pour atteindre l’emplacement voulu
- Il existe aussi quelques ajustements pratiques
- On peut la lier à une touche plus facile à presser, comme
M-o - Un argument numérique permet de sauter plusieurs positions ou de se déplacer en sens inverse
- En activant
repeat-mode, on peut répéter avecC-x o o o...ouM-o o o...
- On peut la lier à une touche plus facile à presser, comme
- En définissant le paramètre de fenêtre
no-other-window,other-windowignore certaines fenêtres- C’est notamment pour cela que des fenêtres latérales de type gestionnaire de fichiers comme
dired-sidebaroudirvish-sidesont exclues deother-window
- C’est notamment pour cela que des fenêtres latérales de type gestionnaire de fichiers comme
- La notion de « fenêtre suivante » sert aussi de cible par défaut à des commandes agissant sur une autre fenêtre, comme
scroll-other-window
Déplacement directionnel : windmove
windmoveest une bibliothèque intégrée qui déplace le focus entre fenêtres selon une direction- Cela se rapproche du déplacement gauche·droite·haut·bas attendu par les utilisateurs de Vim
- Les utilisateurs d’
evil-modes’appuient aussi sur Windmove en interne
- On peut associer
windmove-left,windmove-right,windmove-upetwindmove-downàWASD,HJKL, aux flèches, etc. - Les commandes
windmove-swap-states-left/right/up/downéchangent les buffers des fenêtres selon une direction- Dans ce cas, le focus se déplace avec le buffer
- La famille
windmove-delete-*permet aussi de supprimer une fenêtre dans une direction donnée, mais l’article présente plus bas d’autres approches - Dans un environnement WM tiling, on peut unifier les mêmes touches pour naviguer entre les fenêtres internes d’Emacs et celles de l’OS
- Pour un exemple d’intégration Emacs+i3wm, voir i3 integration
- Un exemple de configuration pour qtile se trouve dans emacs-wm.el
Confier les fenêtres Emacs aux fenêtres de l’OS
- frames-only-mode ouvre tous les buffers dans de nouvelles frames plutôt que dans des fenêtres Emacs, laissant ainsi le gestionnaire de fenêtres du système les administrer
- Cette approche met les buffers Emacs au même niveau que les fenêtres de l’OS, ce qui permet de gérer les deux avec les mêmes touches
- Des outils comme Avy,
winum,ace-windowouscroll-other-windowpeuvent s’appliquer non seulement aux fenêtres, mais aussi à l’ensemble des frames - Certaines commandes Emacs supposent qu’elles peuvent découper librement les frames, ce qui peut créer des cas particuliers
- C’est particulièrement fréquent avec des commandes d’org-mode
- Je n’ai pas d’expérience d’utilisation de
frames-only-modeavec un compositeur Wayland
Sélectionner instantanément avec des numéros et des indices
- winum affiche le numéro des fenêtres dans la mode line et permet de sélectionner une fenêtre par son numéro
- Là où
other-windowest proche de O(n) et oùwindmovedépend de la disposition spatiale,winumoffre un accès proche de O(1) si l’on connaît le numéro - Appeler la commande de sélection avec un argument prefix négatif supprime la fenêtre correspondante
- Quand le minibuffer est actif, il reçoit toujours le numéro 0
- Fonctionne à travers les frames Emacs
- Là où
- Le raccourci par défaut
C-x w <n>peut être long ; il existe un exemple de configuration qui utiliseM-0àM-9pour sélectionner les fenêtres - ace-window est présenté comme un outil puissant de contrôle des fenêtres Emacs au clavier
- Il affiche des indices sur chaque fenêtre, puis permet de la sélectionner en appuyant sur la touche correspondante
- En activant
ace-window-display-mode, on peut afficher en permanence les indices dans la mode line, comme avec winum - Appuyer sur
?ouvre le menu de dispatch
- Le point fort de
ace-windown’est pas seulement la sélection, mais le fait de choisir une fenêtre puis d’exécuter une action- Supprimer une fenêtre
- Déplacer et échanger des fenêtres
- Scinder des fenêtres
- Afficher un buffer précis
- Appliquer une opération à une autre fenêtre sans quitter la fenêtre sélectionnée
Souris et transformations de layout
- Dans Emacs, la souris est naturellement adaptée à la sélection de fenêtres, au redimensionnement, aux menus contextuels et au glisser-déposer
context-menu-modeet la barre de menus améliorent la découvrabilité
- Si vos mains ont déjà quitté le clavier, piloter Emacs à la souris peut être la voie offrant le moins de friction
- Certaines opérations peuvent aussi se faire par gestes de souris
- Scission verticale ou horizontale de la frame
- Suppression de fenêtre
- Rotation entre les buffers d’une fenêtre
- Échange de fenêtres vers la droite ou vers la gauche
- Bascule entre les deux derniers buffers dans une fenêtre
- En configurant
mouse-autoselect-window, on peut activer un comportement de type focus-follows-mouse - transpose-frame fournit des commandes pour faire pivoter ou retourner le layout des fenêtres d’une frame
rotate-frame,flip-frameetflop-framesont cités comme les commandes les plus utilestranspose-framelui-même, qui effectue une transposition selon la diagonale principale, est jugé peu utile en pratique
window-prefix-map et l’arbre des fenêtres
window-prefix-mapest l’ensemble des commandes de gestion des fenêtres liées au raccourci par défautC-x wd’Emacssplit-root-window-rightetsplit-root-window-belowdivisent la fenêtre racine de la frame- Elles sont associées respectivement à
C-x w 3etC-x w 2 - Contrairement aux commandes de scission classiques, qui découpent davantage la fenêtre courante, elles sont utiles pour créer un espace de travail séparé
- Elles sont associées respectivement à
- Les fenêtres d’Emacs sont organisées sous forme d’arbre
- Les vraies fenêtres sont des nœuds feuilles
- Une scission transforme une feuille en nœud parent de deux fenêtres
- Cela ressemble à l’organisation de gestionnaires de fenêtres en tiling manuel comme i3 ou bspwm
tab-window-detachettear-off-windowdéplacent la fenêtre courante vers un nouvel onglet ou une nouvelle frame- Leurs raccourcis par défaut,
C-x w ^ tetC-x w ^ f, sont jugés longs - On peut les remplacer par une action de dispatch
ace-windowou par un binding souris
- Leurs raccourcis par défaut,
other-window-prefix : changer où la prochaine commande affichera son résultat
other-window-prefixest une commande intégrée liée àC-x 4 4qui fait afficher le buffer de la prochaine commande dans la fenêtre suivante- Cette commande sépare l’action qui affiche un buffer du choix de la fenêtre cible
- Cela évite d’avoir à mémoriser à chaque fois des familles de commandes comme
find-file-other-window,find-file-other-taboufind-file-other-frame - On peut ajouter ce préfixe devant des commandes de base comme
find-file,find-file-read-onlyouswitch-to-bufferpour ne changer que l’emplacement d’affichage
- Cela évite d’avoir à mémoriser à chaque fois des familles de commandes comme
- Dans l’exemple avec Forge, cela permet d’éviter que la fenêtre courante soit écrasée lorsqu’on appuie sur
RETdans la liste des issues - Cela fournit aussi un comportement uniforme quand chaque package a sa propre façon d’« ouvrir dans une autre fenêtre », comme Magit, Org mode, Notmuch, Elfeed ou EWW
- Il existe aussi des préfixes associés
same-window-prefixforce le buffer de la prochaine commande à s’ouvrir dans la fenêtre couranteother-frame-prefixforce l’ouverture dans une nouvelle frameother-tab-prefixforce l’ouverture dans un nouvel onglet
Enregistrer et restaurer des configurations de fenêtres
window-configuration-to-registerest la commande intégrée qui enregistre la configuration actuelle des fenêtres dans un registre ; son raccourci par défaut estC-x r wjump-to-registerrestaure une configuration enregistrée ; son raccourci par défaut estC-x r j- Au niveau Elisp, on peut stocker le résultat de
current-window-configurationdans une variable puis l’appliquer avecset-window-configuration- En l’enregistrant sur disque via
prin1,persistoumultisession, on pose les bases d’une restauration entre sessions - En revanche, le fait de restaurer aussi la position du curseur dans chaque fenêtre peut être un comportement généralement indésirable
- En l’enregistrant sur disque via
- Il existe aussi des options « oups » qui empilent automatiquement les anciennes configurations
winner-mode: quand on n’utilise pas les onglets,winner-undoetwinner-redopermettent d’annuler ou de réappliquer les modifications de configuration des fenêtrestab-bar-history-mode: fournit une pile d’historique distincte pour chaque ongletundelete-frame-modeettab-undo: restaurent une frame ou un onglet fermé par erreur
- Utiliser
winner-undoà chaque fois qu’Emacs affiche un buffer au mauvais endroit et qu’il faut réparer ensuite tient davantage du palliatif- Le vrai problème est que les règles d’affichage des buffers ne sont pas configurées comme on le souhaite
Optimiser pour les deux fenêtres entre lesquelles on navigue le plus
- En pratique, même avec plusieurs fenêtres à l’écran, on navigue le plus souvent entre deux fenêtres
- Code & REPL
- Code & Grep
- Prose & Notes
- Listing & Item
- Les autres fenêtres peuvent servir de zones de référence qu’on consulte souvent sans presque jamais y basculer : documentation, infos de debug, logs, sorties de commande, sommaire, explorateur de fichiers, aperçu, etc.
- Il existe un exemple de
other-window-mruutilisantget-mru-windowpour basculer vers la fenêtre utilisée le plus récemment- Quelle que soit la façon dont on choisit la deuxième fenêtre — souris,
ace-window,winum, etc. — on peut ensuite faire l’aller-retour rapidement
- Quelle que soit la façon dont on choisit la deuxième fenêtre — souris,
- On peut aussi améliorer
other-windowlui-même- Faire en sorte que s’il n’y a qu’une seule fenêtre, elle se scinde automatiquement
- Faire défiler les fenêtres selon l’ordre d’utilisation récente, comme switchy-window
- Inverser le sens à chaque appel non consécutif, comme avec
other-window-alternating, pour rendre l’aller-retour entre deux fenêtres plus naturel
Étendre ace-window autour de l’exécution de commandes
ace-windowpermet, viaaw-select, d’utiliser séparément l’étape de sélection d’une fenêtre- En exécutant ensuite l’opération voulue sur la fenêtre renvoyée par
aw-select, on peut créer le schéma « sélection de fenêtre → exécution de l’action → conservation de la fenêtre d’origine » - Les commandes d’exemple sont les suivantes
ace-tear-off-window: détache dans une nouvelle frame la fenêtre choisie avecace-windowace-tab-window-detach: déplace dans un nouvel onglet la fenêtre choisie
ace-window-one-commandpermet d’exécuter une commande arbitraire unique dans la fenêtre sélectionnée- On choisit d’abord une fenêtre avec
ace-window - Puis on lit une séquence de touches pour exécuter la commande correspondante
- Cela permet d’appliquer une opération à une autre fenêtre sans changer la fenêtre actuellement sélectionnée
- On choisit d’abord une fenêtre avec
ace-window-prefixfonctionne comme une version plus directe deother-window-prefix- On choisit directement avec
ace-windowla fenêtre cible dans laquelle la prochaine commande affichera son buffer - Si nécessaire, on peut créer à la volée une nouvelle fenêtre via une action
ace-window, puis y afficher le buffer - Le raccourci proposé est
C-x 4 o
- On choisit directement avec
Faut-il vraiment changer de fenêtre ?
- Les objectifs d’un changement de fenêtre se divisent globalement en deux catégories
- Switch and stay : continuer à éditer ou à travailler dans la fenêtre de destination
- Switch and return : faire brièvement défiler, rechercher, copier ou supprimer, puis revenir à la position d’origine
- Dans le premier cas, Avy peut fusionner le changement de fenêtre et le déplacement du curseur en une seule action
avy-goto-char-timertraite les différentes fenêtres et frames Emacs visibles à l’écran comme un seul ensemble de cibles de saut- En sautant vers une chaîne ou une position de caractère précise, la fenêtre change automatiquement aussi
- Si Avy ne traverse pas les fenêtres et les frames, il faut vérifier le réglage
avy-all-windows
pop-global-markpermet de revenir à la position précédente et peut, si nécessaire, entraîner aussi un changement de fenêtre- Par défaut, il change de buffer dans la fenêtre courante ; il existe donc un advice pour lui faire utiliser
pop-to-buffer
- Par défaut, il change de buffer dans la fenêtre courante ; il existe donc un advice pour lui faire utiliser
- Dans le second cas, on peut automatiser le flux « changement → action → retour » en l’encapsulant dans une commande
ace-window-one-commandest une méthode générique pour cela- Pour certaines actions, on peut créer des commandes dédiées ou des macros
Défilement, recherche et changement de buffer dans une autre fenêtre
scroll-other-windowetscroll-other-window-downfont défiler une autre fenêtre sans quitter la fenêtre courante- La cible par défaut est la « fenêtre suivante » dans le sens horaire depuis la fenêtre actuelle
- S’il y a plus de deux fenêtres, ce peut être une autre fenêtre que celle de référence attendue qui défile
- On peut modifier la règle de sélection de la cible de défilement en configurant
other-window-scroll-default- Avec
get-lru-window, c’est la fenêtre la moins récemment utilisée qui défile - Avec
get-mru-window, on peut cibler la fenêtre la plus récemment utilisée
- Avec
- En configurant
other-window-scroll-buffer, on peut désigner comme cible de défilement la fenêtre affichant un buffer précis- Cette option est surtout présentée comme utile aux auteurs de packages
- L’exemple
isearch-other-windowlance une recherche dans la fenêtre cible du défilement, puis revient à la fenêtre d’origine une fois la recherche terminée- Un exemple montre son usage avec un shell et un buffer Man
next-buffer,previous-bufferetswitch-to-bufferpeuvent aussi être étendus pour s’exécuter dans une autre fenêtre en combinant un argument préfixe avecother-window-for-scrolling- En créant une keymap pour
repeat-mode, on peut faire défiler ou sélectionner en continu les buffers d’une autre fenêtre avecn,petb
- En créant une keymap pour
master-mode, scroll-all-mode, with-other-window
master-modedésigne le buffer courant comme « master » et les autres comme « slave », ce qui permet d’envoyer des actions au buffer slave sans quitter la position actuelle- Globalement, c’est jugé moins transparent que l’approche fondée sur
other-window-scroll-defaultdécrite plus haut - Via
master-says, on peut créer des touches qui exécutent des actions arbitraires commerecenterdans le buffer slave
- Globalement, c’est jugé moins transparent que l’approche fondée sur
scroll-all-modelie entre elles les actions de défilement de toutes les fenêtres d’une frame- C’est utile quand on veut synchroniser plusieurs vues de fenêtres
- La macro
with-other-windowest un helper Elisp qui exécute le code de son corps dans la fenêtre choisie parother-window-for-scrolling- Elle permet de créer simplement des commandes comme
isearch-other-windowouisearch-other-window-backwards - Elle sert de pendant Elisp à l’interactif
ace-window-one-command
- Elle permet de créer simplement des commandes comme
Stratégies pour réduire le nombre de fenêtres
- Les interfaces modernes d’éditeurs convergent en général vers une fenêtre principale unique, une barre d’onglets en haut, une barre latérale à gauche pour les répertoires ou le sommaire, un panneau droit optionnel et un terminal en bas
- On peut créer une telle disposition dans Emacs, mais il est aussi possible de se concentrer sur un seul buffer à l’écran et de remplacer les changements de fenêtre par des changements de buffer
- Se limiter à deux fenêtres permet déjà de conserver l’essentiel de cette simplicité tout en utilisant la seconde comme référence en direct
- La configuration par défaut d’Emacs prend déjà assez bien en charge ce schéma via des commandes comme
scroll-other-window
- La configuration par défaut d’Emacs prend déjà assez bien en charge ce schéma via des commandes comme
- Il existe aussi une stratégie qui consiste à ignorer les fenêtres en ne les voyant que comme des conteneurs de texte
- On saute directement vers une position de texte à l’écran avec Avy
- On remonte aux positions précédentes avec
mark-ringetglobal-mark-ring - dogears peut fournir une interface plus fine pour revisiter ces positions
- Pour fixer manuellement des positions, on peut utiliser
point-to-registeretjump-to-register, et pour un historique plus permanent,bookmark-setetbookmark-jump
Règles d’affichage automatiques et gestion des popups
display-buffer-alistest une variable qui associe les buffers et les règles quand du code Elisp tente d’afficher un buffer, afin de déterminer comment celui-ci doit être montré- En théorie, définir des règles de taille, position, rôle et focus pour chaque type de buffer vu au quotidien résout une grande partie de la gestion des fenêtres
- Le problème, c’est le coût de configuration
- prédicats sur les buffers et les modes
- types de fenêtres et slots
- fonctions d’action
display-buffer - paramètres de fenêtre
- difficulté à exprimer simplement une intention comme « ne touchez pas à ma disposition de fenêtres »
- Il existe aussi des outils auxiliaires
- Shackle masque la complexité de
display-buffer-alistet fournit une interface Elisp simple - Doom Emacs propose des commandes pratiques comme
set-popup-rule!
- Shackle masque la complexité de
- Popwin et Popper partent du constat que tous les buffers ne se valent pas
- Ils distinguent les buffers de travail principaux des buffers popup temporaires
- Ils affichent documentation, shell, état de tâche, résultats de compilation, résultats de recherche, messages, etc. dans de petites fenêtres auxiliaires faciles à fermer ou à parcourir
- Popper se concentre sur la possibilité d’afficher ou masquer d’une touche les buffers popup désignés
- Popwin est une implémentation plus ancienne et plus complète, mais qui embarque aussi sa propre configuration
display-buffer - Si l’objectif est simplement d’ouvrir et fermer rapidement un shell, shell-pop ou vterm-toggle peuvent suffire
La pièce manquante : la manipulation de l’arbre des fenêtres
- Emacs représente les fenêtres d’une frame sous forme d’arbre, mais la plupart des commandes utilisateur agissent en fonction de la position spatiale plutôt que de la structure de cet arbre
- Ce décalage peut entraîner, lors des divisions et suppressions, des comportements différents de ceux attendus, ou imposer des limites aux structures de division possibles
- Si un package hypothétique comme
window-treeexistait, il pourrait permettre des manipulations au niveau des nœuds internes- diviser, transposer ou refléter seulement une partie de la frame
- sélectionner plusieurs fenêtres comme une sous-configuration
- envoyer la sous-configuration sélectionnée vers des onglets ou une frame
- dupliquer ou enregistrer des sous-configurations
- protéger une branche précise de l’arbre contre les commandes de la famille
display-buffer
- Il existe déjà des éléments Elisp en ce sens
window-treerenvoie l’arbre lui-mêmeframe-root-windowrenvoie la racinewindow-parent,window-child,window-*-siblingexistent- on peut parcourir l’ensemble avec
walk-window-treeetwalk-windows
- Les manques sont aussi clairs
- il n’existe pas de fonction de base pour transformer l’arbre en dehors des opérations générales de split/delete
- il n’existe pas de notion de sélection d’une fenêtre interne, ce qui oblige à la simuler dans l’interface
La pièce manquante : l’intégration avec un WM tiling
- Le modèle en arbre des fenêtres d’Emacs ressemble beaucoup à celui des gestionnaires de fenêtres tiling manuels comme i3 ou bspwm
- Si vous utilisez Emacs dans i3, bspwm ou tmux, vous aurez naturellement envie de naviguer entre les fenêtres internes et externes d’Emacs avec les mêmes raccourcis clavier
- Parmi les exemples existants, on trouve i3-integration de Pavel Korytov et emacs-wm.el pour qtile
- Une interface d’intégration plus propre nécessite les éléments suivants
- Le gestionnaire de fenêtres doit pouvoir identifier la classe de la fenêtre active et fournir par programmation le déplacement et la manipulation des fenêtres
- Le mode de communication peut passer par des commandes shell, des sockets, un IPC basé sur serveur ou le D-Bus de Linux
- Côté Emacs, il faut une interface indépendante du mode de communication qui émule les manipulations de type gestionnaire de fenêtres
- Lors d’un changement de fenêtre au niveau de l’OS, il faut vérifier si la fenêtre active est Emacs et, si nécessaire, laisser Emacs gérer l’opération dans ses frames internes
Conclusion
- La gestion des fenêtres dans Emacs offre plusieurs niveaux d’options, de
other-windowàace-window, Avy, Popper etdisplay-buffer-alist - Il n’est pas nécessaire d’utiliser toutes les méthodes : comme il existe de nombreuses alternatives pour résoudre le même problème, on peut en choisir une et ignorer le reste
- Les outils intégrés de base ont de fortes chances d’être maintenus longtemps, mais l’état des packages tiers peut varier selon qu’ils sont activement développés, délaissés ou devenus orphelins
- La gestion des fenêtres d’Emacs ressemble moins à un système figé et complexe qu’à une structure ouverte qui fournit des ingrédients et des recettes
- Même avec peu de configuration, on peut déjà obtenir un menu de base, et avec quelques combinaisons et ajustements en Elisp, créer un flux de travail bien plus personnalisé
1 commentaires
Avis sur Hacker News
Bon article, avec d’excellentes explications et recommandations. Les fenêtres divisées à parts égales ne suffisent pas toujours ; j’ai donc mis la fonction ci-dessous dans
init.elet je l’ai liée àC-x 7pour redimensionner la fenêtre courante et sa fenêtre sœur verticalement en 70 %/30 %Je fais pareil à l’horizontale avec un raccourci
C-x 8(defun partial-size-window ()"Set the two split windows to 70% and 30% vertically."(interactive)(let ((size (- (truncate (* .70 (frame-height))) (window-height))))(if (> size 0)(enlarge-window size))))(defun partial-size-window-h ()"Set the two split windows to 70% and 30% horizontally."(interactive)(let ((size (- (truncate (* .70 (frame-width))) (window-width))))(if (> size 0)(enlarge-window-horizontally size))))Belle exploration. Je suis sur mobile pour l’instant, donc je ne peux pas essayer tout de suite, mais j’ai hâte de tester ace-window,
ace-window-display-modeetframes-only-modePour être honnête, même après environ 40 ans d’Emacs, je me suis surtout contenté de
next-window, de créer une nouvelle fenêtre en dessous ou à côté, et de m’appuyer surtmuxquand je travaille sur des serveurs distantsC-x 1/2/3etC-x oCela dit, c’est en fait assez puissant et suffisant pour mes besoins ; j’aimerais que plusieurs gestionnaires de fenêtres en pavage se limitent justement à ce niveau
C-x oest un peu fastidieux, donc j’ai la configuration ci-dessous, mais je ne ressens pas vraiment le besoin de ces paquets supplémentaires(global-set-key (kbd "M-o") #'other-window)Cela dit, c’est agréable d’avoir un article de référence aussi approfondi, et les articles de Karthik sont toujours instructifs et intéressants
Pour compléter la note de Karthink sur
windmove-mode, on peut configurerwindmove-default-keybindingspour se déplacer entre les fenêtres avecCtrl-<flèches>(windmove-default-keybindings 'control)Je l’ai aussi dans ma configuration, et je l’ai inclus dans un kit de démarrage minimaliste : c’est vraiment un game changer
https://codeberg.org/ashton314/emacs-bedrock
.emacset j’utilisais exactement la même chose. Je préfère ça àC-x O, car cela demande une touche de moins et c’est plus flexibleJ’ai configuré Emacs pour qu’il ne divise pas les frames en plusieurs fenêtres. C’est un peu comme un navigateur web qui ne découpe pas une fenêtre de navigateur en plusieurs viewports
Mon Emacs ne crée pas non plus de deuxième frame. La manière de l’implémenter a changé d’année en année, à mesure que les anciennes méthodes cessaient de fonctionner
Avec la méthode actuelle, dans certains cas, par exemple quand Emacs affiche le tampon
*Completions*, la frame est divisée ; mais si je me souviens bien, je n’ai jamais eu à appelerdelete-windowmanuellement pour supprimer la deuxième fenêtre, elle disparaissait toujours d’elle-mêmeJ’utilise assez souvent des frames à plusieurs fenêtres. Sur les versions récentes de macOS et d’Emacs, il m’arrive qu’une frame à plusieurs fenêtres semble figée et ne réponde plus au clavier ou au trackpad, même après plusieurs
Ctrl-GEn revanche, créer une nouvelle frame avec
C-x 5 2fonctionne, et je pouvais revenir à la frame bloquée puis la fermer avecC-x 5 0L’article est très approfondi, et j’apprécie vraiment que l’auteur ait pris le temps de réaliser de bons schémas
Bon article, et je voudrais partager un excellent paquet à utiliser avec. Pour moi, zygospore est devenu indispensable
« zygospore permet d’annuler
C-x 1(delete-other-window) en appuyant de nouveau surC-x 1»https://github.com/LouisKottmann/zygospore.el
https://www.emacswiki.org/emacs/WinnerMode
undoCe serait étrange, mais
C-u C-x 1semblerait cohérentSi l’auteur voit ceci, je voudrais lui dire que la petite mention de l’éditeur Acme m’a fait plaisir
Quand j’appelle
hledger-balance-sheet, j’aimerais qu’il ne remplace pas le.hledger.journalexistant, mais qu’il s’ouvre à droite avec une largeur de 30 %À gauche, je voudrais que
.hledger.journalreste ouvert tel quel et demeure sélectionné