LoginSignup
56
58

More than 5 years have passed since last update.

ATOM でファイルを開いたら自動文字コード判定を行う

Last updated at Posted at 2015-03-31

ATOM でファイルを開いたら自動文字コード判定を行う

はじめに

encoding-selector パッケージで文字コード判定ができるが、
わざわざcntl+shift+uを押して判定させるのは面倒。
ということで、ファイルを開いたら自動的に文字コード判定を行わせることにしてみた。
なお、環境はWindows7。

設定環境

ATOMインストールフォルダが、
C:¥Users¥HOGEHOGE¥AppData¥Local¥atom¥app-0.187.0

ATOM設定フォルダが、
C:¥Users¥HOGEHOGE¥.atom

パッケージの参照設定

  • 管理者権限でコマンドプロンプトを開く
  • node_modulesフォルダを作成
    mkdir C:¥Users¥HOGEHOGE¥.atom¥node_modules
  • iconv-liteのシンボリックリンクを作成
    mklink C:¥Users¥HOGEHOGE¥.atom¥node_modules¥iconv-lite C:¥Users¥HOGEHOGE¥AppData¥Local¥atom¥app-0.187.0¥resources¥app¥node_modules¥iconv-lite
  • jschardetのシンボリックリンクを作成
    mklink C:¥Users¥HOGEHOGE¥.atom¥node_modules¥jschardet C:¥Users¥HOGEHOGE¥AppData¥Local¥atom¥app-0.187.0¥resources¥app¥node_modules¥encoding-selector¥node_modules¥jschardet

ATOM ver.0.187.0のフォルダを指定しているので、バージョンアップには対応できてない。。なんかうまく参照する方法はないのかな?
もしくは、npmでiconv-liteとjschardetをインストールだけでもよいとのこと

init.coffeeの修正

  • init.coffee を編集するには、ATOMのFileメニューから[Open Your Init Script]を選択
  • 次のコードを追加
fs = require('fs')

atom.workspace.onDidOpen ->
  editor = atom.workspace.getActiveTextEditor()

  try
    filePath = editor.getPath()
  catch error
    return
  return unless fs.existsSync(filePath)

  jschardet = require 'jschardet'
  iconv = require 'iconv-lite'
  fs.readFile filePath, (error, buffer) =>
    return if error?
    {encoding} = jschardet.detect(buffer) ? {}
    encoding = 'utf8' if encoding is 'ascii'
    return unless iconv.encodingExists(encoding)

    encoding = encoding.toLowerCase().replace(/[^0-9a-z]|:\d{4}$/g, '')
    editor.setEncoding(encoding)

コードは、encoding-selectorパッケージのencoding-selector-list-view.coffeeのdetectEncodingメソッドを参考。

ATOMの再起動

  • ctrl+Alt+r

効能

これで、とりあえずはShiftJISとUTF-8の混在するWindows環境でもイラッとせずに済みそう。

56
58
1

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
56
58