Quickly Getting started

When you open the app, if a new version is available, the new features will be displayed, you can choose to skip this update, remind you later, close the window (Alt+F4) or install the update. If you install the update, wait for the update to happen automatically, the new version will be launched once installed.

Open the app.  Press Enter and authenticate online. Once authenticated, you will be on the home page. Press down to see options such as viewing your front page, Messages, subscriptions, friends, monitor feed, overview, post history, comment history or app settings, right arrow or Enter to activate. Everywhere in the app you can see all actions available to you with the context menu key on your keyboard (or Shift+F10). This menu is to help to see what you can do at any given time and learn the shortcuts, which are written in parentheses at the end of every action. press R to go to a subreddit. You can start typing and press Tab a couple times for auto completion of subreddits. Press enter, wait for the message saying you are now on the new subreddit. Press down arrow to read posts, you will hear a small sound when a post has comments. Press right arrow on a post to view the comments. Use left arrow to go back up one level, Alt+Left to go back to the post. Press down arrow to see the list of comments and again, if you hear a sound, you know that the comment has replies. Right arrow to drill down, left arrow to go back and up/down arrow to go through the list.

Press the key to the left of the 1 key (1 on the number row) to change sorting (this key changes depending on your keyboard layout, see app settings > keyboard shortcuts). Up and down arrow through the options, enter to select. Default sorts will be used whenever you leave the context of that sort. To change sort defaults, read the section on user settings below.

If an item has links, you can cycle through them with the Tab / Shift+Tab key, press enter to open the link. Links can be shortened depending on user settings, but when cycling the links you will always see what URL you are about to activate. Links targeting a subreddit, a user, a post or a comment will open directly within the app, other links will open in the browser. If you want links in the browser to open in the app, read section on link handling.

Press Ctrl+R on an item (post, comment or message) to reply, type your reply and press Ctrl+enter to post, escape to cancel. Press Enter to open online if you prefer to use the rich Reddit interface. Press Ctrl+N to create a new post (you will be taken online since the experience is rich and accessible).

Press Ctrl+M to send a private message to the author of the post / comment. Also works on messages or on a subreddit (will contact mods).

Press S to search the current subreddit (or search entire Reddit if on the home page or Front page), type your query and Enter or escape to cancel. Use same navigation as above for the search results. Press Escape to go back to where you were before searching.

You can upvote, downvote and reset your vote with Shift+Up, Shift+Down and Shift+Left/Right respectively.

Subscribe to a subreddit with Ctrl+Up, unsubscribe with Ctrl+Down. This command also works from your subscriptions page. Delete key on a subscription will unsubscribe.

You can open a new tab with Ctrl+T, close tab with Ctrl+W. You can cycle forward and backwards through tabs with Ctrl+Tab and Ctrl+Shift+Tab. Move between tabs without cycling with Ctrl+Alt+Left and Ctrl+Alt+Right. Go to specific tab with Ctrl+1-0 for tabs 1 through tab 10.

At any time, if you need to inspect the text with more granularity, press the Spacebar and you can review the text, Escape when you’re done.

Save a post with Shift+S, or unsave it if it was saved already. View your saved posts in your post history with saved filter.

Edit a post or comment with F2, delete a post or comment with Delete key. Cross post with Ctrl+X.

Want to see a comment in the context it was posted in? Ctrl+G. Want to see the post instead? Shift+G. Escape to go back after looking around. Works on messages which are comment replies, on comments and posts everywhere in the app, and post / comments links you encounter in the app.

Press U to switch to a user you type. Press Ctrl+U to go to a user profile, works on posts, comments and messages.

Start tracking things with the minus key, view what you are tracking with Ctrl+Shift+Minus. Turn off sound notification for the feed with Shift+Minus, turn off monitors with Alt+Minus. When there are new items, you will hear a notification sound, view your feed with Ctrl+Minus. You can track your inbox, subreddits for posts, posts for comments and comments for comments. To learn more, read the monitor section.

Don’t like the keyboard shortcuts? Keep reading on remapping keyboard shortcuts.

Don’t like the way posts, comments or messages are read? Keep reading on templates.

The Home Page

The home page is the main menu of the app. It is what you land on after getting authenticated or when you open a new tab. It greets you with your username to confirm the authentication. Pressing down arrow will go through the main menu. The menu is not everything you can do in the app, it is highly recommended that you familiarize yourself with the keyboard shortcuts. To do so, go to Settings > keyboard shortcuts. Alternatively, press the context menu key (or Shift+F10) to see all available actions at any given time with their shortcuts.

