TGViewer
Эргономичный код Эргономичный код @ergonomic_code · 837 subscribers
Post #544 942
Привет!

Рубрика "балуемся с ИИ"

Подарили ребёнку Алису на новый, решил попробовать YandexGPT 4 Pro.
В диалоге умом не блещет, а вот адовый shell-скрипт, который я из говна, палок и с её же помощью побырому собрал

 gdbus call --session --dest org.gnome.Shell --object-path /org/gnome/Shell/Extensions/WindowCommander --method org.gnome.Shell.Extensions.WindowCommander.Place -- $(gdbus call --session --dest org.gnome.Shell --object-path /org/gnome/Shell/Extensions/WindowCommander --method org.gnome.Shell.Extensions.WindowCommander.List | cut -c 3- | rev | cut -c4- | rev | jq -c '.[] | select (.in_current_workspace == true) | .id' | xargs -I {} -d "\n" sh -c 'echo -n "{};"; gdbus call --session --dest org.gnome.Shell --object-path /org/gnome/Shell/Extensions/WindowCommander --method org.gnome.Shell.Extensions.WindowCommander.GetDetails {} | cut -c 3- | rev | cut -c4- | rev | jq | grep \"wm_class\"' | grep "firefox" | sed 's/;.*//')  0 30 1920 1165
?


круто разобрала и правильно поняла:

Эта команда выполняет следующие действия:

1. gdbus call --session --dest org.gnome.Shell --object-path /org/gnome/Shell/Extensions/WindowCommander --method org.gnome.Shell.Extensions.WindowCommander.List: Вызывает метод org.gnome.Shell.Extensions.WindowCommander.List для получения списка окон.
2. cut -c 3- | rev | cut -c4- | rev:
* cut -c 3- удаляет первые два символа из каждой строки.
* rev реверсирует строку.
* cut -c4- удаляет первый символ реверсированной строки.
* rev снова реверсирует строку, приводя её к исходному порядку.
Эти команды используются для корректного парсинга вывода.
3. jq -c ‘.[] | select (.in_current_workspace == true) | .id’:
* Использует jq для фильтрации списка окон, оставляя только те, которые находятся в текущей рабочей области.
* Извлекает идентификаторы этих окон.

4. xargs -I {} -d “\n” sh -c ‘echo -n “{};”; gdbus call --session --dest org.gnome.Shell --object-path /org/gnome/Shell/Extensions/WindowCommander --method org.gnome.Shell.Extensions.WindowCommander.GetDetails {} | cut -c 3- | rev | cut -c4- | rev | jq | grep “wm_class”’:
* xargs выполняет команду для каждого идентификатора окна.
* Команда внутри sh -c вызывает метод org.gnome.Shell.Extensions.WindowCommander.GetDetails для каждого окна.
* Вывод команды фильтруется с помощью jq и grep для получения WM_класса окна.

5. grep “firefox” | sed ‘s/;.*//’:
* Фильтрует вывод, оставляя только те строки, которые содержат “firefox”.
* sed удаляет часть строки после первого “;”.
6. gdbus call --session --dest org.gnome.Shell --object-path /org/gnome/Shell/Extensions/WindowCommander --method org.gnome.Shell.Extensions.WindowCommander.Place –:
* Вызывает метод org.gnome.Shell.Extensions.WindowCommander.Place, передавая ему параметры, которые следуют после “–”.
* Эти параметры (0 30 1920 1165) вероятно задают позицию и размер окна.

Таким образом, команда получает список окон в текущей рабочей области, фильтрует окна Firefox, извлекает их WM_классы и параметры, а затем размещает одно из этих окон в заданной позиции и размере.
  • 👍 3
More from @ergonomic_code
  1. Sep 25, 2026photo post
  2. Sep 25, 2026Привет! Ну чтож. У меня наконец-то оглушительный успех с 100%-вайбкодингом. Знакомьтесь -…
  3. Sep 23, 2026Про творческий беспорядок в процессах Я куда ни приду лидом, меня первое время все ругают…
  4. Sep 23, 2026Саша пишет про процессы, как всегда очень круто, имхо
  5. Sep 4, 2026Post #717
  6. Aug 14, 2026Привет! Простые CRUD-приложения - это сложно Если помните, я уже писал, что с момента пере…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →