Coma entrometida
Recientemente jubilé mi vieja computadora Linux por una elegante MacBook Pro M1. Sí, mi primera Mac. Pero no te adelantes, esto no se trata de una reseña tras N días de uso, ni es un benchmark del prometedor procesador creado por Apple, o el clásico versus de lo que te puedas imaginar. Mucho menos es una opinión desde el punto de vista de un ingeniero de software. En serio, de eso ya hay mucho. Basta una vuelta rápida por Youtube o una búsqueda cero exhaustiva en Google y entenderás.
En fin. Después de las primeras horas jugando con la Mac, estaba encantado. Aunque oficialmente mi primer contacto fue con una iMac G3 en un salón de clases cuando estudiaba inglés, no fue hasta esta ocasión que realmente experimentaba con una. Daba clicks aquí y allá, cambiando configuraciones, personalizándola. Entonces llegó el momento de conectarla al monitor; emparejar teclado, mouse inalámbricos y ¡listo! Estaba preparado para comenzar la jornada en Typcod.
Primera intromisión
Me es más productivo usar un teclado completo. Al insertar valores numéricos es más cómodo para mí que un teclado tenga su propia sección dedicada únicamente a números. Mi sorpresa llegó al estar ingresando una cifra decimal y ver en pantalla que al ingresar un punto, éste se sustituía por una coma. Rápidamente deduje que no había modificado la distribución del teclado a Español ISO, pero no, eso ya lo había hecho. Pensé además que los parámetros de idioma y región no eran los adecuados; tampoco.
Buscando por la web, hallé un atajo para conseguir el punto:
Ctrl
+ Shift
+ ,
Servía, pero no era la mejor solución, al menos no para mí. No me agrada la idea de combinar teclas para conseguir un símbolo básico que el propio teclado ya tiene.
Más tarde, al cabo de varios minutos, StackExchange llegó al rescate. Como era de esperarse, había varias alternativas. Había quienes sugerían usar alguna aplicación para hacer el mapeo de teclas. Por ejemplo Karabiner-Elements o Ukelele son buenas opciones, pero a decir verdad les veo potencial desperdiciado para modificar una sola tecla. Me parecen excelentes para flujos de trabajo más complejos y quizá en algún momento necesite de sus servicios.
Yo requería de una solución menos elaborada, simple.
Solución a medias
MacOs tiene un mecanismo para cambiar la configuración de teclas mediante texto en formato clave-valor: los archivos .dict
.
Encontré en esta respuesta que si agregaba el archivo DefaultKeyBinding.dict
bajo la carpeta ~/Library/KeyBindings/
podía fácilmente conseguir el resultado esperado. El contenido del archivo es el siguiente:
{
"#," = ("insertText:", ".");
}
Nótese como #
precede a ,
en la clave, para indicar que la sustitución aplique exclusivamente para el pad numérico. Posteriormente tienes que cerrar e iniciar sesión nuevamante.
En ese instante estaba satisfecho. La coma entrometida se había ido y yo podía continuar. Abrí Visual Studio Code y durante horas trabajé sin inconvenientes hasta que llegó el turno de abrir la terminal. Ahí amargamente me di cuenta de que la intrusa había vuelto, pero esta vez para atacar directamente a vscode. En otras aplicaciones la coma se esfumó, pero para colmo, no de mi entorno principal de desarrollo.
Como tenía demasiadas actividades lo dejé por la paz temporalmente. No iba a abandonar todo por arreglar aquello que ni siquiera me detenía, ya tendría tiempo para intentarlo de nuevo.
Adiós comezón
Dos semanas lidié con el escozor interior de mi cabeza, acentuado cada que utilizaba la terminal incorporada de Visual Studio Code. Mi intuición me indicaba que debía ajustar los key bindings o "atajos" de la aplicación, de tal modo que al presionar el punto éste se convirtiera en punto y no en coma. Así que entré a la documentación para ver cómo cambiarlos. La sintaxis del archivo de configuración keybindings.json
es sencilla, el inconveniente real es saber cuáles son sus argumentos.
Vi un ejemplo que llamó mi atención. En él se inserta el texto Hello World
al teclear Enter
. Esto es parecido a lo que quiero, pensé, pero para la terminal y con la coma. Combinándolo con el cómo enviar texto a la terminal creé mi propio key binding:
{
"key": "numpad_decimal",
"command": "workbench.action.terminal.sendSequence",
"args": { "text": "." }
}
Funcionó con un insignificante detalle. Se sustituía la coma por el punto en la terminal, incluso cuando no la estaba utilizando. Por supuesto ahora estaba peor. ¿Por qué se enviaría un punto a la terminal si no quería escribir en la terminal?
Ya casi lo tenía. Sólo hacía falta encontrar un argumento que condicionara el mapeo. Examiné los atajos que vienen por default y finalmente di con la solución del tan ansiado punto.
{
"key": "numpad_decimal",
"command": "workbench.action.terminal.sendSequence",
"args": { "text": "." },
"when": "terminalFocus"
}
La respuesta: agregar "when": "terminalFocus"
. Así sólo se insertaría el punto al estar específicamente en la terminal.
La comezón se ha ido. Claro, es momentáneo, mientras arriba la próxima. Por ahora me resta disfrutar del punto que sí es punto.