Add emoji-picker: emoji & Unicode symbol browser panel - #502
Draft
liamwh wants to merge 2 commits into
Draft
Conversation
Raycast-inspired picker: fuzzy search over ~4,000 emoji and Unicode symbols (CLDR names + keywords, symbol aliases), category browsing, a frequently-used section ranked by recency-decayed frequency, and copy-on-Enter. Three panel entries (wide/desktop/compact) share one script so a binding can match the display. Optional paste_command setting runs a user-configured command after the copy instead of shipping compositor-specific injection machinery.
18 tasks
Author
Contributor
ItsLemmy
marked this pull request as draft
August 27, 2026 12:30
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.


Plugin
liamwh/emoji-pickerplugin.toml)What it does
A Raycast-inspired emoji and Unicode symbol browser: fuzzy search over
~4,000 entries (CLDR names + keywords, plus curated symbol aliases so
"euro" ranks € above 💶), category browsing, a Frequently Used section
ranked by recency-decayed frequency, and copy-on-Enter. Three panel
entries (
wide,desktop,compact) share one script and differ onlyin surface size, so a binding can match the display; the grid tier is
derived from the focused output's logical width.
External dependencies
None. The optional
paste_commandsetting (empty by default) runs ashell command the user configures; the plugin ships no injection
machinery of its own and spawns nothing unless that setting is filled.
Testing
Self-contained Luau suite (stock
luauCLI, no host needed):python3 tests/build_test.py --out /tmp/t.luau && luau /tmp/t.luau—86 passed, 0 failed (symbol/emoji ranking, literal-character
queries, browse/keyboard model, Enter-copies-and-closes, dataset
pre-lowering contract, CPU-budget smoke: 0.43 ms average per search
against the 25 ms host budget).
python3 .github/workflows/scripts/validate-plugins.py— clean.Daily-driven on the author's machine as the local variant this was
ported from; the thumbnail is a live screenshot of the panel.
Tested on Niri
Tested on Hyprland
Tested on Sway
Tested on another compositor:
Noctalia version tested against: v5.0.0-beta.9
Plugin API level: 28
Screenshots / Videos
thumbnail.webp(created with the thumbnail generator from a livescreenshot of the panel). Happy to attach a typing-and-selecting video
on request.
Checklist
idafter the/inplugin.tomlexactly.plugin.toml,README.md,thumbnail.webp, andtranslations/en.json.README.mdfollows theREADME template, documents
every entry id and dependency, and includes exact panel IPC commands and launcher prefixes where applicable.
thumbnail.webpwith the thumbnail generator.versionfollows semver and is bumped in this PR;plugin_apiis the oldest API level this plugin requires.understand that language well enough to review and maintain it (no unreviewed machine/LLM translations).
catalog.toml; CI generates it.Code review attestation
licensedeclared inplugin.toml.Notes for reviewers
Dataset provenance (committed data, not generated code):
assets/emoji.jsonis a data table generated deterministically frompinned Unicode sources by
tools/emoji-list-gen.py(shipped alongside,docstring documents the exact inputs): CLDR 47 English annotations +
annotationsDerived (names, keywords), Unicode 16.0 emoji-test.txt (RGI
set, ordering, categories), Unicode 16.0 UnicodeData.txt (formal symbol
names). Data sources are Unicode-licensed; generator and plugin code are
MIT. The dataset ships pre-indexed (lowered names/keywords/aliases,
pre-built search blob) so full-dataset per-keystroke search stays inside
the host's CPU budget — the tests assert this.
Behaviour accounting: network — none; filesystem writes — one,
<pluginDataDir>/usage.json(pick counts + timestamps for FrequentlyUsed; deleting it resets recents); processes — none by default, only the
optional user-configured
paste_command.Works on stock Noctalia: no patched-shell capabilities required or
relied on.
Disclaimer: AI-assisted tooling was used.