AtomでシフトJISのファイルを扱うことがあって、自動判別忘れに苦しみました。
ググるとちゃんと解決してくれている人がいました。
ところが、これだと手動でファイルを開いた時にはOKですが、フォルダ指定してatomを起動した時に、以前に開いていたファイルに関しては自動判別してくれません。
Atom discussionで聞いてみたらあっさり解決。onDidOpenの代わりにobserveTextEditorsを使えばいいとのこと。
fs = require('fs') atom.workspace.observeTextEditors (editor) -> 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' or encoding is 'windows-1252' return unless iconv.encodingExists(encoding) encoding = encoding.toLowerCase().replace(/[^0-9a-z]|:\d{4}$/g, '') editor.setEncoding(encoding) return
エンコードの自動判別でwindows-1252にフォールバックする場合もあるので、その場合もUTF-8にするようにしました。
とても快適です。
コードがencoding-selector packageのコード丸写しなのは、encoding-selectorのメソッドが公開されていないからですが、元々encoding-selectorが自動判別機能を持つことが筋が悪い。text-bufferが持つべきなのでissueを上げていますが、果たして取り上げてもらえるかどうか。