Add layout_action to change bias on tall layout
Can specify 1 bias to toggle between that and 50%. Can specify multiple biases to rotate through them with each call to the layout_action. Left a comment regarding working around either a possible bug or a design decision.
This commit is contained in:
parent
6595898b73
commit
adfcbb004f
@ -76,6 +76,12 @@ windows, or toggle the mirrored setting, for example::
|
|||||||
map ctrl+y layout_action mirror true
|
map ctrl+y layout_action mirror true
|
||||||
map ctrl+n layout_action mirror false
|
map ctrl+n layout_action mirror false
|
||||||
|
|
||||||
|
You can also map a key to change the bias by providing a list of percentages
|
||||||
|
and it will rotate through the list as you press the key. If you only provide
|
||||||
|
one number it'll toggle between that percentage and 50, for example::
|
||||||
|
|
||||||
|
map ctrl+. layout_action bias 50 62 70
|
||||||
|
map ctrl+, layout_action bias 62
|
||||||
|
|
||||||
The Fat Layout
|
The Fat Layout
|
||||||
----------------
|
----------------
|
||||||
@ -104,8 +110,7 @@ on the bottom of the screen instead of the top. The syntax for the options is::
|
|||||||
└─────────┴──────────┴─────────┘
|
└─────────┴──────────┴─────────┘
|
||||||
|
|
||||||
|
|
||||||
This layout also supports ``decrease_num_full_size_windows`` layout action like
|
This layout also supports the same layout actions as the *Tall* layout, shown above.
|
||||||
the *Tall* layout, shown above.
|
|
||||||
|
|
||||||
|
|
||||||
The Grid Layout
|
The Grid Layout
|
||||||
|
|||||||
@ -54,7 +54,7 @@ def neighbors_for_tall_window(
|
|||||||
|
|
||||||
|
|
||||||
class TallLayoutOpts(LayoutOpts):
|
class TallLayoutOpts(LayoutOpts):
|
||||||
bias: Tuple[float, ...] = ()
|
bias: 50
|
||||||
full_size: int = 1
|
full_size: int = 1
|
||||||
mirrored: bool = False
|
mirrored: bool = False
|
||||||
|
|
||||||
@ -63,18 +63,20 @@ class TallLayoutOpts(LayoutOpts):
|
|||||||
self.full_size = int(data.get('full_size', 1))
|
self.full_size = int(data.get('full_size', 1))
|
||||||
except Exception:
|
except Exception:
|
||||||
self.full_size = 1
|
self.full_size = 1
|
||||||
self.full_size = fs = max(1, min(self.full_size, 100))
|
self.full_size = max(1, min(self.full_size, 100))
|
||||||
try:
|
try:
|
||||||
b = int(data.get('bias', 50)) / 100
|
self.bias = int(data.get('bias', 50))
|
||||||
except Exception:
|
except Exception:
|
||||||
b = 0.5
|
self.bias = 50
|
||||||
b = max(0.1, min(b, 0.9))
|
|
||||||
self.bias = tuple(repeat(b / fs, fs)) + (1.0 - b,)
|
|
||||||
self.mirrored = to_bool(data.get('mirrored', 'false'))
|
self.mirrored = to_bool(data.get('mirrored', 'false'))
|
||||||
|
|
||||||
def serialized(self) -> Dict[str, Any]:
|
def serialized(self) -> Dict[str, Any]:
|
||||||
return {'full_size': self.full_size, 'bias': self.bias, 'mirrored': self.mirrored}
|
return {'full_size': self.full_size, 'bias': self.bias, 'mirrored': self.mirrored}
|
||||||
|
|
||||||
|
def build_bias_list(self) -> Tuple[float, ...]:
|
||||||
|
b = self.bias / 100
|
||||||
|
b = max(0.1, min(b, 0.9))
|
||||||
|
return tuple(repeat(b / self.full_size, self.full_size)) + (1.0 - b,)
|
||||||
|
|
||||||
class Tall(Layout):
|
class Tall(Layout):
|
||||||
|
|
||||||
@ -90,7 +92,7 @@ class Tall(Layout):
|
|||||||
return self.layout_opts.full_size
|
return self.layout_opts.full_size
|
||||||
|
|
||||||
def remove_all_biases(self) -> bool:
|
def remove_all_biases(self) -> bool:
|
||||||
self.main_bias: List[float] = list(self.layout_opts.bias)
|
self.main_bias: List[float] = list(self.layout_opts.build_bias_list())
|
||||||
self.biased_map: Dict[int, float] = {}
|
self.biased_map: Dict[int, float] = {}
|
||||||
return True
|
return True
|
||||||
|
|
||||||
@ -215,6 +217,27 @@ class Tall(Layout):
|
|||||||
self.layout_opts.mirrored = new_val
|
self.layout_opts.mirrored = new_val
|
||||||
ok = True
|
ok = True
|
||||||
return ok
|
return ok
|
||||||
|
if action_name == 'bias':
|
||||||
|
if len(args) == 0:
|
||||||
|
raise ValueError('layout_action bias must contain at least one number between 10 and 90')
|
||||||
|
# Because kitty/options/utils.py:312 sets maxsplit=1, line 315 will always
|
||||||
|
# pass args as a tuple consisting of at most 1 element with all the args despite
|
||||||
|
# it implying the tuple could have more than one element with via [1:]
|
||||||
|
# In case this is by design and I'm missing the reason, have to split out
|
||||||
|
# the rest of the args:
|
||||||
|
biases = args[0].split()
|
||||||
|
if len(biases) == 1:
|
||||||
|
biases.append("50")
|
||||||
|
try:
|
||||||
|
i = biases.index(str(self.layout_opts.bias)) + 1
|
||||||
|
except ValueError:
|
||||||
|
i = 0
|
||||||
|
try:
|
||||||
|
self.layout_opts.bias = int(biases[i % len(biases)])
|
||||||
|
self.remove_all_biases()
|
||||||
|
return True
|
||||||
|
except Exception:
|
||||||
|
return False
|
||||||
return None
|
return None
|
||||||
|
|
||||||
def minimal_borders(self, all_windows: WindowList) -> Generator[BorderLine, None, None]:
|
def minimal_borders(self, all_windows: WindowList) -> Generator[BorderLine, None, None]:
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user