ex コマンド file でパス名を指定する。ところでおもしろいことに vim の場合、そのパス名がディレクトリそのものかどうかのチェックとかは行わない。
:file ../
なんてやると、素直にパス名が ../ になる。この状態で保存しようとしても、当然エラーになる。
これ、たとえば新しいパス名がディレクトリ部分しか含んでおらず、かつ現在のパス名がセットされている場合は変更前のファイル名を持ち越して使ってくれればいいのになーということでそうした。/foo/bar/baz.txt を開いて
:file ..
とするとパス名は /foo/baz.txt になる。この状態で
:file bar/
とすると /foo/bar/baz.txt になる。
こういったパス名のハンドリングは javascript でやるのはなんか新鮮だ。そしていろいろ考えることがある。
まず dropbox へ保存するとして、使えない文字があるのかどうか? windows の場合ファイル名に「:」を含めることはできない(もっとあったと思うけど忘れた)。「foo:bar.txt」なんかを dropbox へ保存できたとして、windows の dropbox クライアントでそれを同期するとどうなるのか? また保存できないとして、それを事前に知ることはできないのか? ちなみに cygwin でファイル操作するとなんと「:」を含めたファイル名を作れるのだが、どういうことか U+F03A という不思議な文字に置換される。私用領域。
相対パスの解決。さすがにこれを javascript で書いた例はぐぐっても見つからない。というよりむしろ、javascript じゃなくても相対パスを解決するアルゴリズムみたいなのがなかなか見つからない。これは考えてみれば当然で、相対パスの解決なんてシステムが提供するライブラリなりシステムコールで行うのが正道中の正道であって自前でやる方がおかしい。そんな中で URI に関して言えば、RFC1808 が URI 中の相対パスの解決アルゴリズムを記述している。とりあえずそれを参考にしつつそれっぽく解決するようにした。