71 lines
1.9 KiB
Python
71 lines
1.9 KiB
Python
|
import sublime, sublime_plugin
|
||
|
import os.path
|
||
|
import string
|
||
|
import functools
|
||
|
|
||
|
class SetUnsavedViewName(sublime_plugin.EventListener):
|
||
|
setting_name = False
|
||
|
|
||
|
dropped_chars = string.whitespace
|
||
|
|
||
|
pending = 0
|
||
|
|
||
|
def on_modified(self, view):
|
||
|
if view.file_name() or view.is_loading():
|
||
|
return
|
||
|
|
||
|
if self.setting_name:
|
||
|
return
|
||
|
|
||
|
self.pending += 1
|
||
|
sublime.set_timeout(functools.partial(self.update_title, view), 20)
|
||
|
|
||
|
def update_title(self, view):
|
||
|
self.pending -= 1
|
||
|
if self.pending != 0:
|
||
|
return
|
||
|
|
||
|
if view.settings().get('set_unsaved_view_name') == False:
|
||
|
return
|
||
|
|
||
|
cur_name = view.settings().get('auto_name')
|
||
|
view_name = view.name()
|
||
|
|
||
|
# Only set the name for plain text files
|
||
|
syntax = view.settings().get('syntax')
|
||
|
if syntax != 'Packages/Text/Plain text.tmLanguage':
|
||
|
if cur_name:
|
||
|
# Undo any previous name that was set
|
||
|
view.settings().erase('auto_name')
|
||
|
if cur_name == view_name:
|
||
|
view.set_name("")
|
||
|
return
|
||
|
|
||
|
# Name has been explicitly set, don't override it
|
||
|
if not cur_name and view_name:
|
||
|
return
|
||
|
|
||
|
# Name has been explicitly changed, don't override it
|
||
|
if cur_name and cur_name != view.name():
|
||
|
view.settings().erase('auto_name')
|
||
|
return
|
||
|
|
||
|
# Don't set the names on widgets, it'll just trigger spurious
|
||
|
# on_modified callbacks
|
||
|
if view.settings().get('is_widget'):
|
||
|
return
|
||
|
|
||
|
line = view.line(0)
|
||
|
if line.size() > 50:
|
||
|
line = sublime.Region(0, 50)
|
||
|
|
||
|
first_line = view.substr(line)
|
||
|
|
||
|
first_line = first_line.strip(self.dropped_chars)
|
||
|
|
||
|
self.setting_name = True
|
||
|
view.set_name(first_line)
|
||
|
self.setting_name = False
|
||
|
|
||
|
view.settings().set('auto_name', first_line)
|