Hold a letter (e, a, c, o, n…) and pick its accented variant (é è ê ë, ç, ñ, ô…) from a popup, with its number, the arrows or the mouse; a quick tap types the letter as usual. Works on any keyboard layout, without a daemon or root, in applications that use the GNOME input method (Wayland: GTK, VTE terminals, Electron with its Wayland backend). A shortcut (Super+E by default) opens the same picker without holding. Preferences: press-and-hold on/off and duration, shortcut, character table, keyboard layouts.
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.4 (9) | Active |
| 2.3 (8) | Active |
| 2.2 (7) | Rejected |
| 2.1 (6) | Active |
| 2.1 (5) | Rejected |
| 4 | Active |
| 3 | Active |
| 2 | Rejected |
| 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.