Comment puis-je empêcher une image d'être divisée?

16

Actuellement, je travaille avec ruby ​​et rspec. J'aime vraiment l'idée d'avoir un cadre séparé dans un autre moniteur me montrant le tampon de compilation. Ma configuration actuelle utilise un cadre «code» (dans lequel je travaille réellement) et un cadre «résultat de test» (dans lequel je vois les résultats de rspec)

Le problème est que lorsque j'essaie d'ouvrir une erreur de compilation ou un fichier dans le cadre «test-result», la fenêtre se divise dans ce cadre. Ce que j'aimerais vraiment faire, c'est qu'il s'ouvre dans mon cadre «code».

J'utilise déjà l'option display-buffer-reuse-frames. J'ai également essayé de définir la fenêtre des résultats de la compilation dedicated, mais chaque fois qu'emacs essaie d'ouvrir une nouvelle fenêtre, un nouveau cadre est créé (ce qui est particulièrement horrible si vous utilisez Helm).

Existe-t-il un moyen simple d'y parvenir?

Renan Ranelli
la source
1
Utiliser emacs comme IDE serait tellement plus pratique s'il y avait un "pin" facile à mettre en place pour qu'il apparaisse toujours au même endroit à partir de maintenant. L'une des fonctionnalités de Visual Studio qui me manque le plus lors de l'utilisation d'emacs est la manière simple et intuitive de fractionner, d'épingler, d'ancrer, de masquer et de manipuler les fenêtres.
nispio
1
Oui. Je viens également d'un arrière-plan vs, et cela me manque aussi, bien que je pense que l'interface emacs clean-no-button-no-bullshit soit meilleure la plupart du temps.
Renan Ranelli
@nispio Je n'utilise pas VS donc pouvez-vous spécifier ce que vous entendez par "épingle". Les cadres Emacs sont généralement exclusifs et ne changent pas sauf si vous interagissez avec eux.
Vamsi
@vamsi: VS utilise beaucoup de petites fenêtres que vous pouvez attacher en haut / en bas / sur les côtés de votre cadre, ou vous pouvez les faire apparaître et créer un nouveau cadre. Vous pouvez ancrer une fenêtre contre les bords d'un cadre et la configurer pour masquer automatiquement. Par exemple, la fenêtre de sortie de la compilation apparaîtra par le bas comme par magie au début de la compilation et se masquera à nouveau peu de temps après la fin de la compilation. Si vous ne souhaitez pas que la fenêtre soit masquée automatiquement, vous pouvez l'épingler en place, puis la désépingler à nouveau lorsque vous avez terminé de la référencer.
nispio
@nispio je vois. J'utilise popwin.elde MELPA pour compiler les popups et aider les tampons qui persistent jusqu'à ce C-gqu'on appuie dessus . Si j'en ai besoin à plein temps, je passe simplement à eux dans une autre fenêtre. Je n'ai pas pensé à épingler des fenêtres parce qu'emacs le fait split-windows-sensibly.
Vamsi

Réponses:

9

Vous devez configurer le gorille de 600 livres display-buffer-alistqui détermine comment display-bufferchoisir où afficher un tampon. Cela rend display-buffer-reuse-framesobsolète dans les nouveaux emacsen. Voici une configuration qui devrait vous guider (au moins dans emacs 24.3).

;; all buffers, try to reuse windows across all frames
(add-to-list 'display-buffer-alist
           '(".*". (display-buffer-reuse-window .
                                  ((reusable-frames . t)))))

;; except for compilation buffers where you want new and dedicated frames when necessary
(add-to-list 'display-buffer-alist
         '("^\\*Compile-Log\\*". ((display-buffer-reuse-window
                                   display-buffer-pop-up-frame) .
                                  ((reusable-frames . t)
                                  (inhibit-same-window . t)))))

Comme vous pouvez le voir, j'utilise une expression rationnelle pour correspondre au tampon de compilation-journal. La documentation de display-bufferdevrait vous donner une idée de ce qui se passe. Attention, ce n'est pas la documentation la plus agréable à lire. Je les ai ajoutés séquentiellement afin que l'expression rationnelle du journal de compilation soit mise en correspondance avant l'expression rationnelle générique. Adaptez l'expression rationnelle à vos besoins.

EDIT Pour rendre n'importe quel cadre insécable, vous pouvez évaluer M-: (set-frame-parameter nil 'unsplittable t)ce cadre particulier. Remplacez nil par requis FRAMEsi vous le faites depuis elisp. Entre ces deux paramètres, il doit rendre le cadre de compilation exclusif à moins que vous ne trouviez spécifiquement un fichier dans ce cadre.

Vamsi
la source
Le fait est que je ne veux pas ouvrir de nouveaux cadres tout le temps. Ce que je veux, c'est restreindre toutes les fenêtres au cadre «code», à l'exception du tampon «journal de compilation», qui devrait toujours être affiché dans le cadre «test». Je n'ai pas trouvé de moyen de rediriger toutes les nouvelles fenêtres vers mon cadre principal de «code». Peut-être que je n'étais pas assez clair dans la question = (
Renan Ranelli
Cela ne devrait ouvrir un nouveau cadre pour le journal de compilation que s'il n'y a pas de cadre existant. Pouvez-vous me dire ce qui ne va pas. Consultez l'article sur la façon de rendre un cadre insécable.
Vamsi