アプリケーションの操作を簡単にするために使用したいスクリプトがあります。次に、アプリケーション名(最初のパラメータ)のウィンドウ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__