Some minor improvements to Konsole
For some inexplicable reason, in the beginning of January 2026, I got the urge to contribute to Konsole, KDE’s terminal emulator.
My initial expectations (mostly from reading posts made by terminal enthusiasts, and from seeing Universal Blue replace it with Ptyxis) were that people thought that Konsole was an outdated terminal with bad UI and poor terminal feature support.
Now, I didn’t actually care much about the supposed features that Konsole was missing (I was perfectly content with using it, after all!), but I felt like I wanted to make KDE’s default offering more palatable, so that people didn’t have to go out of their way to install a different emulator.
The first thing I had on my mind was the fact that, despite most other terminals implementing and enabling OSC8 links, Konsole had them disabled by default, supposedly due to them being a security risk, as you couldn’t see the actual URL you go to. This is kind of weird, as other terminals (like browsers) show you an indicator of where the link will go. Because of that, I wanted to try to implement this for Konsole too.
Only having written around 10 lines of Qt code in my life, this seemed like it would be a huge challenge, but fortunately the actual logic turned
out to be very very simple - just adding a QLabel to the terminal display and making the escape sequence hotspot set its text
proved to work fine.

While I was making that MR, I noticed some issues with the implementation of OSC8 links in general (guess that’s why you don’t make a feature
opt-in!) - file:// URLs weren’t being handled at all,
and links would stay around after the terminal is cleared. Fixing both of these
issues was relatively simple.
After that, I noticed that some people were complaining about Konsole not having support for the Kitty Keyboard Protocol (which, for the uninitiated, is a terminal spec that allows applications to handle more types of key events).
Writing the initial PoC implementation was easy, but I encountered some Qt/KF limitations, namely:
- Getting whether
Caps LockorNum Lockis locked isn’t possible directly via Qt, and KDE’sKModifierKeyInfoclass works fine under X11, but requires a privileged1 KDE-only protocol on Wayland - The spec requires being able to send the base layout, unshifted and shifted keys, which is something that Qt doesn’t really provide, and requires peering into xkb internals.
However, despite those issues, most of the functionality does work:
While testing the Kitty Keyboard Protocol support, I found out that Kitty also has the kitten mouse-demo tool, presumably for showing off the
mouse-related protocols Kitty supports (like Kitty’s Pointer Shapes spec).
I wanted to try it out, but it turned out that it didn’t work under Konsole, due to it not having support for pixel-precise mouse events.
Implementing it required plumbing through those events, since Konsole’s existing logic is designed for cell-precise events, but it was mostly fine.
However, as you can see in the demo, the output is constantly tearing and the cursor doesn’t change when you mouse over the names. As a final mark, I fixed these issues by adding support for synchronized output and setting the pointer shape via OSC22.
While I had fun writing the Konsole changes (it has made me want to quit Minecraft modding and go on in Linux land), I hope that these changes, however small, actually benefit you. Thanks to Tomaz Canabrava for reviewing my changes, and happy hacking!