๐Ÿšฆ๐Ÿšฅ ... ok it works ๐ŸŒ‹

A super-simple #emoji keyboard for #x11.

Well, I *did* have to fiddle with the keymap.

And I had to add delays ๐Ÿคฏ๐Ÿ‘น (otherwise there are races between keymap changes and keyboard events).

And I had to misuse the #Xtest extension, cause applications ignore "synthetic" events. ๐Ÿซฅ๐Ÿ˜ฃ

But hey, it works ๐Ÿ•บ

Now needs some basic, uhm, "features" (like recently used, like search by name).

https://github.com/Zirias/qxmoji
#BSD #FreeBSD #Linux

GitHub - Zirias/qxmoji: Barebones X11 emoji keyboard with Qt GUI

Barebones X11 emoji keyboard with Qt GUI. Contribute to Zirias/qxmoji development by creating an account on GitHub.

GitHub

Fixed build with #Qt6 now (and defaulting to that, but #Qt5 still supported).

I also added a README.md explaining the uglyness of what it does with #X11 / #xcb. But again, hey, it works ๐Ÿ™ˆ๐Ÿ„๐Ÿธ๐Ÿฆ‰ (lots of emojis for no purpose, sorry ๐Ÿ˜‚)

The looks with completely unconfigured #Qt6 tell me it needs yet another feature: Configurable scale factor. These emojis are just TOO small ๐ŸงŒ

https://github.com/Zirias/qxmoji
#emoji #keyboard

GitHub - Zirias/qxmoji: Barebones X11 emoji keyboard with Qt GUI

Barebones X11 emoji keyboard with Qt GUI. Contribute to Zirias/qxmoji development by creating an account on GitHub.

GitHub

First "features" added ...

* Can now select 5 "scale factors" for the size of the emojis, "Tiny" being the same size as default window text (which is normally indeed tiny for emojis)

* Auto-stores these settings as well as the window dimensions (not position!)

#qxmoji #qt #x11 #emoji #keyboard

#qXmoji v0.1 and v0.2 released ๐Ÿ˜Ž

Functionally the same (just clickable emojis in tabbed groups, display size and wait-time for restoring the X11 keyboard map configurable), but v0.2 has correct README info and build-fixes, so Qt tools are found without fiddling with make variables ๐Ÿ™ˆ so, use v0.2 ๐Ÿ˜Ž

https://github.com/Zirias/qxmoji/releases/tag/v0.2

#X11 #emoji #keyboard #Linux #FreeBSD

Release qxmoji-0.2 ยท Zirias/qxmoji

Fix README.md (typos and outdated info) Improve build system, properly find required Qt utilities

GitHub

๐Ÿฅณ #qXmoji v0.3 released ๐Ÿป๐Ÿ•

Now there are the "basic" features you'd expect from an emoji keyboard:

โœ… Search as you type
โœ… Recently used

https://github.com/Zirias/qxmoji/releases/tag/v0.3

#X11 #emoji #keyboard #Linux #FreeBSD

Release qxmoji-0.3 ยท Zirias/qxmoji

Add "search as you type" feature Add list of recently used emojis

GitHub

Found a small bug, #xcb requests were synchronously checked, but this only works when calling the _checked() flavor of them ... ๐Ÿ™ˆ

Fixed in #qXmoji v0.4

Also added a clear button to the search field, this seems somewhat useful ๐Ÿ˜‰

https://github.com/Zirias/qxmoji/releases/tag/v0.4

#X11 #emoji #keyboard #Linux #FreeBSD

Release qxmoji-0.4 ยท Zirias/qxmoji

Bugfix: used checked xcb requests Add a clear button to the search field

GitHub

Thinking about what to include in #qxmoji v0.5. Many questions in mind...

I'll definitely "outscope" #l10n. Would be nice, but would also mean to import localized emoji names somehow (and, where to find them? ๐Ÿค”)

For now:

๐Ÿ”นUnify persisting settings. history and window size are persisted on exit, wait time and display scale on every change. Not sure which one is the "better" approach...
๐Ÿ”นShould it be "single instance"? Should it offer an option for a "tray icon"?
๐Ÿ”นAdd an "About dialog". Cause that's what you always do. ๐Ÿ™ˆ
๐Ÿ”นMaybe find a way to speed up initial creation of the Emoji buttons?
๐Ÿ”นAnything else ...โ“

Please comment if you have thoughts to share ๐Ÿ™ƒ

#emoji #keyboard #X11 #Linux #FreeBSD

#qXmoji v0.5 released!
https://github.com/Zirias/qxmoji/releases/tag/v0.5

This brings a *few* of the ideas I had:

๐Ÿ”นAdd a "single instance" mode (configurable)
๐Ÿ”นAdd a "tray icon" (configurable behavior)
๐Ÿ”นAdd an "About" dialog
๐Ÿ”นEnforce using Qt's "xcb" platform
๐Ÿ”นFix detaching on startup, add a flag (-d) to prevent it

Pretty usable as it is I hope ... although one could of course improve a lot (but have you heard of the 80-20-rule?) ๐Ÿซฃ

Screenshot from #KDE this time, no particular reason, I'm still running #fvwm here ๐Ÿ˜Ž

#X11 #emoji #keyboard #Linux #FreeBSD

Release qxmoji-0.5 ยท Zirias/qxmoji

Add a "single instance" mode (configurable) Add a "tray icon" (configurable behavior) Add an "About" dialog Enforce using Qt's "xcb" platform Fix detaching on startup, add a flag (-d) to prevent it

GitHub

