Getting started
KeySnap lives in the notification area and watches for the abbreviations you define. When you type one, it deletes what you typed and puts your replacement in its place — in whatever program you happen to be typing in.
Your first shortcut
- Open KeySnap and click New shortcut.
- In Shortcut, type something you would never type by accident. A leading
semicolon is a good habit:
;sigrather thansig. - In Replacement, type what you want to appear.
- That is it. There is no save button — KeySnap writes changes to disk a couple of seconds after you stop typing.
Switch to any other program, type ;sig, and watch it happen. If it does
not, jump to troubleshooting.
Choosing abbreviations. The best ones are short, memorable and impossible to
type by accident. A prefix character does that work for you: ;,
/ and \ almost never begin a real word. Without one, a
shortcut like addr will fire in the middle of "address" unless you
leave the "stands alone as a word" option on.
How shortcuts fire
Every shortcut inherits a default from Settings → Matching, and can override it on its own Options tab.
| Mode | Fires | Good for |
|---|---|---|
| As soon as I finish typing it | The instant the last character of the abbreviation is typed | Prefixed shortcuts like ;sig. The default. |
| After a space or punctuation | When you type a space, full stop, comma, Enter or Tab afterwards | Word-like shortcuts such as btw, where you want to be able to
type btwn without it firing. |
| Only after a prefix character | When the abbreviation is immediately preceded by one of your prefix characters | Keeping shortcut names clean while still requiring a deliberate signal. |
Standing alone
Only fire when the shortcut stands alone as a word is on by default. With it on,
btw fires in "well btw" but not in "abcbtw". Turn it off for shortcuts you
deliberately want to fire inside a word — expanding ing into something, for
instance.
Keeping what you typed
By default KeySnap deletes the abbreviation before inserting the replacement. Turn Delete what I typed off and the replacement is appended instead, leaving the abbreviation in place. Useful when the abbreviation is itself part of the output.
Capitals
Under Settings → Matching → Capitals, choosing Follow what I type makes one shortcut do the work of three:
| You type | You get | Why |
|---|---|---|
btw | by the way | As authored. |
Btw | By the way | You capitalised, so the replacement is capitalised. |
BTW | BY THE WAY | You shouted, so it shouts back. |
An abbreviation you deliberately wrote in capitals — ABN, say — is exempt,
so it never comes out shouting.
Token reference
Anything in braces is worked out when the shortcut fires. Write {{ and
}} when you want literal braces. A token KeySnap does not recognise is left
exactly as you typed it, so snippets full of JSON or code come out unharmed.
| Token | What it does | Example |
|---|---|---|
{date} | Today's date | {date} |
{date:format} | Date with a custom format | {date:dd/MM/yyyy} |
{date:+7d} | Date shifted by an offset | {date:+7d:dd MMM yyyy} |
{time} | Current time | {time} |
{time:HH:mm} | Time with a custom format | {time:HH:mm} |
{datetime} | Date and time together | {datetime} |
{day} | Day name | {day} |
{month} | Month name | {month} |
{year} | Four-digit year | {year} |
{clipboard} | Whatever is on the clipboard | {clipboard} |
{selection} | The text you had selected | {selection} |
{cursor} | Where the caret lands afterwards | Dear {cursor}, |
{input:Label} | Ask for a value before expanding | {input:First name} |
{input:Label|default} | Ask, with a value pre-filled | {input:Company|Acme} |
{textarea:Label} | Ask for a multi-line value | {textarea:Notes} |
{choice:Label|A,B,C} | Ask, offering a drop-down | {choice:Priority|Low,Normal,High} |
{key:Name} | Press a key | {key:Enter} |
{key:Ctrl+A} | Press a combination | {key:Ctrl+A} |
{key:Tab*3} | Press a key several times | {key:Tab*3} |
{delay:ms} | Pause mid-expansion | {delay:250} |
{waitkey} | Wait for you to press a key | {waitkey} |
{uuid} | A fresh identifier | {uuid} |
{random:1-100} | A random number in a range | {random:1-6} |
{counter:name} | A number that increments each use | {counter:invoice} |
{math:expr} | Work out a sum | {math:19.99*1.1} |
{upper:text} | Force upper case | {upper:{clipboard}} |
{lower:text} | Force lower case | {lower:{clipboard}} |
{titlecase:text} | Force title case | {titlecase:{input:Name}} |
{trim:text} | Strip surrounding whitespace | {trim:{clipboard}} |
{env:NAME} | An environment variable | {env:USERNAME} |
{user} | Your Windows user name | {user} |
{machine} | This computer's name | {machine} |
{app} | The app you are typing into | {app} |
{window} | The active window's title | {window} |
{file:path} | Insert a text file's contents | {file:C:\notes\legal.txt} |
{snippet:trigger} | Insert another snippet | {snippet:;sig} |
{nl} | A line break | {nl} |
{tab} | A tab character | {tab} |
{{ | A literal opening brace | {{ |
Date formats and offsets
Formats are standard .NET date formats: d, dd,
ddd, dddd, M to MMMM,
yy, yyyy, HH, mm, ss,
tt.
Offsets come before the format and are separated from it with a colon. Units are
d days, w weeks, mo months, y years,
h hours, m minutes, s seconds, and you can chain
them: {date:+1mo-1d:d MMMM yyyy} is a day short of a month from now.
Arithmetic
{math:...} understands + - * / % ^, brackets, and the
functions abs, round, floor, ceil,
sqrt, min, max and pow. It can read
values from fill-in fields, which is what makes it useful:
{math:round({input:Hours} * 145, 2)}.
It is arithmetic and nothing more. There is no scripting engine behind it, and a snippet cannot use it to run anything.
Fill-in fields
A shortcut containing {input:...}, {textarea:...} or
{choice:...} asks you for those values before it types anything. The same
field used twice is asked for once and inserted in both places.
;bookingHi {input:Name}, You are booked in for {choice:Service|Service,Repair,Quote} on {date:+2d:dddd d MMMM} at {input:Time|9:00 am}. {textarea:Anything else} Thanks, {user}
Press Enter to move between fields and Enter on the last one to insert. Esc cancels — and puts back exactly what you typed, so nothing is lost.
Keys and pauses
{key:...} presses keys rather than typing characters, which lets a shortcut
drive a form. Names are the obvious ones: Enter, Tab,
Esc, Home, End, Delete,
Backspace, Arrow Left and friends, F1 to
F12, and any letter or digit. Add modifiers with + and repeats
with *.
;newjob — fills three fields in a form{input:Customer}{key:Tab}{input:Reference}{key:Tab}{delay:150}{input:Description}{key:Tab*2}{key:Enter}
{delay:250} waits a quarter of a second, which some slow web forms need
between fields. {waitkey} stops until you press any key, so you can check
something before the rest of the shortcut runs.
Scope rules
Each shortcut works everywhere by default. On the Scope tab you can restrict it to particular windows, or exclude particular windows.
- Program — the executable name without the extension, such as
outlookorchrome. - Window title — matches what is in the title bar, so you can target a particular document or web page.
- Window class — for the rare case where two programs share a name.
- Full path — to distinguish two copies of the same executable.
Each rule can match on contains, is exactly, a wildcard using
* and ?, or a regular expression. The
Use the window in front button fills the pattern in from whatever you were last
working in, which is easier than guessing an executable name.
The same abbreviation, twice. Scope is what makes that useful. Give
;addr your work address scoped to Outlook and your home address
everywhere else, and the right one fires in each.
Groups and hotkeys
Groups are folders. Put a client's shortcuts in their own group and you can switch all of them off at once when the job ends, without deleting anything. Turning a group off turns off everything inside it, including nested groups.
Any shortcut can also have a global hotkey, on its Options tab. Click the box, press the combination, and it works system-wide. Shortcuts with a hotkey and no abbreviation are perfectly normal — sometimes a key combination is what you want.
Shortcuts → Check for conflicts lists abbreviations defined twice, hotkeys claimed twice, and shortcuts that another one hides by ending the same way.
Remapping keys
Settings → Keys makes a key or shortcut send something else, in every program: F1 for Ctrl+C, Caps Lock for Esc, Win+C for Ctrl+C. Choose Add new remapping, press Record beside When I press and press the keys, then do the same for Send this instead. While it is recording KeySnap catches everything, Windows shortcuts included, until you let go. You can also type a combination in, which is how to use keys your keyboard does not have, such as F13.
A key swapped for another key (Caps Lock for Esc) behaves exactly like that key, including when held down or combined with Shift or Ctrl. Anything with a modifier in it fires only when exactly those modifiers are held. Ctrl, Shift, Alt and Win count on either side unless you untick Left or right … both count, which lets the right Alt do something different from the left one.
Each remapping has its own switch, and Remap keys and shortcuts turns the whole list off without losing any of it. Remapped keys keep working while expansion is suspended, and they still count as typing, so a swapped key can finish an abbreviation. Ctrl+Alt+Delete and Win+L belong to Windows and cannot be remapped.
Importing
From ShortKeys
ShortKeys stores its library in a closed binary .shk file that nothing else
can read. In ShortKeys, choose File → Export → Text File and save as CSV. Then in
KeySnap, File → Import → From a file. Shortkey, replacement, scope and notes all
come across, and a scope of anything other than "Global" becomes a
Only in these windows rule you can refine.
From AutoHotkey
Import the .ahk directly. KeySnap reads hotstrings — ::btw::by the
way — including the *, ?, C and
O option flags, backtick escapes, continuation blocks and
{Enter}-style key syntax. AutoHotkey commands inside a replacement are not
executed; they come across as literal text for you to review.
From espanso
Import the match .yml. Triggers, replacements, block scalars,
propagate_case and word are all read. The script, shell and
form extensions are not, and matches that used them keep their placeholders so you can
see what needs rebuilding.
From a spreadsheet
Any CSV or tab-separated file with a header row. KeySnap recognises the usual column names — Shortkey, Trigger, Abbreviation, Replacement, Phrase, Notes, Category, Scope, Enabled — in any order. Without a recognisable header it reads column one as the shortcut and column two as the replacement, and tells you it has done so.
Exporting
File → Export writes JSON (lossless), CSV, TSV, AutoHotkey, a Markdown table for a team wiki, or a printable HTML page. Protected snippets are left out unless you explicitly confirm, because an export is a plain file with no encryption behind it.
Sync and backups
Under Settings → Files, point the library at a folder that already syncs — OneDrive, Dropbox, a mapped drive. KeySnap watches the file and reloads when another machine changes it, and holds off while you have unsaved edits so nothing is overwritten mid-sentence.
Every save takes a timestamped backup first, keeping the most recent fifteen by default. File → Restore from a backup lists them, and takes a backup of what you have now before replacing it.
Protected snippets do not sync usefully: they are encrypted for the Windows account that created them and will be unreadable elsewhere. KeySnap keeps the encrypted data intact rather than destroying it, so returning to the original machine restores access.
Shared libraries
A shared library is a set of shortcuts a company keeps together: approved wording, standard replies, the clauses everybody is supposed to be using. It is part of KeySnap Business. Everything below happens under Teams in KeySnap. Seats, roles, read-only access and removing somebody can also be done from your account page when you are away from the computer KeySnap is on; anything that touches the key itself — inviting, letting somebody in, replacing the key — can only be done from KeySnap, because the key is only ever there.
The one thing to understand before anything else: we cannot read a shared library and cannot let anybody into one. The key that opens it is made on the machine of whoever created it and has never been sent to us. That is what makes the rest of this work the way it does — every step below where a person has to do something is a step that exists because there is no server that could do it instead.
Making one
Teams → New team…, give it a name. KeySnap makes a key for it on your computer and seals a copy to your account, so the library is readable by you and by nobody else until you say otherwise. Shortcuts you put in it appear in their own group in the main list, beside your own.
The first library you make also creates the company the licence and the seats belong to. A second library costs nothing and uses the same seats — you are not buying it again. Rename either from the same screen.
Inviting somebody
Invite takes an email address and three ticks:
- Can edit — off makes them read-only. They see every shortcut and can use them; they cannot change or add one. This is what "locked shortcuts staff cannot edit" means in practice.
- Can invite others — lets them bring people into this library, rename it and remove people from it. It does not make them an administrator of the company; that is a separate, deliberate step below.
- Approve them myself first — decides whether the invitation carries the key. Read the next paragraph before choosing.
KeySnap composes the invitation in your own email program, from your own address, for you to look over and send. It does not send anything itself.
Left unticked, the link carries the key. Whoever opens it can read the library immediately — which is convenient, and means the link should be treated exactly like a password. Ticked, the link carries no key at all: the person joins, sees the library listed as waiting, and reads nothing until you let them in from your own copy of KeySnap. That second shape is the one to use for anybody you are not certain of, and it is the only shape KeySnap will email on your behalf.
What the invitation looks like at the other end
The link opens a page that says who invited them and to what, and offers two ways in. Open in KeySnap hands the code to KeySnap on that computer, which opens its join window with the code already filled in; they still press the button. If nothing happens when they press it, KeySnap is not installed there or is older than 1.9.3, and the code underneath can be copied and pasted into Teams › Join a shared library instead. Both do the same thing.
Worth knowing what that link can and cannot do, because a link that opens a program is
a fair thing to be wary of. It can put a code into a box. It cannot accept an invitation,
read a library, change a setting or run anything: joining needs the account's own key,
which lives behind that person's password on their own machine. Anything on a computer
can open a keysnap: link; the most any of them achieves is a window
appearing with something typed in it.
Letting somebody in
Somebody in the list shown as waiting to be let in is a member who holds no key. Select them and choose Let them in, from a machine that can already read the library. Your KeySnap opens the key locally and re-seals it to their account. It takes a second and there is no way for us to do it for you.
You will see this state in two situations: somebody accepted an invitation that deliberately carried no key, or —
Somebody reset their password
— somebody forgot their password and reset it by email. Their shared libraries all go back to waiting to be let in, and the history records that they lost their key so that whoever readmits them can see why they were asked.
This is not a fault. Their copy of the key was wrapped under the password they no longer have. Nothing was lost — the library is intact and everybody else still has it — and one click from anybody who can read it puts them back. A recovery code avoids the whole episode, which is why KeySnap insists on one when an account is created.
People and seats
A seat is what licenses somebody's copy of KeySnap. It is not the same thing as being able to read a particular library, and it is worth keeping the two apart in your head: somebody can hold a seat and see no shared shortcuts at all, which is the ordinary arrangement when a company licenses staff.
On People and seats, on the account page, everybody in the company has one role:
- Owner — can do everything, and cannot be removed. Hand the company over to somebody else if the owner is leaving.
- Administrator — hands out and takes back seats, suspends people, and decides who is in each library.
- Member — holds a seat.
An administrator can decide who is in a library they cannot read themselves. That reads oddly and is correct: deciding is a row in a database, and reading needs a key that has never been on our server. They can put somebody in a library and still not see a word of what is in it.
Suspend is for somebody on leave or under notice: they stop holding a seat and stop being licensed, and the row stays so that putting them back is one click. Take the seat back removes them from the company and from every library it owns.
When somebody leaves
Taking their seat back stops them being licensed and removes them from the libraries. It does not un-know what they already knew: they had the key while they were there, and a copy of the shortcuts may be on a computer you cannot reach.
Replace the key, on the library, is the answer to that. It makes a new key, re-encrypts everything under it, and re-seals it to everybody still in the library. Outstanding invitations are cancelled, because they carried the old one. Do it when somebody with access leaves under a cloud; it is not something to do routinely.
Handing things over
The owner is the one person who cannot be removed, so a company whose owner has left is stuck until somebody does something about it. Hand the company over on the account page moves ownership to another administrator; the previous owner stays on as an administrator. A single library can be handed over the same way.
Who changed what
History… on a library lists what happened and who did it: added, changed, removed, joined, let in, key replaced. It records the verb and the shortcut, never the contents — we could not record the contents if we wanted to. Any member can read it, not only administrators, because "who changed this" is a question anybody may need to answer about their own work.
Licence and updates
There is no product key. A licence belongs to your KeySnap account, so signing in under Teams → Shared libraries brings it to that computer by itself, and Help → Licence shows what the copy in front of you is licensed for.
After that, nothing asks us anything. The licence is signed, and KeySnap checks the signature against a key built into the application — so it keeps working with no network, on a machine that never goes online again, and if we one day stop running a server. That is also why a computer with no internet connection at all can be licensed: copy the licence from your account page on any other computer, then use Help → Licence → Enter a licence.
What the free version does
Everything, for twenty-five shortcuts at a time. The limit counts shortcuts that are switched on, not shortcuts that exist, which is what makes the two things below true.
- Importing a library larger than the limit brings all of it in. The ones past twenty-five arrive switched off, and KeySnap says how many. Nothing is dropped and nothing is hidden.
- When there is no room for another, you can switch some off to make room — select them and choose Shortcuts → Disable — instead of buying anything.
Protected snippets are the one feature Pro adds rather than unlocks. Any you already have keep working whatever your licence says; the free version simply cannot make a new one.
Twelve months of updates
Pro includes twelve months of updates and then keeps working forever. Every version published during those twelve months is yours permanently — you can reinstall it on a new computer years later. Versions published afterwards are what renewing gets you, and KeySnap will tell you once when one exists rather than nagging. Nothing expires, nothing stops working, and no feature is taken away.
The free version receives updates with no limit at all.
Updates that install themselves
With a licence, and KeySnap installed for everyone on the computer, new versions install by themselves. KeySnap waits until nobody has used the keyboard for ten minutes, closes, installs the new version, and starts again with a notification saying which version it now is. If it never gets that moment, it updates overnight, or after three days at the latest. It only ever installs a version signed with our certificate and covered by your licence. On the free version and the portable download, KeySnap asks first, as it always has. An administrator can switch this off with the Install updates automatically policy.
Security
KeySnap sees every keystroke, so it is worth knowing what it does with them. They are compared against your list in memory and discarded. Nothing you type is written to disk and nothing you type is transmitted, ever.
KeySnap does use the network, for three things and only when they apply: it checks whether a newer version has been published, it syncs shared libraries if you are in one, and it checks your licence — when you sign in, and every few hours after that. The licence check exists so that a seat a company takes back stops working on the machine rather than only in their records; it sends your account's session token and the id of the licence already on the machine, and nothing else. Shared shortcuts are encrypted on your computer before they are sent, so the server holds blocks it cannot read. There is no telemetry, no analytics and no usage reporting of any kind.
Your account, as against your shortcuts
Those are two different things and only one of them is protected by encryption we cannot undo. Your shortcuts are sealed with a key made from your password on your own computer; nothing on the server opens them, whatever happens to the server. Your account is a different question, because signing in has to be something the server can check.
So: ten wrong passwords in a row stops that account accepting sign-ins for fifteen minutes, and sends the address on it an email saying so — which is usually how a person finds out that a password they also use somewhere else has turned up in a breach. It is a pause and not a lock, deliberately: a permanent one would let anybody who knows your email address shut you out for as long as they cared to keep typing. Nothing about your shortcuts changes while it is on, and KeySnap on a computer you are already signed in on carries on as normal.
If you use an authenticator app, the value behind those six digits is the one thing the server has to be able to read — checking a code means computing it. It is encrypted where it is stored, under a key that is not in the database, so a stolen copy of the database is a copy of envelopes and nothing that opens them. A code is also good once: using it spends it, rather than leaving it valid for the minute and a half the arithmetic would otherwise allow.
Setting up an authenticator
Teams › Your account › Set it up shows a square to point your authenticator app at, with the key printed underneath for when a camera will not cooperate. Either works; every authenticator accepts both. Then type the six digits it shows, which is what proves the app really has the value — without that step a mistyped setup would lock you out of your own account.
What has happened to your account
Your account › What has happened here, on keysnap.app, lists the things done to the account itself: sign-ins from a machine it had not been seen on, password changes, two-factor going on or off, devices signed out, and every change to your seat. Each line is written by the thing it describes, in the same transaction, so the record cannot disagree with what actually happened — and it is not something we can edit. If we ever take two-factor off an account for a customer who has lost everything, the line saying so, and who did it, is there.
No addresses are recorded. Not the network address a sign-in came from, and nothing worked out from one. KeySnap has never kept them: the name of the machine is what tells you whether a sign-in was yours, and an address collected about everybody, for ever, to answer a question a name already answers is not a trade worth making.
Protected snippets
Ticking Protect this snippet encrypts it on disk with Windows DPAPI, tied to your user account. In the list it shows as dots. In an export it is left out unless you confirm. It cannot be searched by its contents.
This protects a file that gets copied, backed up or synced. It cannot protect you from software already running as your user, which can read the keyboard directly regardless. Use a password manager for credentials; use KeySnap for the licence key you are sick of typing.
Where KeySnap holds back
- Standard Windows password boxes — expansion is suspended while one has focus. This covers desktop applications and dialogs. Browsers and some modern apps draw their own fields and cannot be detected this way.
- Sign-in and consent prompts.
- Windows belonging to programs running as administrator. KeySnap runs without administrator rights on purpose and will not type into those.
Keyboard shortcuts
| Keys | Does | Where |
|---|---|---|
| Ctrl+Shift+Space | Quick-insert palette | Anywhere |
| Ctrl+Alt+K | Show the KeySnap window | Anywhere |
| Ctrl+Alt+Z | Undo the last expansion | Anywhere |
| Alt+` | Suspend and resume | Anywhere |
| Ctrl+N | New shortcut | KeySnap window |
| Ctrl+D | Duplicate | KeySnap window |
| Ctrl+F | Search | KeySnap window |
| Ctrl+S | Save now | KeySnap window |
| Ctrl+O | Open another library | KeySnap window |
| Delete | Delete the selected shortcuts | KeySnap window |
All of the global ones can be changed under Settings → Hotkeys.
Where things live
| What | Where |
|---|---|
| Your shortcuts | %APPDATA%\KeySnap\snippets.json |
| Preferences | %APPDATA%\KeySnap\settings.json |
| Backups | %APPDATA%\KeySnap\Backups\ |
| Diagnostic log, if switched on | %APPDATA%\KeySnap\keysnap.log |
| Startup entry | HKCU\Software\Microsoft\Windows\CurrentVersion\Run |
The snippet file is documented, readable JSON. You can open it, diff it, put it in version control, and edit it by hand if you want to — KeySnap repairs anything obviously broken on load rather than refusing to start.
Troubleshooting
Nothing expands anywhere
- Check the tray icon: it says "suspended" when expansion is paused. Alt+` toggles it.
- Check the shortcut is switched on — the tick box in the list.
- Check the group it lives in is switched on.
- If you have just installed something that also hooks the keyboard, restart KeySnap. Windows removes a keyboard hook whose owner is too slow to respond, and a badly behaved neighbour can take yours down with it.
It expands everywhere except one program
- That program is probably running as administrator. Windows blocks ordinary applications from typing into elevated windows. KeySnap will say so when it happens.
- If it is a remote desktop or virtual machine window, try switching the shortcut to Type it out under Options, and adding 5–10 ms of keystroke delay under Settings → Typing.
- Check the shortcut's scope rules.
Characters are repeated, or come out as one letter over and over
If ;eml produces mmmmmmmm rather than your address — the same
number of characters, but all of them the last one — the program you are typing into is
not keeping up with the keystrokes KeySnap is sending it.
Windows delivers typed Unicode as VK_PACKET events, and some controls read
each event against the most recent packet rather than the one it arrived with. Send them
faster than the program drains its queue and every character in the run resolves to the
last one. Windows Notepad does this; so do a few others.
The cure is a small gap between keystrokes, which KeySnap leaves by default. If you still see it, raise Between keystrokes under Settings → Typing to 10 or 15 milliseconds. Setting it to zero is what causes this, so do not.
Characters are dropped or arrive out of order
Same setting, same reasoning. Older Java applications, some remote desktop sessions and a few terminal emulators need more room than the default allows. Raise Between keystrokes a few milliseconds at a time — it is a tax on every expansion, so do not go further than you need.
Part of what I typed goes missing, or the abbreviation is left behind
A shortcut fires on the last character of the abbreviation, and the replacement follows a few hundredths of a second later. If you are typing quickly — and you usually are, right after fixing a typo — the next few characters land in the document during that gap.
KeySnap keeps track of them, erases past them, and types them again after the
replacement, so ;sig now comes out as your sign-off followed by
now. Nothing needs configuring. If you press Backspace back over
the abbreviation in that same moment, or click somewhere else, KeySnap takes it that you
changed your mind and leaves the text alone rather than guessing.
Keeping a password in a shortcut
People do this. KeySnap is built on the assumption that they will, so here is exactly what it does and where it stops.
Mark a shortcut protected and its contents are encrypted on disk against your Windows account. A copy of your snippet file — in a backup, in OneDrive, on a laptop somebody walks off with — is useless to anyone else. On its own that is all it does: any program running as you can ask Windows to decrypt it, exactly as KeySnap does.
Add a passphrase under Settings → Security and that changes. The passphrase is something the computer does not know, so it has to be typed. KeySnap asks the first time you use a protected shortcut, not when it starts, and forgets it again after fifteen minutes of not using one. Everything that is not protected keeps working the whole time.
Protected shortcuts are also decrypted only at the moment one is used, never when the
library is opened, so their contents are not sitting in memory while you get on with
your day. They are never pasted through the clipboard, never written to the log, never
shown in a notification, and a shortcut that is not protected cannot pull one in with
{snippet:}.
There is no way to recover a forgotten passphrase. Not by us, not by anyone. If you lose it, the contents of every protected shortcut are gone. Write it down somewhere you trust before you set one.
What none of this stops: software that is already running as you and watching your keyboard. It sees what you type as you type it, before KeySnap is involved at all. A text expander cannot fix a compromised computer, and you should be suspicious of one that says it can.
KeySnap expanded something into a password box
It should not. Settings → Security → Do not expand in password boxes is on by default, and covers both the standard Windows password field and the ones browsers and newer apps draw for themselves.
The check is a good net rather than a guarantee — a field that identifies itself as neither will not be recognised. If you find one, the reliable fix is a scope rule: open the shortcut, choose Except in, and name the program.
A shortcut fires when I did not want it to
- Press Ctrl+Alt+Z straight away — that puts back exactly what you typed.
- Then either add a prefix character to the abbreviation, or switch that shortcut to After a space or punctuation.
The clipboard keeps changing
Long replacements are pasted rather than typed, because typing three hundred characters one at a time is slow. KeySnap puts the clipboard back afterwards. If you would rather it never touched the clipboard, set Settings → Typing to Type it out.
Still stuck
Switch on Settings → Security → Keep a diagnostic log, reproduce the problem, and send us the log. It records what KeySnap did and never what you typed or what a snippet contains, so it is safe to share.