From 0a6f9017dd12d54a7f1b6aa90fad1cfc8ff8e2d4 Mon Sep 17 00:00:00 2001 From: wanyaxing <340014824@qq.com> Date: Sat, 1 Sep 2018 14:13:12 +0800 Subject: [PATCH 01/10] support alias @ in vue --- autofilename.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/autofilename.py b/autofilename.py index 952687f..76ddac3 100644 --- a/autofilename.py +++ b/autofilename.py @@ -236,7 +236,15 @@ def on_query_completions(self, view, prefix, locations): else: for f in sublime.active_window().folders(): if f in view.file_name(): - cur_path = f + cur_path = f + cur_path + elif cur_path.startswith('~@/') or cur_path.startswith('@/'): + if is_proj_rel: + for f in sublime.active_window().folders(): + if f in view.file_name(): + if cur_path.startswith('~@/'): + cur_path = f + '/src/' + cur_path[3:] + elif cur_path.startswith('@/'): + cur_path = f + '/src/' + cur_path[2:] elif not view.file_name(): return else: From 8b231d134f8f1f8d3c1bb7fbbf0499a2fe4235f3 Mon Sep 17 00:00:00 2001 From: wanyaxing <340014824@qq.com> Date: Sat, 1 Sep 2018 14:21:53 +0800 Subject: [PATCH 02/10] deep search file in sub dir --- autofilename.py | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/autofilename.py b/autofilename.py index 76ddac3..e34b3f2 100644 --- a/autofilename.py +++ b/autofilename.py @@ -256,12 +256,25 @@ def on_query_completions(self, view, prefix, locations): self.showing_win_drives = True return self.get_drives() self.showing_win_drives = False + + cur_cmd = view.substr(view.extract_scope(sel-1)).strip("\"'") + cur_word = cur_cmd[cur_cmd.rfind(FileNameComplete.sep)+1:] if FileNameComplete.sep in cur_cmd else '' + if cur_word.endswith(' ') or cur_word.startswith(' '): + return + dir_files = os.listdir(this_dir) for d in dir_files: if d.startswith('.'): continue if not '.' in d: d += FileNameComplete.sep - completions.append((self.fix_dir(this_dir,d), d)) + if cur_word=='' or d.find(cur_word)>=0: + completions.append((self.fix_dir(this_dir,d), d)) + if not completions: + if cur_word != '': + for root, dirs, files in os.walk(this_dir, topdown=False): + for d in files: + if d.find(cur_word) >= 0: + completions.append((self.fix_dir(root,d),root.replace(this_dir,'') +'/'+ d)) if completions: InsertDimensionsCommand.this_dir = this_dir return completions From 651b01e2f61e8cfcf6f132c6bf768843f7413528 Mon Sep 17 00:00:00 2001 From: wanyaxing <340014824@qq.com> Date: Sat, 1 Sep 2018 14:25:11 +0800 Subject: [PATCH 03/10] fixed quick setting --- autofilename.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/autofilename.py b/autofilename.py index e34b3f2..7c8bffc 100644 --- a/autofilename.py +++ b/autofilename.py @@ -28,8 +28,8 @@ def on_done(self, value): use_pr = settings.get('afn_use_project_root') settings.set('afn_use_project_root', not use_pr) if value == 1: - use_dim = settings.get('afn_use_project_root') - settings.set('afn_use_project_root', not use_dim) + use_dim = settings.get('afn_insert_dimensions') + settings.set('afn_insert_dimensions', not use_dim) def get_setting(self,string,view=None): if view and view.settings().get(string): From 0739af39162d79e0ff3d67a49a55eb70071660f0 Mon Sep 17 00:00:00 2001 From: wanyaxing <340014824@qq.com> Date: Sat, 1 Sep 2018 14:50:46 +0800 Subject: [PATCH 04/10] ! new mode: Popup Preview Mode // It is new mode by wanyaxing // In this mode, all suggesting menus will show in a popup, // It do not support keyboard such as key up or key down, You should click the menu with mouse. // If You want the original AutoFileName, you should disable this future. --- autofilename.py | 78 ++++++++++++++++++++++++++++++++--- autofilename.sublime-settings | 10 ++++- 2 files changed, 81 insertions(+), 7 deletions(-) diff --git a/autofilename.py b/autofilename.py index 7c8bffc..2ab7271 100644 --- a/autofilename.py +++ b/autofilename.py @@ -2,6 +2,11 @@ import sublime_plugin import os from .getimageinfo import getImageInfo +import base64 + +TEMPLATE = ''' +
%s %s
+ ''' class AfnShowFilenames(sublime_plugin.TextCommand): def run(self, edit): @@ -14,11 +19,13 @@ class AfnSettingsPanel(sublime_plugin.WindowCommand): def run(self): use_pr = '✗ Stop using project root' if self.get_setting('afn_use_project_root') else '✓ Use Project Root' use_dim = '✗ Disable HTML Image Dimension insertion' if self.get_setting('afn_insert_dimensions') else '✓ Auto-insert Image Dimensions in HTML' + use_popup = '✗ Stop Popup Preview Mode' if self.get_setting('afn_popup_preview_mode') else '✓ Use Popup Preview Mode' p_root = self.get_setting('afn_proj_root') menu = [ [use_pr, p_root], - [use_dim, ''] + [use_dim, ''], + [use_popup, 'All menus show in a popup, you should chose item with mouse.'] ] self.window.show_quick_panel(menu, self.on_done) @@ -30,6 +37,9 @@ def on_done(self, value): if value == 1: use_dim = settings.get('afn_insert_dimensions') settings.set('afn_insert_dimensions', not use_dim) + if value == 2: + use_popup = settings.get('afn_popup_preview_mode') + settings.set('afn_popup_preview_mode', not use_popup) def get_setting(self,string,view=None): if view and view.settings().get(string): @@ -44,6 +54,16 @@ def run(self, edit): reg = sublime.Region(sel-4,sel-3) self.view.erase(edit, reg) +# Used to remove the / or \ when autocompleting a Windows drive (eg. /C:/path) +class ReplaceCurWord(sublime_plugin.TextCommand): + def run(self, edit, **args): + href = args.get('href') + selStart = args.get('selStart') + sel = self.view.sel()[0].a + reg = sublime.Region(selStart,sel) + self.view.erase(edit, reg) + self.view.insert(edit, selStart,href) + # inserts width and height dimensions into img tags. HTML only class InsertDimensionsCommand(sublime_plugin.TextCommand): this_dir = '' @@ -192,6 +212,23 @@ def fix_dir(self,sdir,fn): return fn+'\t'+'w:'+ str(w) +" h:" + str(h) return fn + def short_dir(self,sdir,fn): + if fn.endswith(('.png','.jpg','.jpeg','.gif')): + path = os.path.join(sdir, fn) + size = ("%.0fkb" % (os.path.getsize(path) / 1000)) + with open(path,'rb') as r: + read_data = r.read()# if path.endswith(('.jpg','.jpeg')) else r.read(24) + w, h = getImageInfo(read_data) + if w > h: + styleW = 28 + styleH = styleW * h / w + else: + styleH = 28 + styleW = styleH * w / h + encoded = str(base64.b64encode(read_data), "utf-8") + return 'width: %dpx;height: %dpx;' % (styleW,styleH,w, h, encoded) + return ' ' + def get_cur_path(self,view,sel): scope_contents = view.substr(view.extract_scope(sel-1)).strip() cur_path = scope_contents.replace('\r\n', '\n').split('\n')[0] @@ -211,6 +248,7 @@ def on_query_completions(self, view, prefix, locations): valid_scopes = self.get_setting('afn_valid_scopes',view) blacklist = self.get_setting('afn_blacklist_scopes', view) uses_keybinding = self.get_setting('afn_use_keybinding', view) + is_popup_preview = self.get_setting('afn_popup_preview_mode',view) sel = view.sel()[0].a this_dir = "" @@ -266,15 +304,45 @@ def on_query_completions(self, view, prefix, locations): for d in dir_files: if d.startswith('.'): continue - if not '.' in d: d += FileNameComplete.sep - if cur_word=='' or d.find(cur_word)>=0: - completions.append((self.fix_dir(this_dir,d), d)) + if not '.' in d: + d += FileNameComplete.sep + if cur_word=='' or d.find(cur_word)>=0: + if is_popup_preview: + completions.append(TEMPLATE % (d,self.short_dir(this_dir,d),d)) + else: + completions.append((self.fix_dir(this_dir,d), d)) + for d in dir_files: + if d.startswith('.'): continue + if '.' in d: + if cur_word=='' or d.find(cur_word)>=0: + if is_popup_preview: + completions.append(TEMPLATE % (d,self.short_dir(this_dir,d),d)) + else: + completions.append((self.fix_dir(this_dir,d), d)) if not completions: if cur_word != '': for root, dirs, files in os.walk(this_dir, topdown=False): for d in files: if d.find(cur_word) >= 0: - completions.append((self.fix_dir(root,d),root.replace(this_dir,'') +'/'+ d)) + if is_popup_preview: + completions.append(TEMPLATE % (root.replace(this_dir,'') +'/'+ d,self.short_dir(root,d),root.replace(this_dir,'') +'/'+ d) ) + else: + completions.append((self.fix_dir(root,d),root.replace(this_dir,'') +'/'+ d) ) + if is_popup_preview: + if completions: + selStart = sel - len(cur_word) + def on_navigate(href): + view.run_command('replace_cur_word',{'href':href,'selStart':selStart}) + view.show_popup(''.join(completions),sublime.COOPERATE_WITH_AUTO_COMPLETE,-1,500,500,on_navigate=on_navigate); + # show single item for disable more completions + empty = [] + empty.append(('.','.')) + return empty + else: + view.hide_popup() + completions.append(('')) + return completions + if completions: InsertDimensionsCommand.this_dir = this_dir return completions diff --git a/autofilename.sublime-settings b/autofilename.sublime-settings index c5ef9de..e9d0da0 100644 --- a/autofilename.sublime-settings +++ b/autofilename.sublime-settings @@ -47,5 +47,11 @@ // ] // } // - "afn_use_keybinding": false -} \ No newline at end of file + "afn_use_keybinding": false, + + // It is new mode by wanyaxing + // In this mode, all suggesting menus will show in a popup, + // It do not support keyboard such as key up or key down, You should click the menu with mouse. + // If You want the original AutoFileName, you should disable this future. + "afn_popup_preview_mode": true, +} From 98d9a6e8b72601c19355e262fa9d094ca5f223cd Mon Sep 17 00:00:00 2001 From: wanyaxing <340014824@qq.com> Date: Sat, 1 Sep 2018 14:53:45 +0800 Subject: [PATCH 05/10] show size of image in menu --- autofilename.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/autofilename.py b/autofilename.py index 2ab7271..4326931 100644 --- a/autofilename.py +++ b/autofilename.py @@ -124,7 +124,7 @@ def run(self, edit): path = path[path.rfind(FileNameComplete.sep):] if FileNameComplete.sep in path else path full_path = self.this_dir + path - if self.img_tag_in_region(tag_scope) and path.endswith(('.png','.jpg','.jpeg','.gif')): + if self.get_setting('afn_insert_dimensions',self.view) and self.img_tag_in_region(tag_scope) and path.endswith(('.png','.jpg','.jpeg','.gif')): with open(full_path,'rb') as r: read_data = r.read() if path.endswith(('.jpg','.jpeg')) else r.read(24) w, h = getImageInfo(read_data) @@ -206,10 +206,11 @@ def on_selection_modified_async(self,view): def fix_dir(self,sdir,fn): if fn.endswith(('.png','.jpg','.jpeg','.gif')): path = os.path.join(sdir, fn) + size = ("%.0fkb" % (os.path.getsize(path) / 1000)) with open(path,'rb') as r: read_data = r.read() if path.endswith(('.jpg','.jpeg')) else r.read(24) w, h = getImageInfo(read_data) - return fn+'\t'+'w:'+ str(w) +" h:" + str(h) + return fn +'\t' + size +'\t'+'w:'+ str(w) +" h:" + str(h) return fn def short_dir(self,sdir,fn): @@ -263,6 +264,8 @@ def on_query_completions(self, view, prefix, locations): cur_path = os.path.expanduser(self.get_cur_path(view, sel)) + if len(cur_path)==0: + return if cur_path.startswith('/') or cur_path.startswith('\\'): if is_proj_rel: From 5916c847fd81b73737299f3df040d1ced8b7976c Mon Sep 17 00:00:00 2001 From: wanyaxing <340014824@qq.com> Date: Sat, 1 Sep 2018 15:29:37 +0800 Subject: [PATCH 06/10] readme upgrade --- README.md | 38 ++++++++++++++++++++++++++++++++++- autofilename.sublime-settings | 2 +- 2 files changed, 38 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 9e026e4..47c9e4a 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,42 @@ AutoFileName ============ +New Feature: Popup Preview Mode +-------------------------------------- +Preview the image in a popup, it's so coooooooooool. + +![example_of_popup_preview_mode.png](./example_of_popup_preview_mode.png) + +One More Thing +-------------- +* support the alias `@` in Vue.js +* deep search the files in sub dirs. +* ... + + +Install +------- +* download the zip:https://github.com/wanyaxing/AutoFileName/archive/st3.zip +* unzip and save the files in `Sublime Text 3/Packages/` + + + + + + + + +------------------------------------------------------------------------------- + +------------------------------------------------------------------------------- + +------------------------------------------------------------------------------- + +------------------------------------------------------------------------------- + +> below is the description from [BoundInCode/AutoFileName](https://github.com/BoundInCode/AutoFileName/tree/st3) + + Autocomplete Filenames in Sublime Text -------------------------------------- Do you ever find yourself sifting through folders in the sidebar trying to remember what you named that file? Can't remember if it was a jpg or a png? Maybe you just wish you could type filenames faster. *No more.* @@ -36,4 +72,4 @@ Additionally, if you hate awesomeness, you can turn off some of the automagicaln How Can I help? --------------- -- **Got a feature request? Something bugging you and you're about to uninstall it?** Submit a bug report with all your fears, desires, and vulgarity. I'll heartily try to fix the plugin to your specifications... well, I'll consider it. \ No newline at end of file +- **Got a feature request? Something bugging you and you're about to uninstall it?** Submit a bug report with all your fears, desires, and vulgarity. I'll heartily try to fix the plugin to your specifications... well, I'll consider it. diff --git a/autofilename.sublime-settings b/autofilename.sublime-settings index e9d0da0..4f2c084 100644 --- a/autofilename.sublime-settings +++ b/autofilename.sublime-settings @@ -52,6 +52,6 @@ // It is new mode by wanyaxing // In this mode, all suggesting menus will show in a popup, // It do not support keyboard such as key up or key down, You should click the menu with mouse. - // If You want the original AutoFileName, you should disable this future. + // If You want the original AutoFileName, you should disable this feature. "afn_popup_preview_mode": true, } From e27ae63cb49269601ad847b3672b6a6823e8af91 Mon Sep 17 00:00:00 2001 From: wanyaxing <340014824@qq.com> Date: Sat, 1 Sep 2018 15:37:20 +0800 Subject: [PATCH 07/10] add example_of_popup_preview_mode.png --- .gitignore | 3 +-- example_of_popup_preview_mode.png | Bin 0 -> 83226 bytes 2 files changed, 1 insertion(+), 2 deletions(-) create mode 100644 example_of_popup_preview_mode.png diff --git a/.gitignore b/.gitignore index a0d5d0d..69c71c8 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,4 @@ *.pyc *.html *.css -*.png -.DS_STORE \ No newline at end of file +.DS_STORE diff --git a/example_of_popup_preview_mode.png b/example_of_popup_preview_mode.png new file mode 100644 index 0000000000000000000000000000000000000000..64d2878c8274cee4997427846e40751522c7b2a5 GIT binary patch literal 83226 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 Date: Wed, 5 Sep 2018 10:25:18 +0800 Subject: [PATCH 08/10] Popup Preview Mode shows around the completion. --- autofilename.py | 34 ++++++++++++++-------------------- 1 file changed, 14 insertions(+), 20 deletions(-) diff --git a/autofilename.py b/autofilename.py index 4326931..4b6d6f5 100644 --- a/autofilename.py +++ b/autofilename.py @@ -213,7 +213,7 @@ def fix_dir(self,sdir,fn): return fn +'\t' + size +'\t'+'w:'+ str(w) +" h:" + str(h) return fn - def short_dir(self,sdir,fn): + def popup_item(self,sdir,fn): if fn.endswith(('.png','.jpg','.jpeg','.gif')): path = os.path.join(sdir, fn) size = ("%.0fkb" % (os.path.getsize(path) / 1000)) @@ -228,7 +228,7 @@ def short_dir(self,sdir,fn): styleW = styleH * w / h encoded = str(base64.b64encode(read_data), "utf-8") return 'width: %dpx;height: %dpx;' % (styleW,styleH,w, h, encoded) - return ' ' + return None def get_cur_path(self,view,sel): scope_contents = view.substr(view.extract_scope(sel-1)).strip() @@ -254,6 +254,7 @@ def on_query_completions(self, view, prefix, locations): sel = view.sel()[0].a this_dir = "" completions = [] + popupItems = [] if uses_keybinding and not FileNameComplete.is_active: return @@ -310,41 +311,34 @@ def on_query_completions(self, view, prefix, locations): if not '.' in d: d += FileNameComplete.sep if cur_word=='' or d.find(cur_word)>=0: - if is_popup_preview: - completions.append(TEMPLATE % (d,self.short_dir(this_dir,d),d)) - else: - completions.append((self.fix_dir(this_dir,d), d)) + completions.append((self.fix_dir(this_dir,d), d)) for d in dir_files: if d.startswith('.'): continue if '.' in d: if cur_word=='' or d.find(cur_word)>=0: if is_popup_preview: - completions.append(TEMPLATE % (d,self.short_dir(this_dir,d),d)) - else: - completions.append((self.fix_dir(this_dir,d), d)) + popup_item = self.popup_item(this_dir,d) + if popup_item: + popupItems.append(TEMPLATE % (d,self.popup_item(this_dir,d),d)) + completions.append((self.fix_dir(this_dir,d), d)) if not completions: if cur_word != '': for root, dirs, files in os.walk(this_dir, topdown=False): for d in files: if d.find(cur_word) >= 0: if is_popup_preview: - completions.append(TEMPLATE % (root.replace(this_dir,'') +'/'+ d,self.short_dir(root,d),root.replace(this_dir,'') +'/'+ d) ) - else: - completions.append((self.fix_dir(root,d),root.replace(this_dir,'') +'/'+ d) ) + popup_item = self.popup_item(root,d) + if popup_item: + popupItems.append(TEMPLATE % (root.replace(this_dir,'') +'/'+ d,self.popup_item(root,d),root.replace(this_dir,'') +'/'+ d) ) + completions.append((self.fix_dir(root,d),root.replace(this_dir,'') +'/'+ d) ) if is_popup_preview: - if completions: + if popupItems: selStart = sel - len(cur_word) def on_navigate(href): view.run_command('replace_cur_word',{'href':href,'selStart':selStart}) - view.show_popup(''.join(completions),sublime.COOPERATE_WITH_AUTO_COMPLETE,-1,500,500,on_navigate=on_navigate); - # show single item for disable more completions - empty = [] - empty.append(('.','.')) - return empty + view.show_popup(''.join(popupItems),sublime.COOPERATE_WITH_AUTO_COMPLETE,-1,500,500,on_navigate=on_navigate); else: view.hide_popup() - completions.append(('')) - return completions if completions: InsertDimensionsCommand.this_dir = this_dir From 2c706010b82d0b05762932703b8a10e7ae6f9020 Mon Sep 17 00:00:00 2001 From: wanyaxing <340014824@qq.com> Date: Wed, 5 Sep 2018 10:37:03 +0800 Subject: [PATCH 09/10] show full path of item in search results. --- autofilename.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/autofilename.py b/autofilename.py index 4b6d6f5..5bc62a2 100644 --- a/autofilename.py +++ b/autofilename.py @@ -330,7 +330,7 @@ def on_query_completions(self, view, prefix, locations): popup_item = self.popup_item(root,d) if popup_item: popupItems.append(TEMPLATE % (root.replace(this_dir,'') +'/'+ d,self.popup_item(root,d),root.replace(this_dir,'') +'/'+ d) ) - completions.append((self.fix_dir(root,d),root.replace(this_dir,'') +'/'+ d) ) + completions.append((root.replace(this_dir,'')+'/'+self.fix_dir(root,d),root.replace(this_dir,'') +'/'+ d) ) if is_popup_preview: if popupItems: selStart = sel - len(cur_word) From 859886ef249d6f45b5d12f2b4f3262cf0a8e962a Mon Sep 17 00:00:00 2001 From: wanyaxing Date: Wed, 20 Oct 2021 16:17:43 +0800 Subject: [PATCH 10/10] st4 and markdown support --- autofilename.py | 51 ++++++++++++++++++++++++++--------- autofilename.sublime-settings | 6 ++--- 2 files changed, 42 insertions(+), 15 deletions(-) diff --git a/autofilename.py b/autofilename.py index 5bc62a2..e65c098 100644 --- a/autofilename.py +++ b/autofilename.py @@ -116,6 +116,7 @@ def run(self, edit): # if using a template language, the scope is set to the current line tag_scope = view.line(sel) if self.get_setting('afn_template_languages',view) else view.extract_scope(scope.a-1) + print(tag_scope) path = view.substr(scope) if path.startswith(("'","\"","(")): @@ -228,10 +229,16 @@ def popup_item(self,sdir,fn): styleW = styleH * w / h encoded = str(base64.b64encode(read_data), "utf-8") return 'width: %dpx;height: %dpx;' % (styleW,styleH,w, h, encoded) - return None + return '' def get_cur_path(self,view,sel): - scope_contents = view.substr(view.extract_scope(sel-1)).strip() + sel0 = sel + while sel0>0: + charact = view.substr(sublime.Region(sel0-1,sel0)) + if charact in ['\r','\n','\'','"',')','(','[',']',' ']: + break; + sel0=sel0-1 + scope_contents = view.substr(sublime.Region(sel0,sel)).strip() cur_path = scope_contents.replace('\r\n', '\n').split('\n')[0] if cur_path.startswith(("'","\"","(")): cur_path = cur_path[1:-1] @@ -244,9 +251,23 @@ def get_setting(self,string,view=None): else: return sublime.load_settings('autofilename.sublime-settings').get(string) + def on_query_context(self, view, key, operator, operand, match_all): + # print("autofilename.py on_query_context:") + self.extract_hits(view) + + def on_modified(self, view): + # print("autofilename.py on_modified:") + self.extract_hits(view) + def on_query_completions(self, view, prefix, locations): + # print('autofilename.py on_query_completions:') + completions=self.extract_hits(view) + return completions + + def extract_hits(self,view): is_proj_rel = self.get_setting('afn_use_project_root',view) valid_scopes = self.get_setting('afn_valid_scopes',view) + # print("autofilename.py debug2") blacklist = self.get_setting('afn_blacklist_scopes', view) uses_keybinding = self.get_setting('afn_use_keybinding', view) is_popup_preview = self.get_setting('afn_popup_preview_mode',view) @@ -268,8 +289,12 @@ def on_query_completions(self, view, prefix, locations): if len(cur_path)==0: return + # print(cur_path) + + is_harddisk_root = False if cur_path.startswith('/') or cur_path.startswith('\\'): if is_proj_rel: + is_harddisk_root = True proot = self.get_setting('afn_proj_root', view) if proot: if not view.file_name() and not os.path.isabs(proot): @@ -292,7 +317,7 @@ def on_query_completions(self, view, prefix, locations): else: this_dir = os.path.split(view.file_name())[0] this_dir = os.path.join(this_dir, cur_path) - + # print(this_dir) try: if sublime.platform() == "windows" and len(view.extract_scope(sel)) < 4 and os.path.isabs(cur_path): self.showing_win_drives = True @@ -301,35 +326,36 @@ def on_query_completions(self, view, prefix, locations): cur_cmd = view.substr(view.extract_scope(sel-1)).strip("\"'") cur_word = cur_cmd[cur_cmd.rfind(FileNameComplete.sep)+1:] if FileNameComplete.sep in cur_cmd else '' + # print(cur_word) if cur_word.endswith(' ') or cur_word.startswith(' '): return + # print([this_dir,cur_word]) dir_files = os.listdir(this_dir) for d in dir_files: if d.startswith('.'): continue if not '.' in d: d += FileNameComplete.sep - if cur_word=='' or d.find(cur_word)>=0: + if cur_word=='' or d.find(cur_word)>=0 or cur_word.endswith('/'): + if is_popup_preview: + popupItems.append(TEMPLATE % (d,self.popup_item(this_dir,d),d)) completions.append((self.fix_dir(this_dir,d), d)) + # print(completions) for d in dir_files: if d.startswith('.'): continue if '.' in d: - if cur_word=='' or d.find(cur_word)>=0: + if cur_word=='' or d.find(cur_word)>=0 or cur_word.endswith('/'): if is_popup_preview: - popup_item = self.popup_item(this_dir,d) - if popup_item: - popupItems.append(TEMPLATE % (d,self.popup_item(this_dir,d),d)) + popupItems.append(TEMPLATE % (d,self.popup_item(this_dir,d),d)) completions.append((self.fix_dir(this_dir,d), d)) if not completions: - if cur_word != '': + if cur_word != '' and not is_harddisk_root: for root, dirs, files in os.walk(this_dir, topdown=False): for d in files: if d.find(cur_word) >= 0: if is_popup_preview: - popup_item = self.popup_item(root,d) - if popup_item: - popupItems.append(TEMPLATE % (root.replace(this_dir,'') +'/'+ d,self.popup_item(root,d),root.replace(this_dir,'') +'/'+ d) ) + popupItems.append(TEMPLATE % (root.replace(this_dir,'') +'/'+ d,self.popup_item(root,d),root.replace(this_dir,'') +'/'+ d) ) completions.append((root.replace(this_dir,'')+'/'+self.fix_dir(root,d),root.replace(this_dir,'') +'/'+ d) ) if is_popup_preview: if popupItems: @@ -341,6 +367,7 @@ def on_navigate(href): view.hide_popup() if completions: + # print(completions) InsertDimensionsCommand.this_dir = this_dir return completions return diff --git a/autofilename.sublime-settings b/autofilename.sublime-settings index 4f2c084..6840db1 100644 --- a/autofilename.sublime-settings +++ b/autofilename.sublime-settings @@ -8,15 +8,15 @@ // Changing this setting allows for absolute paths on a project level. // This is useful for web designers and developers who want to use the // root of their site. - "afn_use_project_root": false, + "afn_use_project_root": true, // Override the project root. Will only work // if "auto_file_name_use_project_root" is true. // Can be absolute or relative to the current directory. - "afn_proj_root": "../", + "afn_proj_root": "/", // Specify which scopes will trigger AutoFileName - "afn_valid_scopes":["string","css","sass","less","scss"], + "afn_valid_scopes":["string","css","sass","less","scss","markdown"], // Turn on if using a template language like Slim and want to // insert image dimensions. If using a template language, you also have