#qXmoji v0.6 released!

https://github.com/Zirias/qxmoji/releases/tag/v0.6

This brings a *lot* of improvements and fixes, the most relevant being immediate persistence of settings and watching the settings file for external changes. To make this feasible also for restoring the history, a lot of work went into generating static emoji data that can be used efficiently (e.g. containing a hash table to find an emoji quickly).

BTW, this even works on #NFS, so if you have your home shared and you're running qXmoji on two machines as the same user, the history will auto-update in both instances ๐Ÿฅณ

#X11 #emoji #keyboard #Linux #FreeBSD

Release qxmoji-0.6 ยท Zirias/qxmoji

Persist all settings immediately Apply all changes to the settings file immediately, watching it for external changes Generate static emoji data in "ready to use" format (speeding up initial displa...

GitHub

#qXmoji v0.7 released!

https://github.com/Zirias/qxmoji/releases/tag/v0.7

This brings several improvements, mainly in the build system, but the major change is support for localization, with translated Emoji names imported from #Unicode #CLDR. I added a German translation, see screenshot. Once again, I'd appreciate more translations, the process to translate is documented here:
https://github.com/Zirias/qxmoji/blob/master/TRANSLATE.md

Updated FreeBSD port:
https://people.freebsd.org/~zirias/patches/0001-x11-qxmoji-Add-new-port.patch

#X11 #emoji #keyboard #FreeBSD #Linux

Release qxmoji-0.7 ยท Zirias/qxmoji

Make everything translatable, add a document how to translate Add support to import emoji translations from Unicode CLDR files Translate to German Many improvements to the build system

GitHub

The obligatory post-release-๐Ÿคฆ-commit:

https://github.com/Zirias/qxmoji/commit/80f9d807837f774414fa5a26cc4dfad22499a2c1

Is there a tool checking for these? Pointless/leftover includes in #C and C++?

guimain: Remove pointless includes ยท Zirias/qxmoji@80f9d80

QLocale and QTranslator were leftovers from before integrating loading of translations into the main application class.

GitHub

I have one little piece of custom platform-specific code in #qXmoji.

Background is that #Qt's QFileSystemWatcher doesn't work correctly on #NFS (and probably other network filesystems). It uses some platform mechanism (e.g. inotify on #Linux, kqueue on #FreeBSD) internally, so exact behavior probably depends on the platform. On FreeBSD, it *seemed* to work, but only when the change to the file on NFS is done from the local machine. ๐Ÿ™„

Now regarding this code:
https://github.com/Zirias/qxmoji/blob/master/src/bin/qxmoji/nfsdetect.c
-- I still have doubts.

โ–ช Should it check for other filesystems as well? Which ones?
โ–ช Will this construct checking for 'BSD4_4' in <sys/param.h> reliably detect every OS derived from 4.4BSD (assuming a POSIXy system that *has* sys/param.h)?
โ–ช Should it have implementations for *other* POSIXy systems than 4.4BSD-descendants and Linux?
โ–ช Why the hell is there no standard for checking the *filesystem* a file resides on? ๐Ÿง๐Ÿ˜

qxmoji/src/bin/qxmoji/nfsdetect.c at master ยท Zirias/qxmoji

Barebones X11 emoji keyboard with Qt GUI. Contribute to Zirias/qxmoji development by creating an account on GitHub.

GitHub

@zirias

โ–ช Why the hell is there no standard for checking the filesystem a file resides on? ๐Ÿง๐Ÿ˜

Wow, I'd always assumed statfs was POSIX, but apparently not. I hadn't realised how anaemic the Linux version is either. It omits almost all of the useful information (such as the mount point).

In general, filesystem monitor things on network shares tend to be unreliable because they'd need the server to notify the client of writes, which is hard to scale. Apple's fswatch interface is particularly well designed to avoid ever blocking writes: if you don't keep up with consuming the firehose in userspace then you just get a notification that some writes have happened and you should go and check the modification times of files in the directories that you're watching. I believe it includes the timestamp of the first write that you missed, so you can just look for modifications newer than that.

It's possible to imagine a networked version of this but it would be very hard to implement. Consider an NFS server with 1,000 clients. Each client is doing writes and is also watching a load of files. One write may trigger monitoring events for all 1,000 clients. That's a lot of state to keep around. I don't think any network filesystem has a protocol for doing this (please point to it if I'm wrong, I'd love to see a protocol actually designed to do this!) and so, at best, you have to fall back to periodically polling the mtimes.

I believe the AFS / CODA caching protocol could be fudged to do this if you told the server that you had a local cache of all of the blocks in all of the files that you're watching.

Keyword Search in Index - result

@david_chisnall

> at best, you have to fall back to periodically polling the mtimes.

which is exactly what I'm using this code for now ... if it tells me the file resides on NFS, I disable the QFileSystemWatcher and use a simple QTimer checking the mtime ๐Ÿ˜‰

@zirias libfswatch has a poll mode that does this for you and hides the details of exactly what it's doing.

The thing I really want that none of the low-level APIs I've seen exposes, is a notification when the last file descriptor with write permission to a file is closed. Most of the use cases I have for this kind of monitoring are telling me when a file has changed not that a file is changing. Instead the kernel wants to tell me that a write just happened, but ignores the fact that the same file descriptor will be used for a bunch of other writes.

@david_chisnall Indeed, that's what I'd need here as well. It's not an issue in my current scenario, I just watch "my own" config file (to immediately apply changes to all running instances), which is written by QSettings with "atomic replace" strategy. But still ... ๐Ÿ˜‰