rangerの設定(ファイル編集するとき新しいタブで開く)
rangerはTUIファイラ。
ファイルを編集するとき新しいタブで開く
タブを開く方法を調べる
ターミナルのタブを開く方法。
- 起動引数
- ショートカットキー
- xdotoolで無理やり
A. 起動引数
ターミナルlxterminal
の起動引数を調べる。(lxterminal --help
)
lxterminal
のアクティブウインドウに新しいタブを作成する引数はなかった(新しいプロセスとして起動してしまう)lxterminal
のアクティブウインドウのアクティブタブの名前を変更する引数はなかった(新しいプロセスとして起動してしまう)
xdotool
でショートカットキー操作をすることにより自動化するしかなさそう。
B. ショートカットキー
ショートカットキー | 内容 |
---|---|
Ctrl +Shift +T |
新しいタブを開く |
Ctrl +Shift +I |
タブの名前を変更するダイアログ表示 |
残念なバグがある。タブをマウスオーバーするとタブ名がポップアップするのだが、これはCtrl
+Shift
+I
で変更できず変更前のまま……。lxterminal --tabs=A,B
で新しいプロセスとして起動したときはポップアップが出ない……。
だれかIssue提案して。私は英語できないので無理。できればプルリクエストして。私はGTKコードよくわからんので無理。たぶんこの辺が関わってそうな気がするけど、どうすればいいのかわからん。こういうのできたらかっこいいのにな。そういう人に私はなりたい。
脱線したが戻る。起動引数で既存プロセスに新規タブ追加はできない。
C. xdotoolで無理やり
lxterminal
のショートカットキーをxdotool
で実行させる方法。
イメージスクリプトが以下。Ctrl
+Shift
+T
でタブを開いてvim パス
コマンドを実行する。
Run() { xdotool key ctrl+shift+t xdotool sleep 1 xdotool type ${VISUAL:-${EDITOR:-sensible-editor}}' '$@ xdotool sleep 1 xdotool key Return" } Run
さらにltterminal
のタブ名変更を加えると以下。
Run() { xdotool key ctrl+shift+t xdotool sleep 1 xdotool key ctrl+shift+i xdotool sleep 1 xdotool type $@ xdotool sleep 1 xdotool key Return xdotool sleep 1 xdotool type ${VISUAL:-${EDITOR:-sensible-editor}}' '$@ xdotool sleep 1 xdotool key Return" } Run
これを1行コマンドにする。ついでに変数箇所を設定ファイルと同じにすると以下。({cmd; cmd;}
の形式では動かなかったのでcmd && cmd
の形式にした)
bash -c "xdotool key ctrl+shift+t && xdotool sleep 1 && xdotool key ctrl+shift+i && xdotool sleep 1 && xdotool type $@ && xdotool sleep 1 && xdotool key Return && xdotool sleep 1 && xdotool type ${VISUAL:-${EDITOR:-sensible-editor}}' '$@ && xdotool sleep 1 && xdotool key Return"
テキストエディタで開く設定箇所を探す。
~/.config/ranger/rc.conf
mime ^text, label editor = ${VISUAL:-${EDITOR:-sensible-editor}} -- "$@"
コマンド部分(=
以降)を変える。
mime ^text, label editor = bash -c "xdotool key ctrl+shift+t && xdotool sleep 1 && xdotool key ctrl+shift+i && xdotool sleep 1 && xdotool type $@ && xdotool sleep 1 && xdotool key Return && xdotool sleep 1 && xdotool type ${VISUAL:-${EDITOR:-sensible-editor}}' '$@ && xdotool sleep 1 && xdotool key Return"
ところでタブ名がひどい。表示領域が小さすぎて親ディレクトリ名しか見えない。これでは判別できず意味がない。
ファイル名のみなら以下。
basename /tmp/work/a.txt basename "$@"
パスの順序を逆にするなら以下。
echo "/tmp/work/a.txt"| sed -e 's/\//\n/g' | grep -v -e '^\s*$' | tac | tr '\n' '/' echo "$@" | sed -e 's/\//\n/g' | grep -v -e '^\s*$' | tac | tr '\n' '/'
しかしこれを先述のコマンド群につけると非常に長くなってしまう。そこで外部スクリプトファイルにする。
path.sh
# パスを逆順にする。('/'区切り) # $1: パス # /tmp/a.txt --> a.txt/tmp/ ReversePath() { echo "$1" | sed -e 's/\//\n/g' | grep -v -e '^\s*$' | tac | tr '\n' '/'; }
launch_editor.sh
#!/bin/bash set -Ceu #----------------------------------------------------------------------------- # launch_editor.sh # ~/.config/ranger/rifle.conf から呼び出される。 # テキストファイルを起動するときの処理。 # * lxterminalターミナル上にてvimで開く # * Ctrl+Shift+Tで新しいタブを開く # * Ctrl+Shift+Iでタブの名前をつける # * タブ名はパスを逆順にしたもの # 作成日時: 2019-03-25 15:06:58 #----------------------------------------------------------------------------- # エディタで起動する # $1: 起動するファイル Launch() { . ~/root/sys/workflow/script/sh/definalble/path/path.sh xdotool key ctrl+shift+t xdotool sleep 1 xdotool key ctrl+shift+i xdotool sleep 1 xdotool type "$(ReversePath "$1")" xdotool sleep 1 xdotool key Return xdotool sleep 1 xdotool type "${VISUAL:-${EDITOR:-sensible-editor}} $1" xdotool sleep 1 xdotool key Return } # 指定ファイルリストをすべて起動する # $@: ファイルパスリスト Run() { export -f Launch; echo "$@" | xargs -I@ bash -c "Launch @"; } Run "$@"
設定ファイルがシンプルになった。
~/.config/ranger/rifle.conf
mime ^text, label editor = bash ~/root/sys/workflow/script/sh/runnable/called/ranger/launch_editor.sh "$@"
これでOK。タブ名には/tmp/a.txt
がa.txt/tmp/
と表示される。
ここまでが限界か。以下はできなかった。
- UIのフォントを等幅にできれば良かったのに……
- タブの色分け・グループ分けがしたかった……
対象環境
- 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