fishっぽいpwd: /usr/loacl/binが/u/l/binになるやつ

30分プログラム、その439。fishにあるprompt_pwd関数をPerlで再現してみる。
このprompt_pwdはわりと素敵で、/usr/local/binを/u/l/binみたいに最後のディレクトリ名以外を一文字に省略してくれる。これをscreenのステータスラインに表示するようにすると、かなり幸せになれる。

たとえば、こんな長いパスだと端が切れてしまう。。。

それが、こんなにすっきり!

というわけで、これをPerlで作っちゃおう!

使い方

$ echo '/foo/bar/baz' | perl fish-line-pwd.pl
/f/b/baz

実際はワンライナーにして、~/.zshrcに組み込んでやる。

function chpwd(){
  emulate -L zsh
  local dir
  dir=$(pwd | perl -ne 's#$ENV{"HOME"}#\~#g; ($x,@xs) = reverse split "/"; print map {substr($_,0,1) . "/" } reverse @xs;print $x;')
  screen -X title "$dir"
}

**ソースコード
>|perl|
#!/usr/bin/env perl

use strict;
use warnings;
use Data::Dumper;

while(<>){
    s!$ENV{'HOME'}!\~!g;
    my ($x,@xs) = reverse split('/',$_);
    print map {substr($_,0,1) . '/' } reverse @xs;
    print $x;