Press S from the home page to search Reddit, press R to switch to a subreddit.

In the main menu, there is

Front page: see your front page, default sorting is best, but this can be changed in settings.

Messages: see your messages. You will land on the inbox where you can see private messages and post / comment replies. You can change the mailbox to sent items with the change mailbox command. You can monitor your inbox for new messages.

My subscriptions: press right arrow or enter key to see the subreddits you subscribed to. Press enter on a subreddit to browse its posts and comments. Press Ctrl+Up or Ctrl+Down on a subreddit to subscribe / unsubscribe. Delete will unsubscribe and remove it from the list. The option of subscribing is available because when you unsubscribe, the subreddit will stay in the list until you leave, which gives you the opportunity to undo.

My friends: see your friends. Delete will unfriend them and remove from the list. Activate a friend to view their profile.

Monitor feed: view your feed. There will only be items if you setup monitors to track things and if those tracked things get new items. For instance, if you track your inbox and receive a new message, it will show up here.

Overview: your overview, you can change sort.

Post history: your post history. You can change sort, you will also notice there is an additional filter in the menu. You can see your submitted posts, saved posts, etc. Post commands are as usual.

Comment history: your comment history. Caveat is that comments will appear to not have replies, this is because the API does not load the comment replies. This means you cannot rely on the sound to know if a comment has replies, but you can press right arrow to load the replies. Other than that comment commands as usual.

Settings: here you can view and assign keyboard shortcuts by activating the first menu item. If you go down, you will see a lot of customization settings, press Left/Right to change their values.

 

Tip: when you feel a post or comment lacks the context, Ctrl+G to view it in its original context or Shift+G to view the post.

Reviewing text

If you want to hear what was said again, press = (the key to the left of the back space key).

Sometimes you might want to review the text in finer details. Press the spacebar, then review the text as you are used to with your screen-reader. Ctrl+Arrow keys for word/paragraph granularity, arrow keys for characters/line, etc. When you’re done, press Escape and you can keep using the app.

Link Handling

The app is able to open Reddit links targeting a subreddit, a user profile, a post or a comment. Press Ctrl+O and type / paste a reddit link, like https://reddit.com/r/RedditForBlind or “R/RedditForBlind”. The app handles various link formats.

You can also pass in a link as a command line argument. Let’s say you want to create a Desktop shortcut that opens the app directly on R/RedditForBlind:

1.    Find the app executable, right-click, Send To, Create Shortcut.

2.    Find the shortcut on your desktop, rename it if you want like “R/RedditForBlind”.

3.    Press Alt+Enter which will open Properties dialog, in the target field you will see the path to the executable, add at the end a space, then in quotes the Reddit link, in this case “R/RedditForBlind”.

4.    You can also set a global keyboard shortcut in this dialog if you want. Press Ok to save changes.

5.    Launch your shortcut and you will land on that subreddit instead of the home page (press Esc to get back to home page).

 

The app can also work with a system wide custom protocol “redditforblind:”. This would allow you to launch the Run dialog (Win+R), type “redditforblind:R/RedditForBlind”, press Enter and the app would open on that subreddit (or any Reddit link you put in the command).

To turn this on, open the RedditForBlind app, go to Settings and find the “allow reddit links to open in the app” setting, and set that to yes. This setting is also required if you want to use the Chrome extension.

Finally, there is an official Chrome extension that will allow to open reddit links you encounter while browsing straight into the app. You will notice next to Reddit links new “Open in RFB” links that will open in the app rather than in the browser. Remember for this to work you need to turn on the setting in User Settings in the app.

The chrome extension is open source if you want to read / contribute.

Tab Management

Tab management in RedditForBlind is very similar to the web browser way of doing it. Creating multiple tabs is useful, you can browse multiple subreddits at the same time or just multi task with ease. As more features will be added, it can be useful to have different tabs for different purposes.

Ctrl+T: new tab, will land on the home page

Ctrl+W: closes the current tab. If there was only one tab left, closes the app.

Ctrl+Tab: next tab, if at the end, cycles back to the first tab.

Ctrl+Shift+Tab: previous tab, if on tab 1, will cycle back to the last tab.

Ctrl+Alt+Left: previous tab. If on tab 1, will stay there.

Ctrl+Alt+Right: next tab. If on last tab, will stay there.

