やってみる

アウトプットすべく己を導くためのブログ。その試行錯誤すらたれ流す。

ファイラrangerで選択した複数ファイルのパスをコピーするコマンドを作る

ついにコマンドの自作。

問題

rangerspaceキーで複数ファイル選択できるし、ypでパス文字列をコピーできる。なのに、複数ファイル選択してypすると、ひとつのファイルパスしかコピーされない。

選択した全ファイルのパスをコピーしたい。

解決

コマンドをPythonで実装する。

ソースコード

~/.config/ranger/commands.py に以下を追記する。

# 選択したファイルのパスを取得する
class copy_path(Command):
    def execute(self):
        from subprocess import run
        from io import StringIO
        with StringIO() as buf:
            buf.write('\\n'.join([f.path for f in self.fm.thistab.get_selection()])) # f.basename, is_directory, load_content()
            run('echo "{}" | xsel -b'.format(buf.getvalue()), shell=True)

/home/pi/.config/ranger/rc.conf を以下のように編集する。

#map yp shell -f echo -n %d/%f | xsel -i; xsel -o | xsel -i -b
map yp copy_path

map ypypコマンドに対応する処理を定義する)

動作確認

  1. rangerを起動
  2. spaceキーでファイルやディレクトリを適当にいくつか選択する
  3. ypと入力する
  4. テキストエディタにペーストする
  5. 選択したファイルのパスが1行ずつ出力された!

開発環境

前回