GaZaTu / x11-emoji-picker

Linux XServer emoji picker
MIT License
203 stars 6 forks source link
cmake cpp dialog emoji emoji-keyboard emoji-picker kaomoji linux linux-app qt5 x-server x11

x11-emoji-picker

A dialog / emoji picker inspired by the Windows 10 emoji picker written for Linux systems that use XServer.

Works for my use case most of the time. ๐Ÿ˜…

Disclaimer: Donk code ahead FDM

Wayland โš 

If you're looking for an emoji picker for Wayland you may consider using im-emoji-picker.

Motivation ๐Ÿค”

I 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)

Screenshots ๐Ÿ˜ฎ

Twemoji and Kaomoji support (EndeavourOS with KDE):

doc/screenshot2.png

System emoji font support (openSUSE 15.1 with KDE):

doc/screenshot1.png

Installation ๐Ÿ˜‰

Download the install.sh and run it. It downloads and installs either a .deb (Ubuntu, Debian), a .rpm (openSUSE, Fedora) or the .AppImage (location: /usr/bin/emoji-picker.AppImage).

Otherwise look at the following options:

"I use Arch btw": run yay -S x11-emoji-picker-git.

Debian: Download a -debian-*.deb from /releases and install it.

Ubuntu: Download a -ubuntu-*.deb from /releases and install it.

openSUSE: Download a -opensuse-*.rpm from /releases and install it.

Fedora: Download a -fedora-*.rpm from /releases and install it.

Gentoo Ebuild: Third-party ebuilds provided in https://gpo.zugaina.org/x11-plugins/x11-emoji-picker. Run sudo eselect repository enable <ebuild provider>, sudo emerge --sync <ebuild provider> and sudo emerge x11-emoji-picker.

Other: Download the .AppImage from /releases, add executable permission (chmod +x x11-emoji-picker-*.AppImage) and run it (Read the usage instructions below).

Note: There are nightly releases aswell now which are rebuilt on every push to master

Building ๐Ÿค“

This is a CMake project so you need cmake, make and some c++ compiler like gcc.

Dependencies

Arch: sudo pacman -S qt5-base xdotool

Debian: sudo apt install qtbase5-dev libxdo-dev

openSUSE: sudo zypper install libqt5-qtbase-devel xdotool-devel

CMake

Codegen

I committed the generated code so you won't have to run any scripts.

Usage ๐Ÿง

First you should add the emoji-picker executable as a keybind (however you do that in your window manager); I use meta+. just like the windows keybind.

Note: The executable path should be /usr/bin/emoji-picker if installed with AUR/.deb/.rpm/make install, which means it'll be on your $PATH.

KDE: https://userbase.kde.org/Tutorials/hotkeys

i3: https://i3wm.org/docs/userguide.html#keybindings

The emoji picker will always write to the window that was active before starting the application. You have to restart it if you want to write to a different window.

After the emoji picker opened you can just begin typing to search for an emoji. Emojis that start with the text you entered will be shown below the text input. You can navigate these by using the arrow keys.

When you've selected your emoji you can press the return key to write it.

Keybinds

AppImage

Disclaimer: Running the .AppImage directly can be slow AF (about 1 sec on my machine instead of 0.1 sec).

I recommend running it (in the keybind) using the following command instead:

NO_CLEANUP=true path/to/x11-emoji-picker-*.AppImage --appimage-extract-and-run

Note: This is much faster because it extracts itself to /tmp which makes subsequent runs have almost the same performance as if you ran the executable directly.

Settings

The settings file should be located at $XDG_CONFIG_HOME/gazatu.xyz/emoji-picker.ini. (usually in ~/.config)

Notes

If emojis do not get written into your window: try adding that executable to the [activateWindowBeforeWritingExceptions] array or to the [useClipboardHackExceptions] array. (at runtime also possible using F5)

If the dialog is too smol for you: set scaleFactor or put QT_SCALE_FACTOR=float in front of the command. (example: QT_SCALE_FACTOR=1.25 emoji-picker)

Some things such as recently used emojis are written to $XDG_CACHE_HOME/gazatu.xyz/emoji-picker/cache.ini. (usually in ~/.cache)

If you enabled useSystemEmojiFont to display emojis inside the emoji picker: it's possible that your installed emoji font does not support all emojis (for example: at the time of writing noto-fonts-emoji does not support heart_mending) which will likely result in some emojis being either invisible or displayed as 2 separate emojis. To "fix" this behavior you can either set maxEmojiVersion to the version supported by your emoji font (for example: 12) or set useSystemEmojiFontWidthHeuristics to true (which is the default) to automatically figure it out.

Regarding kaomoji mode:

Defaults

[General]
activateWindowBeforeWritingByDefault=false
closeOnFocusLost=false
customQssFilePath=
gendersDisabled=false
localeKey=
maxEmojiVersion=-1
openAtMouseLocation=false
saveKaomojiInMRU=false
scaleFactor=
skinTonesDisabled=false
swapEnterAndShiftEnter=false
useClipboardHackByDefault=false
useSystemEmojiFont=false
useSystemEmojiFontWidthHeuristics=true
useSystemQtTheme=false
windowOpacity=0.9

[activateWindowBeforeWritingExceptions]
1\processName=code
2\processName=code-oss
3\processName=chrome
4\processName=chromium
5\processName=kate
6\processName=brave
size=6

[emojiAliasesIniFilePaths]
1\path=:/aliases/github-emojis.ini
2\path=:/aliases/gitmoji-emojis.ini
size=2

[useClipboardHackExceptions]
1\processName=chatterino
2\processName=kate
size=2

Notes ๐Ÿ“

Executable tested on:

AppImage tested on:

Contributors ๐Ÿค—

License ๐Ÿ˜ˆ

Project licensed under the MIT license: LICENSE

Emoji graphics licensed by Twitter under CC-BY 4.0 at https://github.com/twitter/twemoji

Emoji list and translations licensed by Unicode at https://github.com/unicode-org/cldr