Comment puis-je obtenir une politique de fenêtre partagée raisonnable?


13

Emacs fait constamment de nouvelles fenêtres et ça a gâché ma journée ces derniers temps. Comment puis-je dire à emacs d'utiliser la stratégie suivante lors de la création de fenêtres?

  • Préférez les divisions verticales
  • Arrêtez de faire des divisions verticales lorsque les fenêtres comptent moins de 80 colonnes.
  • Arrêtez de faire des fractionnements horizontaux lorsque la fenêtre est inférieure à 60 lignes.
  • Lorsque j'atteins cette grille 6x6, sur mon moniteur 27 ", commencez à réutiliser Windows!

De plus, je préférerais que mes fenêtres soient toujours équilibrées, mais chaque division laisse les tailles de veuve déséquilibrées. Je préfère avoir 3 fenêtres de même taille que 1 grande et deux trop petites! Y a-t-il un cadre pour cela, ou un endroit sensé pour mettre un conseil d'équilibrage?


Quelles opérations créent les fenêtres fractionnées?
Andrew Swann

Je fais surtout de la programmation clojure ces derniers temps, donc les commandes de cidre comme: cider-test-run-tests, cider-find-var, cider-doc, cider-switch-to-repl-buffer etc etc
expez le

1
La plupart des gens ne sont pas intéressés à ouvrir le code source - par exemple, la substance de cidre - pour le personnaliser en fonction de leurs besoins. Au lieu de cela, ils recherchent des correctifs simples comme la personnalisation de display-buffer-alist. D'autres le corrigent par programmation après coup - par exemple, delete-windowet switch-to-buffer, divisé verticalement / horizontalement, etc. Et, il existe des bibliothèques supplémentaires pour aider à gérer les fenêtres et / ou revenir à la disposition précédente. Je préfère la première option - c'est-à-dire modifier la source et la rendre absolument parfaite, mais je suis dans la rare minorité des gens.
lawlist

5
Jetez un œil à la section du manuel concernant le fractionnement des fenêtres - split-height-thresholdet split-width-threshold- gnu.org/software/emacs/manual/html_node/emacs/…
lawlist

1
Il semble que vous souhaitiez définir une fonction ACTION personnalisée à utiliser avec une CONDITION très générique dans display-buffer-alist. Voir display-bufferpour les exigences d'une telle fonction ACTION (et la liste des fonctions standard, le code que vous pouvez examiner), mais il sera responsable d'afficher le tampon de la manière que vous souhaitez (et peut certainement équilibrer les fenêtres par la suite) .
phils

Réponses:


2

J'utilise les éléments suivants depuis longtemps. Vous devrez peut-être le modifier pour s'adapter à votre propre style préféré.

;; ------------------------------------------------------------------
;; display-buffer

;; The default behaviour of `display-buffer' is to always create a new
;; window. As I normally use a large display sporting a number of
;; side-by-side windows, this is a bit obnoxious.
;;
;; The code below will make Emacs reuse existing windows, with the
;; exception that if have a single window open in a large display, it
;; will be split horisontally.

(setq pop-up-windows nil)

(defun my-display-buffer-function (buf not-this-window)
  (if (and (not pop-up-frames)
           (one-window-p)
           (or not-this-window
               (not (eq (window-buffer (selected-window)) buf)))
           (> (frame-width) 162))
      (split-window-horizontally))
  ;; Note: Some modules sets `pop-up-windows' to t before calling
  ;; `display-buffer' -- Why, oh, why!
  (let ((display-buffer-function nil)
        (pop-up-windows nil))
    (display-buffer buf not-this-window)))

(setq display-buffer-function 'my-display-buffer-function)

2

Un peu tard, mais parce que j'ai également cherché cela et que je n'ai pas trouvé de solution prête:

Vous pouvez définir votre propre split-window-sensiblyfonction.
Pour ce faire, mettez ce qui suit dans votre init.el:

(setq split-height-threshold 120
      split-width-threshold 160)

(defun my-split-window-sensibly (&optional window)
    "replacement `split-window-sensibly' function which prefers vertical splits"
    (interactive)
    (let ((window (or window (selected-window))))
        (or (and (window-splittable-p window t)
                 (with-selected-window window
                     (split-window-right)))
            (and (window-splittable-p window)
                 (with-selected-window window
                     (split-window-below))))))

(setq split-window-preferred-function #'my-split-window-sensibly)

Remarque: les seuils doivent être deux fois plus grands que la plus petite fenêtre autorisée, car les nouvelles fenêtres utilisent chacune la moitié de l'ancienne taille de fenêtre.
La dernière ligne indique à emacs d'utiliser la fonction de division définie.


0

Cela vous fera préférer les divisions verticales

(setq split-width-threshold 1)

0

(setq split-height-threshold nil) (setq split-width-threshold 200)

  • Réglage split-height-thresholdpour ne jamais vouloir diviser horizontalement
  • 200 semble être un nombre suffisamment élevé pour que même sur un grand écran externe, Emacs ne se divise qu’au plus une fois.
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.