LeaseySocial.

The main objective of LeaseySocial is simple: to provide a fast, keyboard-friendly, JAWS-friendly Windows desktop client for Mastodon and Bluesky. Mastodon remains the primary platform, with Bluesky support for the core workflows users need day to day. The app does not attempt to reproduce large multi-service clients or every function of other social media applications. The aim is to make the core social media experience practical and efficient for blind users, especially those using JAWS and, where possible, Braille.

Starting LeaseySocial.

While every effort has been made to provide shortcut keys to operate the app globally, the primary LeaseySocial window is highly recommended. This is because shortcut keys to operate many apps on Windows are at an absolute premium. Too many global shortcut keys can cause conflicts. Applications installed on Windows can create global shortcut keys and you may not know about them.

General Layout.

The main LeaseySocial window is deliberately simple.

It contains:

The Accounts list remains available even if only one account is configured. This keeps startup focus predictable and makes the account context clear. The intention is that all accounts are immediately available. You do not have to open a separate account manager to switch between accounts during normal use.

The information in each row is built from configurable fields.

The default fields are:

As you move through the list with Up and Down Arrow, JAWS reads the row. Left and Right Arrow move between the configured fields and speak the selected field. This allows a user to hear just the author, just the post text, just the date, just the client used or the status such as Public, Followers only or Direct message.

The list view is multi-column. This means that you can also use the JAWS column reading keys if you wish: Control+JAWS Key+1, 2, 3 etc. JAWS speaks the column header followed by the information in the column.

The order of these fields, and whether they are included at all, is controlled in Options on the Columns tab. This is account-specific.

LeaseySocial has a standard menu bar. This keeps the command set easier to browse with JAWS, while preserving the context menu for common actions on the focused post.

The main menus are File, Post, Navigate, Timelines and Tools.

Accounts.

LeaseySocial supports multiple Mastodon and Bluesky accounts.

The Accounts list appears before the Timelines list. If one account is present, it contains that account. If two or more accounts are present, use Up and Down Arrow to choose an account.

When an account is selected, the Timelines list changes to show the timelines configured for that account.

All configured Mastodon accounts are streamed while the app is running. This means you can receive new posts, mentions and notifications from more than one Mastodon account.

When a new item is spoken for a non-current account, the account name is included first so you know which account received it. This also applies if you are focused away from the application.

Example:

brian_hartgen. New mention from Team-FM: ...

Manage Accounts is available from Options, Control+Comma or from the File menu.

The Manage Accounts dialog lets you:

If you delete an account, you are asked to confirm.

The account login process opens the Mastodon authorisation page in the browser. After authorising the app, you paste the code into LeaseySocial.

Bluesky accounts use a handle and an app password.

To create a Bluesky app password:

https://bsky.app/settings/privacy-and-security.

The app password is used only for logging in to Bluesky. Do not enter your normal Bluesky password.

Bluesky support includes:

Bluesky notes:

Ordinary Bluesky timeline posts are public in this version. Bluesky direct messages are available where the account's app password allows DM access. Post media upload, scheduling, polls, pinning, filters and list management are Mastodon features in LeaseySocial. Bluesky profile image upload is supported through Edit My Profile.

If a Bluesky account stops loading after working previously, use Reauthenticate Bluesky Account from More Actions and enter the Bluesky app password again. This refreshes the saved Bluesky session without deleting and re-adding the account.

Timelines.

The core timelines are:

Other timelines can include:

Control+W closes a temporary or custom timeline. You are asked to confirm if you have not changed the setting for confirmation dialogs under Options. The check box is labeled: Provide confirmation dialogs. Uncheck the box to carry out the action immediately.

Temporary timelines, such as user timelines, searches, list timelines and instance timelines, can persist across sessions if they remain in the Timelines list.

The app remembers your position in each timeline where possible. If you close the app and restart it, or move from one timeline to another and back again, it should try to restore the same post provided that post is still present in the loaded set.

Messages is the timeline for direct-message conversations. On Mastodon it is built from the server conversations endpoint. On Bluesky it uses the chat conversations list, so the Bluesky app password must include DM access.

