便利ツールだがインストールと設定が煩雑なのでまとめた。
ranger
rangerはTUIファイルマネージャ。軽量。Python製。vim風の操作。
外部ツールを使って以下のようなこともできる。
- 画像ファイルのプレビュー
- テキストファイルのプレビュー(シンタックス・ハイライト)
外部ツール
グループ | ツール |
---|---|
TextBrowser | w3m lynx elinks |
SyntaxHighlight | highlight Pygments |
Archve | atool unrar |
文字コード解析 | chardet |
画像をASCII文字表示 | img2txt |
クリップボード | xsel xclip pbcopy |
画像メタデータ表示 | exiftool |
動画メタデータ表示 | mediainfo ffmpegthumbnailer |
PDFをテキスト化 | pdftotext |
画像編集ツール | ImageMagick (identify , convert ) |
手順
- インストール
- 設定
なお、面倒ならインストールと設定を自動化する以下スクリプトを使う。詳細は後述。
install_ranger.sh
#!/bin/bash set -Ceu #----------------------------------------------------------------------------- # install_ranger.sh # 作成日時: 2019-03-16 12:53:39 #----------------------------------------------------------------------------- Install() { # 罠 # * apt, pip, どちらもスペース区切りで複数やると勝手に途中で終了することがある。1個ずつやること。 # * 実行コマンド名とインストール名が異なるものがある。`pip search ranger-fm`などでパッケージ名を検索して見つけること。 # pip3 install ranger-fm Pygments lynx elinks atool unrar-free pymediainfo xpdf-python chardet img2txt # pip install ranger-fm Pygments lynx elinks atool unrar pymediainfo xpdf-python chardet img2txt sudo pip3 install ranger-fm # sudo pip3 install Pygments # sudo pip3 install pyhighlight sudo pip3 install lynx sudo pip3 install elinks sudo pip3 install atool sudo pip3 install unrar sudo pip3 install pymediainfo sudo pip3 install xpdf-python sudo pip3 install chardet sudo pip3 install img2txt # sudo apt install -y xsel w3m xpdf caca-utils # sudo apt install -y xsel exiftool mediainfo w3m pdftotext mutool caca-utils ImageMagick sudo apt install -y xsel sudo apt install -y exiftool sudo apt install -y mediainfo sudo apt install -y w3m sudo apt install -y highlight #E: パッケージ pdftotext が見つかりません # Debianでは xpdf という名前でインストールする。実行コマンド名は pdftotext # sudo apt install -y pdftotext sudo apt install -y xpdf # sudo apt install -y mutool #E: パッケージ mutool が見つかりません # $ apt search mutool # mupdf-tools/stable,stable,stable,stable,stable 1.9a+ds1-4+deb9u4 armhf # command line tools for the MuPDF viewer sudo apt install -y mupdf-tools sudo apt install -y caca-utils sudo apt install -y imagemagick sudo apt install -y ffmpegthumbnailer # 画像表示に対応したターミナル sudo apt install -y terminology # Linux.Debian.Raspbianでは存在しないものがいくつかある # 注意、'exiftool' の代わりに 'libimage-exiftool-perl' を選択します # E: パッケージ pdftotext が見つかりません # E: パッケージ mutool が見つかりません # $ exiftool # bash: exiftool: コマンドが見つかりません # img2txtはcaca-utilsに含まれているはずなのにない。 # $ img2txt # bash: img2txt: コマンドが見つかりません # すべてaptで入れるときは以下。(欠点: 1. 最新版ではない 2. unrarはビルド必要のため入れられない 注意: 1. 一部別物(pygments:highlight) 2. 一部名前が違う(img2txt:caca-utils)) # sudo apt install -y ranger w3m lynx highlight atool mediainfo xpdf caca-utils # ranger ハイライト設定 /home/pi/.config/ranger/scope.sh は Pygments でなく highlight。highlightはpipにない。pyhighlightがそれかと思ったが違った。 # 変数: HIGHLIGHT_STYLE='pablo' # highlight --list-themes # http://www.andre-simon.de/doku/highlight/en/theme-samples.php # ターミナルの色は通常8色のみ。 # $ tput colors # 8 # これを256色にするには以下。 # $ export TERM=xterm-256color # $ tput colors # 256 # sudo apt install -y highlight } Setup() { [[ -f ~/.config/ranger/rc.conf ]] && echo "設定ファイルは既存のため終了します。"; exit; # rangerの設定ファイル出力 ranger --copy-config=all # rc.confの設定 rcconf=~/.config/ranger/rc.conf sed -i -e 's/^set draw_borders .*$/set draw_borders both/g' "${rcconf}" sed -i -e 's/^set preview_images .*$/set preview_images true/g' "${rcconf}" sed -i -e 's/^set show_hidden .*$/set show_hidden true/g' "${rcconf}" # rifle.confの設定 local rifle=~/.config/ranger/rifle.conf targets=$(cat << 'EOS' ext py = python -- "$1" ext pl = perl -- "$1" ext rb = ruby -- "$1" ext js = node -- "$1" ext sh = sh -- "$1" ext php = php -- "$1" EOS ) echo "$targets" | ( while read target; do sed -i -e 's/^'"${target}"'$/'"${target}"' | less/g' "${rifle}"; done;) #echo "$targets" | ( while read target; do echo "$target" | sed -e 's/^'"${target}"'$/'"${target}"' | less/g'; done;) # ~/.bashrcに256色にする設定がなければ追記 append='export TERM=xterm-256color' [[ -z $(cat ~/.bashrc | grep "^${append}$") ]] && echo "$append" >> ~/.bashrc # サブシェルのネスト防止(`S`でサブシェル起動したらネストしないよう`exit`で終了する。) # 表示継続(`du`コマンド等は一瞬で表示が消えてしまい役に立たない。これを回避する) append='ranger() { [ -n "$RANGER_LEVEL" ] && exit || LESS="$LESS -+F -+X" command ranger "$@"; }' [[ -z $(cat ~/.bashrc | grep "^${append}$") ]] && echo "$append" >> ~/.bashrc # `S`でrangerのサブシェルに入ったらプロンプト表示に(ranger)と表示する append='[ -n "$RANGER_LEVEL" ] && PS1="(RANGER) $PS1"' [[ -z $(cat ~/.bashrc | grep "^${append}$") ]] && echo "$append" >> ~/.bashrc } Run() { Install Setup } Run
シンタックスハイライトしたいなら以下も参照してインストールすること。
1. インストール
パッケージマネージャからインストールする。
1-1. パッケージマネージャ
No | パッケージマネージャ | コマンド | 補足 |
---|---|---|---|
1 | OSパッケージマネージャ | Linux.Debian.Raspbian: apt |
バージョンが古い |
2 | Pythonパッケージマネージャ | pip , pip3 |
最新版 |
パッケージマネージャによって以下のような違いがある。非常に混乱する。
- バージョンが違う
- パッケージ名が違う
ここでは最新版をインストールしたいのでpip
にてインストールする。pip3
でも同じと思われる。
以下でそれぞれのパッケージマネージャにてranger
を検索。バージョンを比較する。
apt search ranger | grep 'ranger' pip search ranger-fm | grep 'ranger-fm'
2019-03-16時点で以下のようになった。apt
のほうが古い。
ranger/stable,stable,stable,stable,stable 1.7.1-1 all ranger-fm (1.9.2) - Vim-like file manager
1-1-1. pip
sudo pip3 install ranger-fm sudo pip3 install Pygments sudo pip3 install lynx sudo pip3 install elinks sudo pip3 install atool sudo pip3 install unrar sudo pip3 install chardet sudo pip3 install img2txt
他、pip
(pip3
)には存在せず、apt
でしか入れられないものを以下でインストールする。
シンタックス・ハイライトするならPygments
でなくhighlight
のほうが高速。
sudo apt install -y xsel sudo apt install -y exiftool sudo apt install -y mediainfo sudo apt install -y w3m sudo apt install -y highlight sudo apt install -y xpdf sudo apt install -y mupdf-tools sudo apt install -y caca-utils sudo apt install -y imagemagick sudo apt install -y ffmpegthumbnailer
1-2. 起動
ターミナルで以下のコマンドを打つと起動する。
ranger
バージョン情報やヘルプは以下。
ranger --version
ranger --help
2. 設定
- デフォルト設定ファイル作成
- ターミナル設定
2-0. デフォルト設定ファイル作成
ranger --copy-config=all
~/.config/ranger/
配下に以下の設定ファイルが作成されたはず。
ファイル | 設定内容 |
---|---|
rc.conf | ranger起動時に設定されるオプション、コマンドの設定 |
rifle.conf | ファイル起動時に使用するアプリケーションの設定 |
scope.sh | ファイルのプレビュー表示の設定 |
commands_full.py | : で入力できるコマンドすべて |
commands.py | : で入力できるコマンド(ユーザが任意で作成) |
これをカスタマイズする。
2-1. rc.conf
- テキストエディタで開く
set draw_borders
等で検索する- 編集する
面倒なら以下コマンドで一発。
rcconf=~/.config/ranger/rc.conf sed -i -e 's/^set draw_borders .*$/set draw_borders both/g' "${rcconf}" sed -i -e 's/^set preview_images .*$/set preview_images true/g' "${rcconf}" sed -i -e 's/^set show_hidden .*$/set show_hidden true/g' "${rcconf}"
2-1-1. 境界線
before
set draw_borders none
after
set draw_borders both
both
以外だと画像を表示した後に再描画がされずに残ってしまう。
もっとも、both
でも再描画に問題がある。画像が表示された後、その領域に何かのテキストを表示させるまで画像が残ってしまう。他の設定値separators
, outline
, none
はテキスト表示後も部分的に残ってしまう。both
が最もマシなだけ。いずれにせよ、今回試した最新バージョン1.9.2では画像表示させた部分が正しく再描画されない。
なお、古いバージョンではtrue
かfalse
しか無かった模様。このときもtrue
にしないと再描画されないバグがあった。バージョン1.9.2の今回でも未だに修正されていない。
私としては境界線を表示しないまま正しく再描画して欲しい。
2-1-2. 画像表示
before
set preview_images false
after
set preview_images true
ターミナルアプリによっては表示できない。Raspbian標準のlxterminal
では画像表示されない。terminology
なら表示される。
sudo apt install -y terminology
画面キャプチャを取得しようとしたがscrot
では正しく取得できなかった。画像部分だけが表示されない状態になってしまった。raspi2png
によるキャプチャが必要。raspi2png
にてスクリーン全体をキャプチャしてGIMPで切り抜いた画像が以下。
また、先述の通り再描画バグがある。画像表示後にテキスト表示するまで画像が残り続けてしまう。テキストを表示しても空行箇所は再描画されない。
空行のところに画像が残ってしまっている。
正しくはそれぞれ以下のように表示されるはず。
画像表示に問題あり。これは誰が悪いのか。ranger, w3m, terminologyのどれかだと思う。
2-1-3. 隠しファイル表示
.bashrc
など.
から始まるファイルなどを表示する。
before
set show_hidden false
after
set show_hidden true
2-2. scope.sh
- ハイライト処理
- プログラム実行結果の表示
2-2-1. ハイライト処理
ファイル種別ごとにおける処理の実装。
たとえばシンタックス・ハイライトの処理は以下。
... handle_mime() { local mimetype="${1}" case "${mimetype}" in # Text text/* | */xml) ... highlight --replace-tabs="${HIGHLIGHT_TABWIDTH}" --out-format="${highlight_format}" \ --style="${HIGHLIGHT_STYLE}" --force -- "${FILE_PATH}" && exit 5 #pygmentize -f "${pygmentize_format}" -O "style=${PYGMENTIZE_STYLE}" -- "${FILE_PATH}" && exit 5 ...
デフォルトではhighlight
コマンドにてハイライトしている。Pygmentsを使いたければhighlight
コマンドをコメントアウトしてpygmentize
のコメントアウトを解除すればいい。
また、各コマンドの引数も指定できる。highlight
の--style
は${HIGHLIGHT_STYLE}
である。デフォルトではHIGHLIGHT_STYLE='pablo'
となっている。この値はhighlight --list-themes
で一覧できる。
2-2-2. プログラム実行結果の表示
rangerではソースコードを即実行できる。だが結果の表示が一瞬で消えてしまう。これを改善する設定をする。
rangerを起動してpythonソースコードファイルを選択中にr
, 2
, <Enter>
とするとPythonインタプリタが実行される。だが、結果の表示が一瞬で消えてしまう。そこでless
コマンドを使って表示するよう改善する。なお、less
は"${PAGER}"
でも可。
# rifle.confの設定 local rifle=~/.config/ranger/rifle.conf targets=$(cat << 'EOS' ext py = python -- "$1" ext pl = perl -- "$1" ext rb = ruby -- "$1" ext js = node -- "$1" ext sh = sh -- "$1" ext php = php -- "$1" EOS ) echo "$targets" | ( while read target; do sed -i -e 's/^'"${target}"'$/'"${target}"' | less/g' "${rifle}"; done;) }
ようするに以下。
before
ext py = python -- "$1"
after
ext py = python -- "$1" | less
末尾に| less
を付与してやる。これをperl
, ruby
などに対しても行う。
2-3. ターミナル設定
2-3-1. 256色
シンタックス・ハイライトするとき256色にする。(デフォルトは8色)
~/.bashrc
# 2019-03-16 ターミナルで256色使う $ tput colors export TERM=xterm-256color
コマンドで追記したいなら以下。未記入なら追記する。
append='export TERM=xterm-256color' [[ -z $(cat ~/.bashrc | grep "^${append}$") ]] && echo "$append" >> ~/.bashrc
~/.bashrc
に上記コマンドを追記しておけば常に256色モードでターミナルが起動する。シンタックス・ハイライトするとき256色使いたいなら設定すべし。256色に対応したターミナルアプリである必要がある。Raspbian標準のlxterminal
は対応する。
シンタックス・ハイライターは以下でインストールする。
sudo apt install -y highlight
他にもsudo pip3 install Pygments
がある。しかしPygments
は動作が遅い。表示までに数秒かかってしまう。
2-3-2. ranger改善
# サブシェルのネスト防止(`S`でサブシェル起動したらネストしないよう`exit`で終了する。) # 表示継続(`du`コマンド等は一瞬で表示が消えてしまい役に立たない。これを回避する) append='ranger() { [ -n "$RANGER_LEVEL" ] && exit || LESS="$LESS -+F -+X" command ranger "$@"; }' [[ -z $(cat ~/.bashrc | grep "^${append}$") ]] && echo "$append" >> ~/.bashrc # `S`でrangerのサブシェルに入ったらプロンプト表示に(ranger)と表示する append='[ -n "$RANGER_LEVEL" ] && PS1="(RANGER) $PS1"' [[ -z $(cat ~/.bashrc | grep "^${append}$") ]] && echo "$append" >> ~/.bashrc
コメントの通り。
所感
使えるまでが辛い。インストール、設定、キー覚える。ここまでのハードルが高い。これを超えたら高速で快適。
設定ダイアログがないのが辛い。設定ファイルを眺めてテキスト編集しかない。「設定ファイルはどこか」「何の設定があるか」「何の値が入りうるか」を調べるので手間どる。
自前で挙動を実装できるのは素敵。ファイル種別ごとの起動はシェル、:
によるコマンドはPythonで実装する。scope.sh
とcommands.py
。だがそれだけの技術が必要。
対象環境
- Raspbierry pi 3 Model B+
- Raspbian stretch 9.0 2018-11-13
- bash 4.4.12
- python 2.7.13, pip 9.0.1
- python3 3.5.3, pip3 9.0.1
- ranger 1.9.2
$ uname -a Linux raspberrypi 4.14.98-v7+ #1200 SMP Tue Feb 12 20:27:48 GMT 2019 armv7l GNU/Linux
前回まで
以前1.8.1のときのrangerについて色々やった。設定などが微妙に変わっていたので改めてやってみた。
- ファイラrangerをインストールする
- ファイラrangerを使ってみた
- ファイラrangerでできないこと
- ファイラrangerでHTMLファイルをテキストエディタで起動する
- ファイラrangerで履歴とブックマークを自動保存しないようにする
- ファイラrangerに欲しい機能
- ファイラrangerで選択した複数ファイルのパスをコピーするコマンドを作る
- ファイラrangerでパス文字列を取得するコマンドを作る
- ファイラrangerの起動ブラウザをchromium-browserにする
- ファイラrangerでテキストエディタ起動対象の拡張子を追加する
- ファイラrangerのショートカットキー一覧