「Ranger」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
 
(4人の利用者による、間の23版が非表示)
1行目: 1行目:
 
{{DISPLAYTITLE:ranger}}
 
{{DISPLAYTITLE:ranger}}
 
[[Category:ファイルマネージャ]]
 
[[Category:ファイルマネージャ]]
  +
[[Category:コンソールアプリケーション]]
 
[[ar:Ranger]]
 
[[ar:Ranger]]
  +
[[de:Ranger]]
 
[[en:Ranger]]
 
[[en:Ranger]]
  +
[[es:Ranger]]
 
[[fr:ranger]]
 
[[fr:ranger]]
 
[[zh-hans:Ranger]]
 
[[zh-hans:Ranger]]
 
{{Related articles start}}
 
{{Related articles start}}
  +
{{Related|lf}}
 
{{Related|Midnight Commander}}
 
{{Related|Midnight Commander}}
  +
{{Related|nnn}}
 
{{Related|vifm}}
 
{{Related|vifm}}
 
{{Related articles end}}
 
{{Related articles end}}
[http://ranger.nongnu.org/ ranger] は Python で書かれているテキストベースのファイルマネージャです。ディレクトリは3つのカラムに分けて表示されます。キーストロークやブックマーク、マウスやコマンド履歴を使ってディレクトリを移動することができます。選択したファイルは自動的にプレビューが表示されディレクトリは中身が表示されます。
+
[https://ranger.github.io/ ranger] は Python で書かれているテキストベースのファイルマネージャです。ディレクトリは3つのカラムに分けて表示されます。キーストロークやブックマーク、マウスやコマンド履歴を使ってディレクトリを移動することができます。選択したファイルは自動的にプレビューが表示されディレクトリは中身が表示されます。
   
 
ranger の特徴: vi スタイルのキーバインド、ブックマーク、選択、タグ、タブ、コマンド履歴、シンボリックリンクを作成可能、複数あるコンソールモード、タスク表示。''ranger'' のコマンドやキーバインドはカスタマイズすることができ、外部スクリプトを呼び出すこともできます。よく似たファイルマネージャに [[Vifm]] があり、2つのペインと vi スタイルのキーバインドを使用しますが、機能の数はやや劣ります。
 
ranger の特徴: vi スタイルのキーバインド、ブックマーク、選択、タグ、タブ、コマンド履歴、シンボリックリンクを作成可能、複数あるコンソールモード、タスク表示。''ranger'' のコマンドやキーバインドはカスタマイズすることができ、外部スクリプトを呼び出すこともできます。よく似たファイルマネージャに [[Vifm]] があり、2つのペインと vi スタイルのキーバインドを使用しますが、機能の数はやや劣ります。
15行目: 20行目:
 
== インストール ==
 
== インストール ==
   
{{Pkg|ranger}} は[[公式リポジトリ]]から[[インストール]]できます。開発版を使いたい場合は [[AUR]] から {{AUR|ranger-git}} をインストールしてください。
+
{{Pkg|ranger}} は [[公式リポジトリ]] から [[インストール]] できます。開発版を使いたい場合は [[AUR]] から {{AUR|ranger-git}} をインストールしてください。
   
 
== 使用方法 ==
 
== 使用方法 ==
   
ranger を起動するには、まず[[アプリケーション一覧#ターミナルエミュレータ|ターミナル]]を起動して、そこから {{ic|ranger}} を実行してください。
+
ranger を起動するには、まず [[アプリケーション一覧#ターミナルエミュレータ|ターミナル]] を起動して、そこから {{ic|ranger}} を実行してください。
   
 
{| class="wikitable"
 
{| class="wikitable"
28行目: 33行目:
 
|-
 
|-
 
| {{ic|l}}, {{ic|Enter}} || ファイルを起動
 
| {{ic|l}}, {{ic|Enter}} || ファイルを起動
  +
|-
  +
| {{ic|j}}, {{ic|k}} || 現在のディレクトリ内のファイルを選ぶ
  +
|-
  +
| {{ic|h}}, {{ic|l}} || 上または下の階層のディレクトリへ移動
 
|}
 
|}
   
49行目: 58行目:
   
 
設定に関する詳細は [http://ranger.nongnu.org/ranger.1.html man ranger] を見て下さい。
 
設定に関する詳細は [http://ranger.nongnu.org/ranger.1.html man ranger] を見て下さい。
  +
  +
=== ファイルをゴミ箱に移動 ===
  +
  +
{{ic|DD}} を使用してゴミ箱ディレクトリ {{ic|~/.local/share/Trash/files/}} にファイルを移動するキーバインドを追加するには、設定ファイルを次のように変更します。
  +
  +
{{hc|~/.config/ranger/rc.conf|<nowiki>
  +
...
  +
map DD shell mv %s /home/${USER}/.local/share/Trash/files/
  +
...
  +
</nowiki>}}
  +
  +
または、 {{Pkg|glib2}} パッケージで提供されている GIO コマンドラインツールを使用します。
  +
  +
map DD shell gio trash %s
  +
  +
''ゴミ箱'' の中を見たり、空にするには通常、{{Pkg|nautilus}} のようなグラフィカルファイルマネージャがサポートしていますが、{{ic|gio list trash://}} というコマンドでゴミ箱の中を見て、{{ic|gio trash--empty}} というコマンドでゴミ箱を空にすることもできます。
   
 
=== コマンドの定義 ===
 
=== コマンドの定義 ===
67行目: 92行目:
 
使用するには {{ic|:empty}} と入力して {{ic|Enter}} を押してください。タブ補完も使えます。
 
使用するには {{ic|:empty}} と入力して {{ic|Enter}} を押してください。タブ補完も使えます。
   
  +
{{Warning|{{ic|[^.]}} がこのコマンドの本質的部分です。書き忘れると {{ic|..*}} にマッチする全ファイル・ディレクトリ、すなわちホームディレクトリが全て削除されます。}}
{{Warning|{{ic|[^.]}} is an essential part of the above command. Without it, all files and directories of the form {{ic|..*}} will be deleted, wiping out everything in your home directory.}}
 
   
 
=== カラースキーム ===
 
=== カラースキーム ===
78行目: 103行目:
   
 
set colorscheme ''newscheme''
 
set colorscheme ''newscheme''
  +
  +
=== ファイルプレビューでのカラーハイライト ===
  +
  +
{{Pkg|python-pygments}} パッケージをインストールし、{{ic|/usr/share/doc/ranger/config/scope.sh}} を {{ic|~/.config/ranger/scope.sh}} にコピーして、ranger の設定ファイル内の変数 {{ic|PYGMENTIZE_STYLE}} を必要に応じて編集します。サポートされているテーマの完全なリストは {{ic|pygmentize -L style}} から取得できます。
   
 
=== ファイルの関連付け ===
 
=== ファイルの関連付け ===
97行目: 126行目:
 
==== アーカイブの解凍 ====
 
==== アーカイブの解凍 ====
   
以下のコマンドは圧縮ファイルをコピー (yy) て適切なディレクトリで {{ic|:extracthere}} を実行します:
+
のコマンドは、選択たアーカイブ元のディレクトリへ抽出します
   
 
{{bc|<nowiki>
 
{{bc|<nowiki>
103行目: 132行目:
 
from ranger.core.loader import CommandLoader
 
from ranger.core.loader import CommandLoader
   
class extracthere(Command):
+
class extract_here(Command):
 
def execute(self):
 
def execute(self):
""" Extract copied files to current directory """
+
""" extract selected files to current directory."""
copied_files = tuple(self.fm.copy_buffer)
+
cwd = self.fm.thisdir
  +
marked_files = tuple(cwd.get_selection())
 
if not copied_files:
 
return
 
   
 
def refresh(_):
 
def refresh(_):
115行目: 142行目:
 
cwd.load_content()
 
cwd.load_content()
   
one_file = copied_files[0]
+
one_file = marked_files[0]
 
cwd = self.fm.thisdir
 
cwd = self.fm.thisdir
 
original_path = cwd.path
 
original_path = cwd.path
au_flags = ['-X', cwd.path]
+
au_flags = ['-x', cwd.path]
 
au_flags += self.line.split()[1:]
 
au_flags += self.line.split()[1:]
 
au_flags += ['-e']
 
au_flags += ['-e']
124行目: 151行目:
 
self.fm.copy_buffer.clear()
 
self.fm.copy_buffer.clear()
 
self.fm.cut_buffer = False
 
self.fm.cut_buffer = False
if len(copied_files) == 1:
+
if len(marked_files) == 1:
 
descr = "extracting: " + os.path.basename(one_file.path)
 
descr = "extracting: " + os.path.basename(one_file.path)
 
else:
 
else:
descr = "extracting files from: " + os.path.basename(one_file.dirname)
+
descr = "extracting files from: " + os.path.basename(
  +
one_file.dirname)
obj = CommandLoader(args=['aunpack'] + au_flags \
 
  +
obj = CommandLoader(args=['aunpack'] + au_flags
+ [f.path for f in copied_files], descr=descr)
 
  +
+ [f.path for f in marked_files], descr=descr,
  +
read=True)
   
 
obj.signal_bind('after', refresh)
 
obj.signal_bind('after', refresh)
137行目: 166行目:
 
==== 圧縮 ====
 
==== 圧縮 ====
   
次のコマンドを使用すると、ユーザーは現在のディレクトリにあるいくつかのファイルをマークしてから:compressパッケージ名で圧縮できます。現在のディレクトリの名前を取得し、拡張子に圧縮形式を追加することにより、いくつかの圧縮形式の提案をサポートします。{{pkg|atool}}をインストールする必要があります。インストールされていない場合、アーカイブを作成するときにエラーメッセージが表示されます。
+
次のコマンドを使用すると、ユーザーは現在のディレクトリにあるいくつかのファイルをマークしてから {{ic|:compress ''パッケージの名前''}} パッケージ名で圧縮できます。現在のディレクトリの名前を取得し、拡張子に圧縮形式を追加することにより、いくつかの圧縮形式の提案をサポートします。{{pkg|atool}} をインストールする必要があります。インストールされていない場合、アーカイブを作成するときにエラーメッセージが表示されます。
   
 
{{bc|<nowiki>
 
{{bc|<nowiki>
177行目: 206行目:
   
 
外付けドライブは [[udev]] や [[udisks]] で自動的にマウントさせることができます。{{ic|gm}} (go, media) を押すことで {{ic|/media}} にマウントされたドライブに簡単にアクセスできます。
 
外付けドライブは [[udev]] や [[udisks]] で自動的にマウントさせることができます。{{ic|gm}} (go, media) を押すことで {{ic|/media}} にマウントされたドライブに簡単にアクセスできます。
  +
  +
=== 隠しファイル ===
  +
  +
次のコマンドで隠しファイルの表示を切り替えることができます {{ic|:set show_hidden!}} または {{ic|:set show_hidden true}} を使用して隠しファイルを表示します。 これを永続的にするには、設定ファイルに追加します。
  +
  +
{{hc|rc.conf|<nowiki>
  +
set show_hidden true
  +
</nowiki>}}
  +
  +
または、{{ic|zh}} を押して隠しファイルを切り替えることもできます。
   
 
=== イメージのマウント ===
 
=== イメージのマウント ===
   
以下のコマンドではイメージのマウントに [[CDemu]] を使用し、仮想ドライブを特定の場所 (この例では '/media/virtualrom') にマウントするために [[autofs]] などのシステムを利用します。マウントパスはあなたの設定に合わせて変更するようにしてください。
+
以下のコマンドではイメージのマウントに [[CDemu]] を使用し、仮想ドライブを特定の場所 (この例では '/media/virtualrom') にマウントするために [[autofs]] などのシステムを利用します。'''マウントパスはあなたの設定に合わせて変更するようにしてください。'''
   
 
ranger から cdemud 仮想ドライブにイメージをマウントするには、イメージファイルを選択してコンソールに ':mount' と入力します。実際のマウントには設定によって多少時間がかかるので、カスタムローダーを使ってマウントディレクトリがマウントされるまで待機してからタブ 9 で裏で開くようにします。
 
ranger から cdemud 仮想ドライブにイメージをマウントするには、イメージファイルを選択してコンソールに ':mount' と入力します。実際のマウントには設定によって多少時間がかかるので、カスタムローダーを使ってマウントディレクトリがマウントされるまで待機してからタブ 9 で裏で開くようにします。
244行目: 283行目:
   
 
=== PDF ファイルのプレビュー ===
 
=== PDF ファイルのプレビュー ===
  +
 
PDF ファイルを画像に変換することで ranger で PDF ファイルをプレビューできます。Ranger は画像のプレビューを {{ic|~/.cache/ranger/}} に保存します。
 
PDF ファイルを画像に変換することで ranger で PDF ファイルをプレビューできます。Ranger は画像のプレビューを {{ic|~/.cache/ranger/}} に保存します。
   
273行目: 313行目:
 
==== パスの同期 ====
 
==== パスの同期 ====
   
''ranger'' はシェル[[Bash/関数|関数]] {{ic|/usr/share/doc/ranger/examples/bash_automatic_cd.sh}} を提供しています。{{ic|ranger}} ではなく {{ic|ranger-cd}} を実行すると、最後に閲覧したフォルダに自動的に ''cd'' されます。
+
Ranger はシェル [[Bash/関数|関数]] {{ic|/usr/share/doc/ranger/examples/bash_automatic_cd.sh}} を提供しています。{{ic|ranger}} ではなく {{ic|ranger-cd}} を実行すると、最後に閲覧したフォルダに自動的に ''cd'' されます。
   
グラフィカルランチャーから ranger を起動した場合 ({{ic|$TERMCMD -e ranger}} など、TERMCMD は X ターミナル)、{{ic|ranger-cd}} は使えません。実行可能属性を付与したスクリプトを作成し:
+
グラフィカルランチャーから Ranger を起動した場合 ({{ic|$TERMCMD -e ranger}} など、TERMCMD は X ターミナル)、{{ic|ranger-cd}} は使えません。以下のような実行可能属性を付与したスクリプトを作成します:
   
 
{{hc|ranger-launcher.sh|<nowiki>
 
{{hc|ranger-launcher.sh|<nowiki>
283行目: 323行目:
 
</nowiki>}}
 
</nowiki>}}
   
シェルの設定の''できるだけ最後''に以下を追加してください:
+
シェルの設定の ''できるだけ最後'' に以下を追加してください:
   
 
{{hc|.''shell''rc|<nowiki>
 
{{hc|.''shell''rc|<nowiki>
291行目: 331行目:
 
これで {{ic|RANGERCD}} 変数が設定されている場合のみ {{ic|ranger-cd}} が起動します。この変数を unset するようにしてください。そうしないとターミナルからサブシェルを起動したときに自動的に {{ic|ranger}} が再起動してしまいます。
 
これで {{ic|RANGERCD}} 変数が設定されている場合のみ {{ic|ranger-cd}} が起動します。この変数を unset するようにしてください。そうしないとターミナルからサブシェルを起動したときに自動的に {{ic|ranger}} が再起動してしまいます。
   
==== ranger からシェルを起動 ====
+
==== Ranger インスタンスのネスト防止 ====
   
  +
カレントディレクトリで {{ic|S}} を使ってシェルを起動し、シェルを終了すると ranger インスタンスに戻ります。
前の方法を使用すると、最後に参照したパスのシェルに切り替えることができます。ただし、いくつかの理由(多くの開かれたタブ、進行中のコピーなど)のためにrangerを終了したくない場合があります。ranger sessionを失うことなく、ranger(デフォルトではS)からシェルを開始できます。残念ながら、シェルは現在のフォルダーに自動的に切り替わりません。繰り返しますが、これは実行可能スクリプトで解決できます。
 
   
  +
しかし、既に ranger がシェルにいることを忘れて再び ranger を起動すると、ranger が ranger を実行している状態になってしまいます。
{{hc|shellcd|<nowiki>
 
#!/bin/sh
 
export AUTOCD="$(realpath "$1")"
 
   
  +
これを防ぐには、[[自動起動#シェルのログイン/ログアウト時|シェルスタートアップファイル]] に次の関数を作成します。
$SHELL
 
</nowiki>}}
 
   
  +
ranger() {
前と同様に、シェル構成の最後にこれを追加します:
 
  +
if [ -z "$RANGER_LEVEL" ]; then
 
  +
/usr/bin/ranger "$@"
{{hc|shellrc|<nowiki>
 
cd "$AUTOCD"
 
</nowiki>}}
 
 
これで、レンジャーのシェルバインディングを変更できます:
 
 
{{hc|rc.conf|
 
map S shell shellcd %d
 
}}
 
 
もしくは、シェルの history ファイルを利用することもできます。例えば、[[zsh#ディレクトリスタック|zsh]] の場合:
 
 
{{hc|shellcd|<nowiki>
 
## Prepend argument to zsh dirstack.
 
BUF="$(realpath "$1")
 
$(grep -v "$(realpath "$1")" "$ZDIRS")"
 
echo "$BUF" > "$ZDIRS"
 
 
zsh
 
</nowiki>}}
 
 
ZDIRS はあなたのディレクトリスタックに置き換えてください。
 
 
===== シンプルな方法 =====
 
 
{{hc|rc.conf|<nowiki>
 
map S shell bash -c "cd %d; bash"
 
</nowiki>}}
 
上記の設定は他のシェルでも使えます。(デフォルト設定のように) シェルを実行するかわりに、シェルの中で {{ic|cd}} を実行してから、インタラクティブシェルを起動して使用できるようにしています。
 
 
==== ranger が現在のシェルで動いていない場合にのみ ranger の新しいインスタンスを起動 ====
 
 
[[自動起動#シェル|シェルのスタートアップファイル]]に以下を記述してください:
 
 
rg() {
 
if [ -z "$RANGER_LEVEL" ]
 
then
 
ranger
 
 
else
 
else
 
exit
 
exit
 
fi
 
fi
 
}
 
}
 
{{ic|rg}} を実行して ranger を起動・復帰してください。
 
   
 
== トラブルシューティング ==
 
== トラブルシューティング ==
362行目: 360行目:
 
* [http://dotshare.it/category/fms/ranger/ DotShare.it の設定]
 
* [http://dotshare.it/category/fms/ranger/ DotShare.it の設定]
 
* [https://github.com/hut/ranger GitHub]
 
* [https://github.com/hut/ranger GitHub]
  +
* [https://github.com/ranger/ranger/wiki/Official-user-guide オフィシャルユーザーガイド]
 
* [https://www.digitalocean.com/community/tutorials/installing-and-using-ranger-a-terminal-file-manager-on-a-ubuntu-vps Installing and using ranger]
 
* [https://www.digitalocean.com/community/tutorials/installing-and-using-ranger-a-terminal-file-manager-on-a-ubuntu-vps Installing and using ranger]
 
* [https://lists.nongnu.org/mailman/listinfo/ranger-users メーリングリスト]
 
* [https://lists.nongnu.org/mailman/listinfo/ranger-users メーリングリスト]

2023年12月30日 (土) 23:02時点における最新版

関連記事

ranger は Python で書かれているテキストベースのファイルマネージャです。ディレクトリは3つのカラムに分けて表示されます。キーストロークやブックマーク、マウスやコマンド履歴を使ってディレクトリを移動することができます。選択したファイルは自動的にプレビューが表示されディレクトリは中身が表示されます。

ranger の特徴: vi スタイルのキーバインド、ブックマーク、選択、タグ、タブ、コマンド履歴、シンボリックリンクを作成可能、複数あるコンソールモード、タスク表示。ranger のコマンドやキーバインドはカスタマイズすることができ、外部スクリプトを呼び出すこともできます。よく似たファイルマネージャに Vifm があり、2つのペインと vi スタイルのキーバインドを使用しますが、機能の数はやや劣ります。

インストール

ranger公式リポジトリ から インストール できます。開発版を使いたい場合は AUR から ranger-gitAUR をインストールしてください。

使用方法

ranger を起動するには、まず ターミナル を起動して、そこから ranger を実行してください。

キー コマンド
? マニュアルを開く、キーバインド・コマンド・設定を表示
l, Enter ファイルを起動
j, k 現在のディレクトリ内のファイルを選ぶ
h, l 上または下の階層のディレクトリへ移動

設定

起動後、ranger~/.config/ranger ディレクトリを作成します。デフォルト設定をこのディレクトリにコピーしたいときは次のコマンドを実行してください:

ranger --copy-config=all
  • rc.conf - スタートアップコマンドとキーバインド
  • commands.py - : で起動するコマンド
  • rifle.conf - 特定のファイルを起動した時に使われるアプリケーション

デフォルトファイルもロードされるので rc.conf にはデフォルトファイルとの差異部分だけを記述します。commands.py には、ファイル全体をインクルードしない場合、一番最初に以下の行を記述します:

from ranger.api.commands import *

作成したディレクトリ ~/.Trash/DD でファイルを移動するキーバインドを追加するには、~/.config/ranger/rc.conf に以下を追記します:

map DD shell mv -t /home/${USER}/.Trash %s

設定に関する詳細は man ranger を見て下さい。

ファイルをゴミ箱に移動

DD を使用してゴミ箱ディレクトリ ~/.local/share/Trash/files/ にファイルを移動するキーバインドを追加するには、設定ファイルを次のように変更します。

~/.config/ranger/rc.conf
...
map DD shell mv %s /home/${USER}/.local/share/Trash/files/
...

または、 glib2 パッケージで提供されている GIO コマンドラインツールを使用します。

map DD shell gio trash %s

ゴミ箱 の中を見たり、空にするには通常、nautilus のようなグラフィカルファイルマネージャがサポートしていますが、gio list trash:// というコマンドでゴミ箱の中を見て、gio trash--empty というコマンドでゴミ箱を空にすることもできます。

コマンドの定義

上記の例の続きに、以下のエントリを ~/.config/ranger/commands.py に追加することでゴミ箱 (~/.Trash) を空にできます:

class empty(Command):
    """:empty

    Empties the trash directory ~/.Trash
    """

    def execute(self):
        self.fm.run("rm -rf /home/myname/.Trash/{*,.[^.]*}")

使用するには :empty と入力して Enter を押してください。タブ補完も使えます。

警告: [^.] がこのコマンドの本質的部分です。書き忘れると ..* にマッチする全ファイル・ディレクトリ、すなわちホームディレクトリが全て削除されます。

カラースキーム

~/.config/rangercolorschemes サブフォルダを作成してください:

$ mkdir ~/.config/ranger/colorschemes

それから新しい newscheme.py を上記のフォルダにコピーします。~/.config/ranger/rc.conf ファイルからデフォルトカラースキームを変更してください:

set colorscheme newscheme

ファイルプレビューでのカラーハイライト

python-pygments パッケージをインストールし、/usr/share/doc/ranger/config/scope.sh~/.config/ranger/scope.sh にコピーして、ranger の設定ファイル内の変数 PYGMENTIZE_STYLE を必要に応じて編集します。サポートされているテーマの完全なリストは pygmentize -L style から取得できます。

ファイルの関連付け

~/.config/ranger/rifle.conf を編集してください。先の行が早く実行されるので、ファイルの先頭に追記するようにしてください。例えば、tex ファイルを kile で開くには以下のエントリを記述します:

ext tex = kile "$@"

xdg-utils で全てのファイルを開くようにするには:

has xdg-open, flag f = xdg-open "$1"

ヒントとテクニック

圧縮ファイル

以下のコマンドでは atool を使ってアーカイブの操作を行います。

アーカイブの解凍

次のコマンドは、選択したアーカイブ元のディレクトリへ抽出します。

import os
from ranger.core.loader import CommandLoader

class extract_here(Command):
    def execute(self):
        """ extract selected files to current directory."""
        cwd = self.fm.thisdir
        marked_files = tuple(cwd.get_selection())

        def refresh(_):
            cwd = self.fm.get_directory(original_path)
            cwd.load_content()

        one_file = marked_files[0]
        cwd = self.fm.thisdir
        original_path = cwd.path
        au_flags = ['-x', cwd.path]
        au_flags += self.line.split()[1:]
        au_flags += ['-e']

        self.fm.copy_buffer.clear()
        self.fm.cut_buffer = False
        if len(marked_files) == 1:
            descr = "extracting: " + os.path.basename(one_file.path)
        else:
            descr = "extracting files from: " + os.path.basename(
                one_file.dirname)
        obj = CommandLoader(args=['aunpack'] + au_flags
                            + [f.path for f in marked_files], descr=descr,
                            read=True)

        obj.signal_bind('after', refresh)
        self.fm.loader.add(obj)

圧縮

次のコマンドを使用すると、ユーザーは現在のディレクトリにあるいくつかのファイルをマークしてから :compress パッケージの名前 パッケージ名で圧縮できます。現在のディレクトリの名前を取得し、拡張子に圧縮形式を追加することにより、いくつかの圧縮形式の提案をサポートします。atool をインストールする必要があります。インストールされていない場合、アーカイブを作成するときにエラーメッセージが表示されます。

import os
from ranger.core.loader import CommandLoader

class compress(Command):
    def execute(self):
        """ Compress marked files to current directory """
        cwd = self.fm.thisdir
        marked_files = cwd.get_selection()

        if not marked_files:
            return

        def refresh(_):
            cwd = self.fm.get_directory(original_path)
            cwd.load_content()

        original_path = cwd.path
        parts = self.line.split()
        au_flags = parts[1:]

        descr = "compressing files in: " + os.path.basename(parts[1])
        obj = CommandLoader(args=['apack'] + au_flags + \
                [os.path.relpath(f.path, cwd.path) for f in marked_files], descr=descr)

        obj.signal_bind('after', refresh)
        self.fm.loader.add(obj)

    def tab(self):
        """ Complete with current folder name """

        extension = ['.zip', '.tar.gz', '.rar', '.7z']
        return ['compress ' + os.path.basename(self.fm.thisdir.path) + ext for ext in extension]

外付けドライブ

外付けドライブは udevudisks で自動的にマウントさせることができます。gm (go, media) を押すことで /media にマウントされたドライブに簡単にアクセスできます。

隠しファイル

次のコマンドで隠しファイルの表示を切り替えることができます :set show_hidden! または :set show_hidden true を使用して隠しファイルを表示します。 これを永続的にするには、設定ファイルに追加します。

rc.conf
set show_hidden true

または、zh を押して隠しファイルを切り替えることもできます。

イメージのマウント

以下のコマンドではイメージのマウントに CDemu を使用し、仮想ドライブを特定の場所 (この例では '/media/virtualrom') にマウントするために autofs などのシステムを利用します。マウントパスはあなたの設定に合わせて変更するようにしてください。

ranger から cdemud 仮想ドライブにイメージをマウントするには、イメージファイルを選択してコンソールに ':mount' と入力します。実際のマウントには設定によって多少時間がかかるので、カスタムローダーを使ってマウントディレクトリがマウントされるまで待機してからタブ 9 で裏で開くようにします。

import os, time
from ranger.core.loader import Loadable
from ranger.ext.signals import SignalDispatcher
from ranger.ext.shell_escape import *

class MountLoader(Loadable, SignalDispatcher):
    """
    Wait until a directory is mounted
    """
    def __init__(self, path):
        SignalDispatcher.__init__(self)
        descr = "Waiting for dir '" + path + "' to be mounted"
        Loadable.__init__(self, self.generate(), descr)
        self.path = path

    def generate(self):
        available = False
        while not available:
            try:
                if os.path.ismount(self.path):
                    available = True
            except:
                pass
            yield
            time.sleep(0.03)
        self.signal_emit('after')

class mount(Command):
    def execute(self):
        selected_files = self.fm.thisdir.get_selection()

        if not selected_files:
            return

        space = ' '
        self.fm.execute_command("cdemu -b system unload 0")
        self.fm.execute_command("cdemu -b system load 0 " + \
                space.join([shell_escape(f.path) for f in selected_files]))
 
        mountpath = "/media/virtualrom/"

        def mount_finished(path):
            currenttab = self.fm.current_tab
            self.fm.tab_open(9, mountpath)
            self.fm.tab_open(currenttab)

        obj = MountLoader(mountpath)
        obj.signal_bind('after', mount_finished)
        self.fm.loader.add(obj)

現在のフォルダを新しいタブで開く

ホームを新しいタブで開くショートカットは2つ存在します (gnCtrl+n)。Ctrl+n のバインドを変更する場合:

rc.conf
map <c-n>  eval fm.tab_new('%d')

PDF ファイルのプレビュー

PDF ファイルを画像に変換することで ranger で PDF ファイルをプレビューできます。Ranger は画像のプレビューを ~/.cache/ranger/ に保存します。

まず、画像プレビューを有効化してください:

~/.config/ranger/rc.conf
# Use one of the supported image preview protocols
set preview_images true

Ranger は w3m などを使って画像をプレビューします。利用可能な方法については ~/.config/ranger/rc.conf を見てください。

そして、以下の pdf プレビューコマンドを追加してください:

~/.config/ranger/scope.sh
# Image previews, if enabled in ranger.
if [ "$preview_images" = "True" ]; then
    case "$mimetype" in
        application/pdf)
             pdftoppm -jpeg -singlefile "$path" "${cached//.jpg}" && exit 6;;
    esac
fi

上記の例では popplerpdftoppm ユーティリティを使って画像プレビューを作成しています。ghostscriptimagemagick など他の方法も利用可能です。

シェルの小技

パスの同期

Ranger はシェル 関数 /usr/share/doc/ranger/examples/bash_automatic_cd.sh を提供しています。ranger ではなく ranger-cd を実行すると、最後に閲覧したフォルダに自動的に cd されます。

グラフィカルランチャーから Ranger を起動した場合 ($TERMCMD -e ranger など、TERMCMD は X ターミナル)、ranger-cd は使えません。以下のような実行可能属性を付与したスクリプトを作成します:

ranger-launcher.sh
#!/bin/sh
export RANGERCD=true
$TERMCMD

シェルの設定の できるだけ最後 に以下を追加してください:

.shellrc
$RANGERCD && unset RANGERCD && ranger-cd

これで RANGERCD 変数が設定されている場合のみ ranger-cd が起動します。この変数を unset するようにしてください。そうしないとターミナルからサブシェルを起動したときに自動的に ranger が再起動してしまいます。

Ranger インスタンスのネスト防止

カレントディレクトリで S を使ってシェルを起動し、シェルを終了すると ranger インスタンスに戻ります。

しかし、既に ranger がシェルにいることを忘れて再び ranger を起動すると、ranger が ranger を実行している状態になってしまいます。

これを防ぐには、シェルスタートアップファイル に次の関数を作成します。

ranger() {
    if [ -z "$RANGER_LEVEL" ]; then
        /usr/bin/ranger "$@"
    else
        exit
    fi
}

トラブルシューティング

画像のプレビューでブロックノイズ

カラムのボーダーをなくすと画像プレビューでストライプが見えることがあります [1]~/.config/ranger/rc.conf に以下を設定:

set draw_borders true

参照