-
-
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: Add multi-cursor editing to codeeditor #22996
base: master
Are you sure you want to change the base?
Conversation
Required manually tracking overwriteMode and leaving it disabled except for during keyEvent. This might be a fragile solution...
…to new line, and clears extra_cursors on goto_definition
…r. many TODO comments
…bool, and added #TODO notes
I think I got a workable solution for the duplicate line up/down finally. I checked over the compatibility of all the variants of "run cell" with multi cursor, and calling |
That's done here: spyder/spyder/plugins/editor/widgets/main_widget.py Lines 3123 to 3124 in ca2411b
|
Regarding the killring... This is a feature I've never used (in spyder or otherwise). I'm tempted to say it is not useful to handle multi-cursor here. It would be possible to kill/yank in existing cursor order (order of creation) or in position sorted order, but that quickly becomes quite a lot to mentally keep track of. It would be possible to simply ignore the Any thoughts? As I near the end of my checklist, I also want your input on selection foreground and background color. As far as I can tell it is fixed (not related to selected theme). I had to initially just pick a color, so I just copied the pixel color from a screenshot. It seems to me this may be a different color on different platforms (linux & mac), but I don't have any systems to test on. It wouldn't look nice if the main cursor and extra cursors had different text selection colors. Currently the native Qt paint event handles drawing the selection of the primary cursor, and I manually draw the selections of extra cursors using text decorations. I personally lean towards just hard-coding the colors, but they could also be included with the syntax highlighting theme colors. What do you think? |
I agree with you, we shouldn't worry about handling multiple cursors for the killring functionality. If users ask about it later, we could consider implementing it, but not for the initial multicursor support.
Please hard-code them for now. We can review them in a follow-up PR. |
somehow block.layout may be invalid while block.isVisible
@ccordoba12 I'm not sure what the 3 failing tests are about, but I'd say this monstrosity is finally ready for its first review. I've enjoyed this deep dive into spyder, and I hope it can be useful to someone :) |
Description of Changes
Multi-line editing has been a feature I've missed having in spyder for a long time. I frequently have a notepad++ scratchpad alongside spyder simply to copy blocks of text back and forth so that I can use the column cursor. I haven't been able to contribute money to the spyder project despite using it for about a decade now, but I can hopefully at least contribute some time.
I am an engineer, not a programmer so please criticize my work so we can make it better :)
I decided to implement the functionality directly inside the
codeeditor.CodeEditor
class as making it an editor extension would still require a great many edits to CodeEditor anyway. The basic implementation is to hide the original cursor when there are multiples, and manually draw the primary cursor and all extras on a timer. For many editor functions afor_each_cursor
wrapper does a lot of heavy lifting. Other functions need to be slightly tweaked directly. I think it is not particularly productive to try to implement code completion (snippets, call-tips, etc) during multi-cursor sessions, so I attempt to disable those functions appropriately.These are some deep changes to one of the most complicated parts of Spyder, so I will naturally need some help getting this code to a state where it's ready to be integrated. I know it is not yet fully ready, but I wanted to get the PR in so that more people could see it and maybe get interested in testing it.
Media1.mp4
TODO list:
Issue(s) Resolved
Fixes #2112
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: athompson673