よろずや

emacs-wiki.el メモ

emacs-wiki

emacs-wiki.el を使うと簡単に Web ページが作成できます.最新版は

から入手できます.とりあえず特徴を列挙すると,

といった感じです.普通に 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>")