tmuxに現在のディレクトリを表示する最も簡単な方法

Brogramming with Tom
今回は、前回紹介した「ディレクトリ内のファイルをステータスラインに表示する方法」の補足説明です。

photo credit: ryanoshea via photopin cc


tmuxは仮想端末です。よって、外での挙動には原則、影響を及ぼしません。例えば、設定ファイル ~/.tmux.confset-option -g status-left '#(pwd)'などと書いても、外から見れば、現在地はホームディレクトリのままです。


よって、この問題を解決するためには、tmux内で環境変数を使ってもなかなか難しいと思います。


したがって、現存するファイルを利用し、この問題を解決するのが一番簡単かと思います。最も単純な方法は、ディレクトリ移動するたびに、移動先を保存しておくことです。


function chpwd(){
touch ~/dotfiles/dir0.txt && rm ~/dotfiles/dir0.txt && echo $PWD > ~/dotfiles/dir0.txt
}



そして、これを参照する形で、設定ファイルを書けば、 $PWDの代わりになるかと思います。

set-option -g status-left '#(cat ~/dotfiles/dir0.txt | sed -e "s|${HOME}|~|")'



ちなみに、前回の記事のように、ファイル名をステータスラインに表示したければ、以下の様なシェルスクリプトを作ります。

#!/bin/bash

# 最新のディレクトリ移動先を取得する
dir=`cat ~/dotfiles/dir0.txt`

# ディレクトリ内のファイル数を取得する
max=`ls -a $dir | wc -l | tr -d ' '`

# ファイル数のうちのランダムの数字を得る
num=`jot -r 1 3 $max`

# ディレクトリの中を1つだけ表示する
ls -a $dir | sed -e "$num!d"