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
Configuration profiles #667
Comments
Comment 1 by jteh on 2010-05-23 00:54 Anyway, leaving this open, as there are cleary other users who want this as well. However, I'd like to see some good use cases. |
Comment 2 by fatma.mehanna on 2011-06-15 18:03 |
Comment 3 by briang1 on 2011-06-15 22:10 Unfortunately, to make every single thing have the ability to be changed per application would seem to mean that all app modules need flags for these items and .ini files to look up for each one. Surely this will slow things down a lot and also make it a bit of a nightmare to set things up. Scripts are, I suppose a bit like I want this to do this here cos the app is broken, Maps are the nuts and bolts such as what way to read the access info low down etc, and where to send it, and settings are basic things like punctuation level etc. |
Comment 4 by briang1 on 2011-11-16 08:37 |
Comment 5 by kredh on 2011-11-16 09:25 First, the question "why should it be useful": as I said on the mailing list, there are some applications which would be easier and faster to use with specific configuration. For instance, a "Cursor follows review" or "system" per application. But if that was all, it'd be useless (I agree on that). Though, there are some different possibilities:
All this examples doesn't make sense for everyone. But the possibility to configure a specific application with specific NVDA configuration seems interesting to me and would allow a gain of quickness. Well now, the question "how to implement" is not really my cup of tea. I don't even speak of the NVDA code. The fact to have different tabs in settings sounds a bad idea to me: first, there would be too many applications to configure. I think that the simplest thing would be to have a profile system: in the NVDA main menu, instead of a button "save configuration", we could have "save configuration as". Pressing DOWN arrow on this button, we could find the default profile (used for every applications) and a possibility to add a new one. That way, each profile will contain EVERY configuration proposed by NVDA (the syntthetizer settings, the vocal ones, the braille ones, the cursor ones, etc). Now, to bind an application to a profile, a special NVDA key could be used. Something like, press NVDA + I-DON'T-KNO-WWHAT in your applicatio, choose the corresopnding profile ("default" by default), press enter and that's it: the choosen application will load the configuration contained in this specific profile and would use it when you switch on it (by ALT + TAB or anyhow). That's an idea, even if the "how" is not the right one, the "why to implement" could be demonstrate. That's two different questions. Once more, forgive my long comment. |
Comment 6 by dwillemv on 2011-11-16 19:41 uses include turning off progress bar announcements in applications like eclipse where they become a problem. |
Attachment profile.py added by norrumar on 2011-11-20 03:50 |
Comment 7 by surveyor on 2012-05-26 10:15 |
Comment 8 by surveyor on 2012-05-28 11:47
|
Attachment Profil.nvda-addon added by surveyor on 2012-05-28 11:48 |
Comment 9 by parham on 2012-06-12 06:24 For example, I'd like to be notified of indentation changes when in Notepad++, but not when in the command line or in my browser. So, whenever I want to test a web application, I constantly have to press four keys to switch (insert+ctrl+d, alt+i, space, enter). It's not as simple as switching between punctuation levels any more. The easy solution that comes to mind here is to add a toggle (E.G. insert+i for the desktop layout) to enable the announcement of indentation changes. However, I have seen this in other screen readers, and what happens is that over time, you run out of hotkeys to use to toggle a specific setting. |
Comment 10 by aleskis on 2012-09-08 15:13 |
Comment 11 by jteh on 2012-09-09 05:37 |
Comment 12 by aleskis on 2012-09-09 07:06 |
Comment 13 by jteh on 2012-09-09 07:13 |
Comment 14 by norrumar (in reply to comment 7) on 2012-09-22 09:34
Hello, I saw and tested your add-on few days ago. Thanks! I have another add-on in development: prof.nvda-addon. It contains your Wikipedia profile, or something like it, Development, that reports line numbers and indentation, default profile and NoDetectLanguage profile, that uses another variant of eSpeak.
In this add-on profiles only include configuration files (nvda.ini). |
Comment 15 by norrumar on 2012-09-23 10:43 There was a bug in the previous version when selecting another synthesizer, so that you had to restart NVDA when trying to open voices dialog. Now if the choosen synth driver can not load settings, this error is saved to NVDA+s log, but you can use it without restarting. |
Comment 16 by elliott94 (in reply to comment 1) on 2012-10-21 07:48
With 2012.3, the total number of items in Explorer are now announced (e.g. 1 of 25). Personally, I liked the previous behaviour. However, I want to keep positional information announcements enabled for other applications, but not Explorer. This is where something like this would be useful, in my opinion. |
Comment 17 by jteh on 2012-10-25 07:29 Requirements for settings profiles:
High level design:
|
Comment 18 by ragb (in reply to comment 17) on 2012-10-25 10:49
Will this ticket cover just profile creation, or both?
I'd add something that may seem a bit strange at firt, but here it goes: There should be some way to delete settings from a profile. See the following example:
Is this clear at all?
Hmm, can you elaborate with examples?
I like option 2 better, but option 1 is not that bad at all.
I'd prefere the hooking option. It's less coupling, and seems well more extensible. However, depending on the number of modules the hook, things may imply some performance pnalty. There are some python libraries that already implement this signaling sort of thing which we can apply, I think. (I can elaborate more on that if needed). |
Comment 19 by jteh (in reply to comment 18) on 2012-10-26 00:23
This ticket will just cover profiles, not automatic switching.
I can't come up with a good UI for this, so unless someone else can, this feature isn't useful. I figured the user could just change the setting in the profile if it was incorrect. Perhaps I'm misunderstanding you, though.
For me, application specific settings is just a minor part of this. It could also be used to have different settings for say all, for example. A user might have a profile which disables reporting of tables for a web browser, but they might also have a profile for say all which disables reporting of links and changes the synthesiser. When a user performs a say all in this web browser, the say all profile should apply on top of the web browser profile. Of course, this is very complex stuff and need not be handled in the initial auto switching implementation (if ever), but allowing for it in the core profile design will make it much easier to implement later. I don't think supporting this adds much complexity.
...
Please do elaborate. However, any sort of signalling infers at least one function call per module. Even if you check some conditions before calling the hook, the check itself is probably going to require a function call, so I'm not sure we can get more efficient than just calling functions. |
Comment 20 by jteh on 2012-10-26 00:25 |
Comment 21 by ragb (in reply to comment 19) on 2012-10-27 11:41
Probably I'm being too complex on this. I'll try another example to explain my idea:
Here pitch and rate are hipotetic settings, of course. Note that we can say that any of this options are right, due to UI complexity or any other reason. 'm just brain-storming use cases that may come up. My suggestion for the UI (which might be questionable) is the following. Considering we edit settings for a profile with a similar UI we do now (settings dialogs for voice, braile, etc), you could have a revert to global configuration button on each dialog, that would be visible when we were editing settings for a profile (not globaly). That button, when pressed, would delete all references for the dialog settings from the profile, reverting of course the configuration to the global configuration object. This means that deletion is per set of related settings, no per individual setting.
Sure, those are valid good points.
I think we can't really go better than function call. My idea was something like a publish/subscribe model. I believe that any NVDA module should be able to subscribe to any setting change, even for add-ons, so they can react if needed.(this might be extensible for other NVDA events or changes. Ok, you may be thinking... "this guy is crazy for hooks or publish and subscribe things alike"). We can implement these things ourselvs or can use something like the pidispatcher package: http://pydispatcher.sourceforge.net/ Porobably wxPython also have some helpers to do it, mainly if we need things to happen on the GUI thread (probably that may be better handled by the hooking code, to send things for being executed assynchronusly, when needed). |
Comment 22 by jteh (in reply to comment 21) on 2012-10-29 07:00
I understood your first example.
I guess that'd work, though I still find it a bit inelegant, which isn't to say I have any better ideas. Anyway, we can certainly include a function to remove a setting and perhaps one to check whether a setting is inherited.
The big question is how they specify which settings to subscribe to. Subscribing to individual settings is ugly and may not work for some things. Do we use some sort of pattern? That seems ugly, though. |
Comment 23 by ragb (in reply to comment 22) on 2012-10-30 00:05
Apple's VoiceOver on OSX, on the activities dialog (sort of profiles) has some check boxes to configure if subsets of settings are included on the activity (voice, forating, etc.). That might be an option, but IMO it might complex for users to remeber what settings they define for the profile or not.
I do not dislike the pattern way, something like speech.*, to subscribe to all speech settings changes. Probably, for this pattern idea, we might need to implement our own publish and subscribe solution (didn't thought about the need to subscribe for many settings at once, with the pydipatcher suggestion). |
Comment 24 by camlorn on 2012-12-27 02:17 |
Comment 25 by jteh (in reply to comment 24) on 2012-12-27 05:23
We've discussed this idea a bit. However, it's worth noting that I can't think of a single application (other than some screen readers) that does this for its user (non-advanced) settings. It makes for a fairly tedious user interface, since you have to move to a setting, move to the adjustment control, change the value and then move back to the settings tree to access more of them. As a result of the fact that it's not done anywhere else, it's also harder for new users to follow. In any case, if this is going to get serious discussion, it definitely belongs in another ticket. |
Comment 26 by camlorn on 2012-12-27 23:31 |
Comment 27 by camlorn on 2013-02-25 16:49 |
Comment 30 by jteh on 2013-08-02 06:38 Manual profile switching should be close to fully implemented. There's no documentation yet. Briefly:
Please test and report any issues. Automated switching is even more complex and will probably be implemented separately unless manual switching is truly useless to everyone except me. |
Comment 62 by jteh (in reply to comment 61) on 2013-10-16 22:23
Fixed in 4e28b25. Thanks. |
Comment 63 by leonarddr on 2013-10-19 11:09 |
Comment 64 by James Teh <jamie@... on 2013-10-22 04:37
|
…or constructor. re nvaccess#6846, nvaccess#667. As there's no need to store a module-level validator, validator class instanciation will be done from config.ConfigManager constructor.
…or constructor. re nvaccess#6846, nvaccess#667. As there's no need to store a module-level validator, validator class instanciation will be done from config.ConfigManager constructor.
- Deprecated code removed: - PR #6878: `speech.REASON_*` constants, `controlTypes.REASON_*` should be used instead. (issue #6846) - PR #6877: `i18nName` for synth settings, `displayName` and `displayNameWithAccelerator` should be used instead. (issues #6846, #5185) - PR #6876: `config.validateConfig`. (issues #6846, #667) - PR #6875: `config.save`. (issue #6846) - PR #6914: Support Windows Calculator on Windows 10 Enterprise LTSB (Long-Term Servicing Branch) and Server. (issue #6914) - PR #6987: Reduced the chance of configuration file being corrupted when Windows shuts down. Configuration files are now written to a temporary file before replacing the actual configuration file. (issue #3165)
Reported by simon818 on 2010-05-22 21:55
I'm sure someone has said this already, so I apologize if this is a duplicate. But is there a possibility of having application specific preferences and dictionary settings?
what I pictuer is something like this: Each settings dialog has two tabs, one is default settings, one is application specific settings. In the application specific settings tab we could have a list box with applications to modify, and possibly a way to make a new settings file for a given program (although it's probably better to put this somewhere else in the settings menu.) And also in the application settings tab there could be a "restore to default settings" button. It's just a thought, and I realize this is a lot of work, but it woudl be nice to have the ability to add definitions for certain programs, and set NVDA to function differently in certain other applications (for instance, changing the voice rate when going into wordpad to read a book.) This, I realize, is a minor thing, but I thought it was worth posting.
Blocked by #3524
Blocking #650, #1913, #3165
The text was updated successfully, but these errors were encountered: