LoginSignup
11
10

More than 5 years have passed since last update.

Emacs で文章書いてる時に意図せず紛れ込んだ一句を探しだす flycheck-ikku

Last updated at Posted at 2015-02-23

掲題の問題を解決するために作成した gongo/emacs-ikku という一句抽出 Emacs Lisp と、これを利用した flycheck-ikku を紹介します。

経緯

報告書やポエムを書く時に Emacs をお使いの皆様は、やはり普段から自身の言葉にさりげなく一句を含ませていることだと思います。日本の文化に触れること、とても良いと考えております。その気持ちを忘れずに今後ともよろしくお願い致します。

ですが毎回そういうわけにもいきません。報告書に情緒的意味を持たせるつもりもなく、只々あるがままを伝えるつもりだった。ただそれだけですが、難解な日本語を書くとなるとやはり意図せず紛れ込んでしまいます。そしてチェックをした上司からこう言われるわけです。

「これ一句じゃん」

俺はそんなことをチェックして欲しいわけじゃない。あるがままを伝え、それをチェックして欲しいだけなのに、つい一句が紛れ込んでしまった所為で話があらぬ方向へ。俺が求めるレビューじゃない。一句だ。一句が紛れ込んでいるのがいけないんだ。

ならば機械的にチェックしよう。

解決方法

Emacs には Flycheck というシンタックスチェッカーがあります。Vim でいう Syntastic みたいなものでしょうか。簡単に述べると、ファイル保存時 1 にそのファイルをチェックし、例えば php-mode であれば PSR-2 に沿った書き方をしているか、go-mode であればコンパイルできる状態かどうか、などなど。人の意思に干渉されない部分を機械的にチェックしてくれる便利な Emacs Lisp です。

話を前項に戻すと

一句が紛れ込んでいるのがいけないんだ。

自身が意図せず書き込んでしまった「一句」を 機械的 にチェックできれば、そしてそれを教えてくれれば、事前に一句をただの現代語に変換し、スムーズなレビュワーへのバトンタッチが可能なのではないか。

emacs-ikku

flycheck で一句を判断する前段階として、まずは gongo/emacs-ikku を作成しました。

(require 'ikku)

(let ((song (ikku/find "ああ古池や蛙飛び込む水の音ああ")))
  (ikku:song-to-string song)) ;; => "古池や 蛙飛び込む 水の音"

詳しい使い方は README やソースコード、参考リンクをご参照下さい。

flycheck-ikku

emacs-ikku を flycheck プラグインとして呼び出せるように emacs-ikku/flycheck-ikku.el を作成しました。

デモ

ikku.gif

flycheck-mode が有効の時に

M-x flycheck-select-checker RET ikku-checker

を実行すると、現在開いているバッファから一句を探し出し、その部分をハイライトします。

(setq flycheck-highlighting-mode 'columns)

とかしておくと、一句の始まりの一語にハイライトされます 2

スクリーンショット 2015-02-23 21.26.01.png

もし全ての major-mode でこのチェッカーを発動したい場合は下記を実行していただければ。

(add-to-list 'flycheck-checkers 'ikku-checker)

ちなみに今回デモとして使った文章は 感謝駆動開発 TDD (Thanks Driven Development) のものです。4年前にも既に一句を紛れ込ませていたと考えると、感慨深いものがあります。

SPECIAL THANKS

emacs-ikku の中を読んでいただければわかると思いますが r7kamura/ikku のほとんどを Emacs Lisp にコンバートしただけのものとなっております。圧倒的感謝。いつまでもついていきます! 3

補足: flycheck チェッカーを作ってはみたものの

他の flycheck ファミリーを見ると、ほぼ外部コマンドに投げたり非同期実行しています 4
現状の flycheck-ikku は同期実行なので、もしかしたらテキスト量が増えるとそれだけ固まる可能性があります。いつか非同期にします。多分しません。

まとめ

無意識に一句詠んでいきましょう。

おわりに

わたしは一句紛れてても気にしないので多分使いません。

参考


  1. バッファ変更中に発動する時もある 

  2. 今のところ、行の中に空白などの mecab が未知語と判断したやつが混ざってるとずれます 

  3. 判定するロジック更新されたら多分そのまま使います。 

  4. 通常チェッカー定義に使う flycheck-define-checker は外部コマンド前提だったので、今回は flycheck-define-generic-checker を使用した 

11
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
10