49 howm-mode.vim (2-26) :HowmSchedule の追加

以前書いた calendar.vim との連携の話。さっさと実装したいんだけど、howm_vim には指定した日時を表示する機能がない。howm_vim 側に変更が必要なわけ。というわけで、ちょいちょいとユーザ定義コマンドを追加する。

目標としては、予定一覧(,y)で指定した日付を基準日にできるようにする。現状、今日以外を基準日にはできない。これを修正してやる。

まずは s:ShowSchedule() を可変長引数にしてやる。引数は文字列で、g:howm_date_pattern にしたがって指定できる。ただ動作だけが変わっても分かりにくいので、シンタックスのほうも syntax/howm_importantdate.vim から移動した。

plugin/howm-mode.vim

function! s:ShowSchedule(...)
  " ...
    let today_s = exists('a:1') && (a:1 =~ '\v' . pattern_date) ? a:1 : strftime(g:howm_date_pattern)
    let today = HowmDate2Int(today_s, g:howm_date_pattern)
    let today_i = (today - HowmDate2Int('1970-01-01', '%Y-%m-%d')) * 86400
    if g:howm_reminder_old_format
      exe 'syntax match howmToday display "\(@\[' . strftime(g:howm_date_pattern, today_i) . '\]\(-\d\+\|[!@+.]\d*\)\?\)\@<=.*$"'
      exe 'syntax match howmTomorrow display "\(@\[' . strftime(g:howm_date_pattern, today_i + 86400) . '\]\(-\d\+\|[!@+.]\d*\)\?\)\@<=.*$"'
    else
      exe 'syntax match howmToday display "\%(\[' . strftime(g:howm_date_pattern, today_i) . '\][-!@+.]\d*\)\@<=.*$"'
      exe 'syntax match howmTomorrow display "\%(\[' . strftime(g:howm_date_pattern, today_i + 86400) . '\][-!@+.]\d*\)\@<=.*$"'
    endif
  " ...
endfunction

syntax/howm_importantdate.vim

exe 'syntax match howmNote display "\['.s:pattern_date.'\]-\d*"'
exe 'syntax match howmTodo display "\['.s:pattern_date.'\]+\d*"'
exe 'syntax match howmDeadline display "\['.s:pattern_date.'\]!\d*"'
exe 'syntax match howmSchedule display "\['.s:pattern_date.'\]@"'
exe 'syntax match howmFinished display "\['.s:pattern_date.'\]\."'
" howmToday, howmTomorrow は howm-mode.vim の ShowSchedule で match

if g:howm_reminder_old_format != 0
  exe 'syntax match howmNote display "@\['.s:pattern_date.'\]\(-\d\+\)\?"'
  exe 'syntax match howmTodo display "@\['.s:pattern_date.'\]+\d*"'
  exe 'syntax match howmDeadline display "@\['.s:pattern_date.'\]!\d*"'
  exe 'syntax match howmSchedule display "@\['.s:pattern_date.'\]@"'
  exe 'syntax match howmFinished display "@\['.s:pattern_date.'\]\."'
  " howmToday, howmTomorrow は howm-mode.vim の ShowSchedule で match
endif

最後にユーザ定義コマンドを定義する。

" commands {{{
command! -nargs=? HowmSchedule :call <SID>ShowSchedule(<f-args>)
" commands }}}

これで準備完了。 :HowmSchedule 2008-02-14 としてやれば(この場合 g:howm_date_pattern は %Y-%m-%d)、2008-02-14 を基準日とした予定一覧を表示してくれる。