さくらのレンタルサーバ上にあるデータはローカルの Linux BOX と Unison で同期している。 この nDiki の記事も Emacs でテキストファイルで作成した後、Unison で同期して公開している。
[さくらのレンタルサーバ] /home/naney | <Unison> 同期 | [ローカル PC] /home/naney/site/site_name/sync
ただこれだとローカル PC から離れている時の記事の下書きとか面倒くさい。ということで Dropbox 上に一部を置くことにした。同期している全てのデータを Dropbox 上に置くのはナンセンスなので、一部のディレクトリのみ。
Dropbox フォルダ側は単一のディレクトリツリーである必要があるので、Unison で同期しているディレクトリのツリーの一部を Dropbox フォルダ上へ移動し、シンボリックリンクに置き換え。Unison の設定ファイルに follow = path share/some_dir を追加してそのディレクトリはシンボリックリンクを辿ってその先の中身で同期するようにした。
[さくらのレンタルサーバ] /home/naney | <Unison> 同期 | [ローカル PC] /home/naney/site/site_name/sync /home/naney/site/site_name/sync/share/some_dir | <symbolic link> | /home/naney/var/Dropbox/site/_name/sync/some_dir /home/naney/var/Dropbox/site/_name/sync | [Dropbox]
これで Dropbox を入れた他の PC や Android 端末から記事の作成・編集ができるようになった。
ちなみに Google Chrome に SourceKit をインストールすると、Web ブラウザ上から直接 Dropbox 上にテキストファイルを作成したり既存のテキストファイルを編集したりできて便利。 テキストファイルは UTF-8 で LF になるのでいい感じ。
lv があれば lv を使う。UTF-8 に変換、ANSI エスケープシーケンスを有効に。
# pager if command -v lv > /dev/null; then export GIT_PAGER='lv -Ou8 -c' fi
bash-completion が有効なら、ブランチ名をプロンプトに表示するように設定。GIT_PS1_SHOWDIRTYSTATE を設定して unstaged な変更があれば *、staged な変更があれば + をブランチ名の後ろに表示するようにしてる。
# prompt string PS1='\[\033[0;37m\][\[\033[0;32m\]\t \[\033[1;36m\]\u\[\033[0;37m\]@\h \[\033[0;32m\]\w\[\033[0;37m\]]\n$ ' if hash __git_ps1 2> /dev/null ; then export GIT_PS1_SHOWDIRTYSTATE=1 PS1='\[\033[0;37m\][\[\033[0;32m\]\t \[\033[1;36m\]\u\[\033[0;37m\]@\h \[\033[0;32m\]\w\[\033[0;37m\]\[\033[01;33m\]$(__git_ps1 " | %s")\[\033[00m\]]\n$ ' fi
昨年話題になった ag (The Silver Searcher) は、UTF-8 以外の日本語テキストファイルの扱いに難があったので ack に戻していたのだけれど、 pt (The Platinum Searcher) が良いというので ack から乗り換えてみた。
UTF-8 やら 日本語 EUC (EUC-JP)やらシフト JIS(Shift_JIS)やら、様々な文字エンコーディングのファイルのあるディレクトリ以下をまとめて検索できるのいいね。
Emacs の設定に以下を追加しておいた。
(let ((pt (executable-find "pt"))) (if pt (setq grep-find-command (concat pt " --nocolor --nogroup "))))
最近 Remember The Milk でタスクを検索した際に検索結果に出ないタスクがあっておかしいなと思っていたのですが、ようやく原因がわかりました。 Alfred から workflow でrumember を使ってタスク登録していたものの一部が検索できないようなので調べたところ、濁点・半濁点が分解された UTF-8 文字列で Remember The Milk に送られていたのです。 Remember The Milk の Web 版で入力や検索では濁点・半濁点が分解されていない文字が使われるため検索でマッチしていないのでした。
合成されている Unicode 正規化形式C (NFC) で統一したいのですが Alfred では選択する方法がありません。Keyword to Script テンプレートで作った Alfred workflow だと Run Script (/bin/bash) のひな型が
query="{query}"
となるのですが、ここをいったん
query=`echo "{query}" | iconv -f UTF-8-MAC -t UTF-8`
のようにして変換することにしました。 Remember The Milk への登録以外にもテキストファイルに追記する workflow や Slack に投稿する workflow も同様にして NFC で処理するように変更です。
すでに Remember The Milk に投稿したものは仕方ないので手動で検索してちまちま修正。テキストファイルに書いたものもわかる範囲で検索して書き換えました。ふう。Google Chrome や Ulysses はきちんと合成して表示してくれるので今まで気がつきませんでしたよ。
ちなみに uconv -f utf-8 -t utf-8 -x nfc だと合成できていない文字があってうまくいきませんでした。
convmv を使うとファイル名をまとめて NFC/NFD Unicode 正規化できる。
Perl スクリプトで 内部的には Unicode::Normalize::NFC と Unicode::Normalize::NFD を使って正規化しているので UTF-8-MAC にできるわけではないようだ。
$ brew install convmv
カレントディレクトリ以下にあるファイルのファイル名を再帰的にチェックし NFC Unicode 正規化されたファイル名にリネームする。
dry-run
$ convmv -f utf8 -t utf8 --nfc -r .
で変換されるファイル名を確認。問題なければ
$ convmv -f utf8 -t utf8 --nfc -r . --notest
で実際に実行する。 NFD Unicode 正規化した場合は --nfc の代わりに --nfd を指定する。
Naney (なにい) です。株式会社MIXIで SNS 事業の部長をしています。
※本サイトの内容は個人的見解であり所属組織とは関係ありません。