8.8 Name Occasional Emoji In Speech

An emoji can require fallback from a voice such as Eloquence. Naming transforms speech text before engine selection: Forecast ๐Ÿ”ฎ becomes Forecast crystal ball, while source text stays intact. This can keep the preferred voice when the remaining text is compatible; normal repertoire checks still decide.

Naming is enabled by default. Use M-x customize-group RET emacsvox-emoji RET. Disable emacsvox-emoji-naming-enabled globally or only in a source buffer:

(setq-local emacsvox-emoji-naming-enabled nil)

For Org buffers in your configuration:

(add-hook 'org-mode-hook
          (lambda () (setq-local emacsvox-emoji-naming-enabled nil)))

All four options support buffer-local values, which override global defaults. Aural previews use the remembered source policy, and contextual previews its captured policy. Changes during playback do not change an already submitted sample.

emacsvox-emoji-approved-sequences defaults to t for every exact name in Emacs’s emoji table, including seedling ๐ŸŒฑ, flags, keycaps, and joined emoji. You need not approve each separately; an explicit list restricts eligible complete sequences. Unknown joined sequences remain intact even if a component is named.

Arrows and harpoons also receive names in all directions, including diagonal, double, and curved forms. โ† โ†‘ โ†’ โ†“ becomes left arrow up arrow right arrow down arrow. Symbols such as โ‡’ and โŸถ outside the emoji table use Unicode names. Text/emoji selectors are supported; unknown joined or accented sequences remain unchanged. Box-drawing characters use Unicode names too: โ”‚ becomes box drawings light vertical. Light, heavy, double, rounded, dashed, and junction forms follow the same naming settings and limits; custom names can shorten frequent ones. Foreign-language letters and unrelated symbols retain normal fallback, and exact character inspection is unchanged.

emacsvox-emoji-maximum-count defaults to 64 occurrences, counting repetition. ๐Ÿค”Dinner? ๐Ÿ•๐Ÿ•๐Ÿ• becomes thinking face Dinner? pizza pizza pizza without fallback caused by those four emoji. Above the limit, naming is skipped for the whole item. One captured presentation can contain several voice runs; a standalone preview is one item. Transport chunk sizes do not change this limit. Sequences crossing style or positioned-cue boundaries remain unchanged.

Names come from Emacs’s bundled emoji/Unicode data and may vary with its version. Arrows prefer emoji names where available; the four plain arrows share their emoji equivalents’ names. Missing data leaves the sequence to normal fallback; nothing is downloaded. Names are English and apply even to engines capable of speaking the original.

Explicit pronunciation entries take precedence. For eligible sequences, emacsvox-emoji-custom-names overrides a bundled name:

(setq-local emacsvox-emoji-custom-names '(("๐Ÿ”ฎ" . "prediction")))

Custom names must contain 1โ€“80 characters with no control characters. Empty names are invalid; use explicit pronunciation to omit content. Restriction and custom-name lists allow at most 64 entries, with sequences up to 32 characters; full-table mode has no entry limit. The occurrence limit accepts 0โ€“64. Invalid settings skip automatic naming with an explanation rather than stop speech.

Feedback Details (C-e E) shows original sequences and names or reasons for skipping. Voice-editor playback details report sample substitutions. These are prepared-text evidence, not confirmation of what you heard. Play original retains captured speech text after settings change. Rule proposals change presentation while retaining that text; capture new source feedback to try another naming policy.