アプリケーションの操作を簡単にするために使用したいスクリプトがあります。次に、アプリケーション名(最初のパラメータ)のウィンドウIDを取得して、存在することを確認しwindow_id
ます。存在しない場合は、コマンドを実行してアプリケーションを開きます(2番目のパラメーター)。存在する場合は、wmctrl
ウィンドウをインポートしてwindow_id
前方に移動するために使用されます。
私の計画は、私が定期的に使用しているすべてのアプリケーションのショートカットにこのスクリプトを追加することです。しかし、最後に開いているウィンドウだけを開くことができるのではなく、アプリケーションが開いているすべてのウィンドウを循環する機能を追加したいと思います。 Bashでこれを行う方法についての提案はありますか?グローバルシステム変数を設定する必要がありますか?明らかに、私は初めて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
にコマンドを追加します。AltS
答え1
lonew
私は長い間これにちなんで名付けられたミニスクリプトを使用してきました。の略です"lastof or new"
。lastof
最近アクセスした特定のコマンドに一致する表示されるウィンドウを見つけようとする別のスクリプト。
両方のスクリプトは次のとおりです。
(おそらくいくつかのリファクタリングが利用可能ですが、作業は完了です)
ロニウ:
#!/bin/bash
CMD="$1"; shift; ARGS="$@"
lastof $CMD || { echo $CMD $ARGS; $CMD $ARGS & }
disown
ついに:
#!/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__
答え2
たぶんこれはあなたが探しているものかもしれません。私はちょうどそれを使用しましたが、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ウィンドウ内。