Ctrl+1 to Ctrl+0: go to specific tab, number 1 to 0 will go to tab 1 to 10.

User Settings

To change user settings, go to settings from the home page. Navigate down and you will see a lot of settings that can be customized. Left/Right on every setting will change its value. No need to save, every time you change a value it will be saved. Those settings persist through app restarts.

The refresh token file

Under UserConfig, there is a Token.rt file. This file is created after you authenticate with Reddit. The refresh token allows the app to use Reddit on your behalf without you having to authenticate every time. Anyone who gets access to this file will be able to use Reddit on your behalf with the permissions that were shown on the page when authenticating. This file is not encrypted. This file is only local to your computer, so there is a risk of someone impersonating your Reddit account only if they get access to your file system and to that file.

If you think your refresh token has been compromised, you can revoke it on Reddit’s website to prevent anyone to use it, simply go to preferences (reddit.com).

To get a new refresh token or after you revoked it, simply delete the Token.rt file and relaunch the app. You will have to authenticate again.

Note that RedditForBlind asks for all permissions.

Remapping keyboard shortcuts

From the home page, go to Settings, then keyboard shortcuts. You will hear instructions on how to use this window. Basically you go down the list, you will hear the action and its description. Press Enter on an action to add a shortcut to it, then input the shortcut you want. Under every action are their shortcuts. You can delete it with Delete key if you want to remove it, you can modify it with Enter and input the shortcut.

Warning: on this page, you will have to make sure to save changes at the bottom before leaving or your changes will not take effect. If keyboard shortcut changes took effect immediately in that window (auto saving), you could screw yourself up if you don’t do things in the right order, this is why no changes take effect until you are satisfied and save.

Monitors

Have you wondered if it was possible for the app to just periodically look on its own if there is new content you didn’t see and notify you? This is what monitors do. Currently, you can track:

1.    Your inbox for new messages. Toggle monitor in the messages menu item on the home page to track it. You can have your inbox tracked by default on app start in the settings.

2.    A subreddit for posts. When you switch to a subreddit, on the screen where you can see the rules, you can change the sort to track the sort you wish for new posts.

3.    A post for comments. When focused on a post, you can track it for comments. The sort that will be tracked is your default comment sort.

4.    A comment for comments. This will always track for new comments regardless of your sort.

It is important that you understand what is happening when using monitors. Reddit exposes an API that the app queries. Reddit throttles API calls to 60 per minute. When you add monitors, the app will make API calls to whatever you are tracking to see if there are new items to add to your feed and notify you. This means that if the app makes too many API calls, you won’t be able to use the app, because all the bandwidth will be taken and Reddit will throttle you.

If you don’t use monitors, then you have nothing to worry about. By default the app will not have monitors setup.

Now here is how the app manages the API bandwidth. First, in your settings, you can set the monitor refresh rate. By default it is on slow, which is 10% of the API bandwidth. Options are from very slow to very fast, which range from 5%, 10%, 25%, 50% and 75%. What does that mean. If you are set on very fast, then the monitors (when used) will be taking 75% of the bandwidth Reddit allows the app to use. Because the limit is 60 requests per minute, so 1 per second, 75% means monitors will send 0.75 requests per second to try to see if there are new items. 0.75 requests per second is one request every about 1.33 seconds. This leaves 25% of the bandwidth for your regular app use, which is not a lot. If you are tracking only one thing, like say your inbox, then every 1.33 seconds the app will try to see if you got new messages and notify you. If you are tracking two things, like your inbox plus a subreddit, then the app will alternate. First it will look if you got new messages, then 1.33 seconds later it will see if there were new posts on the sub, then 1.33 seconds later it will look at your inbox again.

So the time between checking for updates on a resource you track is 1 divided by the bandwidth percentage times the number of things you track. If you track r/blind, r/all, your inbox, two posts and a comment (6 things total) and you have your refresh rate on slow (10%), then updates for one resource will be every 60 seconds, every 10 seconds the app will look at one of the 6 resource for updates and round robins.

All that to say:

1.    If you don’t want to feel the slow down of monitors on your app use, keep the refresh rate to slow or very slow. The tradeoff is that you will not be notified immediately when there is new stuff.

2.    If you are the type of person to keep spamming the refresh key to view the latest stuff on a sub, set the refresh rate to fast or very fast, track that sub, open your monitor feed and enjoy.

How to use monitors

