HackerReposA FIELD GUIDE TO OPEN SOURCE
ProSponsor the shelf♧ 0
← Back to top all-time
kragen
xcompose
Python2009–2025
kragen / xcompose

xcompose

for sharing .XCompose keybindings

12Distinct people
26Mentions
1Explicit recommenders
378GitHub stars
REPOSITORY AT A GLANCE

What to know before exploring

What it is

for sharing .XCompose keybindings

GitHub

Where it is used

No documented product use was verified in the last source check.

What people are saying

> What input method are you using such that this is even possible? ibus. In my X settings the physical Caps Lock key is turned into Compose, and then I can easily type ‘ with…

eadmund used a recommendation phrase. One indexed comment matches. This is a phrase match, not a verdict.

No classified warning is attached to this page. Read the discussions before treating silence as approval.

Also in these discussions

No other repository is repeatedly linked in the same discussions.

This week on Hacker News

Nov 7–Nov 14 UTC · Direct repository links and separately labeled related project stories. Indexed through 11/14/2026, 3:56:07 PM UTC.

No direct repository links were found in the indexed HN discussions over the past seven days. Older discussions are available below.

Mentions over time

HN mentions by year26 dated mentions

Observed mentions: 2009-11-27 20:38:30 UTC to 2025-10-22 10:56:39 UTC.

0123452009-01-01 00:00:00 UTC to 2010-01-01 00:00:00 UTC (exclusive): 1 mentions; 0 submissions, 1 comments20092010-01-01 00:00:00 UTC to 2011-01-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2011-01-01 00:00:00 UTC to 2012-01-01 00:00:00 UTC (exclusive): 1 mentions; 0 submissions, 1 comments2012-01-01 00:00:00 UTC to 2013-01-01 00:00:00 UTC (exclusive): 3 mentions; 0 submissions, 3 comments2013-01-01 00:00:00 UTC to 2014-01-01 00:00:00 UTC (exclusive): 2 mentions; 0 submissions, 2 comments2014-01-01 00:00:00 UTC to 2015-01-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2015-01-01 00:00:00 UTC to 2016-01-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2016-01-01 00:00:00 UTC to 2017-01-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2017-01-01 00:00:00 UTC to 2018-01-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments20172018-01-01 00:00:00 UTC to 2019-01-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2019-01-01 00:00:00 UTC to 2020-01-01 00:00:00 UTC (exclusive): 3 mentions; 0 submissions, 3 comments2020-01-01 00:00:00 UTC to 2021-01-01 00:00:00 UTC (exclusive): 1 mentions; 1 submissions, 0 comments2021-01-01 00:00:00 UTC to 2022-01-01 00:00:00 UTC (exclusive): 2 mentions; 0 submissions, 2 comments2022-01-01 00:00:00 UTC to 2023-01-01 00:00:00 UTC (exclusive): 2 mentions; 0 submissions, 2 comments2023-01-01 00:00:00 UTC to 2024-01-01 00:00:00 UTC (exclusive): 1 mentions; 0 submissions, 1 comments2024-01-01 00:00:00 UTC to 2025-01-01 00:00:00 UTC (exclusive): 5 mentions; 0 submissions, 5 comments2025-01-01 00:00:00 UTC to 2026-01-01 00:00:00 UTC (exclusive): 5 mentions; 0 submissions, 5 comments2025

Counts come from the repository’s dated source evidence. Index cutoff: 2026-11-02 08:16:59 UTC.

View mention counts and date ranges
UTC ranges include their start and exclude their end. Select a period to filter the source evidence.
PeriodStart (UTC)End (exclusive, UTC)MentionsSubmissionsComments
20092009-01-01 00:00:00 UTC2010-01-01 00:00:00 UTC101
20102010-01-01 00:00:00 UTC2011-01-01 00:00:00 UTC000
20112011-01-01 00:00:00 UTC2012-01-01 00:00:00 UTC101
20122012-01-01 00:00:00 UTC2013-01-01 00:00:00 UTC303
20132013-01-01 00:00:00 UTC2014-01-01 00:00:00 UTC202
20142014-01-01 00:00:00 UTC2015-01-01 00:00:00 UTC000
20152015-01-01 00:00:00 UTC2016-01-01 00:00:00 UTC000
20162016-01-01 00:00:00 UTC2017-01-01 00:00:00 UTC000
20172017-01-01 00:00:00 UTC2018-01-01 00:00:00 UTC000
20182018-01-01 00:00:00 UTC2019-01-01 00:00:00 UTC000
20192019-01-01 00:00:00 UTC2020-01-01 00:00:00 UTC303
20202020-01-01 00:00:00 UTC2021-01-01 00:00:00 UTC110
20212021-01-01 00:00:00 UTC2022-01-01 00:00:00 UTC202
20222022-01-01 00:00:00 UTC2023-01-01 00:00:00 UTC202
20232023-01-01 00:00:00 UTC2024-01-01 00:00:00 UTC101
20242024-01-01 00:00:00 UTC2025-01-01 00:00:00 UTC505
20252025-01-01 00:00:00 UTC2026-01-01 00:00:00 UTC505

