nDiki

2013年9月16日 (月)

Linux から Day One エントリを新規作成・Emacs で編集する

iPod touch を買ったので Day One使い始めているAndroid 版が出ることを期待してるんだけれど、それまで iPod touch (と iPad 2) からだけだと使わなくなりそうな予感。Mac 使ってないしね。

Dropbox 同期なのでもしかしたら Linux からちょっとは編集できるんじゃないかなと思ったら、データ形式がシンプルで簡単にできるということがわかった。

仕様を確認

Day One のサイトにデータ形式などが説明されているのが非常に好感が持てる。 あー、なんとなく人気な理由がわかった気がする。

Dropbox で同期していると

 Day One/Journal.dayone/entries/<UUID>.doentry

という構成で1エントリ毎に1ファイルが作られる。XML プロパティリスト (plist) 形式で、普通に XML ファイルとして編集できる。Linux 側で編集すると、わりとすぐに iPod touchDay One で表示しているエントリにも定期的に反映される。いい感じ。

ということで既存のものなら普通に Emacs で編集しちゃえばOK。

新規作成

UUID を生成してファイルを作る必要があるので簡易的に以下のようなスクリプトを作った。

実行すると note と書かれたエントリファイルを作成した後 emacsclient -n でそのファイルをオープンする。Creator のところはいじっても良さそうだけれど、良くないかもしれないのでとりえあえず iPod touch で生成したのと同じままで。

 #!/usr/bin/perl

 use strict;
 use warnings;
 use File::Spec;

 my $DIR = '/path/to/Dropbox/Apps/Day One/Journal.dayone/entries';

 my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst)
   = gmtime(time);

 my $date = sprintf(
   "%04d-%02d-%02dT%02d:%02d:%02dZ",
   $year + 1900,
   $mon + 1, $mday, $hour, $min, $sec
 );

 my $file_name;
 my $uuid;
 while (1) {
   $uuid = `uuidgen`;
   chomp $uuid;
   $uuid =~ s/-//g;
   $uuid = uc($uuid);
   $file_name = File::Spec->catfile($DIR, "$uuid.doentry");
   last unless -e $file_name;
 }

 my $plist =<<__ENDSTR__;
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
 <plist version="1.0">
 <dict>
          <key>Creation Date</key>
          <date>$date</date>
          <key>Creator</key>
          <dict>
                 <key>Device Agent</key>
                 <string>iPod touch/iPod5,1</string>
                 <key>Generation Date</key>
                 <date>$date</date>
                 <key>Host Name</key>
                 <string>オレのiPod touch</string>
                 <key>OS Agent</key>
                 <string>iOS/6.1.3</string>
                 <key>Software Agent</key>
                 <string>Day One (iOS)/1.11.3</string>
         </dict>
         <key>Entry Text</key>
         <string>note</string>
         <key>Starred</key>
         <false/>
         <key>Time Zone</key>
         <string>Asia/Tokyo</string>
         <key>UUID</key>
         <string>$uuid</string>
 </dict>
 </plist>
 __ENDSTR__

 open my $file, '>', $file_name or die $!;
 print $file $plist;
 close $file;
 exec "emacsclient -n '$file_name'";

探す

Linux 用で UI をもつ clone 見つからなかったので、とりあえず howm検索パスに前述のディレクトリを追加して、howm から検索できるようにした。これでワードがわかれば最低限さっとエントリファイルを Emacs で開ける。

スポンサード リンク
[ 9月16日全て ]

About Me

Naney Naney (なにい)です。株式会社ミクシィの SNS の企画開発を行うグループでマネージャー・プロダクトオーナーをしています。CS 向上・ユーザーサポート・健全化などにも取り組んでいます。

nDiki1999年1月に始めたコンピュータ日誌を前身とする NaneyWeb 日記(兼パーソナルナレッジベース)です。ちょっとしたノートは nNote にあります。

※内容は個人的見解であり所属組織とは関係ありません。

月別インデックス
Process Time: 0.197404s / load averages: 0.79, 0.64, 0.63
nDiki by WATANABE Yoshimasa (Naney, Google profile)
Powered by DiKicker