はじめに
こんにちは、Python界の情弱です。このエントリはSphinx Advent Calendar 2012の2日目のエントリです。1日目の@r_rudiより受け取りました。完全に使い回しのネタ+αとなってますがご容赦下さい。
最近はVimだとかSublime Text 2だとか、若者のEmacs離れが進んでおりますが、みなさんはいかがお過ごしでしょうか。SphinxはreStructured Textでドキュメントを記述しますが、Emacsを使うと結構色々と便利だよ、という事をお知らせしたく、この文章を書いています。
rst.el
rst.elの導入
Docutilsが配ってます。Emacs用の拡張しか置いてないです。
どうだ、Vimmer、参ったか!Sublime Text 2の人も参れ!(白目)
以前似たような記事を書いたのですが、多方面より「キーアサインが変わってる!」との報告を受けましたので再度まとめます。
;;;; rst.el ;; Emacs起動時にrst.elを読み込み (require 'rst) ;; 拡張子の*.rst, *.restのファイルをrst-modeで開く (setq auto-mode-alist (append '(("\\.rst$" . rst-mode) ("\\.rest$" . rst-mode)) auto-mode-alist)) ;; 背景が黒い場合はこうしないと見出しが見づらい (setq frame-background-mode 'dark) ;; 全部スペースでインデントしましょう (add-hook 'rst-mode-hook '(lambda() (setq indent-tabs-mode nil)))
ショートカット
ショートカットはこちら。
ショートカット | 内容 | 覚え方 |
---|---|---|
C-=, C-- C-= | 自動見出しレベル設定(C-- C-=で逆順) | =で線を引く |
(リージョン設定後)C-c C-c | 選択範囲をコメントアウトする | comment |
(リージョン設定後)C-c C-r tab, C-c C-l tab | インデントレベルを深くする/浅くする | right, leftにインデント |
(リージョン設定後)C-c C-r C-l | 行ブロックを設定する | -- |
(リージョン設定後)C-c C-l C-e, C-c C-l C-b | すべての行を数字リスト/箇条書きにできる | C-c C-lがリスト操作。最後はenumeration, bulletの頭文字。 |
C-c C-t C-t | 現在書いているreST内の見出し(toc; table of contents)を表示 | toc treeの頭文字 |
(リージョン設定後)C-x r t | リージョン中の各行頭へ指定文字列挿入 | region text |
見出しを表示のオプションは大きなreSTファイルを書いているときはとても便利です。
autoinsertでテンプレートを利用
今日日のEmacsでは新規ファイルを作成する際にテンプレートを挿入できるautoinsertが標準で利用できます。これで毎度書く文字コードの設定を回避できて大変良いです。
;;;; autoinsert (require 'autoinsert) (setq user-id-string "ymotongpoo") (setq user-full-name "Yoshifumi YAMAGUCHI") (setq user-mail-address "ymotongpoo AT gmail.com") ;; テンプレートのディレクトリ (setq auto-insert-directory "~/.emacs.d/template") ;; 各ファイルによってテンプレートを切り替える (setq auto-insert-alist (nconc '( ("\\.rst$" . ["template.rst" my-template]) ) auto-insert-alist)) (require 'cl) (defvar template-replacements-alists '(("%file%" . (lambda () (file-name-nondirectory (buffer-file-name)))) ("%file-without-ext%" . (lambda () (file-name-sans-extension (file-name-nondirectory (buffer-file-name))))) ("%date%" . (lambda() (current-time-string))) ("%mail%" . (lambda () (identity user-mail-address))) ("%name%" . (lambda () (identity user-full-name))) ("%id%" . (lambda () (identity user-id-string))) )) (defun my-template () (time-stamp) (mapc #'(lambda(c) (progn (goto-char (point-min)) (replace-string (car c) (funcall (cdr c)) nil))) template-replacements-alists) (goto-char (point-max)) (message "done.")) (add-hook 'find-file-not-found-hooks 'auto-insert)
で、.emacs.d/templateにテンプレートを置いておく。
- .emacs.d/template/template.rst
.. -*- coding: utf-8 -*- Date: %date% Author: %id% (%name%, %mail%) .. _%file-without-ext%:
これで毎度書くコードが減って大変いいですね。
watchdogによる自動ビルド
watchコマンドでビルドしてもいいんですが、Pythonユーザなのでwatchdogでビルドします。
watchmedo shell-command --patterns="*.rst" --recursive --command='make html' source