@@ -1211,6 +1211,7 @@ def __init__(self):
12111211 self .user_settings_file = None
12121212 self .sublime_settings_file = None
12131213 self .sublime_auto_complete = None
1214+ self .project_file_names = {}
12141215
12151216 def loadSublimeSettings (self ):
12161217 self .sublime_settings_file = sublime .load_settings ('Preferences.sublime-settings' )
@@ -1235,57 +1236,64 @@ def project_data(self):
12351236 data = data .replace ('\t ' , ' ' )
12361237 return json .loads (data , strict = False )
12371238
1239+ def _check_project_file_name (self , folders , session_filename ):
1240+ try :
1241+ with open (session_filename ) as fp :
1242+ data = json .load (fp , strict = False )
1243+ except IOError :
1244+ return
1245+ try :
1246+ projects = data ['workspaces' ]['recent_workspaces' ]
1247+ except KeyError :
1248+ return
1249+
1250+ for project_file in projects :
1251+ try :
1252+ with open (project_file ) as fp :
1253+ project_json = json .load (fp , strict = False )
1254+ except IOError :
1255+ pass
1256+ else :
1257+ project_path = os .path .dirname (project_file )
1258+ try :
1259+ project_folders = set (os .path .realpath (os .path .join (project_path , f ['path' ])) for f in project_json ['folders' ])
1260+ except KeyError :
1261+ pass
1262+ else :
1263+ if project_folders == folders :
1264+ return project_file
1265+
12381266 def project_file_name (self ):
12391267 """
12401268 ST2/ST3-compatible wrapper for getting the project file for a window, made possible with
12411269 titoBouzout's getProjectFile method in SideBarEnhancements (refactored to project_file_name)
12421270 """
12431271 window = sublime .active_window ()
12441272 if not window :
1245- return None
1273+ return
12461274 if hasattr (window , 'project_file_name' ):
12471275 return window .project_file_name ()
1248- if not window .folders ():
1249- return None
1250- session_filename = os .path .normpath (os .path .join (sublime .packages_path (), '..' , 'Settings' , 'Session.sublime_session' ))
1251- try :
1252- data = file (session_filename , 'r' ).read ()
1253- except IOError :
1254- projects = []
1255- else :
1256- data = data .decode ('utf-8' ).replace ('\t ' , ' ' )
1257- data = json .loads (data , strict = False )
1258- projects = data ['workspaces' ]['recent_workspaces' ]
1259- autosave_filename = os .path .normpath (os .path .join (sublime .packages_path (), '..' , 'Settings' , 'Auto Save Session.sublime_session' ))
1276+ wid = window .id ()
12601277 try :
1261- data = file ( autosave_filename , 'r' ). read ()
1262- except IOError :
1278+ return self . project_file_names [ wid ]
1279+ except KeyError :
12631280 pass
1264- else :
1265- data = data .decode ('utf-8' ).replace ('\t ' , ' ' )
1266- data = json .loads (data , strict = False )
1267- if hasattr (data , 'workspaces' ) and hasattr (data ['workspaces' ], 'recent_workspaces' ) and data ['workspaces' ]['recent_workspaces' ]:
1268- projects += data ['workspaces' ]['recent_workspaces' ]
1269- projects = list (set (projects ))
1270- for project_file in projects :
1271- project_file = re .sub (r'^/([^/])/' , '\\ 1:/' , project_file )
1272- project_json = json .loads (file (project_file , 'r' ).read (), strict = False )
1273- if 'folders' in project_json :
1274- folders = project_json ['folders' ]
1275- found_all = True
1276- for directory in window .folders ():
1277- found = False
1278- for folder in folders :
1279- folder_path = re .sub (r'^/([^/])/' , '\\ 1:/' , folder ['path' ])
1280- if folder_path == directory .replace ('\\ ' , '/' ):
1281- found = True
1282- break
1283- if not found :
1284- found_all = False
1285- break
1286- if found_all :
1287- return project_file
1288- return None
1281+ folders = window .folders ()
1282+ if not folders :
1283+ return
1284+ settings_path = os .path .normpath (os .path .join (sublime .packages_path (), '..' , 'Settings' ))
1285+
1286+ folders = set (os .path .realpath (f ) for f in folders )
1287+
1288+ session_filename = os .path .join (settings_path , 'Session.sublime_session' )
1289+ project_file_name = self ._check_project_file_name (folders , session_filename )
1290+
1291+ # if not project_file_name:
1292+ # session_filename = os.path.join(settings_path, 'Auto Save Session.sublime_session')
1293+ # project_file_name = self._check_project_file_name(folders, session_filename)
1294+
1295+ self .project_file_names [wid ] = project_file_name
1296+ return project_file_name
12891297
12901298 def get (self , config_key , default = None , language = None ):
12911299 if language is not None :
0 commit comments