Type accented and special characters the macOS way — without a daemon or root. Press a configurable shortcut, type a base letter (e, a, c, o, n …), then pick the accented variant you want (é è ê ë, ç, ñ, ô …) from a clean popup. The chosen character is injected wherever your cursor is, including text fields, editors and the terminal. A built-in preferences panel lets you customize the shortcut, the popup delay, the character table and the keyboard layouts the extension is active on.
Note: Binary files aren't shown on the web site. To see all files, please download the extension zipfile.
EGO-A-005 manual_review
extensions should not access the clipboard directly
Direct clipboard access via `St.Clipboard.get_default()` requires reviewer scrutiny.
accentPicker.js:300
St.Clipboard.get_default()
accentPicker.js:323
St.Clipboard.get_default()
EGO-X-004 warning
extensions should avoid synchronous file IO in shell code
Shell code should avoid synchronous file IO APIs like `GLib.file_get_contents()` and `Gio.File.load_contents()`.
extension.js:132
GLib.file_get_contents(path)
| Version | Status |
|---|---|
| 2 | Unreviewed |
| 1 | Rejected |
Is this code generated by AI? If so, we have a rule for that: [EGO Review Guidelines: AI](https://gjs.guide/extensions/review-guidelines/review-guidelines.html#extensions-must-not-be-ai-generated)
Thank you for the review, and for pointing me at the AI policy. Honest answer: yes, I used AI assistance while building this. I have since gone back over the whole codebase so that I can explain and justify every part of it (which is what the guideline asks for), and I am submitting a cleaned-up version. Please ask about any specific line and I will explain it. What changed: EGO-X-004 (synchronous file IO): removed. The accent table no longer lives in a JSON file read at startup; it is now a plain JS module (defaultAccents.js) imported directly. No file IO remains in the shell process. Consistency: all comments and the GSettings schema are now in English (the code previously mixed French comments with English code), redundant comments were trimmed, an inconsistently named helper was renamed, and a magic actionMode literal was replaced with Shell.ActionMode.NORMAL. EGO-A-005 (direct clipboard access): I kept this and would like to justify it. The feature inserts an arbitrary Unicode character (e.g. é, ñ, œ) into whatever is focused, including VTE terminals. A virtual key event for a codepoint that is not on the active keymap is rejected by mutter ("No keycode found for keyval"), so I place the single character on the clipboard and synthesize Shift+Insert (which use real keysyms). The user's clipboard is saved before and restored afterwards (accentPicker.js, _inject() / _pasteAndRestore()). If you would prefer a different insertion mechanism I am happy to change it, but I could not find one that works in terminals on Wayland without privileged input access. The keybinding is also restricted to NORMAL/OVERVIEW action modes (never the lock screen), the modal grab is always released (a failsafe timeout plus try/catch around the key handler), and all handlers, the keybinding and the indicator are disconnected/destroyed in disable()/destroy(). Thanks for your time.