でスケジュール管理

日付の一覧を表示しテキストでの管理するためのマクロです。iMemo*1の「スケジュール」機能がシンプルで使いやすかったので移植。

出力結果はこんな感じ。

;----- 2009年1月 -----
 1(木):
 2(金):
 3(土):

  (途中は省略)

29(木):
30(金):
31(土):

oedit.scm

;;schedule
(app-set-key "Ctrl+T"
  (lambda()
    (begin
      ;(define weekday (list "Sun" "Mon" "Tue" "Wed" "Thu" "Fri" "Sat"))
      (define weekday (list "日" "月" "火" "水" "木" "金" "土"))
      (define lastday (list 31 28 31 30 31 30 31 31 30 31 30 31))
      (define (retrieve ls n) (if (zero? n) (car ls) (retrieve (cdr ls) (- n 1)))) ;list-refと同じなので不要

      (define tm (sys-localtime (sys-time)))
      (define tm-year (+ 1900 (slot-ref tm 'year)))
      (define tm-mon  (+ 1 (slot-ref tm 'mon)))
      (define tm-mday (slot-ref tm 'mday))
      (define tm-wday (slot-ref tm 'wday))
      
      ;タイトル行
      (editor-paste-string  (string-append ";----- " (number->string tm-year) "年" (number->string tm-mon) "月 -----" "\n"))

      ;一日の曜日計算
      (define wday (abs(- tm-wday (remainder tm-mday 7))))

      ;日の一覧
      (do ((i 1 (+ i 1))) ((> i (list-ref lastday (- tm-mon 1))) ())
        (begin
          (define pr-day (number->string i))
          (if (>= 9 i) (set! pr-day (string-append " " pr-day)))
          (editor-paste-string (string-append pr-day "(" (list-ref weekday wday) "):" "\n"))
          (set! wday (remainder (+ wday 1) 7))
        )
      )
    )
  )
)

あいかわらずSchemeっぽくなくバッチっぽいです…エディタのマクロだしまずは動けば。使うの月一だし。
うるう年対応や年月の入力はそのうち…