2019年7月25日木曜日

Fehをデフォルトで矢印キー等で別画像に行くようにする

Fehは検索が甘いとファイヤーエムブレムヒーローズが必ず検索に割り込んでくるので大変だよね。
画像ビューアのことです。

MATEからi3に変えて、どうせなら画像ビューアは背景設定に使ってるFehだけにしようと思った(色んなビューアを持つのはなんかゴチャってて嫌なので)んですけど、
ファイルマネージャから画像を開いた時、矢印キーで次の画像/前の画像に行けないという不便さがあった。(コマンドラインで feh * とかやらせた時は普通にできます)

それを(ちょっと遠回りっぽい気もするけど)直せたのでメモ。

ただしデスクトップエントリを使用するやつのみ

PCManFMでポチった時に次/前と行けないのが不便!ってだけなのでコマンドラインからでもそうなってほしいって時はちょっと微妙かも。その時はaliasコマンドでどうにかしよう。

エントリのExecキーの変更

Fehには -f [リストファイル] と --start-at [画像フルパス] のオプションがあって、それを使うと目的の次/前ビューが可能になります。
PCManFMはデスクトップエントリを経由して画像の「開く」を実行します。なのでエントリ内のExec欄をnotify-sendとかにすると画像はビューアで開かずパス名だけを通知してきたりします。

コマンドラインで願いを叶えるならば feh -f $(ls) --start-at $PWD/aaa.png などで可能ですが、デスクトップエントリ内のExecキーはパイプ等で複数のコマンドを繋げられない?のと、$(ls) などの展開をしないっぽいので、それらコマンド群を~/bin/feh-extend として拡張コマンド化し、当のデスクトップエントリはその拡張コマンドfeh-extendを参照してもらいます。
/usr/share/applications/feh.desktop
[Desktop Entry]

Name=Feh

Name[fr_FR]=Feh

Name[de_DE]=Feh

GenericName=Image viewer

GenericName[fr_FR]=Visualisateur d'image

GenericName[de_DE]=Bildbetrachter

Comment=Image viewer

Comment[fr_FR]=Visualisateur d'image

Comment[de_DE]=Bildbetrachter

Exec=/home/fahrenheit/bin/feh-extend %f

Icon=image-viewer

Type=Application

StartupNotify=false

NoDisplay=true

Hidden=false

Terminal=false

Categories=Graphics;Viewer;

MimeType=image/jpeg;image/png;image/gif;image/tiff;image/bmp;image/x-icon;image/x-xpixmap;image/x-xbitmap;
 これまたExecキーは~などの展開をしないかもしれないので、フルパスで指定します。

拡張コマンド

~/bin/feh-extend
#!/bin/bash
if [ x$1 != "x" ]; then
x=$(dirname $1)
ls $x -F | grep -v / | sed -e "s@^@${x}/@g" -e "s@\*\$@@g" > ~/.filelist #フルパスリストを保存
feh -. -f ~/.filelist --start-at $1

fi
(19.09.28追記)
Program Files (x86) みたいな利便性の欠片もないディレクトリ名だと作動しなかったので、変数系はダブルクオートで囲みます。
#!/bin/bash
if [ "x$1" != "x" ]; then
x=$(dirname "$1")
ls "$x" -F | grep -v / | sed -e "s@^@${x}/@g" -e "s@\*\$@@g" > ~/.filelist #フルパスリストを保存
feh -. --draw-exif -draw-info -f ~/.filelist --start-at "$1"
fi

ifで引数があるか確認させる必要はないかも…。
エントリの方が選択した画像のフルパスを引数$1に入れてよこすので、こっちで$1からディレクトリ部分だけを取ってリストを作成、最後に純粋なFehコマンドに作ったリストとフルパスをつけて実行。

ファイルリストの方はフルパス表記じゃなくても良かったりしますが、それはコマンドの実行場所にリスト内の画像がある場合だけで(つまりコマンドラインで実行した時)、デスクトップエントリは実行場所が違うのか起動しなかったので、sedでパスを付け足しています(あと画像に実行可能フラグが立っているとlsで末尾に*が付くのでそれも撤去しています)。

chmod等で実行可能フラグをつけるのをお忘れなく。

.filelistというゴミファイルがホームディレクトリにできてしまいますが、よほど大量の画像ファイルをリストしない限り圧迫することはないと思うので気にしない方向で…。

20.02.13追記:矢印キーで別画像に行くとウィンドウサイズが元に戻る

800x600で開いていたfehウィンドウでそれ以上のサイズの画像を開くとウィンドウサイズがその画像に合わせて広がってしまうようになった(Debian 10にしたらこうなった気が)。ので、

feh-extendの方で --geometry 600 x 800 のオプションを足します。横 x 縦。

0 件のコメント:

コメントを投稿