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環境でもイラッとせずに済みそう。