モブ沢工房

プログラミングとかLinux関連(特にOSSのグラフィックツール関連)とかレトロゲームとか3Dプリンタやら日曜大工等、色々。

画像ビューワの憂鬱

以前も書いたと思うのですが、14.04以前のubuntuではgthumbを愛用していたのですが、何故か改悪が加わり非常に動作がトロい・画質が悪いという事態になってしまいました。

この画質が悪いというのには2つの意味が有り、まずデフォルトであるオプションの「高画質」だと、バイリニアフィルタみたいのが常にかかり動作が激重、さらにそのフィルタで縮小ダウンサンプリングでも常にボケボケという脅威*1の動作を行うようになっています。

低画質だと動作はキビキビしてきますが、以前のgthumbほどではない気が。そしてここでもうひとつの「画質の悪さ」 - ダウンサンプリング時には本当に何の補完もしないらしく電線や屋根の稜線などがガビガビに…以前のgthumbや他のビュワーでは起きない現象…

これは一体どんな人が使うと使い物になるのか?聞いてみたい。相当ハイエンドな環境なんだろうなぁ…(ハァ…って、ボケボケなのは変わらないか。まぁ、低画質モードでガビガビになるのを気にしなけりゃいいのか。

おいらの場合、ビュワーは画像鑑賞や確認だけでなく資料の表示にも使っています。ristrettoなどの他の軽量ビュワーは、アイコンビューにフォルダが表示されないので駄目なのです。お絵かき用の資料を、ジャンルごとにフォルダで分けてあるので、フォルダがビュワーのウィンドウから直接即座に選べるのは必須条件なのです。

まぁそんなこともあってgihyo.jpの記事で知ったgeeqieに乗り換えたのです。これは軽量でフォルダも表示されて実に便利。

しかしgeeqieにも罠が!!

以前に起動したウィンドウ位置と寸法を覚えるか、全く覚えないかの二択なのです。

ウィンドウ位置を覚える状況だと、サブモニタで起動したときに、それ以前にメインモニタで起動しているとメインモニタの方にウィンドウが出てしまいます。これはお絵かきの時にサブに資料を出しつつメインでお絵かきという行動が面倒。サブに固定する手もありますが、メインで資料探しと言う時に面倒です。

そこでgeeqieの設定をいじり、ウィンドウ位置を覚えない設定にすると…こうすると、他のアプリのように「起動時のモニタで表示される」ようにはなりますが…

ウィンドウ位置だけ忘れてくれればいいのですが、前述のように寸法も含まれているので、常に小さいウィンドウで起動します orz

これは常にリサイズが非常に面倒。

もしかして~/.config/geeqie/geeqierc.xmlにある main_window_h / main_window_w を書き換えて置けば、それが強制されるのでは?と思いましたがそんなことはないらしく、常に固定されたサイズで起動してこれらの値を上書きする模様… orz=3 orz

xfce4のウィンドウマネージャの機能で「縦に合わせる」「横に合わせる」のは存在するのですが、任意の指定サイズとかそういう細やかな機能はない… 全画面にしちまってもいいんですが、そうするとwebブラウザとかを脇に表示するのが面倒というか。

オープンソースの有り難いところはこういう時にソースを拾ってきて自分で変えられるところ…のハズですが、オイラの腕では何週間もかかりそうです。まぁ、本当にいよいよとなれば眦を決して取り組まねばなりませんが、そこまでの決意を要する事態とも思えない。

そこでウィンドウマネージャをコマンドラインから操作するコマンド・wmctrlを呼び出すスクリプトをサクッと書きますた!

wmctrlはウィンドウ名に:ACTIVE:とするとアクティブウィンドウを操作対象とするので、それを利用します。

#!/bin/sh


while [ "$1" != "" ];do

    case $1 in
    --fullhd)
        width=1920
        height=1080
        ;;
    --hd)
        width=1280
        height=720
        ;;
    --wuxga)
        width=1920
        height=1200
        ;;
    --wsxga+)
        width=1680
        height=1050
        ;;
    --wsxga)
        width=1600
        height=1024
        ;;
    --wxga+)
        width=1440
        height=900
        ;;
    --wxga)
        width=1280
        height=800
        ;;
    --uxga)
        width=1600
        height=1200
        ;;
    --sxga)
        width=1280
        height=1024
        ;;
    --xga)
        width=1024
        height=768
        ;;
    --svga)
        width=800
        height=600
        ;;
    --vga)
        width=640
        height=480
        ;;
    --square)
        height=$width
        ;;
    -h | --help)
        linenum=`cat $0 | grep -n -e '^#--*#' | sed -e 's/:.*//g'`
        head -n $linenum $0
        exit 0
        ;;
    * )
        echo $1 is unrecognized option
        ;;
    esac

shift 1
done

#--------------------#
if [ "$width" != "" ] && [ "$height" != "" ] ;then
wmctrl -r :ACTIVE: -e 0,-1,-1,$width,$height
fi

無駄に長い(汗)

無意味に微妙な汎用性を持たせてしまいましたが、これは後々に変えたくなるかもとか色々思って付けときました。今の所結局、--sxgaしか使ってなかったり。 本当は「画面の横半分のサイズ」とか、xrandrから値を拾ってきて算出して…とかも考えたんですが、ムズカシそうなのでやめておきました。というか、どうせ自分で使うモニタは決まってるんですから固定サイズでいいんですけどね。我ながら、一体何をしているのだか。

このスクリプトを、xbindkeysからキーコンビネーションで呼び出します。適当にwinキー + qにしました。

備忘録的に書いておきますとキーコンビネーションを~/.xbindkeysrcにどう書けばいいか?は、xbindkeys -k で対話モードで簡単に知ることができます。

"/home/dothiko/scripts/desktop/resize_active_window.sh --sxga"
m:0x40 + c:24
Mod4 + q

こんなふうにしておきました。これで大きくしたいときはサクッとwin+qです。他のウィンドウにも使える!(使わないけど)

とりあえずこれでしのごうと思っています。

*1:驚異ではない