emacs-wiki.el メモ
emacs-wiki.el を使うと簡単に Web ページが作成できます.最新版は
から入手できます.とりあえず特徴を列挙すると,
- 簡単なマークアップ でページが作成できる
- 操作も簡単
- Emacs 内でリンクが辿れる 1
- ChangeLog も使える
- プロジェクト単位で切りかえられる
- 無理すれば,通常の Wiki のような動作も可能
- Lisp を埋めこめる ので拡張性もある 2
といった感じです.普通に HTML を書くのにくらべると, とんでもなく楽 です. 文章主体のページなら WYSWYG 系の エディタよりも速いのではないでしょうか?
[1] 書いてる時にもとても便利
[2] これは凄い.elisp からできることならなんでもできます.
操作
emacs-wiki の操作は非常にシンプルです.操作,編集に使うコマンドを一通り紹介します.
C-c C-l font-lock-mode フォントロックの ON/OFF C-c C-S-d emacs-wiki-delete-link-at-point リンクの削除 C-c C-r emacs-wiki-rename-link-at-point リンクの名前変更 C-c C-v emacs-wiki-change-project プロジェクトの変更 C-c C-p emacs-wiki-publish HTML を生成 C-c C-s emacs-wiki-search リンク検索 C-c C-b emacs-wiki-backlink 逆リンク検索 C-c C-f emacs-wiki-find-file find-file C-c C-a emacs-wiki-index index へジャンプ TAB emacs-wiki-next-reference 後のリンクへ移動 S-TAB emacs-wiki-previous-reference 前のリンクへ移動
あとは Wiki マークアップ をつかって書いてゆくだけです.
設定
あまり参考にならないかもしれませんが,現在の設定ファイルを紹介します.
;; -*- mode: Emacs-Lisp; syntax: elisp; coding: iso-2022-7bit -*-
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Load ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(require 'emacs-wiki)
(require 'planner)
(require 'latex-markup)
(require 'texinfo-markup)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Utility Function ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun emacs-wiki-get-modtime (file)
(format-time-string " %Y/%m/%d %h:%M:%S " (nth 4 (file-attributes file))))
(defun emacs-wiki-get-filesize (file)
(format "<center> %d </center>" (nth 7 (file-attributes file))))
(defun emacs-wiki-generate-index (&optional as-list exclude-private)
"インデックスページの作成関数"
(let ((project emacs-wiki-current-project))
(with-current-buffer (get-buffer-create "*Wiki Index*")
(erase-buffer)
(if project
(emacs-wiki-change-project project))
(let ((files (sort (copy-alist (emacs-wiki-file-alist))
(function
(lambda (l r)
(string-lessp (emacs-wiki-get-modtime (car r))
(emacs-wiki-get-modtime (car l)))))))
file)
(insert "<div id=\"recent\"><center>\n")
(let ((num 0))
(insert "順位 | <center>ファイル名</center> | ファイルサイズ | <center> 更新日時 </center>\n")
(insert "\n<nop>\n")
(while files
(unless (and exclude-private
(emacs-wiki-private-p (caar files)))
(incf num)
(insert (if as-list " " "")
(format "<center>%d</center>" num)
" | "
"<center>[[" (caar files) "]]</center>"
" | "
(emacs-wiki-get-filesize (caar files))
" | "
(emacs-wiki-get-modtime (caar files))
"\n"))
(setq files (cdr files))))
(insert "\n</center></div>\n"))
(current-buffer))))
;;; emacs-wiki-publishing-{header, footer} 用
(defun emacs-wiki-project-insert-header (project)
"project 名を prefix とした header を挿入"
(emacs-wiki-project-insert-templete (symbol-name project) "-header"))
(defun emacs-wiki-project-insert-footer (project)
"project 名を prefix とした footer を挿入"
(emacs-wiki-project-insert-templete (symbol-name project) "-footer"))
(defun emacs-wiki-project-insert-templete (project templete)
"project 名 + テンプレート名 のファイル内容を挿入"
(let ((file (concat "~/Wiki/wiki/" project templete)))
(when (file-readable-p file)
(ignore (insert-file-contents file)))))
;;; <lisp> ... </lisp> 用
(defun emacs-wiki-figure-with-class (class url width height caption)
"caption 付きの図を挿入する関数 (クラス指定付き)"
(format (concat "<nowiki><div class=\"%s\"><a href=\"%s\">"
"<img width=\"%s\" height=\"%s\" src=\"%s\" /></a>\n"
"<p class=\"caption\">%s</p></div></nowiki>")
class url width height url caption))
(defun emacs-wiki-figure (url width height caption)
"caption 付きの図を挿入"
(emacs-wiki-figure-with-class "fig" url width height caption))
(defun emacs-wiki-figure-right (url width height caption)
"caption 付きの図を挿入 (float: right)"
(emacs-wiki-figure-with-class "figright" url width height caption))
(defun emacs-wiki-figure-left (url width height caption)
"caption 付きの図を挿入 (float: left)"
(emacs-wiki-figure-with-class "figleft" url width height caption))
(defun emacs-wiki-insert-source-code (lang file)
"file の内容を example タグでかこったものに展開される"
(when (file-exists-p file)
(with-temp-buffer
(if (and (executable-find "nkf") (executable-find "code2html"))
(progn
(eshell-command (concat "nkf -e " file " |code2html -l " (symbol-name lang) " -o html-light -H >>> "
(prin1-to-string (current-buffer))))
(concat "<no" "wiki><pre>" (buffer-string) "</pre></no" "wiki>"))
(insert-file file)
(concat "<" "example" ">" (buffer-string) "<" "/" "example>")))))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Configuration ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(global-set-key [f5] #'emacs-wiki-find-file)
(setq emacs-wiki-directories '("~/Wiki/geo/")
emacs-wiki-publishing-directory "~/public_html/wiki/"
emacs-wiki-maintainer "lambda_list@hotmail.com"
emacs-wiki-inline-images t
emacs-wiki-publishing-transforms '(("WelcomePage" . "index"))
emacs-wiki-meta-content-coding "EUC-JP"
emacs-wiki-charset-default "EUC-JP"
emacs-wiki-publishing-header
"<lisp>(emacs-wiki-project-insert-header 'default)</lisp>"
emacs-wiki-publishing-footer
"<lisp>(emacs-wiki-project-insert-footer 'default)</lisp>")

