-
-
Notifications
You must be signed in to change notification settings - Fork 1.6k
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
PR: Allow plugins to hook into File > Open
#22564
base: master
Are you sure you want to change the base?
Conversation
Hello @jitseniesen! Thanks for updating this PR. We checked the lines you've touched for PEP 8 issues, and found:
Comment last updated at 2024-12-31 18:06:38 UTC |
@spyder-ide/core-developers I took the same approach as the previous PR by Carlos and I moved the code for |
Thanks for working on this @jitseniesen! I opened PR #22576 as a prerequisite of your work because we need to remove some dead code that referenced the open, new, save actions in the Editor. So, please rebase after that PR is merged. |
8a774ef
to
38bcb74
Compare
Thanks, done! |
As discussed in the last Core Team meeting:
|
Hi @jitseniesen. I see you're actively working on this feature at https://github.com/jitseniesen/spyder/tree/plugin-open-tmp if I'm not mistaken. Exciting! Is there a EDIT: I think I've found it: https://github.com/jitseniesen/spyder-notebook/tree/plugin-open. Never mind. |
ade9431
to
e561527
Compare
It is not clear why one was subtracted from the index, but it seems wrong: `list.insert(index, item)` inserts `item` before the item that is currently in position `index`, which is what we want here. Also add a regression test for the bug fix.
This is consistent with how actions are defined in other plugins. It also prevents a circular import in the next commit.
It is easier to use get_action() to get a reference to the action when needed. This also simplifies the tests.
This is a refactoring to simplify the code, in preperation for the next commit in which we also need to trigger application actions in the editor.
We want to generalize this action (and other actions in the File menu) so that it can also be used to create new files in other panes, like the Notebook pane. This commit is preparation and it only moves the code; upcoming commit will allow other plugins to hook into the "New file" action. This also moves the shortcut. The Application plugin owns the shortcut, but does not expose it to the user. Plugins like the Editor plugin that want to expose the shortcut need to do that themselves. This is because making the "New file" and similar file shortcuts global would be confusing, especially since Ctrl-W for "Close file" is already used in other plugins. Also add a test for the action in the Application plugin.
This is preparation for an upcoming commit which will allow other plugins to hook into the action. Call the action in the Application plugin in the following situations: * Double clicking a file in the File Explorer plugin, * Double clicking a file in the Projects plugin, * Selecting a file from the current project in the switcher, so that the file may be opened in a different plugin than the Editor.
This is preparation for an upcoming commit which will allow other plugins to hook into the action.
This allows other plugins to add files to the list of recent files, which can be opened with the "File > Open recent" submenu.
This is preparation for an upcoming commit which will allow other plugins to hook into the action.
This is preparation for an upcoming commit which will allow other plugins to hook into the action.
This is preparation for an upcoming commit which will allow other plugins to hook into the action.
This is preparation for an upcoming commit which will allow other plugins to hook into the action.
This is preparation for an upcoming commit which will allow other plugins to hook into the action.
This is preparation for an upcoming commit which will allow other plugins to hook into the action.
In the main window, keep track of the plugin that has keyboard focus and emit sig_focused_plugin_changed to all plugin when this changes. Use this signal in the Application plugin to also keep track of this information. Add a test for this. This will be used in the following commit to dispatch file operations to the appropriate plugin.
Define an attribute `CAN_HANDLE_FILE_ACTIONS` in plugins, set to False by default. If it is set to True, then functions in the plugin are called when the user activates file actions. Specifically, the following actions are mapped to these functions: * "New file" action calls create_new_file() * "Open last closed" action calls open_last_closed_file() * "Save file" action calls save_file() * "Save all" action calls save_all() * "Save as" action calls save_file_as() * "Save copy as" action calls save_copy_as() * "Revert file" action calls revert_file() * "Close file" action calls close_file() * "Close all" action calls close_all() Also add tests for all these.
The Application plugin is in charge of whether file actions are enabled. Other plugins use enable_file_action() to indicate whether the action is enabled for them. The Application plugin stores this information and uses it to enable or disable file actions when focus switches to another plugin. Add a test for this.
Any plugin can declare file extensions that it can open in the FILE_EXTENSIONS attribute. If the user opens a file with one of these extensions, then the open_file method in the plugin is called. If no plugin is found then the file is opened in the Editor plugin. Extend the open_file test to cover this.
When displaying the Open File dialog, the name of the currently displayed file is used to initialize the dialog. This commit asks the currently focussed plugin first to provide the current filename, and if that fails, the current filename of the Editor is used. Also add a test.
If the user opens a binary data file with the Open File action, for example a .spydata file, then import the data in the Variable Explorer.
This removes the function open_file from mainwindow.py, which was only used in one place.
ee0ea9a
to
2081126
Compare
This test fails like similar tests in the same file because there is no proper X server.
This is work in progress, but I want some early feedback on design and stuff.
Description of Changes
This PR revives PR #8798. It provides a mechanism for plugins to register file extensions, so that if a user picks a file with that extension in the dialog window for
File > Open
, the file is opened in that plugin instead of the editor.Here is what it looks like, if the necessary changes are made in the Notebook plugin:
open-notebook.mp4
Issue(s) Resolved
Fixes #22354
Fixes #7794
Affirmation
By submitting this Pull Request or typing my (user)name below,
I affirm the Developer Certificate of Origin
with respect to all commits and content included in this PR,
and understand I am releasing the same under Spyder's MIT (Expat) license.
I certify the above statement is true and correct:
Jitse Niesen