In this section, I will refer to the monitor key. The monitor key is the key used in all the monitor keyboard shortcuts by default. You can go take a look in settings > keyboard shortcuts. It should be the minus key next to the 0 key.

To start viewing things in your feed, you will need to track things that interest you. Let’s say you want to track my inbox and r/askreddit.

On the home page, go down to messages, press the monitor key. You should hear a message saying your inbox is tracked. If you always want to track your inbox, make sure to visit the settings, there is an option for that.

Then, switch to r/askreddit. On the page where you hear the rules of the subreddit, press the monitor key. You will hear a message saying it r/askreddit is tracked. Note that your sort matters here. If your sort is new, you will track for new posts, if it’s hot, you will track for hot posts. Set your sort before monitoring.

To confirm you setup your monitors properly, you can view everything you are tracking at any given time with Ctrl + Shift + Monitor key. Go down in there and you should see your two monitors, one for your inbox and the other one for r/askreddit. You can press the Delete key on one monitor to untrack it and remove it from this list. There is also a clear all monitors at the bottom. Note that untracking monitors takes a bit of time to cleanup.

Great, now when you receive a message in your inbox or when there are new posts on r/askreddit, you will hear a notification sound. If that sound is annoying, Shift + Monitor key will turn it off until you turn it back on (does not persist through restarts). Likewise, you can temporarily turn off all monitors, say in case you need some API bandwidth with Alt + Monitor key.

You can view your feed with Ctrl + Monitor key (as long as the feed is not empty). This is a list that can contain posts, comments, messages, everything you track. As usual with the app, you can expand posts for comments, reply, do all the actions you are used to. Reinvoking the view feed action will take you back to the feed. It will not spawn a new feed window, it will take you back. This is useful say you look at the feed, then wander around in there and want to get back quickly to the feed. Remember, if you are tracking comments and you wanted to see the post associated with it, you can use Shift+G like you are used to.

By default, your focus will land in the feed back where you were when you left it, but you can change this in settings to always focus the newest item at the top if you wish.

You will notice that in the monitor feed you will almost always not hear the sound telling you a post or comment has comments. This is because when the items were discovered and added to your feed, they were so new that no one had commented on them yet. The monitor feed does not refresh those items to see if there were comments, because that would be API calls. What you can do is use the right arrow on the items and only then will the app try to see if there were comments.

Templates

Templates specify how messages, posts and comments should be read. When on a message, post or comment, pressing number keys 1-5 will read the message, post or comment according to the template. Pressing Alt+1-5 will set the template as default, meaning that this template will be used for reading all subsequent messages, posts or comments, depending if it was invoked on a message, post or comment.

Default templates for posts and comments are

1 is just the content of the post / comment

2 is the author, created / edited date in the FriendlyAgo format and the subreddit

3 is the number of upvotes / downvotes of the post / comment

4 is the number of comments / replies

5 is a detailed read-out of the post / comment

Default templates for messages are

1 unread (if new), Message type (comment reply or private message), to / from who, message subject (if private message), on which subreddit (if comment reply), message body, when it was sent.

2 Message is from or sent to who and when

3 What the message is replying to (if comment reply), useful to get context

4 Message subject (if private message) and body

5 empty

Pressing the number key associated with the template will read the information. To get the detailed read out by default, press Alt+5. To go back to the minimalist one, press Alt+1.

Note: The post and comment templates are independent. Here they match one to another to make the app intuitive to use, but nothing prevents you from having totally different sets of templates.

Customizing the way screen-reader read posts and comments

The app already comes with default templates that should be useful for most users. Advanced users can modify templates to change the way posts and comments will be read:

Under UserConfig\Templates, there are 5 template files for messages, posts and comments, number matches the default keyboard shortcut to press (press number key 1 to invoke template 1). There is also a reference file for messages, posts and comments to know which fields, functions and conditions can be used in the template file. Saving a template file when the app is opened will trigger the template to be recompiled and will be used immediately, no need to restart the app.

 

You screwed up and want to go back to the default templates? No problem, just delete the template you want to be reverted to default and relaunch the app.

The template file is a custom format that should be easy to read and author. The file is processed line by line. Every line is either plain text or an expression. An expression is enclosed in curly braces.

There are two types of expression: an evaluated expression or a conditionally evaluated expression.

An evaluated expression is simply a field, a function or a string litteral. It is always evaluated. A field can be the post’s title or its body. A function can be to play a sound. A string litteral is enclosed in quotes and is just text.

