mode-line での日時表示

結論

;; How to display year, date, and time
;; 2009/05/25 (日) 23:40 みたいになるよ。
(setq display-time-format "%Y-%m-%d (%a) %H:%M")

過程

ドキュメントの中で,たらい回しにされました。
display-time-string-forms 変数を見つけて,いや,これを見つけるのも,
大変だったんですが,これをいじろうとしたけど,
大変そう。中身を見てみると,

((if
	 (and
	  (not display-time-format) ; <-- ここに注目
	  display-time-day-and-date)
	 (format-time-string "%a %b %e " now)...))

と。
む,display-time-format が nil でごにょごにょだと,
format-time-string で表示しているみたい。
で,display-time-format を describe-variable で見てみると,思った通り nil
んで,最初に書いたように設定して・・・?
変わらん。何秒か経過して時刻が更新されたら,表示形式も変わりました。


なお,表示形式については,format-time-string 関数のドキュメントを参照のこと。
曜日が日本語で表示されるのが気に入らんが,ま,いいか。
locale に従って決定されるみたいだけど,
その変数を弄ると,色々問題がありそう。
あっ! let 君使えばいけるんでね?
ちょっと行ってくる。

帰ってきた。とりあえずできたっぽい。

※適当にインデントしました。

(setq display-time-string-forms 
      '((if (and (not display-time-format) display-time-day-and-date) 
            (format-time-string "%a %b %e " now) "")
        (let ((system-time-locale "English")) ; <--- これを追加
          (propertize (format-time-string (or display-time-format 
                                              (if display-time-24hr-format "%H:%M" "%-I:%M%p")) now)
                      (quote help-echo)
                      (format-time-string "%a %b %e, %Y" now))) ; <--- 閉じ括弧を忘れずにね
        load (if mail (concat " " 
                              (propertize display-time-mail-string (quote display) 
                                          (\` (when (and display-time-use-mail-icon (display-graphic-p)) 
                                                (\,@ display-time-mail-icon) 
                                                (\,@ (if (and display-time-mail-face 
                                                              (memq (plist-get (cdr display-time-mail-icon) :type) 
                                                                    (quote (pbm xbm)))) 
                                                         (let ((bg (face-attribute display-time-mail-face :background))) 
                                                           (if (stringp bg) (list :background bg))))))) 
                                          (quote face) display-time-mail-face (quote help-echo) 
                                          "You have new mail; mouse-2: Read mail" (quote mouse-face) 
                                          (quote mode-line-highlight) 
                                          (quote local-map) 
                                          (make-mode-line-mouse-map (quote mouse-2) read-mail-command))) "")))
  • system-time-locale を設定すれば,曜日が英語表記になる。
  • 意味は分からんが,元々の display-time-string-forms をおじゃんにしたくはない。


だもんで,display-time-string-forms の中身をみると,なんかリストがいっぱい。
で,display-time-format は,さっき設定しているので,2番目のリストが評価されるわけで,
そこに let で,system-time-locale の値を設定してみました。


これで,一応目的は達成されたわけだ・・・。否っ!!
ほんとは,モードラインに,総行数を表示したかったけど,
ドキュメント見てもわかんねーし,考えてもいろいろと大変そうだったので,
妥協。C-x l (count-lines-page) 使えば,改ページが入ってない限り,
総行数はわかるから,良しとしよう。