The number of posts loaded for most timelines is configurable in Options on the General tab. The default is 100. Mastodon servers often cap a single request at around 40 items, so LeaseySocial requests additional pages where possible to reach the selected amount. The maximum number is 400.

Timeline Order and Timeline Management.

Open Options with Control+Comma.

The Timelines tab lets you rearrange the timelines for the current account.

The Timelines list is a standard list box.

Home, Mentions, Notifications and Sent are regarded as required core timelines.

There is also a Restore to Defaults button. This restores the core timeline set. Custom timelines cannot be restored if they have been removed, because the app cannot know which custom timelines a user still wants.

When a timeline is moved, JAWS gives a short confirmation such as:

Mentions moved below Home.

Reading Posts.

Use Up and Down Arrow in the Posts list to move through posts.

Use Left and Right Arrow to move through the configured fields in the focused row.

Press Enter to open the focused post in a Post Details dialog.

Numpad Enter also opens the focused post.

The Post Details dialog contains:

Escape closes the Post Details dialog.

If the post is from your own account, Follow and Unfollow buttons are not shown.

If the post is from your own account, the profile button is Edit Profile.

If the post is from someone else, the profile button is Read Profile.

For boosted posts, the app tries to say both who boosted the post and who originally wrote it.

Example:

Belinda Jones boosted Lizzie Williams.

Quoted posts are also included in the full post text where the instance provides the quote data.

Where Am I.

Control+Shift+I is Where Am I.

This is intended to give useful context without forcing the user to inspect the whole window.

In the main window, it can say things such as:

Account name BrianHartgen, Mentions timeline, post 12 of 80.

In Options, it can say which settings page is being configured.

In the Compose dialog, it gives composition information such as the current field, how many characters have been typed and how many characters remain.

In feature dialogs such as Leasey Command Centre, Soundpacks Manager, Search, Report and Direct Message, it identifies the dialog and the current field or selected item.

The menu bar gives access to the wider command set without making the context menu too large.

File contains account, export and Options commands.

Post contains posting, reply, quote, favourite, bookmark, vote, report and delete commands.

Navigate contains commands for conversation, context, user timeline, profile, links, media, image description, find, copy and Where Am I.

Timelines contains refresh, close timeline, instance timelines, pinned posts, scheduled posts, blocked users, muted users, following and followers. It also contains a Discover submenu.

Tools contains Lists Manager, Filters Manager, Nicknames Manager, profile pinning, mute, block and streaming commands.

Press the Applications key or Shift+F10 to open the context menu.

The first part of the context menu contains common commands directly.

These include:

At the bottom is More Actions.

More Actions includes:

Less frequent and broader navigation commands are now easier to find from the menu bar.

Leasey Command Centre.

Control+Shift+C opens the Leasey Command Centre.

This is a command search feature for quickly finding actions without remembering their keystrokes or browsing the menu bar.

The dialog contains:

Type part of a command name, such as bookmark, mute, profile or reply. The Matching commands list updates as you type.

Some plain-language words are also supported. For example, save can find Bookmark, like can find Favourite, and browser can find Open Post on Web.

If you press Tab from the Command edit field without typing anything, the Matching commands list shows all available commands.

If you type something, JAWS may not announce the updated results immediately. Press Tab to move to the Matching commands list and review the results.

Arrow through the matching commands and press Enter or Numpad Enter to carry out the selected command.

Control+Shift+I works in this dialog. In the edit field, it reports the search text and number of matching commands. In the results list, it reports the selected command and its position.

New Posts.

Press Control+N to compose a new post.

The Compose dialog uses standard Windows controls.

The main controls include:

The Media file, Browse and Alternative text controls are only shown after Attach media is checked.

If Poll is checked, the media upload controls are hidden because Mastodon does not allow a poll and media attachment in the same post.

The post text field is deliberately wide so JAWS reads more comfortably while composing. It is also set not to word-wrap, so when multiline composition is enabled JAWS should move through the real lines typed by the user rather than short wrapped visual lines.

By default, pressing Enter in the compose edit field activates OK. If Use Control+Enter to send posts instead of Enter is enabled in General Options, Enter inserts a new line and Control+Enter sends the post.

