# x11-compose-data — la base de secuencias Compose de X11, y NADA de X11. # # QUÉ ES: los ficheros `/usr/share/X11/locale/…` que definen las teclas muertas y las combinaciones # de `Multi_key` (` a '` → `á`). Son **datos**, no código: 5192 líneas de reglas para # `en_US.UTF-8`. Viven en el tarball de libX11 porque históricamente X11 fue quien las mantuvo, no # porque necesiten X11 para existir. # # POR QUÉ LAS NECESITA UNA DISTRO SIN X11, y es una tensión real que conviene dejar escrita: **ibus # las compila DENTRO de libibus**. Su `gen-internal-compose-table` (src/gencomposetable.c:70) lee un # fichero `Compose` en tiempo de build y lo convierte en `compose/sequences--endian`, que # entra como GResource en `ibusresources.c`. Ese paso NO es opcional en su Makefile.am:310 — no hay # `--disable-` que lo evite. Sin datos, el build de ibus muere con # `Failed to open file "/X11/locale/en/Compose"`. # # O sea: el escritorio es Wayland-only por decisión, pero la tabla de teclas muertas del mundo Unix # sigue publicándose dentro de libX11. Empaquetar esos datos NO reintroduce X11: no hay una sola # línea de código, ni un `.so`, ni una dependencia. Es el mismo criterio que `iso-codes`. # # CÓMO SE GENERAN: los ficheros del tarball son `.pre` y hay que pasarlos por el preprocesador de C. # La receta REPRODUCE la regla de upstream (`cpprules.in`) tal cual, en vez de improvisar: # · `cpp -undef -traditional -DWCHAR32=1` — `RAWCPP $(RAWCPPFLAGS) $(CPP_FILES_FLAGS)`. # · el `CPP_SED_MAGIC`, copiado literal. Traduce `XCOMM` a `#` con sed y no con `-DXCOMM=XCOMM` # —el comentario de upstream explica que ese truco no funciona en todos los preprocesadores—, # borra las marcas de línea de cpp, sustituye `X11_LOCALEDATADIR` por la ruta real y colapsa los # `@@` finales en barras invertidas. # Verificado: la salida son 5192 líneas con 2337 secuencias de teclas muertas, sintaxis intacta. # # SÓLO en_US.UTF-8. Es la que ibus busca (`sys_langs[] = { "en_US.UTF-8", "en_US", "en" }`) y la que # todas las demás locales incluyen por `include "%L"`. Traer las ~180 locales sería traer el árbol # de i18n de X11 entero para que nadie lo lea. # # `locale.dir` no es decorativo: el configure de ibus decide `X11_LOCALEDATADIR` comprobando que # EXISTA (configure.ac:394). Sin él cae a un `$(datadir)` sin expandir y el define queda en # `"/X11/locale"`, que es exactamente el error de arriba. name = "x11-compose-data" version = "1.8.13" license = "MIT" [source] tarball = "https://gitlab.freedesktop.org/xorg/lib/libx11/-/archive/libX11-1.8.13/libx11-libX11-1.8.13.tar.gz" sha256 = "d210291f5cd974e5029cce4bde0fc1b8bfc0ce88b8530ea6ba4b1fcf141506ab" [build] compiler = "zig-cc" target = "x86_64-linux-musl" link = "dynamic" [build.phases] configure = "true" compile = "true" install = ''' set -e LOCALEDIR=/usr/share/X11/locale mkdir -p "/out$LOCALEDIR/en_US.UTF-8" # La regla de upstream, literal (cpprules.in): cpp crudo + el CPP_SED_MAGIC. gen() { cpp -undef -traditional -DWCHAR32=1 < "$1" | LC_CTYPE=C sed \ -e '/^\# *[0-9][0-9]* *.*$/d' \ -e '/^\#line *[0-9][0-9]* *.*$/d' \ -e '/^[ ]*XCOMM$/s/XCOMM/\#/' \ -e '/^[ ]*XCOMM[^a-zA-Z0-9_]/s/XCOMM/\#/' \ -e '/^[ ]*XHASH/s/XHASH/\#/' \ -e "s,X11_LOCALEDATADIR,$LOCALEDIR,g" \ -e '/\@\@$/s/\@\@$/\\/' \ -e '/^$/d' > "$2" } gen nls/en_US.UTF-8/Compose.pre "/out$LOCALEDIR/en_US.UTF-8/Compose" gen nls/en_US.UTF-8/XLC_LOCALE.pre "/out$LOCALEDIR/en_US.UTF-8/XLC_LOCALE" gen nls/locale.dir.pre "/out$LOCALEDIR/locale.dir" gen nls/compose.dir.pre "/out$LOCALEDIR/compose.dir" gen nls/locale.alias.pre "/out$LOCALEDIR/locale.alias" cp nls/en_US.UTF-8/XI18N_OBJS "/out$LOCALEDIR/en_US.UTF-8/XI18N_OBJS" wc -l "/out$LOCALEDIR/en_US.UTF-8/Compose" ''' [deps] build = ["make", "pkgconf"]