[備忘録]Emacs26.3インストール後の初期化ファイルinit.elの編集（随時更新）

# 1. はじめに
以前[こちらの記事](https://qiita.com/walking_with_models/items/7d618aed1c045e507ea2)においてEmacsをインストールしました．本稿では，その後Emacsの利用環境を整備するために行った初期化ファイル`init.el`に関する作業の備忘録です．

私自身が利用する（非常に限られた）設定に限定して整理している内容ですが，package及びuse-packageを中心に`init.el`を整理したいビギナー（私自身もそう）の方には`init.el`事始めとして参考になるかもしれません．特に，（いくつかの）先人のブログ記事等には記載されていないパッケージ導入後の変化を記録している点が参考になるかもしれません．

なお，この記事は作業を進めながら書いています．そのため，今後も加筆修正が予想されます．現在のバージョンでは，以下の作業を含んでいます．

1. パッケージリポジトリMELPA(-stable)の登録
2. use-packageのインストール


## 1.1 環境
本稿執筆時の作業環境は以下の通りです．

- macOS: Catalina 10.15.4
- Emacs: Emacs 26.3 (emacsmacport) <- `brew cask`を使ってインストール（[こちらの記事](https://qiita.com/walking_with_models/items/7d618aed1c045e507ea2)を参照）

##1.2 関連記事

- macOSへのTeX-Emacs環境の構築全体の流れについては[こちらの記事](https://qiita.com/walking_with_models/items/52a0d0c00aec88903e4b)．

# 2. 初期化ファイルinit.elの作成

ここではEmacsを使って初期化ファイル`init.el`を`~/.emacs.d/`下に作成します．Emacs 26.3 (emacsmacport)のインストール後にまだ`~/.emacs.d/init.el/`が存在しないことが前提です（以前のEmacsバージョンにおいて使われていた初期化ファイル`~/.emacs`や`~/.emacs.el`が存在しないことも確認しています）．

## 2.1 手順
**Step 1:** Emacsを起動し，`C-x C-f`とし，ミニバッファに`Find file: ~/.emacs.d/init.el`と入力して`RET`．
**Step 2:** ファイルを保存し（`C-x C-s`．これで`~/.emacs.d/init.el`が作成される），Emacsを閉じる（`C-x C-c`）．


# 3. パッケージリポジトリMELPA(-stable)の登録

パッケージを利用する際にuse-packageというパッケージを利用すると便利らしいです．例えば，以下の記事を参照してください．

- @kai2nenobu 氏の記事「[use-packageで可読性の高いinit.elを書く](https://qiita.com/kai2nenobu/items/5dfae3767514584f5220)」

このuse-packageはパッケージ管理のためのツールpackage（Emacs 26.3ではデフォルトでインストールされている）を使えば，パッケージリポジトリ[MELPA](https://melpa.org)又は[MELPA-stable](https://stable.melpa.org)からインストールすることができるようです（MELPA-stableは安定版のMELPAということです．安定版があるパッケージについてはMELPA-stableを，そうでないものはMELPAを利用するという方針で良いのでしょうか...）．

そこで，まずはリポジトリMELPA及びMELPA-stableを追加する手順を整理します．


## 3.1 手順
**Step 1:** Emacsで初期化ファイル`init.el`を開き，ファイルの最初（の方）に以下の行を追加する．

```emacs-lisp:~/.emacs.d/init.el
(require 'package)

;; MELPA
(add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/") t)

;; MELPA-stable
(add-to-list 'package-archives '("melpa-stable" . "https://stable.melpa.org/packages/") t)

(package-initialize)
```
**Step 2:** 変更を保存し（`C-x C-s`），Emacsを閉じる（`C-x C-c`）．

Emacs Lispは全然理解していませんが，`(require 'package)`でパッケージ管理ツールのpackageを呼び出し，`add-to-list`の行で`package-archives`変数にリポジトリ情報を追加しています．最後の`(package-initialize)`は新しくパッケージをインストールする際に，インストール先のパスの設定等を自動的に行うようにするための指示だと思います．

手順の整理にあたっては[wagavulin氏のブログ記事「package.elで自動インストール」](https://www.wagavulin.jp/entry/2016/07/04/211631)を参考にしました．

## 3.2 注意
同じパッケージ名のものがMELPAとMELPA-stableに存在する場合，MELPAからインストールが行われるようです．もしMELPA-stableを利用したいのであれば，あらかじめ指定しておく必要があります．

具体的には，`(package-initialize)`の行の次に以下のような行を追加します（以下は[wagavulin氏のブログ記事「package.elで自動インストール」](https://www.wagavulin.jp/entry/2016/07/04/211631)からの引用）．

```emacs-lisp:~/.emacs.d/init.el
(setq package-pinned-packages
      '((web-mode . "melpa-stable")
        (auto-complete . "melpa-stable")))
```

`package-pinned-packages`変数を使ってweb-modeとauto-completeというパッケージはMELPA-stableのリポジトリからインストールするように指定しています．


# 4. パッケージuse-packageのインストール
上記の**3.**でリポジトリMELPA及びMELPA-stableの登録を完了したら，次はパッケージuse-packageのインストールです．use-packageはMELPA及びMELPA-stableのどちらにも存在します．ここでは，リポジトリMELPAからインストールすることにします．これはいくつかの記事，例えば

- horimislime氏の記事「[Emacsのお手入れをする in 2019](https://horimisli.me/entry/emacs/)」（2019年2月28日）
- てぃー氏ブログ記事「[私的 YaTeX 事始め](http://mtino1594.hatenablog.com/entry/2019/04/07/200000)」（2019年4月7日）

においてMELPAからのインストールが行われていたこと，use-packageのGitHubの[`README.md`](https://github.com/jwiegley/use-package/blob/39a8b8812c2c9f6f0b299e6a04e504ef393694ce/README.md)に以下のような表現があったからです．
> By default package.el prefers melpa over melpa-stable due to the versioning (> evil-20141208.623 evil-1.0.9), so even if you are tracking only a single package from melpa, you will need to tag all the non-melpa packages with the appropriate archive. If this really annoys you, then you can set use-package-always-pin to set a default.

"you will need to tag..."以降はさっぱり理解できません（汗）


## 4.1 手順
**Step 1:** Emacsで初期化ファイル`init.el`を開き，**3.1 手順**で追加した最後の行`(package-initialize)`の次に以下を追加する（**3.2 注意**の設定を行う場合はその後に追加）．

```emacs-lisp:~/.emacs.d/init.el
(unless package-archive-contents (package-refresh-contents))
(unless (package-installed-p 'use-package) (package-install 'use-package))
(require 'use-package)
```
**Step 2:** 変更を保存し（`C-x C-s`），Emacsを閉じ（`C-x C-c`），再度Emacsを起動する．

**Step 1**は，一行目でパッケージ情報が更新されていない状態であれば`package-refresh-contents`で更新し，二行目でuse-packageを（それがインストールされていない場合に）`package-install`でインストールすることを意味しています．三行目の`(require 'use-package)`でuse-packageを読み込みます．


## 4.2 結果
上記の手順に従ってuse-packageをインストールした結果，次のような変化がありました．

### 変化1：use-packageがどこにインストールされるか
パッケージ管理ツールpackageを使ってインストールしたuse-packageは`~/.emacs.d/elpa/`下にインストールされたようです．

```terminal:~/.emacs.d/elpa/
$ ls -l
total 0
drwxr-xr-x   5 ...  staff  160  5 24 14:35 archives
drwxr-xr-x   6 ...  staff  192  5 24 22:42 bind-key-20191110.416
drwxr-xr-x  22 ...  staff  704  5 24 22:42 use-package-20200520.2305
```

`use-package-20200520.2305`のディレクトリがuse-packageの本稿作成時の最新バージョンです．`bind-key-20191110.416`は[MELPAのページ](https://melpa.org/#/use-package)に記載のDependenciesにあるパッケージbind-key（これも本稿作成時の最新バージョン）で，自動的にインストールされたようです（これをどう使うのか，これを書いている時点では理解していません）．


### 変化2：初期化ファイルinit.elへの加筆
上記の手順**Step 2**の後に初期化ファイル`init.el`を開い際に最後の行に以下が追加されていることを確認しました．よくわからないので，上記**Step 1**の最後の行の後に移動して，特にいじらないでおくことにします．

```emacs-lisp:~/.emacs.d/init.el
(custom-set-variables
 ;; custom-set-variables was added by Custom.
 ;; If you edit it by hand, you could mess it up, so be careful.
 ;; Your init file should contain only one such instance.
 ;; If there is more than one, they won't work right.
 '(package-selected-packages (quote (use-package))))
(custom-set-faces
 ;; custom-set-faces was added by Custom.
 ;; If you edit it by hand, you could mess it up, so be careful.
 ;; Your init file should contain only one such instance.
 ;; If there is more than one, they won't work right.
 )
```

#5. バックスラッシュ(\)の問題への対処

デフォルトだとキーボードの`¥`はそのまま円マークとして表示されます．バックスラッシュを入力するには`opt + ¥`とするか，「システム環境設定->キーボード->入力ソース」と進んで設定するといった方法があるようです．

しかし，自分が求めているのはEmacsの編集時にのみバックスラッシュになればOKというものです．これは初期化ファイル`init.el`の設定で対応できるようです（つうさに氏のブログ記事「[日本語キーボードMacBookでEmacsのC-\する](https://tsuu32.hatenablog.com/entry/2019/08/27/122459)」を参照）．

##5.1 手順
**Step 1:** Emacsで初期化ファイル`init.el`を開き，以下を追加する．

```emacs-lisp:~/.emacs.d/init.el
(define-key global-map [?¥] nil)
(define-key local-function-key-map [?¥] [?\\])
(define-key local-function-key-map [?\C-¥] [?\C-\\])
(define-key local-function-key-map [?\M-¥] [?\M-\\])
(define-key local-function-key-map [?\C-\M-¥] [?\C-\M-\\])
```
**Step 2:** 変更を保存し（`C-x C-s`），Emacsを閉じ（`C-x C-c`），再度Emacsを起動する．


#6. その他
##6.1 便利なパッケージ・機能

Emacsで編集を行う上で便利なパッケージや機能をメモ．インストールの手順等は今後加筆できれば．

- outline-minor-mode：TeXファイルの(sub)sectionレベルの折り畳み
 - 参考：[てぃー氏の記事](http://mtino1594.hatenablog.com/entry/2019/04/07/200000)
- [Dashboard](https://github.com/emacs-dashboard/emacs-dashboard)：Emacs起動時に最近利用したファイル等の一覧を表示するパッケージ
    - Bookmarksは[Emacs bookmarks](https://www.emacswiki.org/emacs/BookMarks)の機能を使って作成される`~/.emacs.d/bookmarks`を参照している．

# おわりに
今後加筆．