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

  • Получить отображаемый номер для данного tty
  • Как программно контролировать пересылаемые приложения X11?
  • Почему мое переплетение Caps Lock отменено?
  • Запустить второй X-сервер из X в качестве службы systemd
  • Использование X-Windows из Windows 8.1
  • Как я могу следить за сообщениями X-клиента?
  • «Текущее» окно терминала на команду shell / executable?
  • Доступ к виртуальной консоли через 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

    Установка Kino завершается с отсутствием файла linux / videodev.h

    Как получить строки, содержащие -R с grep

    Loop в скрипте на удаленном сервере не работает

    Стат диски с lsblk?

    Использование нестандартного местоположения для служб avahi

    Удалите все пробелы после определенного слова

    В emacs term-mode, что такое char-mode и line-mode? Как они отличаются?

    В состоянии Bash if, как проверить, существуют ли какие-либо файлы, соответствующие простому шаблону?

    Изменение родительской папки Linux VirtualBox

    Греп медленно выйдет после матча?

    Как получить уникальный счет определенной части строки

    несколько путей библиотеки ffmpeg, как можно исключить устаревшие установки ffmpeg?

    Вызов Bash: использование \ в PROMPT_COMMAND

    Как можно полуавтоматически монтировать торт TrueCrypt с помощью встроенных системных инструментов?

    Почему мои разделы не отображают нужную емкость на 4096-битном физическом блочном жестком диске?

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