1- import sublime , sublime_plugin , os , time
1+ import sublime , sublime_plugin , os , time , re
2+
3+ class WM :
4+ def get_project_folder (window ):
5+ project_folders = []
6+ if ( WM .has_project (window ) ):
7+ for folder_data in window .project_data ()["folders" ]:
8+ project_folders .append (folder_data ['path' ])
9+
10+ return project_folders
11+
12+ def has_project (window ):
13+ return window .project_data () != None
14+
15+ def file_belongs_to_path (buffer , parent_folders , related_paths ):
16+ file_in_project = False
17+ file_dir = os .path .dirname (buffer .file_name ())
18+ if ( not file_dir in related_paths ):
19+ for folder in parent_folders :
20+ if ( file_dir .startswith (folder ) ):
21+ related_paths .append (file_dir )
22+ file_in_project = True
23+ break
24+ else :
25+ file_in_project = True
26+
27+ return file_in_project , related_paths
28+
29+ def close_buffer (window , buffer ):
30+ window .focus_view (buffer )
31+ window .run_command ('close_file' )
32+
233
334class lessTabsCommand (sublime_plugin .WindowCommand ):
435 def run (self ):
@@ -18,14 +49,69 @@ def run(self):
1849 and not buffer .is_scratch ()
1950 and not buffer .is_dirty ()
2051 and path
21- and os .path .exists (path ) == True
52+ and os .path .exists (path )
2253 and now - os .path .getmtime (path ) > modified_ls
2354 and now - os .path .getatime (path ) > accessed_ls
2455 ):
25- self .window .focus_view (buffer )
26- self .window .run_command ('close_file' )
56+ WM .close_buffer (self .window , buffer )
57+
58+
59+ class lessTabsCloseProjectUnrelatedCommand (sublime_plugin .WindowCommand ):
60+ def run (self ):
61+
62+ window = self .window
63+
64+ if ( WM .has_project (window ) ):
65+ related_paths = []
66+ project_folders = WM .get_project_folder (window )
67+
68+ for buffer in window .views ():
69+ file_in_project , related_paths = WM .file_belongs_to_path (buffer , project_folders , related_paths )
70+
71+ if ( not file_in_project ):
72+ WM .close_buffer (window , buffer )
73+ else :
74+ sublime .status_message ("Less Tabs : There is no open project." )
75+
76+
77+ class lessTabsCloseDirUnrelatedCommand (sublime_plugin .WindowCommand ):
78+ def run (self ):
79+ self .window .show_input_panel ("Directory of the tabs to keep open" , "" , self .on_done , None , None )
80+
81+ def on_done (self , input ):
82+ if ( os .path .exists (input ) ):
83+ related_paths = []
84+ for buffer in self .window .views ():
85+ file_in_dir , related_paths = WM .file_belongs_to_path (buffer , [input ], related_paths )
86+
87+ if ( not file_in_dir ):
88+ WM .close_buffer (self .window , buffer )
89+ else :
90+ sublime .error_message ('Less Tabs : directory "' + input + '" not found.' )
91+ self .window .run_command ('less_tabs_close_dir_unrelated' )
92+
93+
94+ class lessTabsCloseFileDirUnrelatedCommand (sublime_plugin .WindowCommand ):
95+ def run (self ):
96+ window = self .window
97+ active_view = window .active_view ()
98+
99+ if ( not active_view .is_scratch () ):
100+ file_path = active_view .file_name ()
101+ if ( file_path and os .path .exists (file_path ) ):
102+ related_paths = []
103+ for buffer in window .views ():
104+ file_in_dir , related_paths = WM .file_belongs_to_path (buffer , [os .path .dirname (file_path )], related_paths )
105+
106+ if ( not file_in_dir ):
107+ WM .close_buffer (window , buffer )
108+ else :
109+ sublime .message_error ('Less Tabs : file "' + file_path + '" not found.' )
110+ else :
111+ sublime .message_error ('Less Tabs : current file doesn\' t exist on physical drive.' )
112+
27113
28114class lessTabsEvents (sublime_plugin .EventListener ):
29115 def on_new (self , view ):
30116 if ( sublime .load_settings ("lessTabs.sublime-settings" ).get ("close_on_open_new" ) ):
31- sublime .active_window ().run_command ("less_tabs" )
117+ sublime .active_window ().run_command ("less_tabs" )
0 commit comments