Windows での Emacs の設定覚書

## <i class="fa fa-paw fa-fw"></i>Emacs の設定

取り敢えず `%HOME%` にディレクトリ（フォルダ） `.emacs.d` を作成して，その下に`conf`,`elisp`,`etc` などを作成する．

`init.el` で `conf` 以下の個別の設定を呼び出すことにする．オールドタイプなので `package.el` や `init-loader.el` は使わないです．:expressionless:

また，`Emacs` のインストール先を `D:\Programs\emacs` にしています．

`~/.emacs.d/init.el` に下記内容で作成する．個別の設定は，`~/.emacs.d/conf/init-xxx.el` に記述して，`load` で呼び出す．

設定はいろいろな所を参考にさせて貰いましたが，出典が分からないのが多数です． >_<;

```init.el
;; -*- Mode: Emacs-Lisp ;  Coding: utf-8 -*-

;; load-pathを追加する関数
(defun add-to-load-path (&rest paths)
  (let (path)
    (dolist (path paths paths)
      (let ((default-directory
              (expand-file-name (concat user-emacs-directory path))))
        (add-to-list 'load-path default-directory)
        (if (fboundp 'normal-top-level-add-subdirs-to-load-path)
            (normal-top-level-add-subdirs-to-load-path))))))

;; 引数のディレクトリ以下をload-pathに追加
(add-to-load-path "elisp" "conf")

;; use-package を require の代わりに使う
(if (require 'use-package nil t)
    (setq use-package-verbose t)
  (message "Use-package is unavailable!")
  (defmacro use-package (&rest _args)))

;; 個別設定をロードする
(load "init-global")
(load "init-utility")
(load "init-xxx")
```

## <i class="fa fa-paw fa-fw"></i>共通の設定
共通の設定を `init-global.el` に記述する．忘れそうなのだけメモします．

```init-global.el
;; 日本語環境
(set-language-environment "Japanese")
(prefer-coding-system 'utf-8)
(set-file-name-coding-system 'cp932)
(set-keyboard-coding-system 'cp932)
(set-terminal-coding-system 'cp932)

;; Proxy の設定
(setq url-proxy-services '(("http" . "Proxy:Port")))

;; 起動時のディレクトリの変更
(setq default-directory "~/")

;; C-h を Backspace に
(keyboard-translate ?\C-h ?\C-?)

;; *scratch* バッファを削除しない
(defadvice kill-buffer (around kill-buffer-around-advice activate)
  (let ((buffer-to-kill (ad-get-arg 0)))
    (if (equal buffer-to-kill "*scratch*")
        (bury-buffer)
      ad-do-it)))

;; server start for emacs-client
(use-package server
  :if window-system
  :init
  (unless (server-running-p)
    (server-start)))
```

