Open nvaccessAuto opened 10 years ago
Comment 1 by briang1 on 2013-12-15 10:18 Surely this is best done in a bespoke add on so it triggers when the ap is loaded like most app modules do. The syntax is probably going to suffer ehen I paste this example sorry! import appModuleHandler class AppModule(appModuleHandler.AppModule): sleepMode= True
You can of course manually turn on sleep, but doing it this way its automatic. There are already some built in to nvda. Cicero comes to mind, and I've seen an add on for Guide.
Comment 3 by bdorer (in reply to comment 2) on 2013-12-15 12:27 You shouldn't write your comment into the changes entry field! It's for the what's new item in the changes file.
Replying to isaacporat: You of course correct and I am aware of this. Not everyone is a programmer to create their modules and there should not be a need to bother the developers with each new self voicing application. With the way I suggest it, when a profile for a self voicing application if a user turn sleep mode off it just sticks from that point that is every time the application is started NVDA goes to sleep mode off. All major commercial screen readers support this feature. With some like Jaws it is easy to configure with some others it is more complicated.
Anyway, this is not a major issue and as you say can be turned off manually but as I and some others use this feature a lot it would be very useful.
Comment 4 by briang1 on 2013-12-15 19:33 Maybe what is an entry such as. Engage sleep mode on this application, every time it is focussed. In fact this is exactly what the code I put did for me. I just called the file I was adding xxx.pi where xxx was the name the application executable showed when doing an nvdaF1.
One would need to save the setting, and i am sure it is not that easy to write an add on to do this, though its probably beyond me.
Actually sleep mode can already be turned on only for current application with NVDA+Shift+z in laptop layout or nvda+shift+s in desktop keyboard layout. See input gestures dialog. @ehollig can you confirm?
The keystrokes you reference @Adriani90 is correct. The request here is to have sleep mode be saved with a configuration profile. Steps to reproduce:
Just bumping this since it's still being requested.
Definitely agree that this needs to be implemented, and soon. The topic comes up often enough on the user list (people wanting to save the sleep state for an application, and by far the easiest way to do that would be configuration profiles).
While I agree that it is needed before anyone would code this the UX needs to be discussed. What about the following:
The current command for enabling sleep mode would remain available and would like it does now enable sleep mode until NVDA restart.
Instead of creating a new "sleep mode" profile, why not simply save the sleep mode state as part of the config profile? That way all you would need to do is start that program, create a configuration profile for it, then turn on sleep mode.
I wonder if it would be worth having some kind of earcon or verbal notification the first time NVDA goes into sleep mode any time it's run. That way if you start NVDA while you have such a program running, (or the first time you start or change to that program), you will hear NVDA start then advise you that it is in sleep mode. Just to avoid confusion about why NVDA stops speaking (in case you forget you created the profile).
Instead of creating a new "sleep mode" profile, why not simply save the sleep mode state as part of the config profile? That way all you would need to do is start that program, create a configuration profile for it, then turn on sleep mode.
Having tried this, I wonder how exactly one would save such a profile? Unless the save config command was exempted from sleep mode, which could be done, although that might defeat the purpose.
To imagine: you create a profile that triggers on an app, load that profile, enter sleep mode, and then what? NVDA is now sleeping, and ignoring your commands.
I can see this "sleep profile" solution as workable, but only if it works also when the user has multiple apps that require sleep.
I can't check an NVDA system right now, but will triggers let you apply more than one trigger to a single profile?
If so, that might be the best answer going at the moment.
I can see this "sleep profile" solution as workable, but only if it works also when the user has multiple apps that require sleep. I can't check an NVDA system right now, but will triggers let you apply more than one trigger to a single profile?
Yes, it is possible to create a profile, and trigger it in more than one program.
why not simply save the sleep mode state as part of the config profile? That way all you would need to do is start that program, create a configuration profile for it, then turn on sleep mode. Having tried this, I wonder how exactly one would save such a profile?
Good point. In my defence, I never claimed it was a well thought through idea!
Perhaps having "NVDA control+c" still active when in sleep mode would work - that way a profile using sleep mode could be saved - and if you have "save configuration on exit" set, you shouldn't need to do anything, it would simply be saved.
It's unlikely that either INSERT+CONTROL+C or CAPS LOCK+CONTROL+C would be used by another program.
To summarize after reading this ticket and others marked as a duplicate of this one it seems there are three possible solutions:
Pros: Associating given program for the GUI is quite explicit action which probably cannot be done by mistake. It can also be very easily reverted as triggers can be changed from anywhere.
Cons: It would require support for stacking of profiles that is being able to associate more that one profile with one program. All settings other than sleep mode would need to be loaded from the second profile assuming that there is one associated. It should also be decided what happens when switching sleep mode off using a keyboard command.
This would require additional checkbox either in one of the existing settings panels (which one?) or additional settings panel named Profile specific settings or similar. This checkbox or entire panel if it is going to be separated should be shown only when profile other than the default is active. Pros:
Cons:
When pressing the keyboard shortcut for enabling sleep mode and configuration different than default is active the fact that sleep mode has been enabled/disabled is saved inside active profile. This would require NVDA+Ctrl+C to be active even in sleep mode to facilitate people who don't have saving of config on exit enabled. Pros:
Cons:
@feerrenrut While I don't plan to work on this until #11006 is open would you be able to share your thoughts about the implementations outlined above and let me know which one would you prefer?
Another possible option would be to place an option in the profile configuration dialog.
A checkbox to the effect of:
Start this profile in sleepmode.
The user would probably only be able to select it when creating the profile, or when otherwise not actually running the profile, but it would serve the purpose with minimum impact.
@feerrenrut Have you seen my above comment listing possible implementations? Would you be able to tell which one would you prefer and/or propose different UX. This is being asked for on various mailing lists pretty often so there is clear demand for this feature. Also cc @michaelDCurran or @seanbudd if you'd like to provide your thoughts about implementation.
As someone not incredibly familiar with this issue, I think the first option "Separate profile for a sleep mode." makes the most sense.
It should also be decided what happens when switching sleep mode off using a keyboard command.
To answer the above, I would propose changing the input gesture to activate/deactivate the entire sleep mode profile (if other settings are included), rather than "sleep mode" specifically.
Thanks for the summary @lukaszgo1, it makes it much easier to get up to speed on the issue.
My preference would be either on the Profile config or on the Trigger.
I think there are too many edge cases in the "Save sleep mode when the gesture is used inside an active profile" case. Mixing a temporary setting with a saved one. This is an ongoing difficulty with screen curtain.
The "Separate profile for a sleep mode." is quite a technical solution, I think it is more difficult for users to understand than it needs to be.
Thanks for your comments @feerrenrut
It looks like the following does what we need:
Would something like this be an UX you can accept a PR for?
When starting settings dialog with an active profile there is additional settings panel (lets call it "Application specific settings" tentatively) which contains a checkbox called "Enable sleep mode for this profile".
This is a little confusing. I think the profiles concept isn't very clear in NVDA settings at the moment. But currently the majority of settings are tied to the active profile already.
Rather than think of this as a setting, it could be thought of as an action. A profile trigger could also be thought of as an action eg "swap to this profile". I think an option such as "enter sleep mode on activation" belongs on the trigger dialog.
I now think it doesn't belong in the profile dialog (but does belong in the trigger):
My only problem with adding additional checkbox on the trigger dialog which, when checked, would activate sleep mode for a given trigger is the fact that it is horribly not discoverable. I certainly would not even imagine to look for such option there and I believe most users would not either. All other AT's simply adds additional checkbox to the application specific settings though it is probably because NVDA is an only screen reader where triggers are separated from the configuration.
I'm not so sure, wouldn't they have had to visit that dialog when creating the profile / trigger in the first place. Granted, for existing profiles this is a concern.
@feerrenrut Imagine that as a user you want to enable sleep mode for an application and hunting for an appropriate option. Would you look in the triggers dialog for it? I certainly would not. In addition if we would ever add a search option to the settings dialog the "enable sleep mode for the trigger" would not be included in the search results.
My concern with a checkbox for sleep mode on the profile page is that it is inconsistent - to set any other option for a profile, you trigger the profile, then change the option.
Perhaps a solution could be to save the sleep mode state as with any other option, but also add a cue so that when you trigger a profile set to sleep mode, NVDA reports something like "entering sleep mode". An argument could be made for simply doing that whenever sleep mode is activated (eg when you press NVDA+shift+s / NVDA+shift+z). Or an earcon like screen curtain uses.
My concern with a checkbox for sleep mode on the profile page is that it is inconsistent - to set any other option for a profile, you trigger the profile, then change the option.
While I personally share your concerns what you're proposing is quite different to what @feerrenrut proposed. Would it be possible for you to discuss this and agree on a single UX which would be accepted by NV Access so that this issue can be progressed?
Perhaps a solution could be to save the sleep mode state as with any other option,
Again it seems this has been declined by @feerrenrut. They said:
I think there are too many edge cases in the "Save sleep mode when the gesture is used inside an active profile" case. Mixing a temporary setting with a saved one. This is an ongoing difficulty with screen curtain.
but also add a cue so that when you trigger a profile set to sleep mode, NVDA reports something like "entering sleep mode". An argument could be made for simply doing that whenever sleep mode is activated (eg when you press NVDA+shift+s / NVDA+shift+z).
When activating the sleep mode with the keyboard command NVDA reports "sleep mode on" for me. Is it not working for you?
Or an earcon like screen curtain uses.
We still need to provide an alternative way of signaling this to the user - don't forget people working with braille only. Also creating an earcon is not an easy task - I've no idea how all sounds which were using now were created.
Is the sleep mode setting intended specifically for profiles triggered by an application, or is it anticipated to also be triggered manually?
I'm not sure it makes sense to trigger a "sleep mode" profile manually.
Is the sleep mode setting intended specifically for profiles triggered by an application, or is it anticipated to also be triggered manually?
I personally don't see any use case for the latter. If "sleep mode" would become a setting which can be saved in a profile I see two options when activating the profile manually:
Edit: I wrote the below, before seeing the bulk of the thread (even my own earlier comments), because of some partial page load (or something). So it was written out of context, without realizing that no changes were preferred to the profile dialog.
I propose the following:
This requires, probably:
I think that the temp profile is a good idea in combination with the sound/alert or both. if the temp profile will then become permanent there needs to be a way to alert the user of this as well.
@marrie, I have created a separate issue for a sleep mode sound requirement. Comment on it if you like: #13532.
I am not a programmer and this may be an instance of a simple solution that has problems, but why not just do this in the most simple and direct way? No profile would be needed, and it should be in the core. When you evoke the sleep mode command, a dialog comes up. Enter sleep mode automatically when in this application with a yes or no button.
If you want to turn automatic sleep mode off for an application, have a command that opens a list of items that go into automatic sleep mode. Each item would be a check box. Uncheck the check box, activate the ok button and the behavior is removed for that application. It could be a command and also found in NVDA settings, as so many settings are.
I would think there are many applications users have no need to create a profile for and I don't think it should be necessary to create one just for this purpose.
That would actually be more trouble than it’s worth. In theory you would have to have a loop scanning the system for apps every time that command is invoked. It’s better to create a profile for more user flexibility, even if it is a temp profile.
@Gene703122, I think that you may have interpreted some of my listed steps, as user steps. Most of what I wrote was a technical implementation proposal. From a user prospective, what I suggested would work mostly as you have requested, because of the automatic generation of sleep mode only profiles as I described.
That said, I had an alternative proposal which was completely divorced from profiles, which I will present below.
Edit (2024): I forgot about coming up with this, and proposed something similar but different (I think better), in #16305.
This doesn't include the "Always start in sleep mode" feature I added into my initial proposal above. We would either need a second list for that (like @josephsl has for whether to use development versions of add-ons), or would need to drop that feature.
@feerrenrut I am happy to implement either proposal, as NV Access prefers for this feature.
Ho, I think a simpler approach might be a checkbox or two in Advanced settings panel that will be shown if and only if an app-specific profile is active. This simulates what JAWS does. Thanks.
Ho, I think a simpler approach might be a checkbox or two in Advanced settings panel that will be shown if and only if an app-specific profile is active. This simulates what JAWS does. Thanks.
@josephsl can you elaborate on this somewhat? I am unclear how this would work.
Also, I am re-thinking both of my proposals above. When I loaded this issue earlier today, GitHub was only showing me about six of the comments; none of those from @feerrenrut or @seanbudd or @lukaszgo1. I have no idea why that happened, but upon opening it again to post my last comment, it brought up the full history. I'm still willing to do any of what I talked about, but I see that various other ideas have been gone over before, such as the multiple trigger sleep profile, although that has problems.
Hi, in theory Advanced settings panel is supposed to be profile neutral – that is, it is supposed to apply everywhere, but it is not. Therefore we can take advantage of this fact and say that sleep setting (flag) will be tied to profile triggers – that is, whenever NVDA loads a new app module, it will check for sleep mode flag in addition to determining if an app-specific profile is defined for this particular app. In other words, I’m suggesting that we look at the actual internals of configuration profiles, as a preliminary UI design will come to our minds if we think carefully about the config profile trigger structure and internals (after all, profile triggers is a key component of what makes profiles profiles). Thanks.
@josephsl if I understand you correctly, the user workflow would be:
After which, any time that profile triggers, it starts in sleep mode.
To stop starting in sleep mode, the user either deletes the profile, or turns sleep mode off, goes back to advanced, and unchecks the box?
Personally, that seems overly off-putting as compared to, for example, my last proposal above. On the other hand, from a development point of view, it would be rather easy to do.
I don't think I can recommend an approach at this stage. This issue contains a lot of focus on solutions, without much focus on the underlying problems / user stories, the remaining questions on this issue are essentially due to the UX problem. Rather than suggesting solutions and hoping others here infer the same benefits to the approach, let's try to be explicit about the reasoning.
The docs for the sleep mode command:
Toggle application sleep mode on and off (NVDA+shift+s | NVDA+shift+z ) Sleep mode disables all NVDA commands and speech/braille output for the current application. This is most useful in applications that provide their own speech or screen reading features. Press this command again to disable sleep mode - note that NVDA will only retain the Sleep Mode setting until it is restarted.
The following user story is the one I imagine:
As an NVDA user, when encountering a noisy application, I can easily create a profile that automatically triggers and stops NVDA from reporting that application.
Notes/questions on "noisy application":
cmd
windows opening briefly during an installer)Some UX properties that are important (in my opinion):
There are some unusual restrictions compared to other NVDA settings.
Sleep mode when profile triggered by application
I actually do apply sleep mode to a game profile mainly because even though it’s voiced by nvda, at least nvda’s voice, nvda’s keys can interrupt the game, so I turn on sleep mode in its profile, but often forget I’ve enabled sleep mode somehow in default so I get speech sort of but not really. I can run the programs like outlook but get no output when I launch the run dialogue or alt tab. So there really does need to be an alert when you alt tab into a profile where you did enable sleep mode. Something like “sleep mode enabled.”
Re the original use cases and questions, re noisy applications. I recommend we focus on the self-voicing application scenario. This is the only one I have heard this feature requested for, and the one I anticipate it would be most used for.
If there are constraints around sleep mode being tied to an application, then if we could only allow it to be set in a profile which is triggered by the current application, that would again fit in with the primary use case anyway.
If there are constraints around sleep mode being tied to an application
This is my understanding. I'm not aware of a more general sleep mode concept. If anyone has a contrary understanding it would be good to know about it so we are basing decisions on the same understandings of the constraints.
then if we could only allow it to be set in a profile which is triggered by the current application, that would again fit in with the primary use case anyway.
I've tried to highlight that the UI for this isn't obvious. We don't have options in settings that disappear based on the current profile. Additionally, any profile can be manually triggered. Current application no longer makes sense when the Settings dialog is open, because it is now NVDA.
Hi, I understand that it might be off-putting to users. But we should also emphasize the fact that advanced settings are meant to be changed by people who know what they are doing (especially under guidance from NV Access and other developers). Which begs a follow-up question: should we separate some advanced settings into a panel dedicated to devleopers? I think that might be something to have as a separate discussion (not this issue). Thanks.
Agreed on your point. Can someone start an issue on this extra panel? 👍
To be honnest, after reading through all the conversation at least in my opinion many UX proposals are quite an overkill for what the solution should look like.
Problems:
New proposal:
Advantages:
The NVDA specific profile is covered in #15165.
Hi,
A few housekeeping task suggestions:
Thanks.
I can see one disadvantage. Let’s say the end user restarts nvda and they happen to be in a config with sleep on. They might forget and nvda would not default to the non-sleep state when restarted. I do not have a solution to propose to fix this yet, it is something to consider. Was this already brought up somewhere? Keep in mind I do not code. This would be a huge issue in my book and something to think about before implementing.
@josephsl
I think this https://github.com/nvaccess/nvda/issues/3721#issuecomment-1080156673 and this https://github.com/nvaccess/nvda/issues/3721#issuecomment-1082779956 are already covering the current state we have so far, and I tried to come up with a proposal via my two comments above to avoid the constraints @feerrenrut pointed above.
- Sleep mode interferes with other profiles when changing settings, that means the user cannot change NVDA settings while sleep mode is enabled
I do not understand this part at all.
- Save sleep mode state for the application in a sleepMode.ini file based on the name of the executable of the application as soon as the user changes the sleep mode state for the first time (similar to what our configuration file does when changing the default value of a setting for the first time, the same could be done for screen curtain in a screenCurtain.ini file
There are several issues with this making it IMHO not worth debating further:
.ini
file?
- Make NVDA capable to have its own profile so that NVDA menus, dialogs etc. can be accessed even though sleep mode is enabled in a specific application.
This is not a concern at all since when sleep mode is enabled for a current application you cannot (and should not as one of the reasons for enabling sleep mode is being able to pass through all keyboard shortcuts to the application) access NVDA's GUI.
- No dialogs with checkboxes or combo boxes needed
This has to have a GUI because we don't have any permanent option which can be enabled via a keyboard command only and making that change changes the established behavior of NVDA+Shift+S
anyway. That is not something which should be done.
- Probably one of the easiest way to technically implement because we already have everything in place for this to work
This is not easier than what has been proposed in #16305 - trying to establish difficulty level of a coding task as a non programmer seems just trying to add unverifiable arguments in favor of your proposal.
Reported by isaacporat on 2013-12-15 09:04 I use and develop self voicing applications (SpeakOn). Now that NVDA supports profile configuration it would be wonderful if sleep mode can be part of the profile configuration in particular with triggered profile related to applications.
Thank you Isaac Porat Blocking #4858