EmacsでブラウザのテキストボックスにMarkdownを書く (校正もする)

概要

Atomic ChromeEmacsからブラウザのテキストボタンを操作しつつ,textlintをflycheckからよんで文章を校正する. flymdでMarkdownのリアルタイムプレビューもする.

こんな感じになる. f:id:ksknw:20171104122228p:plain

はじめに

ブラウザのテキストボックスに文字を打ち込むのが面倒. ブラウザで操作するテキストボックスには,例えば,はてなブログGithubのissueなどがある. これらの操作が面倒な原因として

などがある.これらの問題を解決する方法として以下をやる.

  • Atomic ChromeEmacsからchromeのテキストボックスを操作する
  • textlintでEmacsから文法チェックする
  • flymdでEmacsからMarkdownのリアルタイムプレビューする

(Emacs最高)

Atomic ChromeEmacsから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から文法チェックする

textlintMarkdownなどのテキストファイルの校正を行うアプリケーション. 本体にルールを追加していくことで,自分の用途にあった校正ができる.

作者の方が日本人であることもあって(?)日本語用のルールも充実していて, 例えば,ですますが混在しないようにするとか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

こんな感じになる. f:id:ksknw:20171104121530p:plain

これを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)

こんな感じで校正してくれる.

f:id:ksknw:20171104112919p:plain

flymdでEmacsからMarkdownのリアルタイムプレビューする

もともとMarkdown書くときは使っているのでFlymdを使っている. (できればEmacs内でなんらかのcssが反映されたプレビューを見たい).

以上全部やると,最初のような感じになる.

既知の問題点

  • 一旦ファイルを保存しないとtextlintが動かない.
  • flymdはfirefoxで動くので,chromefirefoxEmacsを開いていて頭が悪い
  • 特に表記ゆれについて,自分でやりがちなものを登録していくともっといい感じになると思う.

参考