Emacs org-modeを使ってみる: (43) mhcをインポート
今回は,mhcをインポートする方法について説明する.
なおUbuntu 8.04 LTSとEmacs22上で, org-6.34c (2010年1月10日リリース)の利用を前提にしている.
mhctoorg.plプログラム
(6) アジェンダ表示 に書いたように, iCalendar形式のファイルはdiary形式に変換した後,アジェンダ表示にマージすることができる.
したがって,mhcのカレンダーも mhc2ical.rb を用いて, iCalendar形式に変換した後,同様に処理すれば良い.
しかし,これだとアジェンダ表示にマージされているだけで, orgファイルとして管理できるわけではない.
そこで,以下のようにmhcのカレンダーをorg形式に変換する mhctoorg.pl プログラムを作成した.
#!/usr/bin/perl use Getopt::Std; use strict; my %w = ( 'Sun'=>'日', 'Mon'=>'月', 'Tue'=>'火', 'Wed'=>'水', 'Thu'=>'木', 'Fri'=>'金', 'Sat'=>'土'); my ($opt_h); &getopts("h"); my $q = shift(@ARGV); if ($opt_h) { print "Usage: $0 [date]\n"; print "Example:\n"; print "\t$0 +3\n"; print "\t$0 201003\n"; exit 1; } my ($year, $month, $day); &toorg($q); exit 0; sub toorg { my ($q) = @_; my ($y, $m, $d, $w, $t, $loc); if ($q =~ /^(\d\d\d\d)/) { $y = $1; } else { my @t = localtime(); $y = $t[5] + 1900; $q = sprintf("%04d%02d%02d%s", $y, $t[4]+1, $t[3], $q); } open(TODAY, "today --date=$q | perl -pne 's/ /\n /g;' |") || die; while (<TODAY>) { chomp; s/^\s+//; s/\s+$//; next if $_ eq ""; if (s/^(\d\d)\/(\d\d) (\w+)\s*//) { ($m, $d, $w) = ($1, $2, $3); $w = $w{$w} || $w; } $t = ""; if (s/^(\d\d:\d\d(-\d\d:\d\d)?)\s*//) { $t = $1; } s/^\s+//; s/\s+$//; next if $_ eq ""; $loc = ""; if (s/\s*\[\s*([^\]]*?)\s*\]//) { $loc = $1; } &conv($y, $m, $d, $w, $t, $loc, $_); } close(TODAY); } sub conv { my ($y, $m, $d, $w, $t, $loc, $str) = @_; if ($year != $y || $month != $m) { print "* $y-$m\n"; } if ($year != $y || $month != $m || $day != $d) { print "** [$y-$m-$d $w]\n"; } ($year, $month, $day) = ($y, $m, $d); my $timestamp = ×tamp($y, $m, $d, $w, $t); my %tag = &tag($str); print "*** $timestamp $str"; if (%tag) { my $tag = ":" . join(":", sort keys %tag) . ":"; print " $tag"; } print "\n"; if ($loc) { print " :PROPERTIES:\n"; print " :LOCATION: $loc\n"; print " :END:\n"; } } sub timestamp { my ($y, $m, $d, $w, $t) = @_; my $ts = sprintf("%04d-%02d-%02d %s", $y, $m, $d, $w); if ($t) { $ts = "$ts $t"; } return "<$ts>"; } sub tag { my ($str) = @_; my %tag = (); return %tag; }
利用方法
以下のようにすると,その日のカレンダーをorg形式で表示する.
$ ./mhctoorg.pl * 2010-03 ** [2010-03-18 木] *** <2010-03-18 木 10:00-12:00> 第3回ORG会議 :PROPERTIES: :LOCATION: 第1会議室 :END: *** <2010-03-18 木 13:30-15:00> 打合せ
引数は mhc 付属の today と同様である.
$ ./mhctoorg.pl +3 # 3日分 $ ./mhctoorg.pl 201003 # 2010年3月
「Emacs org-modeを使ってみる」の目次
- (1) インストール
- (2) 見出しと項目の編集
- (3) 表の編集
- (4) 表計算
- (5) TODOリスト
- (6) アジェンダ表示
- (7) ハイパーリンク
- (8) メモを取る
- (9) キーバインド1/3
- (10) キーバインド2/3
- (11) キーバインド3/3
- (12) GTDツールとして
- (13) HTMLにエクスポート
- (14) LaTeXにエクスポート
- (15) Beamerにエクスポート
- (16) エクスポート結果
- (17) orgの表を埋め込む
- (18) 計時
- (19) graphvizとditaaの図を埋め込む
- (20) gnuplotを呼び出す
- (21) LaTeX数式のインライン画像表示
- (22) RSSフィードを取り込む
- (23) エクスポート時に利用できるLaTeX記号
- (24) 繰り返し行動の記録
- (25) iCalendarにエクスポート
- (26) タグとプロパティ
- (27) ドローワとアーカイブ
- (28) バッファ内設定一覧
- (29) エクスポートオプション一覧
- (30) CSSクラス名一覧
- (31) Emacs Lispの実行
- (32) HTML表のスタイル設定
- (33) 脚注と参考文献の利用
- (34) 短縮形リンクの利用
- (35) org-babel-perlを使う1/4
- (36) org-babel-perlを使う2/4
- (37) org-babel-perlを使う3/4
- (38) org-babel-perlを使う4/4
- (39) speedbarを使う
- (40) org-babel-Rを使う1/2
- (41) org-babel-Rを使う2/2
- (42) 日本語化ditaaの利用
- (43) mhcをインポート
- (44) 再びHTMLにエクスポート
- (45) Firefoxからブックマーク