Skip to main content


Just learned about GridReader, a free tool for Blind programmers that might make it easier to explore complex nested code. My #Python experience is limited to experimenting with the BBC Microbit, and so far i've just set my screen reader to report indentation level. #Blind coders: how do you handle indentation and navigating complex code bases? Does GridReader seem useful? https://www.psu.edu/news/information-sciences-and-technology/story/new-coding-tool-could-aid-computer-programmers-who-are/?fbclid=IwAR1AFWy5E5XrPF8u__Lh3dke6AqTuhiNReqCIip0sarmGT1MppdFwHx4h74

Michael Connor Buchan reshared this.

in reply to ChanceyFleet

Honestly no, from reading the article. I know blind programmers that can fly when compared to sighted programmers, so saying that we often fall behind simply is not true. In fact, this is exactly why a lot of programmers (me included) have our speech rate up well past 800 words a minute (so we don't fall behind).

I've familiarized myself with loads of codebases over the years, and I think present tooling is plenty sufficient. VSCode is now fully accessible, meaning blind people now have access to a mainstream IDE. We also have tools for our screen readers to help us code better. As you mentioned, indentation with tones, and a handy little add-on called Indent Nav, that lets you treat indented code like a tree view.

This feels like another case of the Quorum programming language (obviously being a tool instead of a language), but same concept. A bunch of researchers that did some searching into how blind people code, and decided to make a hole new tool, without checking if alternatives are accessible/already exist. I appreciate the intent, but this is a really long winded way of saying no, I don't think its that useful.
in reply to Quin

@TheQuinbox Thank you so much for that context. Is IndentNav an add-on? And yes, some of the framing and assertions in this article were uncomfortable to read.
@Quin
in reply to ChanceyFleet

eet@mas.to Yep, indent-nav is an NVDA add-on. Basically the way it works is this: if I'm in a text field, on a function, called do_work, and there's a function right below it, called work_harder, I can press alt+NVDA+down arrow to jump down to that function, and alt+NVDA+up arrow to jump back to where I was previously. It skips all the indentation between, and gives me audible feedback to indicate this. It also changes how long this sequence of sounds goes on for to reflect how much code I've skipped over, and how indented it is. Perhaps an audio demonstration would allow me to explain the feedback a bit better.

Now, lets say I want to go into the do_work function, but just see what's on the first indentation level. So, I press alt+NVDA+right arrow, and I'm put inside it (moved to the next block with more indentation than my current line). I can then use the aforementioned commands of NVDA+Alt+up/down to navigate statements, and I can keep doing this to find what I want really quickly. Its remarkably similar to a tree view.

Also, because we now have access to VSCode, a mainstream IDE, we get so many more tools. Want to know what a function expects? Control+shift+space, and its spoken. Want to see a definition? F12, boom. Etc.
in reply to Quin

Content warning: Long post

@Quin
in reply to Talon

Content warning: Long post

in reply to Toni Barth

Content warning: Long post

in reply to Talon

Content warning: Long post

in reply to Toni Barth

Content warning: Long post

in reply to Talon

@talon @TheQuinbox VS Code is actually the piece of software that allowed me to work at my current job at all, and I'm hugely grateful. JetBrains' IDEs accessibility is kinda meh, I tried them, didn't like at all.
Unknown parent

Quin
@fireborn Probably not that hard, actually. AXTextField and AXTextArea totally expose the content of each line. You can use simple string manipulation to determine the indentation. Indent-beeper did it, actually. Not sure on the license of that code, but you could at least look at it for a general idea. I'm not sure, however, if you get all the lines as an iterator/table, so you can loop over them. Sounds like a good use for Obj-Info :).

That said, I don't really need it on the Mac. In TextMate, the symbols mode on the Rotor lets me fly between functions, and that's typically all I need to do. For those times when I need to do more, though, a Hammerspoon version would be extremely useful
Unknown parent

Quin
@fireborn I haven't played with it, but this might do it. AXTextArea and AXTextField treat the insertion point as a selection, if I recall correctly. If not, this should still link you to decent documentation that you can branch off of. https://developer.apple.com/documentation/appkit/nstextview/1449256-setselectedrange