{"id":13500150,"url":"https://github.com/GaZaTu/im-emoji-picker","last_synced_at":"2025-03-29T05:33:12.017Z","repository":{"id":65512585,"uuid":"588866804","full_name":"GaZaTu/im-emoji-picker","owner":"GaZaTu","description":"emoji picker compatible with Linux systems using either XServer or Wayland with either Fcitx5 or IBus","archived":false,"fork":false,"pushed_at":"2025-03-10T10:26:34.000Z","size":3712,"stargazers_count":53,"open_issues_count":4,"forks_count":2,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-25T06:24:36.130Z","etag":null,"topics":["cmake","cpp","emoji","emoji-keyboard","emoji-picker","fcitx5","ibus","input-method","kaomoji","linux","qt5","wayland","x-server"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/GaZaTu.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-01-14T09:41:11.000Z","updated_at":"2025-03-15T20:10:47.000Z","dependencies_parsed_at":"2024-10-31T18:32:02.106Z","dependency_job_id":"50a7eaa2-c1f4-42ef-a3dd-b3539e821d38","html_url":"https://github.com/GaZaTu/im-emoji-picker","commit_stats":null,"previous_names":[],"tags_count":7,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GaZaTu%2Fim-emoji-picker","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GaZaTu%2Fim-emoji-picker/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GaZaTu%2Fim-emoji-picker/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GaZaTu%2Fim-emoji-picker/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/GaZaTu","download_url":"https://codeload.github.com/GaZaTu/im-emoji-picker/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246145012,"owners_count":20730494,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cmake","cpp","emoji","emoji-keyboard","emoji-picker","fcitx5","ibus","input-method","kaomoji","linux","qt5","wayland","x-server"],"created_at":"2024-07-31T22:00:51.835Z","updated_at":"2025-03-29T05:33:07.005Z","avatar_url":"https://github.com/GaZaTu.png","language":"C++","funding_links":[],"categories":["C++"],"sub_categories":[],"readme":"# I'm Emoji Picker\n\nan emoji picker compatible with linux systems using either XServer or Wayland with either Fcitx5 or IBus.\nYou could also say that the **im** in `im-emoji-picker` stands for **input method** 😉.\nI'm basically using the same systems some people use to type Japanese or Chinese characters with a western keyboard.\n\nThis project took heavy inspiration from the \"predecessor\" [https://github.com/GaZaTu/x11-emoji-picker](https://github.com/GaZaTu/x11-emoji-picker).\n\n## Screenshots 😮\n\n*Recently used emoji (EndeavourOS with KDE (XServer) and Fcitx5):*\n\n![docs/screenshot2.png](docs/screenshot2.png)\n\n*System emoji font support (openSUSE 15.1 with KDE (XServer) and IBus):*\n\n![docs/screenshot1.png](docs/screenshot1.png)\n\n*Kaomoji support (EndeavourOS with KDE (XServer) and Fcitx5):*\n\n![docs/screenshot3.png](docs/screenshot3.png)\n\n## Motivation 🤔\n\n### Original Motivation ([x11-emoji-picker](https://github.com/GaZaTu/x11-emoji-picker#motivation-))\n\nI switched from Windows 10 to Linux at work and missed filling my emails with emojis. ~~(the KDE version we use doesn't have the builtin emoji picker yet)~~ (turns out that the KDE emoji picker only copies emojis to clipboard anyway so yea fuck that)\n\n### Reason For The New Emoji Picker\n\nThe issue with *x11-emoji-picker* is `xdotool` as the success rate for it to work is a lottery. Sometimes the target window requires focus to accept input; Sometimes it doesn't support `XText` so you need to use some hacky clipboard workaround; And sometimes it doesn't work at all. All in all a frustrating experience.\n\nAnother issue is with the `x11...` in the old emoji picker. I won't switch to Wayland anytime soon but having support for it in my emoji picker would've been nice so more people can use it.\n\n## Installation 😉\n\nDownload the [install.sh](install.sh) and run it. It downloads and installs either a `.deb` (**Ubuntu**, **Debian**) or a `.rpm` (**openSUSE**, **Fedora**).\n\n- Terminal: `wget -q https://raw.githubusercontent.com/GaZaTu/im-emoji-picker/master/install.sh \u0026\u0026 sh install.sh`\n- Specifying IMF: `sh install.sh -f fcitx5` or `sh install.sh -f ibus`\n- Installing nightly build: `sh install.sh -r tags/nightly-build`\n\nOtherwise look at the following options:\n\n**\"I use Arch btw\"**:\nrun `yay -S fcitx5-im-emoji-picker-git` or `yay -S ibus-im-emoji-picker-git`.\n\n- repo (fcitx5): [https://aur.archlinux.org/packages/fcitx5-im-emoji-picker-git](https://aur.archlinux.org/packages/fcitx5-im-emoji-picker-git)\n- repo (ibus): [https://aur.archlinux.org/packages/ibus-im-emoji-picker-git](https://aur.archlinux.org/packages/ibus-im-emoji-picker-git)\n- yay: [https://github.com/Jguer/yay#installation](https://github.com/Jguer/yay#installation)\n- manjaro: [https://wiki.manjaro.org/index.php/Arch_User_Repository](https://wiki.manjaro.org/index.php/Arch_User_Repository)\n\n**Debian**:\nDownload a `-debian-*.deb` from [/releases](https://github.com/GaZaTu/im-emoji-picker/releases) and install it.\n\n- Terminal: `sudo apt install ./im-emoji-picker-*.deb`\n\n**Ubuntu**:\nDownload a `-ubuntu-*.deb` from [/releases](https://github.com/GaZaTu/im-emoji-picker/releases) and install it.\n\n- Terminal: `sudo apt install ./im-emoji-picker-*.deb`\n\n**openSUSE**:\nDownload a `-opensuse-*.rpm` from [/releases](https://github.com/GaZaTu/im-emoji-picker/releases) and install it.\n\n- Terminal: `sudo zypper install ./im-emoji-picker-*.rpm`\n\n**Fedora**:\nDownload a `-fedora-*.rpm` from [/releases](https://github.com/GaZaTu/im-emoji-picker/releases) and install it.\n\n- Terminal: `sudo dnf install ./im-emoji-picker-*.rpm`\n\n*Note: There are [nightly releases](https://github.com/GaZaTu/im-emoji-picker/releases/tag/nightly-build) aswell which are rebuilt on every push to master*\n\n## Setup 😅\n\nAfter installing *I'm Emoji Picker* theres some steps required to make it work.\n\n- Setup your input method framework (fcitx5 or ibus) if not already done.\n  - Install it\n  - Setup `/etc/environment`\n  - Add IMF to autostart\n- Add *I'm Emoji Picker* to your input methods next to your keyboard language.\n- Maybe configure a global shortcut with which to change the current input method and open the emoji picker.\n  - Advanced: you could also use the `ibus` or `fcitx5-remote` commands to switch the input method directly\n\n### With Fcitx5\n\nSee [https://wiki.archlinux.org/title/Fcitx5](https://wiki.archlinux.org/title/Fcitx5).\n\n#### TLDR (Fcitx5)\n\nUpdate your `/etc/environment` file to include the following snippet:\n\n```ini\nGTK_IM_MODULE=fcitx\nQT_IM_MODULE=fcitx\nXMODIFIERS=@im=fcitx\n```\n\nCreate an autostart entry for fcitx5. (works out of the box with some DEs)\n\n### With IBus\n\nSee [https://wiki.archlinux.org/title/IBus](https://wiki.archlinux.org/title/IBus).\n\n#### TLDR (IBus)\n\nUpdate your `/etc/environment` file to include the following snippet:\n\n```ini\nGTK_IM_MODULE=ibus\nQT_IM_MODULE=ibus\nXMODIFIERS=@im=ibus\n```\n\nExecute `ibus-daemon -rxR` in your terminal to create an autostart entry.\n\nExecute `ibus-setup` to open the IBus settings so you can add *I'm Emoji Picker* to your input methods and maybe change your global shortcut to change the active input method.\n\n### Settings 📝\n\n```ini\n; The path of this file should be: $XDG_CONFIG_HOME/gazatu.xyz/im-emoji-picker.ini\n; $XDG_CONFIG_HOME is usually ~/.config\n; Can also be opened by pressing F4 while the emoji picker is open.\n; most options require you to restart the IMF (fcitx or ibus)\n\n[General]\n; `true` = Immediately close the emoji picker after pressing enter.\n; Can be done with `false` using shift+enter.\ncloseAfterFirstInput=false\n; `true` = Only gender neutral emojis are visible (people and jobs for example)\ngendersDisabled=false\n; `not -1` = Any emoji released after this number is hidden\nmaxEmojiVersion=-1\n; `true` = remember recently used kaomoji\nsaveKaomojiInMRU=false\n; `float` = scale the emoji picker based on this number (for example 1.25)\n; `` = use QT_SCALE_FACTOR\n; (requires IMF restart)\n; ALERT: doesn't work currently\nscaleFactor=\n; `true` = Only skin tone neutral emojis are visible (hands for example)\nskinTonesDisabled=false\n; `not empty` = Use this (for example: Noto Color Emoji) instead of your system font to display emojis\n; (requires useSystemEmojiFont=true)\nsystemEmojiFontOverride=\n; `true` = Use your system emoji font instead of the bundled Twemoji images to display emojis\n; (requires IMF restart)\nuseSystemEmojiFont=false\n; `true` = Automatically try to scale or hide emojis based on their system emoji font support\n; (May lead to false positives)\nuseSystemEmojiFontWidthHeuristics=true\n; `true` = Use the system Qt theme instead of the builtin dark fusion theme\n; (requires IMF restart)\nuseSystemQtTheme=false\n; `0` = Invisible emoji picker window\n; (requires IMF restart)\nwindowOpacity=0.9\n\n; Use something like the following to add custom hotkeys (target = the default key press as seen below):\n; [customHotKeys]\n; 1\\sourceKeyChr=#\n; 1\\targetKeySeq=shift+tab\n; size=1\n[customHotKeys]\nsize=0\n\n; The files to load emoji aliases from.\n; Refer to src/res/aliases/github-emojis.ini for an example\n; (requires IMF restart)\n[emojiAliasFiles]\n1\\path=:/res/aliases/github-emojis.ini\nsize=1\n```\n\n### Known Issues 😅\n\n- On Debian with Gnome i had to reboot after installing to be able to configure the emoji picker input method\n\n- When using Wayland it seems like most window managers (Sway, KDE/KWin) force focus on new windows which conflicts with the way im-emoji-picker handles inputs. This results in the emoji picker either flickering or disappearing instantly. A workaround is to manually configure a window rule.\n  - Sway: `no_focus [title=\"im-emoji-picker\"]`\n  - KDE/KWin: https://github.com/GaZaTu/im-emoji-picker/issues/13#issuecomment-1879469985\n\n- When using Wayland both Fcitx5 and IBus might not report the correct text cursor location so the emoji picker can open either in the top left corner or in the center of the screen\n\n- If the emoji picker is ugly and doesn't follow your system theme (a bit like [this](https://api.gazatu.xyz/blog/entries/01GQCEZA5K1162PYXBRK11T76N/image.webp)) then take a look at [https://wiki.archlinux.org/title/Uniform_look_for_Qt_and_GTK_applications](https://wiki.archlinux.org/title/Uniform_look_for_Qt_and_GTK_applications).\n\n- Required font localizations for Kaomoji support:\n  - cjk (tc, sc, kr, jp)\n  - kannada\n  - thai\n  - tibetan\n  - sinhala\n\n## Usage 🧐\n\n- `ctrl+a` = select all text in search input\n- `ctrl+c` = copy selected emoji\n- `ctrl+x` = cut selection in search (not really tbh)\n- `ctrl+backspace` = clear search\n- `up`, `down`, `left`, `right` = change selection\n- `shift+up`, `shift+down`, `pgup`, `pgdown` = change selection (faster)\n- `escape` = close emoji picker\n- `return` = write emoji to target input\n- `shift+return` = write emoji to target input and close emoji picker\n- `tab` = change view (MRU, List, Kaomoji)\n- `shift+tab` = change view (MRU, List, Kaomoji) (reverse)\n- `f4` = open settings file and close emoji picker\n\n## Building 🤓\n\n### Build Dependencies\n\n- cmake\n- make or ninja\n- gcc or clang\n\n### Dependencies\n\n- Qt5 (core, gui, widgets)\n- fcitx5 or ibus\n\n### Example Commands To Install Dependencies (probably)\n\n**Arch**:\n`sudo pacman -S gcc make cmake qt5-base fcitx5 fcitx5-qt fcitx5-gtk`\n\n**Debian**:\n`sudo apt install gcc make cmake qtbase5-dev fcitx5 fcitx5-frontend-gtk3 fcitx5-frontend-qt5 im-config`\n\n**openSUSE**:\n`sudo zypper install gcc make cmake libqt5-qtbase-devel ibus-devel`\n\n### CMake\n\n- `mkdir -p build`\n- `cd build`\n- `cmake -DCMAKE_BUILD_TYPE=Release ..`\n- `make -j$(nproc)`\n\n## Special Thanks 🤗\n\n- boring_nick for testing this on his arch+sway setup during the initial development phase\n- [zneix](https://github.com/zneix) and other contributors for their help on the original [x11-emoji-picker](https://github.com/GaZaTu/x11-emoji-picker)\n\n## License 😈\n\nProject licensed under the [MIT](https://opensource.org/licenses/MIT) license: [LICENSE](LICENSE)\n\nEmoji [graphics](src/res/72x72) licensed by [Twitter](https://github.com/twitter) under [CC-BY 4.0](https://creativecommons.org/licenses/by/4.0/) at [https://github.com/twitter/twemoji](https://github.com/twitter/twemoji/blob/master/LICENSE-GRAPHICS)\n\nEmoji [list](src/emojis.cpp) licensed by [Unicode](https://github.com/unicode-org) at [https://github.com/unicode-org/cldr](https://github.com/unicode-org/cldr/blob/master/unicode-license.txt)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FGaZaTu%2Fim-emoji-picker","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FGaZaTu%2Fim-emoji-picker","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FGaZaTu%2Fim-emoji-picker/lists"}