Как я могу открыть рабочее пространство из командной строки в i3?

Я бы хотел, чтобы сценарий открывал рабочую область со «следующим» доступным номером, а затем открывал в этой рабочей области, возможно, два окна, каждое из которых уже указывало на определенный вид. Любые указатели на то, как это сделать? Является ли i3 действительно скриптовым в этом отношении? Я только начал использовать i3, и он мне очень нравится, просто хочу, чтобы теперь он делал то, что мне нужно, на регулярной основе ;-)


person lucidquiet    schedule 09.11.2018    source источник


Ответы (2)


Все «скрипты» i3, которых еще нет в конфигурации, выполняются через i3-msg

i3-msg отправляет сообщения оконному менеджеру i3. В основном это строки конфигурации (или IPC, что немного сложнее).

Как я могу открыть рабочее пространство из командной строки в i3

Как его открыть в конфиге?

bindsym Mod4+1 workspace $ws1

Что-то вроде этого, верно? Теперь с помощью i3-msg перейдите в рабочую область 1:

i3-msg workspace 1

Просто, верно?

Остальная часть вашего вопроса довольно неясна, но я сделаю все возможное:

Я хочу, чтобы сценарий открывал рабочую область со «следующим» доступным номером».

Как вы начнете это делать (после выполнения man i3-msg):

i3-msg -t get_workspaces

Это возвращает json (если вы сделали какое-либо кодирование, вы почувствуете тепло внутри, а если нет, вы будете напуганы выводом). Тогда я попрошу вас прочитать об этом:

https://i3wm.org/docs/ipc.html#_receive_replies_from_i3

Используя jq или что-то вроде json.sh для анализа вывода с помощью bash, вы должны получить, какие рабочие области являются «активными», например:

[{"num":3,"name":"3","visible":true,"focused":false,"rect":{"x":0,"y":0,"width":1920,"height":1080},"output":"HDMI-1","urgent":false},{"num":2,"name":"2","visible":true,"focused":false,"rect":{"x":3520,"y":0,"width":1920,"height":1080},"output":"VGA-1","urgent":false},{"num":1,"name":"1","visible":true,"focused":true,"rect":{"x":1920,"y":32,"width":1600,"height":868},"output":"eDP-1","urgent":false},{"num":5,"name":"5","visible":false,"focused":false,"rect":{"x":1920,"y":32,"width":1600,"height":868},"output":"eDP-1","urgent":false}]

Читая веб-сайт, который я вам дал, вы можете видеть, что рабочие области 1, 2, 3 и 5 являются «активными», то есть в них есть окна. После анализа фактического json вы получите массив или что-то в этом роде. Если вы хотите появиться на 4 (настоящий «следующий» рабочий стол) или 6 (он же самое большое число + 1), решать вам. Вы не упомянули, что вы хотите написать, так что я оставлю это вам, чтобы понять.

может быть, два окна, каждое из которых уже указывало на определенный вид

Я не уверен, что ты имеешь в виду. Вы, вероятно, хотите 2 окна X (в этом случае мы будем использовать терминал) в рабочей области, которую мы определили как «следующую»?

Вернемся ненадолго к i3-msg.

Представьте, что вы делаете то, что пытаетесь сделать, вручную, в виде списка команд, которые вы запускаете в i3.

"Перейти к рабочей области X": i3-msg workspace 4

"Создайте там программу с именем котенок": kitty

"Разделить по вертикали и создать другую программу": i3-msg split v

"Создать другое кошачье окно": kitty

После этого вы можете вернуться к своему текущему рабочему пространству (я предлагаю сохранить его в переменной и просто повторно использовать рабочее пространство i3-msg $curr_workspace).

Как я уже сказал, вопрос был не о самом сценарии, поэтому я оставил это, чтобы разобраться с этим самостоятельно, но не стесняйтесь задавать конкретный вопрос под тегом bash. :). Надеюсь, я не совсем неправильно понял ваш вопрос.

Добро пожаловать в сообщество i3.

person Nephilim    schedule 11.11.2018

Пост @Nephilim превосходен. Просто чтобы добавить трюк в набор инструментов...

Иногда вы можете захотеть написать какое-то действие относительно определенного окна. Нравиться:

Дайте мне тестовую среду рядом с этим браузером.

Вы можете получить идентификатор окна, запустив xwininfo и щелкнув окно, к которому вы хотите привязать свою автоматизацию. Идентификатор окна можно использовать в качестве параметра для i3-msg.

Например, выполнение приведенной ниже команды позволит вам выбрать окно, а затем установить ширину этого окна на 1000:

i3-msg "[id=$(
              xwininfo \
                | sed -n 's/.*Window id: \(0x[0-9a-f]*\).*/\1/p'
             )] resize set 1000"

person MatrixManAtYrService    schedule 04.12.2020