Как я могу открыть рабочее пространство из командной строки в i3? - PullRequest
0 голосов
/ 10 ноября 2018

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

1 Ответ

0 голосов
/ 11 ноября 2018

Все «скрипты» 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#_receiving_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»: kitty

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

«Инициируйте другое окно котенка»: kitty

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

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

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

...