[20/02/24 02:26 更新]
今回のスクリプトの説明をする。
movewindow.pl R
でアクティブなウィンドウが右に、R
をL
にすれば左に、U
にすれば上に、D
にすれば下に移動する。移動の程度は、行きたい方向の余白を半分にするように決めている。
以下は詳細。
use feature qw/say switch/;
no warnings "experimental::smartmatch";
一行目のsay
はデバグ用なので消してよい。switch
はgiven-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」に戻る]