Spyder: IPython Console: Improvements for preferences application

Created on 20 Jan 2020  路  13Comments  路  Source: spyder-ide/spyder

  • [x] Add validations for custom consoles dependencies (SymPy, Matplotlib, Cython)
  • [x] Improve preferences handling for the IPython Console (for example, if the preference requires a restart of the console, show a message).

As discussed with @ccordoba12

IPython Console Bug

Most helpful comment

That's great feedback, thanks! I mocked up each of the options for a dialog with changing button text so that we can see how this plays out in full. I also changed button text accordingly, though there's still a few questions here.

  1. It's the kernel(s) that are restarting, but since there can be multiple kernels in a single console does it make sense to say the console is being restarted to avoid promising a restart for the wrong number of kernels (singular vs. plural language)? Basically, I leave it to you to say whether it is more accurate to say restart kernel or restart console.

I've mocked the options up with restart kernel language here.

15

16

17

  1. Should the default/no checkboxes selected option still mention kernel restarts? On one hand, I agree with @dalthviz that this dialog is about the restart, not just applying preferences (that already exists in preferences). On the other hand, I think apply to new consoles is more informative (this is what I showed in my last comment). Either could work, but there's probably an answer that is more accurate for you. I've mocked up both for you to choose.

10

18

Responding to @dalthviz 's comment that this could be misleading when applying multiple preferences with some that do require restart and others that don't, is this because ones that don't require restart have already been applied? Or is it a problem of users potentially thinking all the options require restart when they don't, maybe making them more hesitant of that preference in the future?

Unless you have more questions for me, I think this is ready to implement once you decide which language is more technically accurate.

All 13 comments

Note: Check which preferences require a restart and which can be applied without it. For now:

Needs a restart (although sometimes could be optional):

  • Display initial banner (optional)
  • Startup options (optional)
  • Symbolic math

Doesn't need a restart:

  • Use a pager
  • Show calltips
  • Ask confirmation before closing
  • Ask for confirmation before removing variables
  • Show elapsed time
  • Ask for confirmation before restarting
  • Completion type
  • Source code buffer
  • Advanced settings options
  • Matplolib options (backend and inline backend)

Graphics and Inline backend options

I think this one doesn't need a restart, as long as you're not switching between the Tk and Qt backends, for instance.

Thinking about how the preferences should impact currently running consoles: should the preferences that doesn't need a restart be applied to every console or only the current selected console? what do you guys think @bcolsen @ccordoba12 @goanpeca @impact27 ?

Are these things

1.) Changed on the Preferences dialog? or
2.) on the IPython Optiones Menu (hamburguer) button?

If 1 then we probably will need to ask the user if apply to current or apply to all.
If 2 then current only makes sense.

Yep in the preferences dialog, thanks @goanpeca for the feedback :+1:

@isabela-pf will help us to decide a good option to implement this! (Please post your ideas here)

First, here's how the dialog looks now for quick comparison:
Screen Shot 2020-10-27 at 4 17 19 PM

Based on our meeting yesterday, I mocked up the idea of breaking up the three buttons into a confirmation of the default "apply to new" and including checkboxes for the destructive options. I this still might have some issues to work out, but this is the idea.

5

I also rewrote the text as follows (for easy copy and paste):

By default, some IPython console preferences will be applied to new consoles only. To apply preferences to existing consoles, select from the options below.

Please note: applying changes to running consoles will force a  kernel restart and all current work will be lost.

Apply to current console and restart kernel
Apply to all existing consoles and restart all kernels

The only other thing that I thought might be useful is if the button lists what the result will be based on what is or isn't checked in the dialog. So nothing checked says what the default does "Apply to New Consoles" while checking the first box says "Apply to Current Console." I don't know if this is possible, but it's an idea.

6

8

Thanks a lot @isabela-pf for your help! The message is still long but reads much better now. Besides, I hope people will read it with care once, then they won't give it too much thought.

Do you plan to work on it a bit more? There's no problem if not, just let us know so @dalthviz can proceed with the implementation.

The only other thing that I thought might be useful is if the button lists what the result will be based on what is or isn't checked in the dialog. So nothing checked says what the default does "Apply to New Consoles" while checking the first box says "Apply to Current Console." I don't know if this is possible, but it's an idea.

I love this idea! It's a very good suggestion! And it's technically feasible, so @dalthviz could make it a reality.

@dalthviz, what do you think about @isabela-pf's proposal?

The only concern I have is how the user will interpret the dialog in the case they change simultaneously options that require a restart and options that can be applied without it (that case is kind of being handled by adding the some but maybe the phrasing of the buttons could be misleading? ).

Maybe instead of Apply .. could be Restart ... when the checkboxes are selected, and in the case neither of them are selected something like Dissmis restart? (I'm seeing the dialog like if it was asking some of options need a restart to be applied, do you want to restart something? )

Otherwise, this looks good to me :+1:

Thanks @isabela-pf for figuring out a better approach than the previous dialog! Let us know if you have more suggestions :)

That's great feedback, thanks! I mocked up each of the options for a dialog with changing button text so that we can see how this plays out in full. I also changed button text accordingly, though there's still a few questions here.

  1. It's the kernel(s) that are restarting, but since there can be multiple kernels in a single console does it make sense to say the console is being restarted to avoid promising a restart for the wrong number of kernels (singular vs. plural language)? Basically, I leave it to you to say whether it is more accurate to say restart kernel or restart console.

I've mocked the options up with restart kernel language here.

15

16

17

  1. Should the default/no checkboxes selected option still mention kernel restarts? On one hand, I agree with @dalthviz that this dialog is about the restart, not just applying preferences (that already exists in preferences). On the other hand, I think apply to new consoles is more informative (this is what I showed in my last comment). Either could work, but there's probably an answer that is more accurate for you. I've mocked up both for you to choose.

10

18

Responding to @dalthviz 's comment that this could be misleading when applying multiple preferences with some that do require restart and others that don't, is this because ones that don't require restart have already been applied? Or is it a problem of users potentially thinking all the options require restart when they don't, maybe making them more hesitant of that preference in the future?

Unless you have more questions for me, I think this is ready to implement once you decide which language is more technically accurate.

Thanks @isabela-pf! I like the Keep existing kernels (maybe I would add state -> Keep existing kernels state but that seems like a rather long button).

About my concern, yep it is because independently of the selection done in the dialog, the options that do not require a restart will be applied to all the consoles. So, if someone clicks the button saying Apply to New Consoles maybe will cause the expectation that all the preferences changed will apply only to new consoles (all the running consoles will remain unchanged).

And just in case, I think the relation between consoles and kernels is like:

  • A console is connected to just one kernel at the same time.
  • A kernel can be connected to multiple consoles at the same time.

What do you think @ccordoba12 ?

I like the Keep existing kernels

I also like Keep existing kernels instead of Apply to new consoles because that would make that the text shown in the button of that dialog to always mention something about kernels.

(maybe I would add state -> Keep existing kernels state but that seems like a rather long button).

On the hand, I also think that's too long. And on the other, a kernel restart implies a new kernel process (i.e. it's not that it's state is reset; it's that the kernel is killed and a new one is started instead). So Keep existing kernels is more appropriate in the technical sense too.

And just in case, I think the relation between consoles and kernels is like:

  • A console is connected to just one kernel at the same time.
  • A kernel can be connected to multiple consoles at the same time.

@dalthviz is totally right about this.

Was this page helpful?
0 / 5 - 0 ratings