## <i class="fa fa-paw fa-fw"></i>C/Migemo
[KaoriYa](http://www.kaoriya.net/software/cmigemo/) さんから，「C/Migemo for Windows 64bit」をダウンロードする．

解凍して出てきて `cmigemo.dll,cmigemo.exe` を `D:\Programs\emacs\libexec\emacs\24.4\x86_64-pc-mingw32` にコピーする． 辞書ファイルを `~/.emacs.d/etc/dict/migemo` にコピーする．

```init-migemo.el
;; -*- Mode: Emacs-Lisp ;  Coding: utf-8 -*-

(use-package migemo
  :config
  (setq migemo-command "cmigemo")
  (setq migemo-options '("-q" "--emacs" "-i" "\a"))
  (setq migemo-dictionary (expand-file-name "~/.emacs.d/etc/dict/migemo/utf-8/migemo-dict"))
  (setq migemo-user-dictionary nil)
  (setq migemo-regex-dictionary nil)
  (setq migemo-use-pattern-alist t)
  (setq migemo-use-frequent-pattern-alist t)
  (setq migemo-pattern-alist-length 1000)
  (setq migemo-coding-system 'utf-8-unix)
  (migemo-init))
```

## <i class="fa fa-paw fa-fw"></i>The Silver Searcher(ag)
`Msys2 Shell` から `Pacman -S mingw-w64-x86_64-ag` でインストールする．

`ag.exe,libwinpthread-1.dll,libpcre-1.dll,liblzma-5.dll` を `D:\Programs\emacs\libexec\emacs\24.4\x86_64-pc-mingw32` にコピーする．

`helm-ag` を `~/.emacs.d/elisp/helm` にインストールする．（`helm` のインストール先を`~/.emacs.d/elisp/helm` にしています）

```init-helm.el
;; -*- Mode: Emacs-Lisp ;  Coding: utf-8 -*-

(use-package helm-config
  :bind
  ("C-;" . helm-mini)
  ("C-x C-b" .  helm-buffers-list)
  :config
  (use-package helm-files
    :config
    (define-key helm-find-files-map (kbd "TAB") 'helm-execute-persistent-action))
  )

(use-package helm-ag
   :bind
   ("M-s" . helm-ag)
   )
```

## <i class="fa fa-paw fa-fw"></i>Aspell
`Msys2 Shell` から `Pacman -S mingw-w64-x86_64-aspell` でインストールする．

`aspell.exe,word-list-compress.exe,libaspell-15.dll,libstdc++-6.dll,libintl-8.dll,libgcc_s_seh-1.dll,libiconv-2.dll`を`D:\Programs\emacs\libexec\emacs\24.4\x86_64-pc-mingw32`にコピーする．

辞書ファイルがないので，`GNU Aspell` からインストールする．
`MinGW-w64 Win64 Shell` から実行する．

```bash
$ curl -O ftp://ftp.gnu.org/gnu/aspell/dict/en/aspell6-en-2015.02.15-0.tar.bz2
$ tar jxvf aspell6-en-2015.02.15-0.tar.bz2
$ cd aspell6-en-2015.02.15-0
$ ./configure
$ vi Makefile
---
dictdir = D:\msys64\mingw64/lib/aspell-0.60
datadir = D:\msys64\mingw64/lib/aspell-0.60
↓
dictdir = D:\\msys64\\mingw64/lib/aspell-0.60
datadir = D:\\msys64\\mingw64/lib/aspell-0.60
---
$ make
$ make isntall
```

`D:\msys64\mingw64\lib\aspell-0.60`を`D:\Programs\emacs\libexec\emacs\24.4\x86_64-pc-mingw32\lib\aspell-0.60`にコピーする．

`ispell-complete-word` が動作しないので，`words` と `grep.exe` がないので調達する．UNIX 系の OS にある `words` ファイル(`/usr/local/share/dict,/usr/share/dict` にある？) を `~/.emacs.d/etc/dict/` にコピーする．

`MSYS2` の `grep.exe` を使うと必要な `DLL` が増えるのでコンパイルしたものを使用する．
`MinGW-w64 Win64 Shell` から実行する．

```bash
$ curl -O http://ftp.gnu.org/gnu/grep/grep-2.21.tar.xz
$ tar Jxvf grep-2.21.tar.xz
$ cd grep-2.21
$ ./configure
$ make
```

`src` にできた `grep.exe` を `D:\Programs\emacs\libexec\emacs\24.4\x86_64-pc-mingw32` にコピーする．

```init-utility.el
;; -*- Mode: Emacs-Lisp ;  Coding: utf-8 -*-

(use-package ispell
  :init
  (setq ispell-program-name "aspell")
  :config
  (setq ispell-alternate-dictionary (expand-file-name "~/.emacs.d/etc/dict/words"))
  (add-to-list 'ispell-skip-region-alist '("[^\000-\377]+")))
```

`~/.aspell.conf`

```.aspell.conf
lang en_US
```

を追加する．

## <i class="fa fa-paw fa-fw"></i>Markdown
### <i class="fa fa-leaf fa-fw"></i>Pandoc
(2015/4/14 Font Awesome の設定追加)
[Pandoc](https://github.com/jgm/pandoc/releases) から最新のバージョンをダウンロードしてインストールする．ここでは，`pandoc-1.13.2-windows.msi` をインストールししました．

### <i class="fa fa-leaf fa-fw"></i>Markdown-mode
`markdown-mode` を `~/.emacs.d/elisp` にインストールする．

スタイルシートを適用する場合は，適当な CSS を用意する．ここでは，[github.css](https://gist.github.com/andyferra/2554919) を使うことにする．

```init-markdown.el
;; -*- Mode: Emacs-Lisp ;  Coding: utf-8 -*-

(use-package markdown-mode
  :mode
  ("\\.md\\'" . gfm-mode)
  :config
  (setq markdown-command "pandoc --smart -f markdown_github -t html5")
  (setq markdown-css-path "path\\to\\github.css")
  (setq markdown-xhtml-header-content "<link href=\"http://maxcdn.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.min.css\" rel=\"stylesheet\" />")
  )
```

- `C-c C-c m` : ソースの表示(buffer に表示される)
- `C-c C-c p` : ブラウザで表示(temporary file で表示：CSSが適用されない)
- `C-c C-c v` : ブラウザで表示(basename.htmlを生成して表示： CSSが適用される)