calfw.elから元号表記の日付(曜日付)を取得する


calfw.elを使いはじめてからというもの、スケジュール管理はcalfw.elですることがほとんどとなってしまいました。

Emacsでカレンダーコンポーネントを作った – 技術日記@kiwanami

すごく快適に使わせてもらっているのですが、使っているうちに、これまではあきらめていたことがいろいろと気になってきました。 そこはEmacs、どうとでもできるわけで早速いぢってみました。

日付の入力がめんどい

仕事なり何なり、日付を入力することは、ままあります。例えば人にお願いする時の期日を伝える時とか、打ち合わせの日程を伝える時などなど。 そういう時は、まずスケジュールを確認して日程を確認するわけです。僕の仕事界隈はなぜか日付のフォーマットが暗黙の了解で決まっていて、「平成23年2月5日(土)」という風に書くというしきたりになっています。そして、僕はだいたい次のような過程で日付を入力していたように思います。

予定を確認して日程を決定 → 日付を手入力 → 入力しているうちにその日の曜日を忘れる → 予定を確認 → 曜日を手入力

いろいろ無駄です。まず数字の入力があまり得意でないので数字を入力するのが嫌です。しかも数字と漢字を交互に入力するので、ますますストレスです。せっかくEmacsを使っているので、ここらへんさくっとできるようにしてみました。

cfw:gengo-date

というのを書いてみました。 DDSKKのskk-vars.elで定義されている関数を使わせてもらっています。以下の設定だと「d」キーを押すことで元号表記の日付がキルリングに追加されます。

skk-default-current-date-functionを独自に定義すれば、日付のフォーマットをいろいろ変えることができるようです。

(require 'skk-vars)
(defun cfw:gengo-date ()
 (interactive)
  (let* ((mdy (cfw:cursor-to-nearest-date))
        (y (number-to-string
             (calendar-extract-year mdy)))
        (m (car(nth
              (- (calendar-extract-month mdy) 1) skk-month-alist)))
         (w (car(nth
                (calendar-day-of-week mdy) skk-day-of-week-alist)))
        (d (number-to-string
           (calendar-extract-day mdy))))
    (kill-new (funcall skk-default-current-date-function
                     (list y m d w) nil (not skk-date-ad) nil))))

(define-key cfw:calendar-mode-map (kbd "d") 'cfw:gengo-date)

最後に

個人的には妙に感動してしまい、非常にどうでもよいことを長々と書いてしまいました。振り返ってみると、このスケジュール管理ツールではどうせできないから、と諦めていたことが結構あったようです。 それがcalfw.elを使うと、自分なりの解決策を簡単に講じることができます。本当にありがたい限りです。