Skip to content

CLI Emoji Insert

github-actions[bot] edited this page Aug 27, 2026 · 1 revision

ed emoji insert

Types one emoji into whatever app is frontmost, the same way clicking a cell in the picker does, and records the use in the frequency ledger.

Usage:

ed emoji insert <emoji> [--json]

Options:

Name Type / values Default What it does
<emoji> the character itself, a Unicode hexcode, or part of a name required Names the emoji to type.
--json flag off Emits one JSON document on stdout.

The argument is resolved in three steps, and the first one that hits wins:

  1. An exact character. Both base characters and toned variants are matched, so ed emoji insert 👍 and ed emoji insert 👍🏽 both find thumbs up.
  2. A hexcode. One or more code points in hexadecimal, joined by hyphens or spaces, in either case: 1F600, 1f1ee-1f1f3, 1F636-200D-1F32B-FE0F.
  3. Part of a name. The string goes through the same normalisation and the same ranked search as ed emoji ls --search, and the top result is used.

That means ed emoji insert fire types 🔥 rather than asking which fire you meant, and ed emoji insert ':thumbs_up:' types thumbs up. Quote anything with a space in it, because the argument is a single positional.

Your default skin tone is applied to everything except a toned variant you asked for by hand. A base character, a hexcode and a name all end up as character(tone:) against emojiSkinTone, so with the tone set to medium ed emoji insert 👍 types 👍🏽. Passing 👍🏻 types 👍🏻 whatever the setting says. An emoji with no tone support ignores the setting entirely, so 🚀 is always 🚀.

The plain response names the character that was actually typed, which is how you see the tone that was applied:

$ ed emoji insert 👍
inserted 👍🏽

The JSON response has two stable fields:

{
  "emoji": "👍🏽",
  "operation": "emoji.insert"
}

Examples:

ed emoji insert 🚀
ed emoji insert 1F600
ed emoji insert rocket
ed emoji insert 'thumbs up' --json

Exit codes:

Code Meaning
0 The character was resolved, the request was sent, and the use was recorded.
2 The command line was invalid, including no argument at all.
3 Nothing in the catalog matches the argument.
4 The Emoji Picker extension is off, or Edith's menu bar app is not running.

The checks happen in that order: extension, then resolution, then the app. So a nonsense argument is a 3 even with Edith closed, and a good argument with Edith closed is a 4 that records nothing:

$ ed emoji insert xyzzy
error: no emoji matches xyzzy
hint: run `ed emoji ls` to see what this Mac can render

Behaviour: the command hands the character to the running app and exits. The app posts a key down and a key up carrying the Unicode string to the session event tap about fifty milliseconds later, so the emoji lands in the app that has focus at that moment, not necessarily the one that had focus when you pressed Return. Nothing is put on the pasteboard, and nothing is undone if the target app refuses the event: an app with secure keyboard entry on, such as a password field, drops it silently and the use is still recorded. Because Edith types rather than presses a key, Accessibility access is what makes this work.

The insert is recorded twice over, once by ed and once by the running app, and each of them rewrites the whole emojiUsage key from its own copy. The two writes are not ordered against each other, so a single insert can land as one count or as two. That only shifts the ordering of your frequently used row, and ed emoji clear resets it either way.

Where to go next

CLI reference

Getting Started
Config
App
Extensions
Permissions
Usage
System
Music
Calendar
Clipboard
Color
Download
Apps
Tools
Shelf
Cleaner
Machines
Machines Remote
Machines Docker
Machines Files
Machines Power
Machines Workspace
Attention
Companion
Emoji
Herdr
Lid Awake
Machines Terminal
Machines Thermal
Maintenance

Guides

Clone this wiki locally