The title bar shows the character count, for example:

123 of 5000 characters.

If you exceed the instance character limit, a sound can be played if sounds are enabled.

The Spell Check button checks the message text. If the post or reply begins with one or more usernames, such as @brian_hartgen followed by a space, those leading usernames are left out of the spell check and put back unchanged afterwards.

Auto-complete is available with Alt+A. If the cursor is after a partial username beginning with @, such as @bri, LeaseySocial searches for matching accounts and inserts the selected username. If there is no @ username fragment, Alt+A offers people you follow so you can choose someone even if you do not know the username.

The Visibility combo box includes:

Replying.

Control+R replies to the author of the focused post only.

When the Reply dialog opens, the edit field is prefilled with the author's username, followed by a space. The cursor is placed after the space so you can type immediately.

Example:

@brianhartgen.

Control+Shift+R replies to all relevant users mentioned in the post, but it should not include your own username.

This distinction is important. Reply replies to the author. Reply All includes additional participants where appropriate.

General Options includes a check box labelled Put reply usernames in a separate recipients field. When this is checked, the reply text field starts empty. The username or usernames are placed in an editable Recipients field immediately before the reply text field. From the reply text field, press Shift+Tab once to move to Recipients. When the reply is sent, LeaseySocial combines the Recipients field with the reply text.

This option is useful if you often press Control+A and Delete to start a reply again. The usernames are kept outside the main message text so they are less likely to be deleted by mistake.

Quoting.

Control+Q quotes the focused post.

Where the Mastodon instance supports quote posts, LeaseySocial sends the quote using the instance's quote-post API. In that case, LeaseySocial does not add the quoted post link to the body of your text.

Where the instance does not support quote posts, the app falls back to inserting a link to the original post using a simple RE: style prefix.

Mastodon does not allow a native quote post to include a media attachment or a poll. If you try to combine these, LeaseySocial will show an error before sending.

Quoted posts should be included when reading the full post, and links inside quoted posts should be included when using Open Links.

When Mastodon exposes an inline fallback beginning with RE: rather than a full quote object, LeaseySocial tries to render it in a cleaner form, such as Quoted post by followed by the quoted author and text. If only a bare fallback URL is available, it is hidden from the main spoken text.

Boosts, Favourites and Bookmarks.

Control+B boosts the focused post.

When a post is boosted, LeaseySocial should say who was boosted.

Control+K bookmarks the focused post.

Control+Shift+K removes the bookmark.

Control+Shift+F favourites the focused post.

Control+Alt+F unfavourites the focused post.

Favourite and Unfavourite are also available from the Post Details dialog.

Pinned Posts.

Pin Post to Profile pins one of your own posts to your Mastodon profile.

Unpin Post from Profile removes one of your pinned posts from your profile.

Pinned Posts opens a timeline containing the posts currently pinned to your profile. From there, you can use the normal edit, delete or unpin commands where appropriate.

You cannot pin or unpin another user's post.

Pinned Posts is available from the Timelines menu.

Scheduled Posts.

Scheduled Posts is available from the Timelines menu.

It opens a timeline containing Mastodon posts you have scheduled but which have not yet been published.

The scheduled timeline shows the scheduled text, the scheduled date and time, and the visibility where the server provides it.

This feature is Mastodon-only.

Deleting and Editing Your Own Posts.

Press Delete on a post you have sent to delete it.

You cannot delete another user's post.

Alt+E edits a post you have sent.

If an action is not allowed by the server, or if the post is not yours, the app should show a clear accessible error.

Direct Messages.

Control+D opens the Direct Message dialog.

The dialog contains:

The Auto-complete button is immediately after the Message field. It searches for usernames matching what is typed in the Username field. Alt+A also performs auto-complete. If the Username field is empty, auto-complete offers people you follow.

Direct messages always keep the recipient separate from the message text. Focus starts in the Message edit field when a recipient is already known. Shift+Tab from Message moves to Username.

The title bar says Direct Message to the selected username, followed by the character count. If no username is entered yet, the title says that there is no recipient.

The Spell Check button checks the message text.

