gracetory’s blog

東池袋にある合同会社グレストリのエンジニアブログです

Atomで制御文字を表示するパッケージを作る!!(挫折編)

f:id:gracetory_yama:20170830125033p:plain

タイトルで出落ちしてます。どうも、山口です。

前回の最後に、Atomで不要な制御文字が混入したら表示してくれるような

パッケージを作る、と言ってしまったので、

今回はそれにチャレンジ!!

あれ?ギャグ担当がちゃんとテックブログしてる?

ちなみに前回の記事は以下から(宣伝)

怪奇!!アスキーコード混入の巻(Atom編) - gracetory’s blog

どっち!?CoffeeScript と JavaScript

サイトでAtom用パッケージの作り方を紹介してくれている方はたくさんいたのですが、

CoffeeScriptとJavaScriptでの作り方が混在していてわけわからん状態でした。

もともと、AtomのパッケージはCoffeeScriptで書くものだったらしいのですが、

数年前からなんだかんだでJavaScriptで書けるようになったらしいですね。

ちょっと調べた感じ、CoffeeScriptは私には合わなそうだったので、

普通にJavaScriptで作れるようになったのはありがたや〜

最初の挫折

はい。無理でした。

前提として、「私はPHPしか書けない」。

私のスキルの問題はひとまず置いておいてください。

書けないなら勉強すればいいんです。現に今勉強中です(おせーよ)。

しかし!!

ブログのネタ的に)今すぐに成果を得たい私は強硬手段に出ます!

いともたやすく他人のコードを利用するえげつない行為

Atomに絶賛提供してくれている、raccy様のパッケージ!!

atom.io

このパッケージ、全角のスペースを可視化してくれる大変ありがたいパッケージなのです!!

名だたる企業さんも利用されているらしい、由緒ただしきパッケージなのです!!

employment.en-japan.com

デフォルトで表示してくれないAtomさんってどうなの?

で、漆黒の意思を持つ私は、

「全角スペースを判定してるところを見つけ出して、

そこに制御文字も追加すればいいんじゃない?」

と考えたわけです。

今回は人様のパッケージをアレンジするだけです。

自分でパッケージを作って公開するのはまた次の機会に。

再び挫折

長くなってきたので割愛しますが、

私のスキル不足で「不要な制御文字を別の文字に置き換えて表示」

という部分がなかなかできず。

本業の仕事もあるので、ひとまず

「不要な制御文字を見つけたら、エディタ側で通知を出す」

ができれば良しというようにハードルを下げました。

当初の理念は何処へやら…

コードを追加しよう!!

変更を加えるのは、lib/character-marker.coffee のみです。

通知の出し方は、以下のサイトを参考にしました。

kokufu.blogspot.jp

# CompositeDisposableを追加
{Range, Point, CompositeDisposable} = require 'atom'

# 通知オプション設定
option =
  detail: "ASCII Control Code In!!"
  dismissable: true  # ボタンを押すまで通知が消えない
  # icon: null

module.exports =
class CharacterMarker

# ~~割愛~~

  checkText: (text) ->
    for char of @charMap
      if text.includes char
        return true

    # もし不要な制御文字が出てきたら通知をだす
    if text.match /[\x00-\x08\x0b-\x1f\x7f]/
      atom.notifications.addWarning("Warning", option)

    return false

# ~~割愛~~

ハードルを下げただけあって、簡単ですね!!

実際に前回の記事のやり方で使ってみたらこうなりました。

f:id:gracetory_yama:20170830144203g:plain

お、それなりにそれっぽい?

感想

「お、それなりにそれっぽい?」じゃねーよ、9割人様のものだろ。

無論、これで良しとはしません。

  • 制御文字を可視状態にする
  • パッケージをちゃんと自分で作って公開する

これらを達成するまで、このシリーズは続きます。

ブログのネタがしばらくできたぞ、わーい

次回はおそらくCEDECのレポートになる予定です。

お楽しみ(?)に!!