What Hacker News says

26 sources
These work in both X and Wayland, even though they are an X feature. X/Wayland will consult the standard file, but will also consult a file ~/.XCompose. A number of people have created files with extended compose sequences, of which https://github.com/kragen/xcompose is possibly the best-known. If you install or change ~/.XCompose, you must restart your session (log out and back in again) for it to be recognized. I used to bind the Compose key to Caps Lock, but I've recently decided that Right Alt is a better choice. Another commenter mentioned WinCompose, which I have used very successfully with Windows 11. On a Mac, you might try https://github.com/Granitosaurus/macos-compose, which is quite usable, provided you install Karabiner Elements for the remapping.
In Linux Compose Key Sequences (2007)
I have a Compose key binding in https://github.com/kragen/xcompose which maps Compose Space Minus to "—" with two thin spaces on each side of it, because I prefer the spaces. But HN rewrites the thin spaces to regular spaces, so on HN I just use "—" without the spaces, the way ChatGPT does, which is Compose Minus Minus Minus, and is in the standard Compose key bindings (if you map your keyboard to have a Compose key at all). Examples within the last week include https://news.ycombinator.com/item?id=44996702, https://news.ycombinator.com/item?id=44989129, https://news.ycombinator.com/item?id=44991769, https://news.ycombinator.com/item?id=44989444. I typed all of those. I never use space-hyphen-space instead of an em dash. I do sometimes use TeX's " --- ".
In Researchers find evidence of ChatGPT buzzwords turning up in everyday speech
eadmund·Oct 9, 2024Recommendation phrase
> What input method are you using such that this is even possible? ibus. In my X settings the physical Caps Lock key is turned into Compose, and then I can easily type ‘ with Compose <' (and vice-versa), ’ with Compose >' (ditto), “ with Compose <" (ditto), ” with Compose >" (ditto), ß with Compose ss, þ with Compose th, Þ with Compose TH, æ with Compose ae, Æ with Compose AE, … with Compose .., — with Compose ---, – with Compose --. and so forth. https://github.com/kragen/xcompose offers an excellent XCompose file with over a thousand wonderful Compose mappings. Highly recommended!
In Unicode shenanigans: Martine écrit en UTF-8
most emoji are banned, as are nonstandard space symbols like thin space and some other things. emoticons (things like :-) and XD) are allowed. generally alphabetic characters and digits are allowed, and some other things, but i think unknown unicode is forbidden by default. https://news.ycombinator.com/item?id=23440551 has some investigation and results which are probably still accurate i do most of my algebraic formulas with the compose key and a custom compose map mostly written by mark shoulson https://github.com/kragen/xcompose for the above, after a false start picking random unicode characters, i realized that maybe i shouldn't use a modern language because someone who actually uses the language might feel like i was calling them an extraterrestrial, so i switched to googling archaic scripts. i pasted part of the old permic table
Read the rest
from wikipedia >>> s = '''𐍐‎ 𐍑‎ 𐍒‎ 𐍓‎ 𐍔‎ 𐍕‎ 𐍖‎ 𐍗‎ 𐍘‎ 𐍙‎ 𐍚‎ 𐍛‎ 𐍜‎ 𐍝‎ 𐍞‎ 𐍟‎ ... U+1036x 𐍠‎ 𐍡‎ 𐍢‎ 𐍣‎ 𐍤‎ 𐍥‎ 𐍦‎ 𐍧‎ 𐍨‎ 𐍩‎ 𐍪‎ 𐍫‎ 𐍬‎ 𐍭‎ 𐍮‎ 𐍯‎ ... U+1037x 𐍰‎ 𐍱‎ 𐍲‎ 𐍳‎ 𐍴‎ 𐍵‎''' >>> print(''.join(c for c in s if ord(c) >= 0x10350)) 𐍐𐍑𐍒𐍓𐍔𐍕𐍖𐍗𐍘𐍙𐍚𐍛𐍜𐍝𐍞𐍟𐍠𐍡𐍢𐍣𐍤𐍥𐍦𐍧𐍨𐍩𐍪𐍫𐍬𐍭𐍮𐍯𐍰𐍱𐍲𐍳𐍴𐍵 >>> len(''.join(c for c in s if ord(c) >= 0x10350)) 38 >>> permic = (''.join(c for c in s if ord(c) >= 0x10350)) >>> ''.join(random.choice(permic) for i in range(5)) '𐍨𐍓𐍰𐍚𐍠' and then i tried out the hieroglyphs range >>> print(''.join(chr(i) for i in range(0x13000, 0x14000))) 𓀀𓀁𓀂𓀃𓀄𓀅𓀆𓀇𓀈𓀉𓀊𓀋𓀌𓀍𓀎𓀏𓀐𓀑𓀒𓀓𓀔𓀕𓀖𓀗𓀘𓀙𓀚𓀛𓀜𓀝𓀞𓀟𓀠𓀡𓀢𓀣𓀤𓀥𓀦𓀧𓀨𓀩𓀪𓀫𓀬𓀭... 𓿦𓿧𓿨𓿩𓿪𓿫𓿬𓿭𓿮𓿯𓿰𓿱𓿲𓿳𓿴𓿵𓿶𓿷𓿸𓿹𓿺𓿻𓿼𓿽𓿾𓿿 but realized that most of them were unassigned, at least in my font and probably in the current unicode standard (in case someone discovers a new hieroglyph), so i just did this >>> hiero = (''.join(chr(i) for i in range(0x13000, 0x13100))) >>> ''.join(random.choice(hiero) for i in range(4)) '𓃾𓂃𓂌𓀩' you can do all this in python in termux on your phone too (you'll probably have to install it from f-droid) but it's a bit clumsier it's funny how this conversation has swung from the extreme of universal constants of the universe to the opposite extreme of completely arbitrary and historically contingent things like which ideograms (themselves completely arbitrary) are prevented from being posted by implementation bugs in hacker news
In Varda Capsule Reentry – Five Minutes from LEO to Earth [video]
Consistent cmd+x/c/v is great. I've tried replicating this experience in Linux in many different ways over the years, but the best approach was to add `altwin(ctrl_alt_win)` to xkeyboard preferences together with custom `ctrl_space_toggle` for layout toggle. It achieves almost the same effect as Kinto without an additional daemon: physical Alt maps to Ctrl (Cmd in terms of Mac layout), Ctrl works as Super and Super/Win works as Alt — the closest, I think, to Apple keyboard layout. It event works fine in Wayland (sway). Considering the terminal, remap your favorite terminal emulator to send control codes via Super+A..Z (physical Ctrl+A..Z), and unmap/remap to the required action Ctrl+A..Z (physical "Cmd"+A..Z). It works fine in Konsole and great in Alacritty. (unfortunately, I also have to add a second set of mappings for my native non-lat
Read the rest
in keyboard layout, because at toolkit-level keys are translated to latin layout, but remapping works only for a single layout). Of course, it's only a half of the equation. Another part is Option/Compose. On Mac I used MathUnicode.keylayout. It was great, and it was a pleasure to tweak it for my needs. Xkeyboard with .XCompose (e.g. [1]) has two disadvantages: you can't use a key as both Multi key and e.g. Alt modifier simultaneously, and you don't see the composition preview. On Lenovo at least you can use `compose(prsc)` to make your left Win key an «Option-modifier» and its right PrtSc counterpart an «Option-compose». [1]: https://github.com/kragen/xcompose Maybe one day I will buy another Mac... but shall we prefer comfort to freedom?
In Kinto: Mac-style shortcut keys for Linux and Windows

Showing the 15 most recent of 26 sources. Enable JavaScript to search and browse every indexed mention.

MAKE YOURSELF AT HOME

A few shortcuts

/
Search the collection
?
Open this guide
Esc
Close dialogs and navigation

Your saved repositories and interests stay in this browser.