The message is sent with direct visibility.

If you reply to a direct message, the reply dialog title says Direct Reply so that the destination is clearer before sending.

Incoming direct messages can still appear in Mentions on Mastodon, but LeaseySocial also uses the Messages timeline and the Direct message received sound event where possible.

Control+Slash opens Search.

The Search dialog contains:

The Search type combo box includes:

Search results open as a timeline named Search followed by the search term.

Search timelines can persist across sessions if they are left in the Timelines list.

When the search is specifically for users, the results list is named Users for JAWS rather than Posts. Hashtag searches are similarly named Hashtags.

Followed Hashtags is available from the Timelines menu for Mastodon accounts.

It lists the hashtags you follow on the server. This is a Mastodon feature.

Discover.

The Timelines menu contains a Discover submenu.

For Mastodon accounts, Discover includes:

Trending Posts opens posts the server currently considers to be trending.

Trending Hashtags opens a list of trending hashtags.

Trending Links opens a list of links the server currently considers to be trending.

Followed Hashtags opens the hashtags followed by the current account.

For Bluesky accounts, Discover includes:

Bluesky Suggested Follows opens a dialog with General suggestions as the first choice. If a post is focused, the dialog may also offer users from that post, and the current account handle may be offered as well. Choosing General suggestions asks Bluesky for general account recommendations. Choosing or typing a specific handle asks Bluesky for accounts similar or related to that user.

Find Bluesky Accounts by Interest asks for a subject, such as entertainment news, assistive technology, radio, music, sport or politics. LeaseySocial then searches Bluesky profiles, recent posts and starter packs, and opens a Users timeline containing accounts which may be relevant.

Each result is presented as a normal user item. Press Enter to view the profile. Use the normal follow and unfollow commands if you decide to follow the account.

Where possible, the result includes a short reason, such as Profile match, Posted about this subject, or Starter pack.

Find in Current Timeline.

Control+F searches for text in the current visible timeline.

F3 finds the next match.

Shift+F3 finds the previous match.

This is a local find command. It searches what is currently loaded in the Posts list; it does not ask the Mastodon server for new results.

Copying Posts.

Control+C copies the focused post to the clipboard.

The copied text includes a readable author line and the post body. For boosts and notifications, the copied text should include the relevant context, such as who boosted or favourited the post.

Export Current Timeline is available from the File menu.

It writes the currently visible timeline to a text file chosen with a standard Save dialog.

Export All Timelines is also available from the File menu. It exports each configured timeline into one text file, using cached data where available and loading timelines as needed.

Control+O opens a list of links found in the focused post.

Links from quoted posts are included where the quote data is available.

The links are shown in a standard list box. Arrow to the desired link and press Enter to open it in the default browser.

The app attempts to avoid presenting only the Mastodon status URL when there are useful web links in the post.

Media and Image Description.

If a post contains an image, the Posts list begins the post text with:

Image attached.

If a post contains audio, the Posts list begins the post text with:

Audio attached.

If a post contains media more generally, sounds can be configured to play when moving over the row.

Describe Image with ChatGPT is available from More Actions, or by pressing Control+Shift+D.

The OpenAI API key is read from Leasey's ChatGPT settings so there is no special configuration to do.

Audio playback can pass playable audio attachments to Leasey Media Centre. Control+Enter is the shortcut for Play Media.

Content Warnings.

In the Compose dialog, check Content warning to enable the content warning edit field.

Enter the warning text in that field.

When sent, the post is submitted to Mastodon with the warning text.

Reading content warnings is controlled from Options on the Reading tab.

The Content warnings combo box contains:

This is account-specific.

Thread Mode.

Thread Mode is available in the Compose dialog.

When Thread Mode is checked, after one part of the post is sent, the compose edit field appears again so the next part of the thread can be written.

Scheduling and Thread Mode are not intended to be used together.

Scheduling Posts.

Scheduling is available in the Compose dialog.

Check Schedule Post.

The scheduling controls use combo boxes rather than free typing.

The controls include:

The time format is 12 hour.

When a post is scheduled, LeaseySocial sends it to the Mastodon instance as a scheduled post. It does not immediately refresh the timeline as though the post had already been published.

