Emacs Wiki Customize

目次

概要
ChangeLog 関係
ChangeLog の変更者名を省略する
ChangeLog の HTMLファイル出力がおかしい?
インライン画像
画像から任意の URL へリンクを張る
画像のサイズを指定する
リンク・サイズ同時指定

このサイトを制作するにあたって行った emacs-wiki.el のカスタマイズを紹介します。 今のところ HTMLファイル生成 (Emacs Wiki Publishing) に関する事柄のみです。

概要

EmacsWiki が HTMLファイルを生成するときの変換処理は、 ChangeLog に対しては emacs-wiki-changelog-markup 、 その他のファイルに対しては emacs-wiki-publishing-markup というリストで定義されています。 これらのリストを変更することで出力されるファイルを好きなように加工することができます。

処理を変更するにはリストの内容を入れ替えてしまってもいいわけですが、 私は今のところは元のリストの前後に新しい処理を追加するような変更の仕方をしています。

このページでは便宜上、項目ごとに設定を紹介しますが、実際に設定する場合には以下のようにまとめて記述できます。

項目が一つのとき:

(setq emacs-wiki-publishing-markup
      (cons
       [追加したい項目]
       emacs-wiki-publishing-markup))

項目が複数のとき:

(setq emacs-wiki-publishing-markup
      (append
       (list
        [追加したい項目1]
        [追加したい項目2]
        …
        )
       emacs-wiki-publishing-markup))
(nconc emacs-wiki-publishing-markup
       (list
        [追加したい項目1]
        [追加したい項目2]
        …
        ))

または

(setq emacs-wiki-publishing-markup
      (append
       emacs-wiki-publishing-markup
       (list
        [追加したい項目1]
        [追加したい項目2]
        …
        )))

ChangeLog 関係

ChangeLog の変更者名を省略する

サイトの編集を一人で行っている場合、ChangeLog に名前がいちいち表示されるのはわずらわしい。 そこで emacs-wiki-changelog-markup の最後に変更者名を削除する処理を加える。

(nconc emacs-wiki-changelog-markup
       (list
        ;; 変更者名を省略する。
        ["^<h2>\\(\\S-+\\)\\s-+.+</h2>" 0 "<h2>\\1</h2>"]
        ))

ChangeLog の HTMLファイル出力がおかしい?

(古いバージョンでは ChangeLog が HTML ファイルとして正常に出力されませんでしたが、Ver.2.6.3 では正常に出力されるようになっていました。) (2004.11.24 記)

HTML に変換された ChangeLog を閲覧してみると、上下にゴミが表示される。 よく見ると、ヘッダとフッタに埋め込まれたLispコードが処理されずそのままになっている。

emacs-wiki.el を調べてみると、HTMLに変換する時の処理手順は、 ChangeLog は emacs-wiki-changelog-markup 、 その他のファイルは emacs-wiki-publishing-markup というリストで定義されている。

それぞれのリストの内容を見ると、emacs-wiki-publishing-markup ではヘッダとフッタを付加したあとに埋め込まれた Lisp コードを実行する処理があるのだが、emacs-wiki-changelog-markup の方にはそれが無い。

そこで、emacs-wiki-changelog-markup の最後に Lisp コードを実行する処理を加える。 下の設定を行ったところ、正常に出力されるようになった。

(nconc emacs-wiki-changelog-markup
       (list
        ;; Lispコードが展開されるようにする。
        [emacs-wiki-tag-regexp 0 emacs-wiki-markup-custom-tags]
        ))

インライン画像

EmacsWiki では "[[./foo.jpg ]]" のように画像ファイル名を "[[", "]]" で囲むことによって文中に画像を挿入する(インライン画像を指定する)ことができる。 また、"[[./foo.jpg] [画像 foo ]]" のように書いて画像に説明文(alt属性の文字列)をつけることができる。

たとえば、次のように書くと

[[./banner.gif][バナー画像]]

下のように画像がインライン表示される。

バナー画像

(注:画像がカレントディレクトリにある場合にもディレクトリ指定「./」が必要。)

また、以前のバージョンでは画像がインライン表示されるだけだったが、 最近のバージョンではインライン画像からその画像ファイル自身へのリンクが自動的に張られるようになったようだ。(Ver.2.6.4ではリンクが張られるようになっていた。)

これだけでもページに説明図を挿入するといった通常の用途には充分であるが、 インライン画像から任意の URL へリンクを張ったり、 画像のサイズを指定したりすることはできず、 そのような場合には HTML のタグを直に書かなくてはならない。

また、インライン画像からその画像ファイル自身へのリンクが張られてしまうと不都合な場合もある。

そこで、次のような動作をするように emacs-wiki を改造する。

Emacs上で画像がインライン表示される機能はそのまま活かしたい。 そこで、インライン画像の説明文(alt属性となる文字列)の部分に情報を埋め込み、 それを Publish 時に抽出して変換するようにした。

画像から任意の URL へリンクを張る

emacs-wiki-publishing-markup の末尾に、 imageタグの alt属性からリンク情報を取り出してリンクタグに変換する処理を追加する。

設定サンプルはこちら → インライン画像マークアップ拡張用設定
一行が長いので別ページ(^^;;)

この設定を行うと、次の動作をするようになる。

使用法
インライン画像の説明文部分に「URL, 」の形式でリンク先を指定する。 カンマの後のスペースはあってもなくてもよい。
[[./banner.gif][./Introduction.html, サイト紹介]]

Publish すると次のように変換される。

サイト紹介

URLとして認識されるのは、相対パスなら「ディレクトリ/ファイル名」となるような文字列。ファイル名は拡張子付きで。 絶対パスなら「プロトコル名://」で始まる文字列。 プロトコル名は http, ftp, mms といった英小文字で。 たとえカンマがあっても上記のパターンに一致しない文字列は無視され、説明文中にそのまま残る。

画像のサイズを指定する

画像サイズを指定をしていないと、画像の読み込みが遅い場合に、画像を読み込むにつれてレイアウトが段階的に変わったりして嬉しくない。 そこで、画像サイズを指定できるようにする。

emacs-wiki-publishing-markup の末尾に、 imageタグの alt属性から「幅x高さ,」の文字列を取り出して width, height 属性に変換する処理を追加する。

設定サンプル→ インライン画像マークアップ拡張用設定

使用法
インライン画像の説明文部分に「幅x高さ, 」の形式で画像サイズを指定する。 カンマの後のスペースはあってもなくてもよい。
[[./banner.gif][200x40, バナー通常サイズ]]
[[./banner.gif][100x20, バナー小サイズ]]

Publish すると次のように変換される。

バナー通常サイズ バナー小サイズ

リンク・サイズ同時指定

上述のリンク指定とサイズ指定は同時に使うこともできる。

[[./banner.gif][200x40, ./Introduction.html, サイト紹介]]

サイト紹介