既に存在しないディレクトリを cdrのリストから削除する

http://shibayu36.hatenablog.com/entry/20120130/1327937835
http://yagays.github.io/blog/2013/05/20/zaw-zsh/


zaw-cdrをものすごく重宝しているわけですが, 削除したディレクトリがその後も
候補に残っていて, うっかりそれを選択してしまうと, そんなディレクトリはもうないと
怒られて, いらいらしていました.


ドキュメントを軽くみたところだと, 削除されたディレクトリを除外するという
ようなことが見当たらなかったので, 履歴のファイルから既に存在しないディレクトリを
削除するという方法で問題を回避することにしました.

スクリプト

履歴ファイルのパスを変えている人はファイル名の変更が必要です.

#!/usr/bin/env perl
use strict;
use warnings;

use File::Spec;

my $file = File::Spec->catfile($ENV{HOME}, ".chpwd-recent-dirs");
open my $fh, '<', $file or die "Can't open file $!";

my @lives;
while (my $line = <$fh>) {
    chomp $line;

    if ($line =~ m{\A\$'(.+)'\z}) {
        my $dir = $1;

        unless (-d $dir) {
            print "$dir is no longer existed\n";
            next;
        }

        push @lives, $line;
    }
}
close $fh;

open my $wfh, '>', $file or die "Can't open file $!";
print {$wfh} join("\n", @lives);
print {$wfh} "\n";
close $wfh;

おわりに

公式で提供されている機能等ありましたら教えていただければと思います.