Цикл между открытыми окнами с wmctrl

У меня есть сценарий, который я пытаюсь использовать, чтобы упростить передачу приложений. Сейчас он получает идентификатор окна имени приложения (первый параметр) и проверяет, существует ли window_id или нет. Если он не существует, он запускает команду для открытия этих приложений (второй параметр. Если он существует, он использует wmctrl чтобы получить окно window_id и переместить его на передний window_id .

Мой план состоит в том, чтобы добавить этот скрипт к ярлыкам для каждого используемого приложения. Тем не менее, я хочу добавить возможность циклически запускать все окна, открытые для приложения, вместо того, чтобы просто открывать последний. Любые рекомендации о том, как это сделать в bash? Мне нужно установить глобальную системную переменную? Хотя это очевидно, я довольно новичок в битве. Вот сценарий для windowctl, место, которое я хочу расширить, это функция get_window_id .

 #!/bin/bash #command [app_name] [app_command] function get_window_id() { #this is the part I want to extend window_id=$(wmctrl -l | grep -i "$1" | tail -1 | cut -f1 -d" ") } function open_app() { exec $2 } get_window_id $1 if [ -z $window_id ] then open_app $1 $2 else wmctrl -i -a "$window_id" fi 

Примером может быть добавление команды windowctl sublime subl3 в Alt + S.

2 Solutions collect form web for “Цикл между открытыми окнами с wmctrl”

Я долго использовал мини-скрипт, который я назвал lonew для этого. Он должен быть коротким для "lastof or new" . lastof – еще один мой скрипт, который пытается найти видимое окно, которое соответствует данной команде.

Оба сценария ниже:

(они могут использовать некоторые рефакторинги, но они выполняют свою работу)

lonew:

 #!/bin/bash CMD="$1"; shift; ARGS="$@" lastof $CMD || { echo $CMD $ARGS; $CMD $ARGS & } disown 

lastof:

 #!/usr/bin/env ruby #open-last #List all windows and sort them by the time they were last accessed require 'shellwords' XTIME="_NET_WM_USER_TIME" QARGV=ARGV.map {|arg| Shellwords.escape(arg)} ids=IO.popen "xdotool search --onlyvisible #{QARGV.join(" ")}" max_time_id=nil max_time=nil ids.each_line do |id| id.chomp! puts "id=#{id}" time=`xprop -id #{id} #{XTIME}`.split('=')[1].to_i max_time||=time max_time_id||=id if time > max_time max_time=time max_time_id=id end end exit(1) unless max_time_id puts "Switching to ID: #{max_time_id}" exit system("xdotool windowactivate #{max_time_id}") __END__ 

Возможно, это что-то вроде того, что вы ищете. Я просто использовал sleep , но вы можете использовать диалог, такой как yad или zenity , и изменить цикл, чтобы он продолжал ездить на велосипеде или все, что вам нужно. Затем вы можете добавить горячую клавишу по необходимости.

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

 shortname=$1 case $shortname in (firefox) cmd='firefox'; rx='Mozilla Firefox$';; (nautilus) cmd='nautilus'; rx=' (-|—) File Browser';; (*) echo 'unknown shortname'; exit;; esac id=( $(wmctrl -l | awk "/$rx/"'{print $1}') ) (( !${#id[@]} )) && { "$cmd" & exit; } for (( i=0; i<${#id[@]}; i++ )) ;do wmctrl -i -a ${id[i]} sleep 3 done 

Обратите внимание, что wmctrl не может активировать (взаимодействовать) с определенной вкладкой в X Window приложения.

  • Пересылка X-окон через су-сессию
  • Как максимально автоматизировать окно в X Window?
  • Как скрыть курсор мыши, когда он находится на краю экрана
  • Попросите определенные ключи пройти через lockscreen
  • Как сделать настройки xrandr постоянными в Debian 9?
  • Инвертирование ключей FN
  • .Xresources settings
  • что происходит, когда оконный менеджер помещается в фоновый режим
  • Инициирующий менеджер GDM / Дисплей в уже существующей сессии X11
  • Несколько мониторов в виде клонированных окон для рабочего стола
  • Как включить Shift Lock? (Sticky shift key)
  • Interesting Posts

    Могу ли я создать гостевую учетную запись только для местных пользователей?

    Как найти конкретную строку и распечатать всю строку?

    kvm частичное изображение диска

    Удалите повторяющиеся строки с помощью twist

    Как установить имя вкладки для имени псевдонима удаленного хоста, к которому я подключен?

    Что-то переименовывает php-файлы в .php.suspected; Я пытаюсь выяснить, что

    Использование сценария ожидания для автоматизации проверки пароля для множества маршрутизаторов

    разница между «ls -alR /» и «ls -alR / &»?

    Как создать отдельный раздел usr во время установки арки?

    Как отправить stdout на несколько команд в оболочке рыбы?

    Какова наилучшая процедура для настройки системы с тройной загрузкой?

    Как безопасно заменить диск с не-неудачей в массиве RAID RAID5?

    Bitmap Font data как массив в C

    Какой файл загружается в заданном изо

    Сценарий для управления агентами ssh: Это адекватно? Любые ошибки?

    Linux и Unix - лучшая ОС в мире.