Oh, I really hate to spend time making patches on existing functions, but hope it will help.
Paste below code into Packages/some.py
(or create the file) would work (not thoroughly tested).
# workaround for: bom setting of unsaved files is lost on hot_exit
# if sublime.version()<'42xx' # uncomment this line if some further version 42xx fix this issue
class BomWorkaroundEventListener(sublime_plugin.EventListener):
def on_post_save_async(self, view): self.update_bom_(view)
def on_post_text_command(self, view, cmd, args): cmd=="set_encoding" and self.update_bom_(view)
def on_init(self, views): {self.init_bom_(view) for view in views}
def on_load_async(self, view): self.init_bom_(view)
def on_reload_async(self, view): self.init_bom_(view)
def on_revert_async(self, view): self.init_bom_(view)
@staticmethod
def init_bom_(view):
have_bom_now = ('with bom' in (view.encoding() or '').lower())
have_bom_setting = ('with bom' in (view.settings().get('encoding') or '').lower())
if have_bom_now != have_bom_setting:
if not have_bom_now: view.set_encoding(view.settings().get('encoding'))
if not have_bom_setting: view.settings().set('encoding', view.encoding())
@staticmethod
def update_bom_(view):
have_bom_now = ('with bom' in (view.encoding() or '').lower())
have_bom_setting = ('with bom' in (view.settings().get('encoding') or '').lower())
if have_bom_now != have_bom_setting:
view.settings().set('encoding', view.encoding() if have_bom_now else None)