2018年4月8日日曜日

Docker + emacs で markdown文書をプレビューする環境をつくる

普段は、CentOS7 + emacs を使用しています。

README.md などの markdown文書を、emacs でプレビューできる環境を作ろうとしたが、CentOS7より、ubuntu のほうが簡単そうだったので、Dcoker(ubuntu)で emacs 環境を作ってみた。

ubuntu + emacsでmarkdown 文書をプレビューする環境は、下記URLのページを参考にしました。
emacs-w3mでmarkdown原稿をプレビューする

1. Docker イメージの作成


用意したファイルは、以下のとおり
[root@centos701 docker]# tree -a emacs-md/
emacs-md/
├── .emacs
└── Dockerfile

0 directories, 2 files

Dockerfile の内容は以下のとおり。
ubuntu のバージョンは 16.04 です。
FROM ubuntu

RUN apt-get update

# LANG
RUN apt-get install -y language-pack-ja-base language-pack-ja
RUN locale-gen ja_JP.UTF-8
ENV LANG ja_JP.UTF-8
ENV LANGUAGE ja_JP:ja
ENV LC_ALL ja_JP.UTF-8

# TZ
RUN cp /etc/apt/sources.list /etc/apt/sources.list.bk
RUN sed -i -e "s%http://archive.ubuntu.com/ubuntu/%http://ftp.jaist.ac.jp/pub/Linux/ubuntu/%g" /etc/apt/sources.list
ENV TZ Asia/Tokyo
RUN apt-get update \
  && apt-get install -y tzdata \
  && rm -rf /var/lib/apt/lists/* \
  && echo "${TZ}" > /etc/timezone \
  && rm /etc/localtime \
  && ln -s /usr/share/zoneinfo/Asia/Tokyo /etc/localtime \
  && dpkg-reconfigure -f noninteractive tzdata
RUN cp /etc/apt/sources.list.bk /etc/apt/sources.list
RUN apt-get update

# emacs
RUN apt-get install -y markdown emacs-goodies-el w3m-el ibus-mozc emacs-mozc emacs-mozc-bin
ADD .emacs /root/

# entrypoint
ENTRYPOINT [ "emacs", "-nw" ]

.emacs の内容は以下のとおり。
(require 'markdown-mode)
(add-to-list 'auto-mode-alist '("\\.md\\'" . markdown-mode))
(define-key markdown-mode-map (kbd "\C-c \C-c \C-e") 'markdown-export)
(require 'w3m)
(define-key markdown-mode-map (kbd "\C-c \C-c \C-v")
  (lambda ()
    (interactive)
    (setq html-file-name (concat (file-name-sans-extension (buffer-file-name)) ".html"))
    (markdown-export html-file-name)
    (if (one-window-p) (split-window-right))
    (other-window 1)

    ;; (2016/05/23)
    ;; (w3m-find-file html-file-name)

    ;; (2016/05/28)
    ;; (if (buffer-file-name) (w3m-find-file html-file-name) (w3m-reload-this-page))

    ;; (2016/05/29)
    (if (get-buffer "*w3m*")
        (prog2 (switch-to-buffer "*w3m*") (w3m-reload-this-page)) (w3m-find-file html-file-name))

    (other-window 1)))

(require 'mozc)
(set-language-environment "Japanese")
(setq default-input-method "japanese-mozc")
(prefer-coding-system 'utf-8)

Dockerイメージをビルドします。
[root@centos701 emacs-md]# docker build . --rm -t emacs-md

Dockerイメージを確認します。
[root@centos701 emacs-md]# docker images
REPOSITORY            TAG                 IMAGE ID            CREATED             SIZE
emacs-md              latest              448bd44ed933        25 minutes ago      992MB

2. 動作確認


以下のようにして、Dockerイメージの emacs を起動します。
"-v" で カレントディレクトリを コンテナの /work にマウントし、emacs で /work 配下を編集するようにします。
[root@centos701 sandbox]# ls
README.md  environments  memo  modules
[root@centos701 sandbox]# docker run -it --rm -v `pwd`:/work emacs-md /work

emacs が起動すると、下図のようにカレントディレクトリの内容が一覧表示されます。


emacs で README.md を開くと、下図のように表示されます。


[Ctrl-c]+[Ctrl-c]+[Ctrl-v]で、下図のように、左右に分割表示されます。
左側がソースで、右側がプレビューです。


カレントディレクトリに markdonw -> html に変換したファイルが作成されるので、不要なら削除します。
[root@centos701 sandbox]# ls
README.html  README.md  environments  memo  modules