Elffuss Elffuss CodeProyecto del día
Proyecto del día · 4 de octubre de 2026

Grabé el atajo, el editor lo mostró bien y nunca volvió a disparar

Un grabador de atajos de teclado para una paleta de comandos: lo que aparecía en pantalla era exactamente lo que yo había pulsado, y aun así la combinación no volvía a funcionar nunca más.

El IDE con IA local en el navegadorlocal · en el navegador

El encargo era pequeño: una paleta de comandos interna necesitaba atajos configurables. Un campo que diga «pulsa la combinación», el usuario pulsa, se guarda, y a partir de ahí esa tecla dispara ese comando. Media tarde, como mucho.

La primera versión funcionó a la primera, que ya es mala señal. Escuchaba keydown, montaba una cadena con los modificadores y event.key, y la pintaba en el campo. Grabé Ctrl+Alt+N para «nuevo comando», vi «Ctrl+Alt+N» en pantalla, guardé. Y no pasó nada. Ni entonces ni las veinte veces siguientes.

Lo que se guardaba no era la tecla

Lo que ves en el campo y lo que el navegador te da son dos cosas distintas. event.key no es la tecla física: es el carácter que esa tecla produce con esos modificadores y con ese teclado. Con Alt pulsado, en más de un teclado, la N no da «n», da otro glifo. Con Shift, el 2 no da «2». Yo estaba pintando una etiqueta bonita por un lado y comparando contra otra cosa por el otro, y el matcher, que normalizaba a minúsculas, nunca llegaba a coincidir.

Aquí es donde la IA local me ahorró el rato de verdad. Le pegué el handler entero y la tabla de atajos que estaba intentando guardar, y la conversación fue bastante seca: separa identidad de presentación. Guarda event.code —la tecla física, «KeyN»— más los cuatro flags de modificador. Usa event.key solo para pintar la etiqueta que lee el usuario. Dos campos, dos usos, y se acabó.

Y de paso tres cosas que no se me habían pasado por la cabeza:

Con eso el grabador pasó de «parece que va» a ir.

Por qué no lo mandé a ningún sitio

Lo que pegué en el prompt no era solo el handler. Era la lista completa de comandos de una herramienta interna de un cliente: nombres de acciones, de entidades, de pantallas que no existen fuera de su empresa. El mapa de atajos de una app es, literalmente, un índice de todo lo que esa app sabe hacer.

No me apetecía subir eso a ninguna parte, ni aceptando que «no se entrena con tus datos». Con el modelo corriendo en el navegador, sobre la GPU de mi equipo, la pregunta no es si confío en la política de retención de alguien: es que no hay petición que salga. Ni el código, ni los nombres, ni la pregunta.

Y como extra, en el AVE sin cobertura decente seguía respondiendo igual.

Si tienes un trasto así a medias, ábrelo en Elffuss Code: la IA corre dentro de tu navegador, con tu GPU, y ni tu código ni tus prompts suben a ningún servidor.

Abrir Code →
nada de esto se sube a ningún sitio