Разделение рабочих пространств в оконном менеджере notion

Я использую диспетчер окон Notion (http://notion.sourceforge.net/) в течение нескольких недель. . Мне было интересно, можно ли создать привязку клавиш, которая разделяет рабочее пространство так же, как META+S и META+K S разделяют кадр по горизонтали и вертикали.

Итак, если бы у меня было два вертикальных кадра в рабочей области, например:

-----
|1|2|
| | |
| | |
| | |
-----

Привязка клавиш для разделения по горизонтали должна добавить новый кадр, который охватывает рабочее пространство по горизонтали:

-----
|1|2|
| | |
-----
| 3 |
-----

В настоящее время META+S разделяет выбранный кадр только по горизонтали:

-----
|1|2|
| | |
|-| |
|3| |
-----

Есть ли способ выполнить разделение всего рабочего пространства по горизонтали или вертикали в Notion?


person John Mercier    schedule 30.06.2014    source источник


Ответы (2)


Решение, которое я придумал, состоит в том, чтобы добавить привязку клавиш к функции split_top в cfg_tiling.lua. Чтобы разделить по горизонтали, я добавил:

kpress(META.."Z", "WTiling.split_top(_, 'bottom')")

к функции депривязки WTiling. я также добавил

kpress("Z", "Wtiling.split_top(_, 'left')")

к привязкам подкарты META.."K".

Функция split_top разбивается в корне разбиваемого дерева. Это создаст новый кадр, который разделит всю рабочую область, а не текущий кадр.

Одна проблема с размером, которую я заметил при таком подходе, заключается в том, что он попытается разделить рабочее пространство ровно пополам. Если есть горизонтальная рамка, разделяющая рабочую область, split_top изменит ее размер до наименьшего размера и добавит новую рамку под ней. Если есть вертикальная рамка, при добавлении новой рамки она станет шириной около 10 пикселей. Проблема с размером по горизонтали. Новые кадры имеют высоту 0:

Start  ->Mod1+Z ->Mod1+Z

-1--2--  -1--2--  -1--2--
|  |  |  |  |  |  |  |  |
|  |  |  |  |  |  |  |  |
-3-----  -3-----  -3-----
|     |  -4-----  -4-----
|     |  |     |  -5-----
|     |  |     |  |     |
|     |  |     |  |     |
-------  -------  -------

Проблема с размером по вертикали. Новые кадры имеют ширину 0:

Start      -> Mod1+K Z  -> Mod1+K Z
-1----2----  -4--1-2----  -5-41-2----
|    |    |  |   ||    |  |  |||    |
|    |    |  |   ||    |  |  |||    |
|    |3---|  |   ||3---|  |  |||3---|
|    |    |  |   ||    |  |  |||    |
|    |    |  |   ||    |  |  |||    |
-----------  -----------  -----------

Другая проблема заключается в том, что фокус не переключается на вновь созданный кадр. Нажатие Mod1+Z создаст кадр, но пользователь должен нажать Mod1+TAB на кадр, чтобы манипулировать им.

Это только начало, но комплексное решение будет проверять кадры, которые уже разделяют рабочее пространство, и вместо этого разделять их и перемещать фокус на новый кадр.

person John Mercier    schedule 03.07.2014
comment
Я считаю, что эти функции должны возвращать созданный ими фрейм. Если это так, то вы сможете добавить :goto_focus() к этой команде, чтобы переключить фокус на это разделение. Я не уверен, что понимаю вашу проблему с размерами. - person Etan Reisner; 03.07.2014
comment
Я обновил ответ, чтобы более четко показать проблему с размером. Я попробую функцию фокусировки позже сегодня. - person John Mercier; 03.07.2014

Да, ты можешь.

Вам нужно либо поместить свою привязку в контекст рабочей области, либо из контекста фрейма/мплекса вам нужно найти управляющую рабочую область, а затем вызвать для нее разделение.

(Я бы опубликовал код и более конкретные термины, но в данный момент я не перед машиной понятий и не хочу путать вещи, используя неправильные термины.)

person Etan Reisner    schedule 30.06.2014
comment
Думаю, я понял это. Я добавил свой ответ, но есть несколько проблем с моим решением. Любые предложения были бы потрясающими. - person John Mercier; 03.07.2014