david-tejada / rango Goto Github PK
View Code? Open in Web Editor NEW🦎 The cross browser extension that helps you control your browser by voice. It blends in!
License: MIT License
🦎 The cross browser extension that helps you control your browser by voice. It blends in!
License: MIT License
Needing a voice command for every setting is inconvenient and even more so the more settings that are added
For example, when the google translate banner appears in a page all of the hints are move down
Hovering one element should also close the last hovered element
This would be a really great addition and is pretty much one of the last main features I used from Vimium.
It would be nice to have a subtle signal/notification, maybe by the alphabet characters you just used, that the action was successful. Kinda like this but aligned with the size and style of rango.
I am not sure what could be going on here but when I visit this website: https://registry.terraform.io/providers/hashicorp/aws/latest/docs
The title ends up being - https://registry.terraform.io/providers/hashicorp/aws/latest/docs
Which smells like a race condition with updating the window title, maybe some client side code by the website VS rango.
In a different browser I can see how the tab does have an original title, which is then updated after some time presumably by some client side code.
It starts out as:
But in Firefox with rango it just ends up being: - https://registry.terraform.io/providers/hashicorp/aws/latest/docs
No more v2 extensions are allowed in the Chrome Web Store
On many pages, slack for example, the scrolling behavior with hints are distracting.
Both for direct and explicit clicking. Probably the easiest is for talon side to always have multiple targets and then sort that out extension side.
In gmail for example I occasionally have a duplicate hint on the right hand side panel
Makes it so that clipboard managers in talon get updated
actions.clip.set_text(response["action"]["textToCopy"])
The clipboard updates for the communication should still use clip directly to not spam clipboard managers with rango commands.
Example of this is view replies
for 9gag comments
Possible solutions
https://stackoverflow.com/questions/9046741/get-event-listeners-attached-to-node-using-addeventlistener
Being able to click hints for disabled buttons is not useful
Related to #24 but it seems like a large enough issue to have tracked separately.
Once we can open links which don't take the focus of the window it would be cool to be able to open N number of links in one Talon utterance.
With rango direct clicking enabled, and hints a
,b
,c
,d
present on the page.
Saying *stash air and bat and cat
would open the three links identified by those hints in new tabs but the original tab remains the focussed one.
*stash
to be replaced with whatever the outcome of #24 is.
Youtube for example. Not all controls are clickable and it would be nice if we could figure out a better way to do scrubbing the timeline.
Right now the hints capture supports more than two letters. Better would be to just reuse hint capture.
@mod.capture(rule="<user.rango_hint> (and <user.rango_hint>)*")
I would like a setting to enable user specific colors for the hint text, border and background
In the process of debugging #28 I checked out version v0.1.9
at 57f216a
. In unrelated to that issue I did notice that the v0.2.0
version does result in the hints being a little more jittery than version version v0.1.9
when scrolling.
I used this page for testing: https://en.wikipedia.org/wiki/Main_Page
I had noticed this when v0.2.0
was released but didn't bring it up, going back to the older version it is pretty clear though.
I am unsure how the rendering/positioning/throttling code has changed between versions and this may be a conscious decision compromising between smoothness and performance. But thought I would bring this us up if not.
Here is a quick screen recording showing how it looks for me: https://www.youtube.com/watch?v=AEfzh33mrjY
For example, here in sort packages
I think this means being able to set the selected
value https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs/create when creating the tab here
rango/src/background/tabs-messaging.ts
Line 90 in b90edaa
I am unsure what to suggest for the Talon command, and whether or not it should share the existing blank ...
command with an extra qualifier or if it should get a new one. I think I'm leaning towards a new word, some for consideration:
stash air
load air
set air
store air
pack air
Trying to think of words which invoke imagery of stashing something away for later use as is common with opening links in new tabs
Being able to click on disabled buttons is not useful
Having seen the recent change where you demonstrated clicking a link while focussed on an input field I tried it out. Though when I do, it doesn't quite work, when focussed on an input and saying the letter for a hint the request is sent to rango, the letter Å
is typed into the input field, and then Talon reports a timeout waiting for response.
I'm on macos 12.3.1, using up-to-date Firefox.
Due to this bug I'm not able to read the command send from talon through the clipboard from a background script. Once we have talon rpc that won't be necessary but in the meantime I'll have to move the code that reads the command to a content script.
#20 means that I frequently have to hide/show rango hints when jumping around tabs as I spend a lot of time in Confluence and Jira where this is a problem. It would be great if I could toggle the hints per tab to not have to deal with that.
Also a sidenote, I find when I toggle the rango hints it seems to cause some significant work for my browser and it lags for a bit. I wonder if this is due to having multiple tabs open and rango having to do a lot of work to show all the hints after them being toggled off? Being able to toggle per tab would also help with that.
Today these hints are not clickable
I would like to completely replace vimium with rango, but there is some features I still use that are vimium explicit.
I found this random page you can see the issue from https://github.github.io/clipboard-copy-element/examples/
abc
for examplexyz
Result will be abc
, when the desired contents is xyz
.
When rango receives a request and performs its action, before it writes the response message it could inspect the clipboard again and if it isn't still the original request then send the current contents back to talon in the response object hopefully allowing Talon to set this as clipboard contents and not the original content before the action.
This has been mentioned a few times in Slack I think but thought it wise to get an issue open for discussion and ideas!!
Being able to fluently copy portions of a webpage to the clipboard.
Here are some ideas about how to reference areas of a webpage:
The quick brown fox jumps over the lazy dog
, take quick past fox
to select/copy quick brown fox
div
or other HTML elements (see image below where I added an outline to all div
elements)A list of some other tools for inspiration:
Perhaps there should be two commands:
Given most of the time spent using a web browser would be reading and navigating it seems that any mode that would allow you to copy text would be something that you had to switch into to allow for more markup on the page and actions to become available. Though this would impact the fluency aspect.
Currently we don't have support for iframes. They are complicated. Vimium has support for them so they has to be a way to solve this issue
If you hover over one element and, before the timeout removes the hover, you hover over another element, this other element only stays hovered for they remaining time that the first element had remaining.
it would be nice, if you could open links in a new tab
like control+click
Rango has the ability to copy link urls to clipboard.
I think it would be useful to be able to copy the clickable elements text content to clipboard as well.
For example:
https://docs.aws.amazon.com/rds/index.html
copy text pit
=> Performance Insights in the AWS CLI Reference
would be put in the clipboard.
This is getting a bit into cursorless style territory but maybe not too much to implement.
I haven't noticed this anywhere else yet but I have problems selecting the checkbox in the top left of google mail to select all unread mail. Saying the letter hint performs the animation of the hint but the checkbox is not selected. This does work with Vimium but I haven't looked at what could be the difference yet.
Another thing I saw was that in the google mail UI some clickable elements with Vimium aren't marked up with hints in rango
For example, if you go https://github.com/david-tejada/rango/blob/main/readme.md and click on the header "installation", the url in the title doesn't update to https://github.com/david-tejada/rango/blob/main/readme.md#installation
I think that upper case letters would be easier to distinguish
This line expects a certain response schema that rango isn't consistently using for all action types: https://github.com/david-tejada/rango-talon/blob/adc4905d84538a5544b90fba25548b0f0634af31/browser.py#L67
This results in the Talon logs having errors:
2022-05-01 10:44:51 IO {'type': 'response'}
2022-05-01 10:44:51 ERROR 7: talon/scripting/talon_script.py:592|
6: talon/scripting/talon_script.py:297|
5: talon/scripting/talon_script.py:559|
4: talon/scripting/actions.py:85 |
3: talon/scripting/types.py:411|
2: user/rango-talon/browser.py:115| execute_command(command)
1: user/rango-talon/browser.py:69 | if response["action"]["type"] == "copyLink":
KeyError: 'action'
[The below error was raised while handling the above exception(s)]
2022-05-01 10:44:51 ERROR cb error topic="phrase" cb=<bound method SpeechSystem.engine_event of <talon.scripting.speech_system.SpeechSystem object at 0x110d91c20>>
30: lib/python3.9/threading.py:930* # cron thread
29: lib/python3.9/threading.py:973*
28: lib/python3.9/threading.py:910*
27: talon/cron.py:155|
26: talon/cron.py:106|
25: talon/vad.py:21 |
24: talon/scripting/speech_system.py:355|
23: talon/engines/w2l.py:706|
22: talon/scripting/dispatch.py:105|
21: talon/scripting/dispatch.py:144|
20: talon/scripting/dispatch.py:133|
19: talon/scripting/rctx.py:233| # 'phrase' main:_redispatch()
18: talon/scripting/speech_system.py:62 |
17: talon/scripting/dispatch.py:105|
16: talon/scripting/dispatch.py:144|
15: talon/scripting/dispatch.py:133|
14: ------------------------------------# cron thread
13: talon/scripting/rctx.py:233| # 'phrase' main:engine_event()
12: talon/scripting/speech_system.py:407|
11: talon/scripting/actions.py:85 |
10: talon/scripting/types.py:411|
9: talon/scripting/core/core.py:100|
8: talon/scripting/actions.py:85 |
7: talon/scripting/types.py:411|
6: talon/scripting/core/core.py:129|
5: talon/scripting/actions.py:85 |
4: talon/scripting/types.py:411|
3: talon/scripting/core/core.py:134|
2: talon/scripting/talon_script.py:693|
1: talon/scripting/talon_script.py:596|
talon.scripting.talon_script.TalonScriptError:
in script at /Users/rickymcmillen/.talon/user/rango-talon/direct_clicking.talon:4:
> user.browser_click_hint("{letter_1}{letter_2 or ''}", 0)
KeyError: 'action'
2
Could probably work around this in the Talon browser.py but I figured it would be better get rango to use a consistent response schema so logging it here.
Thanks again for your contributions!!
This will be a lot helpful if we don't have talon enabled and want to quickly hide all the hints
Commands like copyLocationProperty
have no visual feedback that they completed. It would be nice to get something.
Related to #38.
I have been giving some thought to this and I think it's possible to have hints always be next to the element they're hinting. Instead of having just one hints container every hint would be inside a hints container within the first positioned ancestor (position other than "static"). This would require a considerate rework of the way hints are place in the page but I think it's worth it. The advantages are:
Position hints would work something like this:
Would be nice if we could get the title attribute as well when we do the show action
When exclude singles is enabled the grammar still triggers on single letters. Maybe a talon setting would be sufficient?
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.