Scheduled Posts can be opened from the Timelines menu. Press Delete on a scheduled post to delete it from the server after confirmation.

Polls.

Polls are available near the end of the Compose dialog for Mastodon accounts.

Poll creation and poll voting are not shown for Bluesky accounts because Bluesky does not currently provide native poll support.

Check Poll to enable poll creation.

The poll controls include:

The Option text edit field is labelled so JAWS should announce it correctly.

At least two poll options are required.

Poll duration includes choices shorter than a day, such as 5 minutes, 15 minutes, 30 minutes, 1 hour, 3 hours, 6 hours and 12 hours, as well as 1 to 7 days.

LeaseySocial checks the Mastodon instance configuration for poll limits. If the instance only allows four options, the fifth option is blocked before the post is sent. The app also checks the instance's maximum characters per poll option and its minimum and maximum poll duration where those values are provided.

Mastodon does not allow polls and media attachments in the same post, so LeaseySocial prevents that combination.

When opening a post containing a poll, the Post Details dialog includes poll information where the server provides it.

Having selected the item to vote in a poll, perhaps by pressing Control+Shift+V, The voting dialog shows radio buttons for a single-choice poll and check boxes for a poll allowing multiple selections.

Conversations.

Control+G opens the conversation for the focused post.

The conversation opens as a temporary timeline showing the available related posts.

If you have chosen to show newest posts at the bottom, the conversation order should respect that preference.

Conversation timelines can be closed with Control+W.

If the focused post is a reply, Control+Shift+Semicolon speaks the context, meaning the post to which the focused reply is responding.

User Timelines.

Control+U opens a User Timeline dialog.

If a post is focused, the username field is prefilled with the focused user's username.

For boosted posts, the dialog should offer both the original author and the person who boosted the post where possible.

You can type a username without the at sign if the user is on the same instance.

Example:

JemimaPuddleDuck.

For users on another instance, enter the full address.

Example:

JemimaPuddleDuck@quack.space.

The retrieved posts open as a timeline named User followed by the username.

Following and Followers.

People I Follow is available from More Actions.

People Following Me is available from More Actions.

People I Follow Who Don't Follow Me is available from More Actions.

People Who Follow Me That I Don't Follow is available from More Actions.

Each opens a timeline-style list of accounts.

This gives a way to browse the accounts you follow, the accounts following you, and two comparison groups. The comparison groups are calculated locally by comparing account IDs from the following and follower lists.

LeaseySocial uses paginated loading for these lists where the platform supports it. It currently loads up to 2000 accounts for each following or follower list, including the comparison groups.

Follow and Unfollow.

Control+L follows a user.

Control+Shift+L unfollows a user.

When invoked from a post, the app opens a dialog containing users found in the post. This can include the author, boosted-by user, quoted author and mentioned users where available.

You can arrow through the choices and press Enter.

If the required user is not in the list, type a full username into the edit field.

The same style is used for follow and unfollow.

In the Post Details dialog, Follow or Unfollow buttons are only shown when appropriate. If you already follow the author, Follow is not shown. If the post is from your own account, neither Follow nor Unfollow is shown.

Control+Shift+Y speaks the relationship for the focused user. This works on a post or on a user shown in a user-style timeline, such as followers, following, suggested follows or blocked users.

It reports whether you are following that user and whether that user is following you, for

example:

I am following Example User. Example User is not following me.

Speak Relationship is also available from the Leasey Command Centre.

Profiles.

Control+Shift+P opens the View Profile dialog.

If a post is focused, the Username field is prefilled from the focused post. You can accept that user or type over it with another username.

Press Enter to display the profile in the app.

From the Post Details dialog, use Read Profile for another user or Edit Profile for your own account.

Edit My Profile is also available from the File menu and from the Leasey Command Centre.

Read Profile displays available profile information in the app, including follower count, following count, post count, profile URL and, where the instance provides it, the date and time of the user's most recent post.

For Mastodon accounts, Edit Profile allows considerably more control without sending you to the instance web site.

The Edit Profile dialog contains standard accessible controls arranged across tabs.

