Цикл между открытыми окнами с 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.

  • Как получить коды ключей для xmodmap?
  • Несколько экранов вызывают мерцание (только когда ноутбук заряжается)
  • Вставка содержимого xclip на gedit
  • Настольная среда, которая только запускает полноэкранный терминал
  • В чем разница между раскладкой клавиатуры X11 и разворачиванием виртуальной консоли
  • Как сохранить дисплеи «установлены» и не исчезают при экранировании экрана или выключены?
  • Копирование / вставка не всегда работает с Firefox на терминал
  • При попытке открыть приложение через пересылку X11 через SSH, почему локальный экземпляр открытия приложения?
  • 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 приложения.

    Interesting Posts

    Поддержка Intel GMA 3600 Linux

    Не удалось найти документы на iPad-устройстве при установке

    / usr / bin /, который возвращает загадочную ошибку ", которая: no ls in ((null))"

    проблема чашек с встроенным buildroot

    Как я могу запустить `hackxor` внутри VirtualBox?

    Скопируйте до определенного многострочного шаблона

    Как назначить значения матрицы переменным в bash

    spec file: я хочу использовать мой tar

    Ограничение процессов с помощью памяти под Linux

    Bash для преобразования всех файлов определенного типа из Unix в формат Dos

    Будет ли Debian Wheezy (стабильный) автоматически обновляться до Джесси, как только Джесси станет стабильным релизом?

    Настройка Samba для использования сервера AD для аутентификации?

    Не удалось открыть соединение с вашим агентом аутентификации

    Как настроить wpa_supplicant.conf для включения кнопки WPS на android6?

    Постоянный низкий объем записывается в массив RAID (jbd2), что вызывает его?

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