Linux > イメージビューアsxiv

sxiv : Simple X Image Viewer
CLI的に使う軽い画像ビューア
githubにある最新版はカスタマイズがある程度できるようになってる
これをemacsのdiredから起動できるようにする


目次


インストール

バージョンが20番台に上がって、サムネイルのサイズを変更とか、いろいろ便利になっているので、githubから

$ git clone https://github.com/muennich/sxiv.git
$ cd sxiv/
#設定ファイルを先に作って、サムネイルのサイズを変更
$ make config.h
- static const int thumb_sizes[] = { 32, 64, 96, 128, 160 };
+ static const int thumb_sizes[] = { 32, 64, 96, 128, 160, 256 };
- static const int THUMB_SIZE = 3;
+ static const int THUMB_SIZE = 6;
$ make
#エラーの出た依存関係をインストール
$ sudo apt install libimlib2-dev libxft-dev libexif-dev
$ make
$ sudo make install
 

サムネイルをキャッシュする

$ mkdir -p ~/.cache/sxiv

キーイベント追加

C-x に続くキーイベントをカスタマイズできる。
$ mkdir -p ~/.config/sxiv/exec
~/.config/sxiv/exec/key-handler を作る
#!/bin/sh
readonly KEY="$1";
while read file; do
    case "$KEY" in
        "C-d") rm "$file" ;;
        "C-g") gimp "$file" & ;;
        "C-r") convert -rotate 90 "$file" "$file" ;;
        "C-c") cp "$file" ~/tmp/ ;;
    esac
done
 
 
$ chmod +x key-handler

/usr/local/share/sxiv/exec/key-handler にサンプルがインストールされているはず。

ステータスバーの内容をカスタマイズ

$ mkdir -p ~/.config/sxiv/exec
$ cd $_
$ cp /usr/local/share/sxiv/exec/image-info .
$ chmod +x ./image-info
ステータスバーにファイルサイズ、画像サイズ、ファイル名が表示される


使い方

起動オプション

ディレクトリ内の全画像をサムネイルモードで表示

$ sxiv -t -f -q * &
  • t thumnails
  • f fullscreen
  • q quiet

指定した画像の5番目を開いておいて、残りの画像をサムネイルモード用に読み込み

$ sxiv -f -q -n 5 1.jpg 2.jpg 3.jpg 4.jpg 5.jpg
画像ファイルはアルファベット順になっていること

キーイベント

<enter> イメージモード と サムネールモード を切り替え
 
サムネールモードで左ダブルクリック → イメージモードへ
イメージモードで右クリック → サムネールモードへ
 
イメージモード
<n> 	n 	次の画像を表示する 	<space>
<n> 	p 	前の画像を表示する 	<backspace>
    	g 	最初のイメージへジャンプする 	 
<n> 	G 	最後のイメージ あるいは <n>番めのイメージへジャンプする
    	+ 	ズームイン
    	- 	ズームアウト
<n> 	= 	100% あるいは <n>% の大きさにする
    	W 	ウィンドウの大きさに合わせる
    	q 	終了
 

rifle_sxiv.sh

sxiv IMG.jpg
とやったら、IMG.jpgだけ読み込む。ディレクトリ内の他の画像をバックグラウンドにサムネールモードで読み込んどいてくれてもよさそうな。

これを解消するシェルスクリプト
ranger/rifle_sxiv.sh
rifle_sxiv.sh IMG.jpg
とやったら、IMG.jpgのいるディレクトリ内の画像ファイルをリストにして、その何番目にIMG.jpgがいるかを指定してsxivを起動する

call-sxiv.el

実は画像の一覧を見るって、FlickrにあげるためにカメラのSDカードを繋いだとき。その場合、SDカード内の最新のファイルが表示されて欲しい。となると、ファイル名がアルファベット順で最後になる画像を最初に表示しておいて、背後にサムネイルモードで全画像が準備されてるっていうのが、正しい。ということで、emacsのdiredでsxivを呼び出して、ディレクトリ内の全画像を表示するための emacs lisp を書いた。
(defun call-sxiv ()
(interactive)
(let ((image-files;画像ファイル名のリスト
(delq nil;この辺はemacs26辺りで filterマクロに置き換えか?
(mapcar
(lambda (f)
(when (string-match
"\.\\(jpe?g\\|png\\|gif\\|bmp\\)$"
f )
f ))
(directory-files default-directory) ))));現在のディレクトリ内のファイル名のリスト in alphabetical order
(start-process-shell-command;シェルコマンドを非同期実行
"sxiv"
nil ;プロセス用のバッファを開かない
(format "sxiv -f -n %s %s"
(length image-files);画像ファイルの個数=最後の画像ファイル
(mapconcat 'identity image-files " ") ))));リストを空白区切りで連結
(global-set-key (kbd "s-i") 'call-sxiv);Super+iで呼び出し
view raw call-sxiv.el hosted with ❤ by GitHub
最終更新:2018年02月20日 08:43