Ptyxis 49.2 en Fedora/Bluefin. Con muchos tabs abiertos en distintos repos es difícil saber cuáles están relacionados. Queríamos que los tabs se colorearan automáticamente según el repositorio git, usando fish y nushell.
Lo primero fue ver qué expone Ptyxis por DBus:
gdbus introspect --session --dest org.gnome.Ptyxis --object-path /org/gnome/Ptyxis
Expone org.gtk.Actions con estas acciones disponibles:
preferences, new-tab, about, focus-tab-by-uuid, new-window, edit-profileEn la ventana (/org/gnome/Ptyxis/window/1) solo hay dos acciones:
tab.read-only e interface-style. No hay nada para setear color de tab.
dconf dump /org/gnome/Ptyxis/
El schema de perfiles tiene clave palette (nombre de paleta) pero no hay
ninguna clave de “color de tab” por pestaña. Las claves son globales al perfil.
El menú contextual del tab (clic derecho sobre la pestaña) en Ptyxis 49.2 solo tiene: Move Left/Right, Move to New Window, Pin/Unpin, Set Title, Close. *No hay “Set Color”* — esa feature no llegó aún a esta versión.
Inspeccionando strings /usr/lib64/libvte-2.91.so.0.8200.3, VTE 0.82 expone
estas termprops:
vte.container.name vte.container.runtime vte.container.uid vte.cwd vte.cwf vte.icon.color ← RGBA color para el ícono del tab vte.icon.image vte.progress.hint vte.progress.value vte.shell.postexec vte.shell.precmd vte.shell.preexec
vte.icon.color es una termprop de tipo RGBA. Para setearla desde la shell se
usa OSC 666, el mismo mecanismo que usa /etc/profile.d/vte.sh para
vte.shell.precmd etc.:
# Setear color
printf '\033]666;vte.icon.color=#3498db\033\\'
# Resetear (sin valor)
printf '\033]666;vte.icon.color\033\\'
El valor acepta cualquier string que parsee gdk_rgba_parse(): #rrggbb,
#rrggbbaa, nombres CSS, rgba(r,g,b,a).
De /etc/profile.d/vte.sh:
__vte_termprop_set() { printf '\033]666;%s=%s\033\\' "$1" "$2"; }
__vte_termprop_signal(){ printf '\033]666;%s!\033\\' "$1"; }
__vte_termprop_reset() { printf '\033]666;%s\033\\' "$1"; }
El XML de UI embebido en el binario de Ptyxis muestra todos los handlers de termprops que tiene conectados:
<signal name="termprop-changed::vte.container.name"
handler="ptyxis_tab_invalidate_icon"/>
<signal name="termprop-changed::vte.container.runtime"
handler="ptyxis_tab_invalidate_icon"/>
<signal name="termprop-changed::vte.progress.hint"
handler="ptyxis_tab_invalidate_progress"/>
<signal name="termprop-changed::vte.progress.value"
handler="ptyxis_tab_invalidate_progress"/>
No hay handler para =vte.icon.color=. La función ptyxis_tab_dup_indicator_icon
construye el ícono del tab basándose solo en progreso y tipo de contenedor;
no lee vte.icon.color en esta versión. strings /usr/bin/ptyxis confirma:
cero menciones del string =”vte.icon.color”=.
| Mecanismo | ¿Funciona en Ptyxis 49.2? |
|---|---|
| DBus tab color API | No existe |
| GSettings tab color key | No existe |
vte.icon.color via OSC 666 | VTE lo almacena, Ptyxis no reacciona |
vte.progress.hint (OSC 9;4) | Sí, pero solo 4 estados fijos |
| Emoji en título del tab | ✓ Funciona hoy |
Dado que no hay API nativa, la solución tiene dos capas:
Colorear el título del tab con un emoji de círculo determinístico. El índice
se elige hasheando la ruta absoluta del repo (md5sum → primeros 2 hex → mod 8):
| Índice | Emoji | Color hex |
|---|---|---|
| 0 | 🔴 | #e74c3c |
| 1 | 🟠 | #e67e22 |
| 2 | 🟡 | #f1c40f |
| 3 | 🟢 | #2ecc71 |
| 4 | 🔵 | #3498db |
| 5 | 🟣 | #9b59b6 |
| 6 | 🩵 | #00bcd4 |
| 7 | 🟤 | #795548 |
El mismo repo siempre produce el mismo emoji en cualquier sesión y shell.
Se envía vte.icon.color via OSC 666 en cada cambio de directorio. Cuando
Ptyxis agregue el handler, los puntos de color aparecerán automáticamente sin
modificar nada en la config del shell.
Fish:
~/.config/fish/conf.d/ptyxis_tab_color.fish — hook --on-variable PWD,
cachea $_ptyxis_repo_emoji y envía OSC 666.~/.config/fish/functions/fish_title.fish — prefija el título del tab con
el emoji cacheado.Nushell:
~/.config/nushell/ptyxis_tab_color.nu — hook env_change.PWD para el
emoji/OSC 666 + hook pre_prompt para el título. Deshabilita osc2 built-in
para evitar que sobreescriba el título.config.nu./etc/profile.d/vte.sh — integración de shell de VTE en Fedora, fuente del
formato OSC 666vte.icon.color pero Ptyxis no la consume aún.vte.icon.color ya tiene handler
(buscar termprop-changed::vte.icon.color en el binario)