Skip to Content
BlogA blank is not a form

A placeholder is not a form. The popup is.

An underline in the snippet body — Name: ______ — is not a form.

It is a note to yourself to fix the line before you send. By the third send the underline is still there and the word you meant to change is already wrong.

A real form happens on expand. Type the abbreviation in whatever is focused, press the trigger (default Tab), a window opens, you fill it, then the finished text lands. You do not open the main window first. Syntax is in FillIn.

FillIn · /cs support
Enter / Tab next field

A FillIn window appears before expansion. ⌘/Ctrl+Enter inserts.

A slot has a name, not a gap

Every field needs a name. Put %filltext&name=name% in two places and the popup shows one box. Type “Lee” once; both places become Lee.

Do not treat “this looks empty” as a variable. An underline and the sentence “edit here” survive into the message. What you typed in the popup is already substituted when the text is inserted.

Confirm with ⌘/Ctrl+Enter. Enter or Tab moves to the next box. Cancel leaves the front app as it was after you typed the abbreviation. A default is only the first draft in the window; confirm without editing and that default is what goes out.

Pick the field for what actually changes

FillIn · single line
OK ⌘↩

%filltext%: one line. Same name is filled once. ⌘/Ctrl+Enter confirms.

FillIn · switch
OK ⌘↩

%fillswitch% / %fillcase%: Branch i/n outputs only the current branch.

Short, bounded: one line, %filltext%. A name, a ticket id, a warehouse.

A paragraph: %fillarea%. A reason, a diff, notes from a meeting. A default may contain a percent sign — 6% VAT is fine.

A closed set: %fillmenu% with &opt=. Priority, channel, language. Do not keep three snippets that differ only by High / Medium / Low.

A sentence that is sometimes present: %fillcheck%. Checked, the default text is inserted. Unchecked, it is as if you never wrote it.

Mutually exclusive blocks: %fillswitch%. The popup switches branches and only the current one is inserted. Refund and replacement should not be two almost identical abbreviations.

%fillswitch&name=mode% %fillcase&opt=on site% Please arrive at %filltext&name=time% at %filltext&name=place%. %fillcase&opt=online% The link will follow. Time is still %filltext&name=time%. %fillend%

time is the same name in both branches, so you fill it once either way. Full parameters and %fillnote% (visible in the popup, stripped from the output) are in FillIn.

Do not turn a sentence that never changes into a field. Each extra box is another confirm. A static greeting belongs in the body. The editor toolbar FillIn inserts these tokens; you do not have to type the percent signs by hand.

How a support desk splits greeting / reason / signature is a different article: Support templates are a form. This one is the mechanism.

Tonight, change one snippet

  1. Open a snippet you already use. Replace “please change the name” with a one-line field. Give name a label you will recognize. See FillIn.
  2. If the same label appears again, reuse the same name. Do not invent name2.
  3. Go back to mail or chat, type the abbreviation, press Tab. If the window opened, you filled it, and the text landed, you know the loop.

FillIn is in the free tier. 50 snippets and 5 groups are enough to turn the worst templates into forms. Amounts live in Pricing.

Do not

  • Do not write “edit here” in the body. The recipient will see it.
  • Do not clone the whole snippet for each variant. Variants are a menu or %fillswitch%.
  • Do not treat the popup as a notes app. Confirm inserts. The library stores the draft with holes, not last Tuesday’s filled letter.
  • Do not type today’s date by hand in the body. Always-today and a calendar picker are Dates that keep up.

Next: Dates that keep up.

Last updated