The Text tab contains:

The title bar reports how many characters have been typed for the display name and profile text. LeaseySocial asks the Mastodon instance for the profile limits where available.

The Images tab contains:

The Options tab contains:

The Fields tab contains the profile fields allowed by the instance. These are the extra profile entries many Mastodon accounts use for web site, location, pronouns or similar information. Each field has a name edit field and a value edit field. Leave a field blank to clear it.

For Bluesky accounts, Edit My Profile opens a Bluesky profile editor in the app.

The Bluesky editor supports:

Bluesky allows a display name of up to 64 characters and profile text of up to 256 characters. Avatar and banner images must be PNG or JPEG files no larger than 1 MB.

The Bluesky editor preserves the existing profile record and updates only the profile text and any selected images.

Reports.

Report Post and Report User are available from the Post menu and from More Actions on the context menu.

Report Post reports the author of the focused post and can include the focused post as evidence.

Report User reports the author of the focused post without attaching the post.

The report dialog uses standard controls:

This feature is Mastodon-only.

Mute and Block.

More Actions includes:

These use Mastodon server features.

Mute Conversation applies to the current conversation where the server supports it.

Mute User, Unmute User, Block User and Unblock User operate on the selected user.

Blocked Users and Muted Users are available from the Timelines menu.

Each opens a timeline-style list of accounts, so you can review who is currently blocked or muted.

Local and Instance Timelines.

Recent Posts on This Instance opens a timeline of recent local posts.

Recent Posts on Another Instance asks for an instance name, such as:

hartgenconsultancy.social.

It then retrieves recent local posts from that instance.

These timelines are saved for the current account and can persist across sessions if they remain in the Timelines list. To remove one, use the Timelines tab in Options.

Lists Manager.

Control+Shift+S opens Lists Manager.

The Lists Manager displays Mastodon lists already present on the server. This means lists created in another client should appear.

The dialog contains:

New List asks for:

The Show Replies to combo box includes:

Existing lists can be edited or deleted.

Members opens a list of accounts already in the list. Accounts can be removed.

Add Account asks for a username. Mastodon normally requires that you already follow an account before it can be added to a list.

Open Timeline opens the selected list as a timeline.

Filters Manager.

Filters Manager is available from More Actions.

It contains two sections:

They are applied retrospectively to the current cached timeline. For example, if a Home timeline already contains boosts and you create a local filter for boosts, the boosts should disappear from the visible timeline when the manager closes. The cached data is not deleted.

A LeaseySocial filter contains:

The available local filter categories are:

If Contains text is filled in, the text must match for the filter to apply.

If no category is checked but Contains text is filled in, the filter works as a text-only filter.

Server keyword filters use Mastodon's server filter API.

The server filter section can:

When creating a server filter, the dialog contains:

Server contexts include:

Server actions include:

Server filter behaviour depends on the Mastodon instance and the permissions available to the app.

Nicknames Manager.

Nicknames Manager is available from More Actions.

This is similar to a small speech dictionary.

It lets a user enter:

When the manager is opened from a focused post or user result, choosing New pre-fills Name or username with the focused name where available.

Example:

@verylongcomplexusername.

could become:

John.

The nicknames are account-specific.

They apply retrospectively when the current timeline reloads.

They are applied to:

This is useful where usernames or display names are complex, difficult to remember, contain unusual punctuation or are not convenient to hear repeatedly.

Options.

Open Options with Control+Comma.

Options contains these tabs:

More configuration is expected later.

General Options.

The General tab contains:

Restore to Location Default returns to the regular location for storing the data.

Show newest posts at bottom reverses the timeline display so the newest post appears at the bottom. Many users prefer this because new streamed posts arrive where they expect.

Condense multiple leading mentions changes how leading usernames are read. For example, if a post begins with two or more mentions, the app can say the first name and indicate that there is one more, rather than reading every username at the start of the row.

When you open the post with Enter, the full uncondensed text is still shown.

Put reply usernames in a separate recipients field changes Reply and Reply All dialogs. Instead of putting usernames at the start of the reply text, LeaseySocial puts them in an editable Recipients field. The reply text field can therefore start empty while the recipients are still included when the post is sent. The Recipients field is immediately before the reply text field, so Shift+Tab from the reply text moves to Recipients.

