Emacsを使ってChromeで開いているGmailを編集するgmail-message-mode



メインで使っているメールは公私共にGmailなのですが、メールを始め文章を書くときは、やはり編集しやすいEmacsで書いてからコピペするということをしていました。

最近、gmail-message-modeというlispを見つけたので、使ってみることにしました。


動作確認環境
------------

* Mac OS X 10.9
* Chrome 40 (Beta)
* Emacs 24.4.1
    *  [Homebrew emacsで--japaneseオプション復活させてみた！ - Qiita](http://qiita.com/ksato9700/items/f4bb04d21d19e90f6d39) を使ってHomebrewでインストール


WebのテキストエリアをEmacsで編集するEdit with Emacsを導入
---------------------------------------------------------

gmail-message-modeを使うためには、ブラウザのテキストエリアをEmacsで編集するためのプラグインが必要となるため、まずはそれを導入します。

### ブラウザプラグインの導入

各ブラウザのプラグインは [Plugins](https://github.com/Bruce-Connor/gmail-mode#plugins) に記載されています。

Chromeの場合はChrome拡張の [Edit with Emacs](https://chrome.google.com/webstore/detail/edit-with-emacs/ljobjlafonikaiipfkggjbhkghgicgoh) を導入します。

### edit-server.elの導入

edit-server.elをpackage.elなどで導入します。

その後、init.elなどにサーバーを起動する設定を書いて、Emacsを再起動するなりします。

```
(when (locate-library "edit-server")
  (require 'edit-server)
  (defvar edit-server-new-frame nil)	; 新しいフレームは開かない
  (edit-server-start))
```

そうすると、テキストエリア近くに **edit** ボタンが表示されるようになり、これを押すとEmacsで編集できるようになります。

![emacs_gmail_mode01.png](https://qiita-image-store.s3.amazonaws.com/0/12951/8472ee51-9b17-3932-d229-25ce39229430.png "emacs_gmail_mode01.png")


何か入力してから `C-c C-c` などで、ブラウザのテキストエリアに入力内容が反映されます。

Edit with Emacsについての詳しいことは、 以下のブログが参考になりました。

* [Google Chrome の textarea を Emacs で編集する - けちゃぶろぐ](http://blog.kechako.com/entry/2011/12/02/105752)


GmailをEmacsで編集する
----------------------

上記の環境が整ったところで、gmail-message-modeを導入します。

### gmail-message-modeの導入

これもpackage.elを使って導入しました。

なお、GitHubにリポジトリがあるのですが、 [gmail-mode](https://github.com/Bruce-Connor/gmail-mode) のようにリポジトリ名が変わっているので注意してください。

### Markdown変換ツールの導入

gmail-message-modeの本来の目的としては、Markdown記法でGmailを編集する、というもののようです。

そのため、内部的には編集したテキストをMarkdownとして認識し、それをGmail用のHTMLとして変換して、メール編集画面に貼り付ける、というような処理をしているようです。

そのMarkdownをHTMLとして変換する処理のために、デフォルトでは `markdown` もしくは `pandoc` コマンドを使います。

私は、以下のブログにてPandocが進められていたので、Homebrewからインストールしました。

* [Write Gmail in Emacs the Easy Way: gmail-message-mode · Endless Parentheses](http://endlessparentheses.com/write-gmail-in-emacs-the-easy-way-gmail-message-mode.html)


### gmail-message-modeを使う

メールを新規作成した際に、以下の様な署名が入っているとします。

```
---
Taro Kiita
taro_kiita@example.com
00-0000-0000
http://example.com
```

この状態でEdit with Emacsを実行すると、

![emacs_gmail_mode02.png](https://qiita-image-store.s3.amazonaws.com/0/12951/1a22e731-2fdc-fd84-032a-9105dd07413d.png "emacs_gmail_mode02.png")


のようになります。

```
<br>
---  
Taro Kiita  
taro_kiita@example.com  
00-0000-0000  
http://example.com  
```

この `<br>` の上の部分がメール本文になりますので、ここに以下のように入力して、 `C-c C-c` してみます。

```
お世話になっています。
木板太郎です。

今年もよろしくお願いします。

では。
<br>
----------  
Taro Kiita  
taro_kiita@example.com  
00-0000-0000  
http://example.com  
```

すると、

![emacs_gmail_mode03.png](https://qiita-image-store.s3.amazonaws.com/0/12951/9ccf7b2c-5739-13bf-87f4-88c3ab3bbb56.png "emacs_gmail_mode03.png")


のようになります。

Gmailの作成画面へ反映されましたが、最初の行の改行が反映されていません。

先に述べたとおり、gmail-message-modeは **Markdown記法でGmailを編集** するためのものなので、文章の改行についてはMarkdown記法に従い、文末に `_` を2つ付ける必要があります。

というわけで、

```
お世話になっています。__
木板太郎です。

今年もよろしくお願いします。

では。
<br>
----------  
Taro Kiita  
taro_kiita@example.com  
00-0000-0000  
http://example.com  
```

と入力することで、

![emacs_gmail_mode04.png](https://qiita-image-store.s3.amazonaws.com/0/12951/d5f2956a-9790-6fa5-8747-918b449b4e5d.png "emacs_gmail_mode04.png")
 

のように、改行させることができました。

### GitHub flavored Markdownを使うようにする

行末に `_` を2つで改行するというのはMarkdownのわかりにくい記法の一つだと思うのですが、Pandocの出力をGitHub flavored Markdownにすることで解消できました。

`customize` を使うか、init.elなどに以下のように設定することで、行末に　`_` を2つ入れなくても改行されるようになります。

```el
(custom-set-variables
 '(ham-mode-markdown-to-html-command
   (quote
    ("/usr/local/bin/pandoc" "--from" "markdown_github" "--to" "html" "--email-obfuscation" "none" file)))
 )
```

`/usr/local/bin/pandoc` のパスは、環境に合わせて適宜設定してください。

また、私の環境では、テキスト内にメールアドレスがあった場合に難読化されるようになってしまったため、 `--email-obfuscation` を追加で設定しています。

### Markdown記法による編集

私は普段プレーンテキストモードで使っているので、あまり利点はありませんが、gmail-message-mode本来の目的である、Markdown記法による編集機能は、以下の様な感じで使えます。


```
# お世話になっています。
**木板太郎** です。

_今年もよろしくお願いします。_

では。
<br>
----------  
Taro Kiita  
taro_kiita@example.com  
00-0000-0000  
http://example.com  
```

上記のように入力すると、以下のように反映されます。

![emacs_gmail_mode05.png](https://qiita-image-store.s3.amazonaws.com/0/12951/bd291c4c-6484-6420-c258-e7a5138f9182.png "emacs_gmail_mode05.png")


他の記法も使えるものがありそうですが、私が使わなそうなので、残りは割愛させていただきます。