hnf-mode.el の README (日本語版)

* WHAT IS THIS?

1. hnf を編集時に TAB であらゆる補完ができます。
2. font-lock を使って hnf をカラー表示します。
3. M-x hnf で ~/diary/1999/d19990107.hnf 等、その日の hnf を開きます。
   C-u numeric M-x hnf で、numeric 日前の hnf を開きます。
4. namazu, calendar, speedbar などと連携ができます。

* INSTALL

1. APEL をインストールします。
2. hnf-mode.el を load-path の通ったところに置きます。
   お好みで byte-compile してください。

* SETTING

必須の設定は 1〜2 だけです。それ以外はお好みでどうぞ。

1. 拡張子が .hnf なファイルを開いた時に hnf-mode となるように ~/.emacs 等で
   設定します。

   (autoload 'hnf "hnf-mode" nil t)
   (autoload 'hnf-mode "hnf-mode" nil t)
   (setq auto-mode-alist (cons '("\\.hnf$" . hnf-mode) auto-mode-alist))

2. hnf-diary-dir, hnf-html-dir, hnf-diary-year-directory-flag を必要に応じて
   設定します。設定すべき値は変数のコメントを参照してください。

   例) (setq hnf-diary-dir "~/diary")
       (setq hnf-html-dir "~/public_html/diary")
       (setq hnf-diary-year-directory-flag t)

3. 変数やマークなどの補完したい場合は、それぞれ以下の設定をします。

	変数	hnf-variable
	RLINK	hnf-rlink
	CAT	hnf-cat
	GRP	hnf-group
	クラス	hnf-class
	MARK	hnf-mark
	ALIAS	hnf-alias

   例) (setq hnf-variable '(("TENKI") ("BASHO") ("TAIJU") ("TAION")))
       (setq hnf-rlink '(("h14m") ("ari")))
       (setq hnf-cat '(("Linux") ("Nikki")))
       (setq hnf-group '(("myself") ("friend")))
       (setq hnf-class '(("emphasis") ("hidden"))
       (setq hnf-marks '(("(^^)") ("(-_-)") ("(^^;") ("(;_;)") ("(T_T)"))
       (setq hnf-alias '(("Be") ("hns")))

4. 新規 hnf を開いた時に、実行したい関数を hnf-initial-function
   に設定します。"OK"を自動挿入したければ以下のようにします。

   例) (setq hnf-initial-function (function (lambda () (insert "OK\n\n"))))

5. 一日が28:00まである生活をしている場合は、以下の設定をしてみてください。
   詳細は hnf-hour-not-today の説明を参照してください。

   例) (setq hnf-hour-not-today 4)

6. NEW や SUB の行で、リンクの name を表示したいならば hnf-get-link(C-c=) を、
   リンク先のファイルをオープンしたいならば hnf-link-find-file(C-cC-f) を
   使います。また、C-uC-c= でリンクの name が kill-ring に挿入されます。

   (注1) hns-1.03pl0 以前ではデフォルトのリンクの name が異なります。
         その形式で表示したい時は以下の設定を行ってください。
         (setq hnf-new-link-name-format "?%Y%m%h#%Y%m%d%N"
	       hnf-sub-link-name-format "?%Y%m%h#%Y%m%d%NS%S")
   (注2) hns-2.10 以降ではデフォルトのリンクの名前が異なります。
         その形式で表示したい時は以下の設定を行ってください。
         (setq hnf-new-link-name-format "?%Y%m%a&to=%Y%m%d%N#%Y%m%d%N"
	       hnf-sub-link-name-format "?%Y%m%a&to=%Y%m%d%NS%S#%Y%m%d%NS%S")
   (注3) 静的生成では以下のように設定を行ってください。
	 (setq hnf-new-link-name-format "%Y%m.html#%Y%m%d%N"
	       hnf-sub-link-name-format "%Y%m.html#%Y%m%d%NS%S")

7. 時間を挿入したいならば hnf-insert-time(C-cC-t) を使います。
   フォーマットは hnf-time-format で変更できます。
   C-uC-cC-t でカーソル以降に既に挿入されている時間を現在の時間に
   変更します。

   また hnf-write-file-insert-time(C-cC-s) を実行すると、ファイルの末尾に
   時間を挿入しファイルを保存します。

8. hnf-newline(C-cC-m) で、改行と同時に閉じるタグの挿入などが行われます。
   \C-m にバインドしても問題無いと思います。

   例) (add-hook 'hnf-mode-load-hook
         (function
          (lambda ()
            (define-key hnf-mode-map "\C-m" 'hnf-newline)))

9. namazu.el にて namazu_for_hns の検索結果からファイルを開きたいならば、
   hnf-namazu-find-file を namazu-mode-map に適宜設定することをすすめます。

   例) (setq namazu-command (expand-file-name "~/diary/namazu/bin/namazu"))
       (add-hook 'namazu-mode-hook
         (function
	  (lambda ()
	    (define-key namazu-mode-map "f" 'hnf-namazu-find-file))))
       (autoload 'hnf-namazu-find-file "hnf-mode" nil t)

   また、hnf-mode から C-cC-n で namazu.el を実行できます。

10. M-x calendar と連携したいならば、hnf-insert-diary-entry を適宜バインド
    しましょう。

    例) (autoload 'hnf-insert-diary-entry "hnf-mode" nil t)
        (add-hook 'calendar-load-hook
	  (function
           (lambda ()
             (define-key calendar-mode-map "iD" 'hnf-insert-diary-entry))))

    また、hnf-mark-diary-entries を実行すると、日記を入力してある日は
    マークが付きます。

    例) (autoload 'hnf-mark-diary-entries "hnf-mode" nil t)
        (add-hook 'today-visible-calendar-hook 'hnf-mark-diary-entries)
        (add-hook 'today-invisible-calendar-hook 'hnf-mark-diary-entries)

11. Web Browser と連携したい場合は、hnf-diary-url に日記のURLを設定して
    下さい。
    hnf-browse-recent-diary(C-cC-b) または hnf-browse-diary で
    Web Browser が起動します。

    例) (setq hnf-diary-url "http://www.nijino.com/ari/diary/")

    また、hnf-preview-diary(C-cC-p) では、httpd を経由せずに表示できます。

12. M-x hnf-check で予約語のチェックができます。
    `local-write-file-hooks' に設定すると、保存時に実行できます。

    例) (add-hook 'hnf-mode-hook
	  (function
	   (lambda () (add-hook 'local-write-file-hooks 'hnf-check))))


一部は custom を使って設定もできるはずです。(動作未確認(^^;)

* Emacsen

動作確認は主に Emacs-21 で行っています。
Emacs-20 や XEmacs-20/21 も多分問題無いでしょう。
mule-2.3@emacs-19.34 では custom-1.9962 をインストールすることをお薦めします。
mule-2.3@emacs-19.28 でも動きますが、色は着きません。
NEmacs では動きません。

なお、mule-2.3@19.34 で custom-1.9962 を使う場合は、
http://www.jpl.org/elips/ から取得できるパッチを当てる必要があります。

* Note

1. tamago-4.0.6 は outline-minor-mode で問題があるようです。
   4.0.6 より新しいバージョンにアップグレードするか、`hnf-outline-mode' を
   nil に変更してください。

* TODO
1. calendar からも browse-url を呼べるようにしようかな。
2. 全般的にエラー処理が甘いのを直すべきだろうな。

* THANKS

ハイパー日記システムプロジェクトの方々に感謝します。
ハイパー日記システム無くしては hnf-mode は生まれなかったでしょう:-)。

友人の福居君に感謝します。補完の下位関数は彼の toalias.el から奪っています(^^;

また、hnf-mode に協力していただいた以下の皆さんに感謝します。

	橋本賢一さん	http://club.h14m.org/Ken/diary/
	やまぐちさん	http://symphony.sone.riec.tohoku.ac.jp/~yamaya/diary/
	宮崎さん	http://zak.interwave.or.jp/diary/
	JUNさん		http://jun.misao.gr.jp/diary/
	sawさん		http://www.be-in.org/~mas/diary/
	ysjjさん	http://www.unixuser.org/~ysjj/diary/
	kaoruさん	http://triaez.kaisei.org/~kaoru/diary/
	後藤さん	http://www.taiyo.co.jp/~gotoh/diary/
	高林さん	http://namazu.org/~satoru/diary/
	小関さん	http://cgi.netlaputa.ne.jp/~kose/diary/
	おおつかさん	http://clotho.ku3g.org/diary/
