EmacsでブラウザのテキストボックスにMarkdownを書く (校正もする)
概要
Atomic ChromeでEmacsからブラウザのテキストボタンを操作しつつ,textlintをflycheckからよんで文章を校正する. flymdでMarkdownのリアルタイムプレビューもする.
こんな感じになる.

はじめに
ブラウザのテキストボックスに文字を打ち込むのが面倒. ブラウザで操作するテキストボックスには,例えば,はてなブログやGithubのissueなどがある. これらの操作が面倒な原因として
などがある.これらの問題を解決する方法として以下をやる.
- Atomic ChromeでEmacsからchromeのテキストボックスを操作する
- textlintでEmacsから文法チェックする
- flymdでEmacsからMarkdownのリアルタイムプレビューする
(Emacs最高)
Atomic ChromeでEmacsからchromeのテキストボックスを操作する
chromeにはAtomic chromeというプラグインがあり,これを使うことでAtomからテキストボックスを操作できる. このプラグインをEmacsから使用できるパッケージが公開されている.
.emacs.d/Cask に以下を追記してインストール.
(depends-on "atomic-chrome")
また,設定ファイルのどこかに以下を書いておくと,chrome内のプラグインのボタンを押すと勝手にEmacsにバッファが開くようになる. デフォルトでは"C-x C-s"をしても保存しないようになっているが,ファイルもほしいことが多いので,これは保存のままにしておく.
(require 'atomic-chrome) (atomic-chrome-start-server) (bind-key* "C-x C-s" 'save-buffer)
Emacsで書けばキーバインドだけでなく,表をOrgTblで書いたりもできるので良い. Emacsで書いたものをはてなのテキストボックスに貼り付けてもいいけど,画像のアップロードとかが面倒なので,少しだけ楽. はてなもそうだけど,sharelatexとかもEmacsから触れるので色々良い.
textlintでEmacsから文法チェックする
textlintはMarkdownなどのテキストファイルの校正を行うアプリケーション. 本体にルールを追加していくことで,自分の用途にあった校正ができる.
作者の方が日本人であることもあって(?)日本語用のルールも充実していて, 例えば,ですますが混在しないようにするとか1文中に同じ助詞が複数でないようにするとか色々ある.
ルールを個別にインストールしていくこともできるが,上位の概念としてプリセットというのがあり,例えば日本語技術文書向けルールのプリセットなどがあり,かつその中に含まれるルールを個別にオフしたりもできるので,これを使うのが良さそう.
以下のようにインストールする.
$ npm i -g textlint textlint-rule-preset-japanese textlint-rule-preset-jtf-style textlint-rule-preset-ja-technical-writing textlint-spellcheck-tech-word textlint-rule-prh
~/.textlintrc に
{
"rules": {
"preset-japanese": {
"sentence-length": false
},
"spellcheck-tech-word": true,
"preset-ja-technical-writing": {
"ja-no-mixed-period": {
"periodMark": ".",
},
"sentence-length": false
},
"prh": {
"rulePaths" :["~/prh.yml"]
}
}
}
とか書いておくと色々動く. 普通に使うときは以下のような感じで使える.
$ textlint hoge.md
こんな感じになる.

これをEmacsから使う方法としてflycheckのルールにする方法がある. ルールの設定はEmacsからでも↑のやつを勝手によんでくれるので,以下のような感じにする.
(require 'flycheck)
(flycheck-define-checker textlint
"A linter for prose."
:command ("textlint" "--format" "unix" source-inplace)
:error-patterns
((warning line-start (file-name) ":" line ":" column ": "
(id (one-or-more (not (any " "))))
(message (one-or-more not-newline)
(zero-or-more "\n" (any " ") (one-or-more not-newline)))
line-end))
:modes (text-mode markdown-mode))
(add-to-list 'flycheck-checkers 'textlint)
(add-hook 'markdown-mode-hook 'flycheck-mode)
こんな感じで校正してくれる.

flymdでEmacsからMarkdownのリアルタイムプレビューする
もともとMarkdown書くときは使っているのでFlymdを使っている. (できればEmacs内でなんらかのcssが反映されたプレビューを見たい).
以上全部やると,最初のような感じになる.
既知の問題点
- 一旦ファイルを保存しないとtextlintが動かない.
- flymdはfirefoxで動くので,chromeとfirefox,Emacsを開いていて頭が悪い
- 特に表記ゆれについて,自分でやりがちなものを登録していくともっといい感じになると思う.
参考
- GitHub - tuvistavie/atomic-chrome: Edit Chrome textareas in Atom
- Atomic Chrome for Emacs - EmacsでChromeのテキストエリアをリアルタイム編集 - Qiita
- textlint - pluggable linting tool for text and markdown
- textlintで日本語の文章をチェックする | Web Scratch
- GitHub - textlint-ja/textlint-rule-no-mix-dearu-desumasu: textlint rule that check no mix である and ですます.
- GitHub - textlint-ja/textlint-rule-no-doubled-joshi: 文中に同じ助詞が複数出てくるのをチェックするtextlintルール
- GitHub - textlint-ja/textlint-rule-preset-ja-technical-writing: 技術文書向けのtextlintルールプリセット
- textlint for emacs flycheck · GitHub
- GitHub - mola-T/flymd: flymd - Emacs on the fly markdown preview
- EmacsでPythonとTeXとMarkdownを書いてる動画と使ってるパッケージ - やったことの説明