Perlとxdotoolでウィンドウ移動: スクリプト

[20/02/24 02:26 更新]

今回のスクリプトの説明をする。

movewindow.pl Rでアクティブなウィンドウが右に、RLにすれば左に、Uにすれば上に、Dにすれば下に移動する。移動の程度は、行きたい方向の余白を半分にするように決めている。

以下は詳細。


use feature qw/say switch/;
no warnings "experimental::smartmatch";

一行目のsayはデバグ用なので消してよい。switchgiven-when構文用。二行目はその警告対策。(無くても動くのは動く)


my $dx = -4;
my $dy = -50;

xdotoolは親ウィンドウのタイトル部分や枠の部分だけ、移動に誤差が出る。$dx, $dyは、その補正。これは、環境依存のはず。


my $sc = `xrandr | head -1`;
my ($sx, $sy) = $sc =~ /current\s+(\d+)\s+x\s+(\d+)/;

xrandrを使って、ディスプレイのサイズを取得。絶対位置で指定する人には不要。


my $win = `xdotool getactivewindow getwindowgeometry --shell`;

for (split /\n/, $win) {
	eval '$' . $_;
}

xdotoolを使って、アクティブなウィンドウの情報を取得。結果は、$WINDOW(ウィンドのID)、$X$Y$WIDTH$HEIGHTに収納。


my $x = $X + $dx;
my $y = $Y + $dy;

前述の補正。


given ($ARGV[0]) {
	when ('R') {
		$x += int(($sx - ($x + $WIDTH)) / 2);
	} when ('L') {
		$x -= int($x / 2);
	} when ('U') {
		$y -= int($y / 2);
	} when ('D') {
		$y += int(($sy - ($y + $HEIGHT)) / 2);
	} default {
		die "need argument (R|L|U|D)";
	}
}

移動先の座標計算。移動の程度を変えたい人は、ここをいじる。


`xdotool windowmove $WINDOW $x $y`;

xdotoolを使って、移動の実行。

このスクリプトをホットキーに登録すると便利である。LXDEだとlxhotkey(メニューに「setup Hot Keys」とかあることも)を使って、適当なキーに~/bin/movewindow.pl Rなどと登録するとよい。(もちろん、スクリプトを適当な場所に置いて実行権限をつけてから)

このスクリプトで不満が残る人は、自分で工夫してほしい。

[スクリプトに戻る] [「Perlとxdotoolでウィンドウ移動」に戻る] [「あえてのPerl」に戻る]