Dotfiles/sublime-text/Default/set_unsaved_view_name.py

71 lines
1.9 KiB
Python
Raw Normal View History

2014-05-12 18:57:15 +02:00
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)