Direct messages always keep the recipient separate from the message text. When a recipient is already known, focus starts in the message field and Shift+Tab moves to Username.

Show post times as relative times changes post timestamps to wording such as 3 minutes ago, 1 hour ago, or 1 day ago. When this is checked, relative wording is used instead of the exact 12 hour or 24 hour time.

Minimize to system tray allows the app to remain running in the tray when minimized.

Provide confirmation dialogs controls whether LeaseySocial asks before destructive or workflow-changing actions such as closing a timeline, deleting a post, deleting a filter, removing a list member, changing the data location or deleting an account. If this is unchecked, LeaseySocial carries out those actions without the extra confirmation prompt. Error and information dialogs are still shown when needed.

Use Control+Enter to send posts instead of Enter changes the Compose and Direct Message dialogs so Enter inserts a new line and Control+Enter sends the post or message.

Posts to load controls how many posts LeaseySocial tries to load for most timelines. The default is 100. Mastodon servers often cap individual requests, so LeaseySocial may request additional pages to reach the selected amount where the server allows it.

For Mastodon, each API call usually returns no more than 40 posts. A setting of 400 can therefore make up to 10 calls for that timeline. Higher values can make initial loading slower, especially across several accounts. Bluesky uses a lower app cap. If more than 40 posts are being requested for the focused timeline, LeaseySocial speaks a short retrieval started message and a retrieval complete message. Sound events also exist for retrieval started and retrieval complete when the selected sound pack provides them.

LeaseySocial also keeps a local timeline cache for configured timelines. This is automatic. The cache is stored under the app's Cache folder and keeps up to 1000 items per account and timeline. Cached items should appear quickly after startup, then the app refreshes the timeline in the background and merges newer items into the cache.

Clear Timeline Cache clears the cached timelines for the current account. Use this only when cached timeline data appears to be causing a problem or when you specifically want LeaseySocial to load fresh timeline data.

Reading Options.

The Reading tab is account-specific.

It contains:

The Content warnings combo box controls how posts with content warnings are presented.

Show post text only gives the post text without first announcing the warning.

Show content warning followed by post text says the words Content warning, then the warning term, followed by the post text.

Hide post text and show content warning only shows just the warning text. This is useful if the user does not want protected text exposed automatically while arrowing through the timeline.

Remove emojis and other unicode characters from post text strips non-ASCII characters from post text. This can reduce clutter when JAWS speaks emoji, symbols or unusual characters in a way the user finds distracting.

Sync home timeline position with Mastodon attempts to update the Mastodon Home marker as you move through the Home timeline. This may help if the same account is used in more than one Mastodon app, but it depends on how other apps and the instance use Mastodon markers.

Columns Options.

The Columns tab is account-specific.

It controls what is spoken and Brailled for each item in the Posts list, and the order in which that information appears.

The current fields are:

Status indicates the post visibility or item type, such as Public, Unlisted, Followers only, Direct message, User or Hashtag.

The Columns list is a standard list box.

At least one field must remain.

Restore to Defaults brings back the full default set.

The Posts list reflects the order and fields chosen here. For example, if you only want Author and Post spoken in the main list, remove Date, Client and Status. If you want Status spoken before the post text, move Status above Post.

Left and Right Arrow in the Posts list also follows the same configured order.

The app uses this column configuration rather than the JAWS CustomizeListView script because the Posts list is now a list box rather than a multi-column Windows list view.

Speech Options.

The Speech tab is account-specific.

It contains a check box labelled Mute speech and sounds for this account.

When this is checked, new items for the current account are not spoken or Brailled and timeline sounds for that account do not play. Other accounts are not affected.

It contains check boxes for the timelines available to the current account, including custom timelines such as posts from a specific instance. Each check box is clearly labelled with the timeline it controls.

Each check box controls whether new items for that timeline are spoken and Brailled when they arrive.

The controls are individual check boxes, so you can Tab to each timeline and check or uncheck it.

Sounds Options.

The Sounds tab is account-specific.