A conditionally evaluated expression has three parts. First a condition, then a question mark, a “if true” part, then a colon and finally a “if false” part. Whenever a post or comment is templated, the condition will be evaluated. If the condition is true, the “if true” part will be evaluated, otherwise the “if false” part will be evaluated. Example of a condition is if a post has comments (see reference files for full list). The “if true” and “if false” parts can be either a field, a function or a string litteral.

An empty line in the file will act as a line break character.

To use a field, just write the field name inside an expression.

To use a function, type the function name, then a space, then arguments for the function (see reference file) inside an expression.

To write a string litteral, enclose text between quotes when inside an expression.

To use a condition, type the condition’s name inside an expression.

Fields, conditions and functions are case insensitive. However, some arguments of functions might be case sensitive, such as the format for the DateTimeFormat function.

Examples

The way text is formatted, string litteral are using left and right quote on this page, so copy/pasting the examples might not work. String litterals need to be enclosed in regular quotes.

Also, don’t forget that each line of a template file does one thing. It’s either text or a single expression (evaluated or conditional). This is to avoid super long lines and make it easier to read and author with screen-readers.

Example 1: Post’s title and body

For the screen-reader to read the post’s title and body when pressing 2, modify PostTemplate2.txt to the following:

Start of file

{PostTitle}

 

{PostBody}

End of file

Here PostTitle and PostBody are fields (see reference file). The file is read line by line, there can only be one expression per line. The empty line in between the two evaluated expressions will add a line break between the title and body. There will not be a blank line between the post’s title and body, but the title and body will be on separate lines. If there was no blank line in the template file in between the expressions, there would be nothing separating the title and body, not even a space.

 

Example 2: Read post’s pbody, then author and play a sound if post has comments

Start of file

{PostBody}

 

Written by

{PostAuthor}

{PostHasComments ? Play MySound.wav : “”}

End of file

 

The sound MySound.wav has to be placed in UserConfig\Sounds. There is a blank line between PostBody and written by to put them on separate lines. There is a space after “Written by” to put a space between “by” and the post’s author.

The last expression is a conditional expression. First part is the condition. Here it is PostHasComments which will be true if the post has comments and false if the post has no comments. After the question mark is what happens when it is true. Here Play is a function to play a sound. After the colon tells what to do when it is false. In this case, this is an empty string litteral, so it will do nothing. In other words, there will be a sound that will play when the post has comments, but nothing will happen if the post has no comments. It is totally possible to play another sound or to put something that will be read by the screen-reader between the quotes, such as “ post has no comments”.

 

Example 3: Completely different templates based on a condition

This example is not very useful, but it is to show that you can have two completely separate templates based on a condition. For instance, here if a post has comments, we will show its title and body. If the post has no comments, we will read its author and number of upvotes.

Start of file

{PostHasComments ? PostTitle : “”}

{PostHasComments ? NewLine : «»}

{PostHasComments ? PostBody : «»}

{PostHasComments ? «» : PostAuthor}

{PostHasComments ? «» : NewLine}

{PostHasComments ? «» : «Post has »}

{PostHasComments ? «» : PostNumUpVotes}

{PostHasComments ? «» : “ upvotes”}

End of file

 

NewLine is a special field that adds a line break. Notice that there are spaces around the number of upvotes and that we specify the text “ upvotes” at the end, because PostNumUpvotes is just the number of upvotes. An empty string does nothing, so if the post has comments, then only the first three expressions will do something. If the post has no comment, only the expressions after those three will do something.

Troubleshoot

If you feel like the app is not able to authenticate you, delete the token.rt file in UserConfig and launch the app. The app will then ask you to reauthenticate.

To restore to default settings, delete anything you want in the user config folder next to the .exe file. Want to restore your user settings to defaults? Delete the user settings file. You can delete the entire user config folder if you wish, which will be the same as redownloading the app.

Disclaimer

This application has bugs and can crash. I am trying to provide a fast way for users to browse and use Reddit. I don’t plan on handling all the errors like if you’re not connected to the Internet or if you place the application in a place that requires elevated privileges, etc.

That said I will fix bugs and I want users to have a comfortable experience, so don’t hesitate to send an e-mail.

This application might not be covering all if any of your user scenarios. More features will be added over time, RedditForBlind is a personal passion project that I mainly started for myself until I thought it had enough features to interest a folk or two.

 

Contact

For any feedback, bugs, feature requests, anything, write to info@redditforblind.org