GNU bug report logs - #20189
25.0.50; Feature request: Alternative split-window-sensibly functions

Previous Next

Package: emacs;

Reported by: Tassilo Horn <tsdh <at> gnu.org>

Date: Tue, 24 Mar 2015 09:19:01 UTC

Severity: wishlist

Found in version 25.0.50

Full log


Message #26 received at 20189 <at> debbugs.gnu.org (full text, mbox):

From: martin rudalics <rudalics <at> gmx.at>
To: Tassilo Horn <tsdh <at> gnu.org>
Cc: 20189 <at> debbugs.gnu.org
Subject: Re: bug#20189: 25.0.50;
 Feature request: Alternative split-window-sensibly functions
Date: Wed, 25 Mar 2015 09:23:49 +0100
>> Then how comes you "eventually end up with three side-by-side windows
>> each of size 86x82"?
>
> No, I don't end up with that.  If I had the split function I imagined,
> then I would end up with that configuration.  So that's the goal I want
> to achieve but for which I have no solution.

I see.  I thought there was some black magic involved when I read your
first post ;-)

>> By default you should get one window with 135 columns and two windows
>> with 67 columns, approximately.
>
> Indeed, that's what I get with C-x 3 C-x 3 starting from a single window
> of size 269x82 and the default value of `window-combination-resize' and
> `window-combination-limit'.
>
> With
>
>    (setq window-combination-resize t
>          window-combination-limit nil)
>
> two consecutive C-x 3 starting from the big single window results in
> three side-by-side *balanced* windows, each being 86x82 large.  That's
> actually what I wanted.  However, I'd like that this splitting behavior
> was the default for `display-buffer'.  But that fails because after the
> first horizontal split, `window-splittable-p' says that both horizontal
> windows aren't horizontally splittable anymore because they are narrower
> than `split-width-threshold'.

If you set `split-width-threshold' to zero and `split-height-threshold'
to nil you should get the behavior you want.

> I've come up with a solution which seems to fit my preferences quite
> nicely although it's probably quite hackish and ignores possible
> contracts that might exist for dedicated windows, fixed-size windows,
> side windows and what else there might be.

You should be able to simplify your code by using idioms from the below.

(defun th/split-window-sensibly (_window)
  (let ((root (frame-root-window))
	(window-combination-resize 'resize))
    (cond
     ((>= (/ (window-total-width root) (window-combinations root t)) 80)
      (split-window (window-last-child root) nil 'right))
     ((>= (/ (window-total-height root) (window-combinations root)) 40)
      (split-window (window-last-child root) nil 'below))
     (t
      (split-window-sensibly window)))))

martin




This bug report was last modified 10 years and 83 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.