It contains:

Play startup sound controls whether the ready sound is played when the app has finished loading.

If no sound pack has been chosen for the account, LeaseySocial selects the Default sound pack when it is available.

Sound packs live under the app's Data\Sounds folder. What that means in practice is that not only can you create your own soundpacks but also they are synchronised across devices potentially. Each sound pack has its own sub-folder.

Users can create their own sound packs with the Soundpacks Manager.

The Soundpacks Manager contains:

The Default soundpack cannot be edited or deleted from the manager.

When you add or edit a soundpack, the soundpack editor contains:

To create a soundpack:

When the soundpack is saved, LeaseySocial copies the chosen WAV files into the soundpack's folder and gives them the filenames it expects. This means the soundpack does not depend on the original files remaining in their old locations.

The Available sounds list shows the sounds found in the selected sound pack using friendly descriptions, such as Startup sound, New home post, Post contains a poll, and Boundary, top or bottom of list.

Use Preview Sound to hear the selected sound at the current volume.

The preview in the Sounds tab and the Soundpacks Manager works even if Leasey sounds are disabled, so users can learn and test a pack before enabling it.

Sounds supplement speech and Braille. They do not replace speech or Braille.

Examples of sound events include:

Shortcut Keys Options.

The Shortcut keys tab lets you review and change shortcut keys for LeaseySocial actions.

The tab contains:

Choose an action from the Actions list. The Shortcut key edit field then shows the key assigned to that action, if any.

The Description field explains what the selected action does. It is in the Tab order, so you can move from the Actions list to Description and read the explanation before deciding which shortcut to assign.

Type the keystroke as text.

Example:

ALT+Shift+Up.

The app does not capture the keystroke physically. You type the words and symbols.

If Make this shortcut global is unchecked, the shortcut works only while LeaseySocial is focused. This is useful if you work in the app often and want extra app commands without using global Windows-wide hot keys.

In addition to the regular menu and command centre actions, the Actions list includes:

These are intended for users who want to read timelines without focusing the LeaseySocial window.

Repeat Focused Item speaks the currently focused row again. This is especially useful when you are moving through a timeline with global shortcuts.

Repeat Last Spoken Message repeats the most recent message LeaseySocial sent through speech, such as a new notification announcement.

Discover actions, such as Discover: Trending Hashtags, Discover: Trending Links and Discover: Open Hashtag Timeline, are included in the Actions list so they can be assigned shortcut keys even though they live in menu submenus.

Assign saves the shortcut for the selected action in the dialog. OK saves the Options changes to disk.

Clear removes the shortcut from the selected action. Reset This Shortcut restores the selected action to its default. Restore Defaults restores all shortcut keys to their defaults.

If LeaseySocial detects a duplicate shortcut assignment in the same scope, it warns you. Some Windows-wide conflicts can only be detected when Options is saved and LeaseySocial tries to register the global shortcut.

Streaming.

If multiple accounts are configured, all accounts are monitored.

Mastodon uses the Mastodon streaming connection.

Bluesky is monitored by repeatedly checking Home, Mentions and Notifications. The first check establishes the current position, and later checks announce items that arrived after that point.

If a local LeaseySocial filter hides a streamed item, it should not be inserted into the visible list and should not be spoken, Brailled or a sound played.

Startup Mentions and Notifications Summary.

At startup, LeaseySocial checks whether there are new Mentions or Notifications since the last time the app saw those timelines.

If there are new items, it can say something like:

brian_hartgen: 2 new mentions and 3 new notifications.

The app avoids false large counts when the previously seen item is no longer in the first loaded batch.

If a quoted post is still pending when a timeline loads, LeaseySocial checks the status again in the background. It retries after about 10 seconds, 25 seconds, 55 seconds, 115 seconds and 235 seconds from first detection.

Braille Status Bridge.

LeaseySocial writes short status messages to a shared Braille status file and calls a JAWS script through the JAWS API. This allows the same brief confirmations and new-item messages that are spoken to be presented as Braille Flash Messages for users with a Braille display.

The status text is written to:

C:\LeaseyData\BrailleSupport\BrailleStatus.txt.