-
Notifications
You must be signed in to change notification settings - Fork 93
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
some changes to make it work like Emacs vertical file completion. #185
base: master
Are you sure you want to change the base?
Conversation
yangwen0228
commented
May 2, 2022
Hey @yangwen0228 , just as a note I do see these coming in but have been busy. I appreciate you enhancing this. I see you're iterating on this. Can you add a comment when you're ready for this to be merged (and casually reviewed). I'm not up to date on the latest sublime text APIs so if you're using any of those, I'll rely on trusting what you're doing :D |
OK! I find your package is the best one in the Package Control to handle the file operation. And I enhance this package to almost the same experience in Emacs. Emacs is very handy and extensible, but the speed is not quite good when use in company computers with disk encrypt software. I use this package after enhanced for hours. It is becoming handy now. But it still needs some improvements to increase the large project files sorting performance, and increase the stability when popup frequently. Maybe I should expend some time to research the partial APIs. I use the Sublime Text4, but not test in the old versions. Just wait the weekend to improve this. |
…and / in anywhere.
I think everything works as expected, now! Do you want to have a try? Or just merge in? |
Hey @yangwen0228 catching up on this. In some chats with the SublimeText organization, we're going to move this project into their space. I'll likely let them help manage the approvals as well (because they are far more up to date than I am with practices around plugins today). I do notice the removal of some of the settings. What's the impact to those that that either used the default false value, or had it as true? |
Great! No problem! |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I took a not so brief look as I initially intended at this and have added a few comments with some questions as well as suggestions.
Generally, I think adding a completion list is a good idea, but this is going into the wrong direction because it introduces a UX foreign to ST in general. Using the native completions feature would feel much more natural and should work better even, though it may require some more detailed knowledge on how the corresponding API needs to be handled. I wish I had the time to work on it, however, because it sounds nice.
The PR also breaks compatibility with both ST2 and ST3 at the moment and is missing a .python-vesion
file to declare the plugin host since it uses 3.6+ syntax. I would be very much fine with dropping compatibility for new code & features, but moving unsupported versions to mainenance mode needs to be mentioned in the readme. (This is a heads-up for @skuroda.)
if "/" in path: | ||
return path | ||
else: | ||
return "" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I don't understand this logic here, but the return value doesn't seem to be used anyway?
print(self.settings) | ||
completion_delay = self.settings.get(COMPLETION_DELAY_SETTING, 100) | ||
print(completion_delay) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Debug prints
else: | ||
choices_ratio = {} | ||
for choice in choices: | ||
choices_ratio[choice] = levenshtein_ratio(query, choice) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Better use a dict comprehension now.
@@ -17,9 +17,6 @@ | |||
// A default initial value to fill the create new file input path with. | |||
"default_initial": "", | |||
|
|||
// When renaming a file it will we pre populated with the file existing filename. | |||
"autofill_path_the_existing": false, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
At first I questioned why the setting was removed, but in hindsight it never made it into a release (a5f062b), the name is questionable, I'm not sure if the code even works, and the behavior is somewhat as well, though I can see the appeal. Regardless, the opposite should have been the default.
A mention of that in the commit message (and having it in a separate comment) would have been nice, though.
{"keys": ["ctrl+p"],"command": "advanced_new_file_prev", | ||
"context": [{"key": "setting.anf_panel"}] | ||
}, | ||
{"keys": ["ctrl+l"],"command": "advanced_new_file_updir", |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Why L? Is that how emacs does it? Please add some comments above the binding to explain their inspiration because I (for example) wouldn't know otherwise. Probably to the readme as well.
{"keys": ["enter"],"command": "advanced_new_file_confirm", | ||
"context": [{"key": "setting.anf_panel"}] | ||
}, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Will this prevent submitting the inserted new file name when the completion list is not visible? It would also not match the native completions UX if "auto_complete_commit_on_tab": true
.
def clear_input_view(self): | ||
self.get_active_view_settings().erase("anf_input_view") | ||
|
||
def set_input_view_content(self, content): | ||
self.get_active_view_settings().set("anf_input_view_content", content) | ||
|
||
def get_input_view_content(self): | ||
return self.get_active_view_settings().get("anf_input_view_content") | ||
|
||
def clear_input_view_content(self): | ||
self.get_active_view_settings().erase("anf_input_view_content") | ||
|
||
def clear_input_view_project_files(self): | ||
self.get_active_view_settings().erase("anf_input_view_project_files") |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Imo these functions provide barely any value over their bodies. Besides, I'm unsure what the purpose of get_active_view_settings
is when in reality it falls back back to the window's settings?
If you want to store data per window, you should probably do that explicitly (and all the time instead of only sometimes). However, I'm unsure if a window's settings are persisted on disk on exit, so this may actually result in leaking outdated data. An alternative would be a separate mapping that associates window-specific data with the window's id and is sufficiently cleared when the panel is closed. Usually I'd suggest storing that in the window command's instance variables, but since this plugin uses multiple commands that's not really an option.
try: | ||
input_view.hide_popup() | ||
except Exception as e: | ||
print("hide_popup", e) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Debug print?
from ..anf_util import * | ||
|
||
|
||
class AdvancedNewFileProjectFileCommand(AdvancedNewFileNew, sublime_plugin.WindowCommand): |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
What is the purpose of this command?
Also good with putting ST2 and 3 versions of the plug in into maintenance mode. I vaguely recall the package control entry having something to pin the versions there (for ST2 at the time). Am I correct in assuming that's the same action that needs to happen still? |
Yes, it still works the same way. The suggested course of action is to create a prefixed tag for the legacy version (e.g. |
Tag pushed and wbond/package_control_channel#8571 to pin the version. |
I've merged in a couple readme updates in #186 that I'm guessing will conflict with some of the changes in this PR. |