個別の覚え書き。

上に書いたそれぞれの詳細を忘れない様に。

font-lock-add-keywords() の代替関数

本当に簡単に、

  (defun font-lock-add-keywords (&optional mode list)
    (setq font-lock-keywords (cons t list)))

としただけです。
`font-lock-keywords' に直接 list を設定するのが正しいやり方なのかどうかは微妙なんですが、以前に text-mode のカスタマイズをしてたときに、その様にしていたもので、これまで問題にはなっていないので、まあ良いかな、というところです。

html-mode が余計な動作をするのを抑止。

html 編集環境としては、psgml を使っているのですが、この hatena-mode が、この html-mode を parent として利用すると、

  • html の skeleton (template) を挿入してしまう。
  • indent の制御がおかしくなる。

となってしまうので、この動作を抑止したものです。
何れも多分、環境のせいなので、時間があれば正しく直すところなんですが、時間が取れないのと、最近は html を素で書くことが殆んどなく、実際のところ使ってないので、そういう意味でも時間が惜しくなりまして。

抑止は、

  (defadvice hatena (around hatena-disable-insert-template activate)
    (unless (boundp 'html-helper-build-new-buffer)
      (load "psgml-html"))
    (let ((html-helper-build-new-buffer nil))
      ad-do-it))
  
  (add-hook
   'hatena-mode-hook
   (function
    (lambda ()
      (setq sgml-indent-data nil))))

の様な advice と hook で行ないました。
skelton の挿入の方は、上の様な advice で、

  M-x hatena

としたときに、`html-helper-build-new-buffer' に nil を束縛することで、新規バッファ作成時でも skeleton (template) を挿入しない様にしています。
indent の制御の方は、バッファが作成されてからの話なので、素直に hook で `sgml-indent-data' を nil にし、indent を無効化しています。

auto-insert でテンプレートを挿入。

psgml でのテンプレート挿入を無効化したので、別の方法で挿入する様にしました。
実は、当初は psgml でのテンプレート挿入で、挿入する内容を変更することを考えていたのですが、psgml では、自身の load 時に、挿入する全てのテンプレートを作成してしまう (これがスケルトン) 様です。
html のテンプレートは defcustom で定義された `html-helper-new-buffer-template' という変数として保持しているので、これを上の advice で書き換えてみたのですが、実際に挿入する段階では、既に変数からスケルトンを生成し、別の変数に固定値として保持してしまっていました。
そのため、mode に合わせて書き換える様な真似はできず、無効化してしまったのでした。

で、これまで使ったことが無かった `auto-insert' で、テンプレートを挿入することにしました。
取り敢えず、挿入したい内容は、ファイルで保存しておく程でもないので、

  (require 'autoinsert)
  (add-hook 'find-file-hooks 'auto-insert)
  (setq auto-insert-alist
        (append '(((hatena-mode . "Insert template for hatena-mode.")
  								 "Title: "
                   "Title " str n n
                   "*[" _ "]"
                   )) auto-insert-alist))

として、先頭のタイトルと最初の見出しまでを挿入しておくことにしました。

  M-x hatena

とすると、ミニバッファで、

Perform Insert template for hatena-mode. auto-insertion? (y or n)

と問い合わせて来るので、`y' を応答。すると更に、

Title:

とミニバッファに表示されるので、

Title: 今日も疲れた……

などと入力して C-m すると、

Title 今日も疲れた……

 *[]

となって、`[' と `]' の間にポインタが置かれます。
アスタリスクの見出しの定義部分は、行頭にある状態で投稿すると変換されてしまうので、ここでは字下げして書いてあります。実際には行頭にあります。

こんな感じですが、使用感としては概ね良好です。
そもそも hatena-mode の使い勝手が宜しい様で。
この様な便利な道具を公開して頂いてます id:hikigaeru さんに感謝します。