Как реализовать макет с помощью автозапуска приложений в диспетчере окон i3?

23

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

Во-первых, предоставленное решение, основанное на документации Arch Linux и обновлении, предоставленном op, где он продвигает логику дальше:

exec --no-startup-id i3-msg 'workspace 1:Web; exec /usr/bin/firefox'
exec --no-startup-id i3-msg 'workspace 1; exec firefox; workspace 2; exec urxvt; workspace 1'

Также интересен этот обмен информацией об использовании некоторых из них непосредственно в командной строке без дублирования:

i3-msg workspace 3; i3-msg exec firefox
i3-msg workspace 9; i3-msg exec chromium

Но я никогда не видел конфигурацию, которая автоматически запускает множество окон / приложений в каждой рабочей области в соответствии с желаемой вертикальной или горизонтальной компоновкой. Моя цель - автоматически запустить эту простую конфигурацию, которую я использую:

 _____ _____     ___________     ___________
| lx  | lx  |   |        |u_|   |     |     |   proportions:
|_____|_____|   |  FF    |lx|   |spacefm    |   1- 25% each
|medit| lx  |   |        |__|   |     | vlc |   2- 75/25 x 25/50/25
|_____|_____|   |________|u_|   |_____|_____|   3- 50/50
      1               2               3

Итак, все начинается примерно так в configфайле:

exec --no-startup-id i3-msg 'workspace 1; exec i3-sensible-terminal; layout toggle split; layout splitv; split vertical; exec i3-sensible-terminal; exec i3-sensible-terminal; exec i3-sensible-terminal; workspace 2; exec firefox; exec urxvt; exec i3-sensible-terminal; exec urxvt; workspace 3; exec spacefm; exec vlc'

Но как в мире вы достигаете того типа макета и вертикального / горизонтального разбиения, который хотите? Я пытаюсь, но не понятно, как вы "смешиваете" исполнение и верстку. Синтаксис кажется уникальным для запуска, потому что вы выполняете i3-imgв конфигурации i3. Используете ли вы split h(или V) - layout split v- exec layout split v- focus down(или право) между каждым execвызовом?

Для одного рабочего пространства конфигурация запускает все приложения либо по вертикали, либо по горизонтали, и я не могу повлиять на макет - или последняя splitкоманда в цепочке решает, будут ли окна добавлены вертикально или горизонтально. i3-msgпо-видимому, игнорирует части команды, которые в некоторых случаях не отформатированы должным образом, поэтому их сложно отлаживать. Это еще более усугубляется тем фактом, что вам действительно нужно выходить из X и startxснова каждый раз, чтобы проверить результаты, так как простое обновление конфигурации mod+shift+Rне обрезает ее, даже если вы закроете все в каждой из рабочих областей.

Как правильно настроить это? У кого-нибудь есть решение, которое реализует что-то подобное? Документация довольно хорошо , но это не дает , что я могу увидеть подробный пример , который смешивает исполнение и расположение на нескольких рабочих областях.

Сообщество
источник
Также расширяется на этом .
Не нужно использовать FF или urxvt, чтобы обеспечить решение. Насколько я знаю, в этих программах нет ничего особенного, поэтому кто-то может воспроизвести макет №2 с любыми программами, сохранить файл json, удалить его, посмотреть, можно ли его запустить из файла конфигурации при входе в систему, а затем просто изменить имена программ. перед отправкой ответа ...
Вы можете загрузить часть в свой i3-файл в сочетании с сохраненным / восстановленным json-макетом, пожалуйста? У меня та же проблема .. но не заставить его работать. Используете ли вы несколько дисплеев в вашем файле config / json?

Ответы:

11

Я считаю, что вы ищете новую функцию сохранения макета, которая была представлена ​​в i3 v4.8 (2014-06-15). Связанная документация кажется довольно тщательной.

Цитирование из документации:

Сохранение / восстановление макета позволяет загрузить файл макета JSON, чтобы вы могли иметь базовый макет, с которым можно начать работать после включения компьютера. Также на ум приходят динамические сценарии использования: если вам часто (но не всегда!) Требуется сеточная компоновка терминалов с командами ping / traceroute для диагностики проблем в сети, вы можете легко автоматизировать открытие этих окон в правильной компоновке.

... и примечания к выпуску :

тл; др: экспорт 1 вашего текущего макета в виде файла JSON, загрузка его в новые сеансы i3, получение окон-заполнителей, которые будут заменены реальными приложениями после их запуска.


1. Вам может потребоваться, чтобы пакеты perl-anyevent-i3 и perl-json-xs использовалиi3-save-tree утилиты .

Дэмиен
источник
3
Функция макета на удивление сложна в использовании. Их концепция окна-заполнителя, которое «проглатывает» приложения, означает, что если вы хотите много раз использовать одно и то же приложение, например, lxterminalили urxvtдля одного рабочего пространства, вам придется различать их, используя --name somethingпри выполнении их в .i3 / config. Пример в документе работает, но когда я использую экспорт из одного из моего рабочего пространства, я не могу заставить его работать. Вы используете класс для имени и экземпляр для того, что вы использовали с --name. В этом случае я могу только серьезно надеяться на инструмент для графического интерфейса, так как формат json содержит так много скобок !!
1
Сейчас я обновился до 4.8, и я очень доволен этой новой функцией. У меня всегда были проблемы с надежным запуском при входе в систему .i3/configс более ранних версий, но как только я вошел в систему, все работает нормально. Я сделал несколько компоновок и сохранил их, а затем отредактировал только переменные класса файлов json. Затем что-то вроде, i3-msg workspace 2\; append_layout mylayout.json\;а затем i3-msg exec lxterminal\; exec lxterminal\; exec lxterminal\; exec meditследует восстановить ваш первый желаемый макет. // Спасибо за улучшение моего ответа, кстати.
Дэмиен