Migrando a teclado en Inglés para desarrollo
Tags: spanish, productividad, teclado, tutorial
Published: 2021-06-25 22:26:47

Idiomas: [🇪🇸] [Español](https://dev.to/equimancho/migrando-a-teclado-en-ingles-para-desarrollo-a91) - [🇺🇸] [English](https://dev.to/equiman/switching-to-en-us-keyboard-layout-for-development-4b5a)

---

Cuando empecé a trabajar en desarrollo de software, recuerdo que uno de los desarrolladores senior me dio uno de los mejores consejos que me han dado: 

> Instale y use **todo** en Inglés, acostumbrese de una vez porque todo el ecosistema de desarrollo se enfoca en ese idioma. Todo sale primero en inglés, las nuevas versiones, la documentación y hasta las noticias. Si se queda esperando a que salga en español va vivir con lag, desactualizado y atrasado.
 
> Además su vida va ser muchísimo más fácil porque cuando le salga un error de programación solo va tener que copiar y pegarlo en un buscador y seguro va encontrar la respuesta de una, si la busca en español o la traduce se va demorar horas.

```javascript
catch(error){
   console.log(`https://stackoverflow.com/search?q={error.message}`)
}
```

Y asi, la primera vez que vi ese chiste, de repente todas sus palabras cobraron sentido. 😎

---

Hace unos días, empecé a ver a varios desarrolladores no americanos (Latam, España, Francia, Alemania, India, y Hungria) que recomendaban usar el teclado con la distribución en inglés, especificamente la de **en-US**.

Y una nueva revelación se plasmó ante mis ojos: 

> Si estamos usando software en inglés y escribiendo código en inglés ¿por qué no usar también hardware en inglés?

Los lenguajes de programación, IDEs y editores de código fueron diseñados y desarrollados para usarse en inglés como idioma principal; y si no me equivoco estoy casi seguro que fueron creados usando un teclado en inglés.

![enUS](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pvuwsepv7783ghlsev7p.png)

Todos estas personas que cambiaron a esta distribución de teclado  decían que ahora sentían todo más fluido, natural, cómodo y hasta les ayudaba con la productividad. Creo que esto es debido a que los símbolos y atajos de teclado fueron creados usando un teclado con distribución **en-US**. La verdad, no se si es correcto o no asumir eso, pero para mi tiene mucho sentido.

¿Alguna vez han tratado de comprar un teclado mecánico con distribución en español y peor aun con distribución español de latinoamérica?, es prácticamente imposible. Por eso hacer el cambio a un distribución **en-US** viene beneficios adicionales porque ya vas a comprar el teclado que quieras y no el que te toca. 

> Si si, eso suena muy bueno pero... ¿qué hago con las tildes y con la letra Ñ?

---

# Solución Rápida

Todxs los que necesiten cualquier clase de acentos o marcas diacríticas pueden usar la distribucíon **US International** en vez de la **en-US**.

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/o0wo1zc9j5u60kmevtr4.png)

Esta distribución **US International** también usa el modificador AltGr (Alt+Ctrl) para ingresar caracteres especiales y convierte los caracteres `` ` `` (acento grave), `~` (virgulilla), `^` (circunflejo), `"` (comilla doble, para hacer diéresis), y `'` (apóstrofe , para hacer acentos agudos) en **teclas muertas** para producir caracteres con acento.

Los de habla hispana ya estamos acostumbrados a usar el `´` (acento agudo) que es una teclas muerta para tildar las vocales, pero en esta distribución por ejemplo se debe presionar el apóstrofe `'` (liberarla) y después presionar la letra `a` para producir la `á` con acento. 

Pero esta distribución tiene un **problema crítico** (al menos en Windows) para los que nos dedicamos al desarrollo de software debido a estas **teclas muertas**. Vamos a perder velocidad porque para producir algunos caracteres que usamos frecuentemente como `"` (comilla doble) o `'` (comilla sencilla) vamos a tener que presionar dos teclas: primero la tecla muerta y luego un carácter de finalización como (espacio, tabulador o enter).

> ¿Entonces como que hacemos ahí?

No hay de otra que regresar a la distribución **en-US** y crear un script personalizado para los acentos. 

---

# Solución Personalizada

> Si no está interesado en el conocer toda la parte divertida y explicación, puede ir directamente al [Resumen](https://dev.to/equimancho/migrando-a-teclado-en-ingles-para-desarrollo-a91#resumen)

Voy a **detallar** el proceso para crear un script de [AutoHotKey](https://www.autohotkey.com/) para crear acentos en español. Ustedes lo pueden usar como ejemplo para crear el suyo y personalizarlo a gusto.

- Primero, necesitamos reconocer los acentos como `áéíóúñ` y símbolos como `¡¿` que queremos re-mapear para así buscar su correspondiente valor decimal en la [tabla ASCII](https://www.ascii-code.com/).

|Caracter|Decimal|Caracter|Decimal|
|---|---|---|---|
|á|0225|Á|0193|
|é|0233|É|0201|
|í|0237|Í|0205|
|ó|0243|Ó|0211|
|ú|0250|Ú|0218|
|ñ|0241|Ñ|0209|
|¿|0191|?|63|
|¡|0161|!|33|

- Luego, vamos a re-mapear cada tecla con el destino deseado siguiendo este formato `OriginKey::DestinationKey` prestando especial atención en las [teclas modificadoras](https://www.autohotkey.com/docs/KeyList.htm#modifier).

|Caracter|Modificador|
|---|---|
|^|<kbd>Ctrl</kbd>|
|!|<kbd>Alt</kbd>|
|+|<kbd>Shift</kbd>|
|#|<kbd>Win</kbd>|
|<|Izquierda|
|>|Derecha|

- Crear un archivo con el nombre `en-US_accents.ahk` y adicionar la siguiente configuración.

```cpp
!a::Send {Asc 0225}    ; Alt+a -> á
!+a::Send {Asc 0193}   ; Shift+Alt+a -> Á
!d::Send {Asc 0233}    ; Alt+e -> é
!+d::Send {Asc 0201}   ; Shift+Alt+e -> É
!g::Send {Asc 0237}    ; Alt+i -> í
!+g::Send {Asc 0205}   ; Shift+Alt+i -> Í
!s::Send {Asc 0243}    ; Alt+o -> ó
!+s::Send {Asc 0211}   ; Shift+Alt+o -> Ó
!f::Send {Asc 0250}    ; Alt+u -> ú
!+f::Send {Asc 0218}   ; Shift+Alt+u -> Ú
!l::Send {Asc 0241}    ; Alt+n -> ñ
!+l::Send {Asc 0209}   ; Shift+Alt+n -> Ñ
```

> Pero que fácil!

No tan rápido mi amigx. Acabamos de crear el acceso rápido `Alt+Shift+A`, pero por ejemplo **VSCode** también usar el mismo acceso rápido para alternar la opción de activar y desactivar commentarios.

Así que lo mejor es cambiar nuestro script para que los `Alt+Shift+` solo funcione con el Alt de la derecha `(Der)Alt+Shift+`. Para ello debemos cambiar los modificadores `!+` por `>!+`.

Con esa pequeña corrección VScode podrá seguir funcionando con el `(Izq)Alt+Shift+a` y nosotros podremos usar el `(Der)Alt+Shift+a` para escribir la `Á` (con acento). Yo prefiero cambiar de una vez todas las letras para conservar el estándar, pero vos podes decidir si cambias únicamente las teclas que generen conflictos.

```cpp
!a:: Send {Asc 0225}    ; Alt+a -> á
>!+a:: Send {Asc 0193}  ; Shift+(Right)Alt+a -> Á
!e:: Send {Asc 0233}    ; Alt+e -> é
>!+e:: Send {Asc 0201}  ; Shift+(Right)Alt+e -> É
!i:: Send {Asc 0237}    ; Alt+i -> í
>!+i:: Send {Asc 0205}  ; Shift+(RightAlt+i -> Í
!o:: Send {Asc 0243}    ; Alt+o -> ó
>!+o:: Send {Asc 0211}  ; Shift+(Right)Alt+o -> Ó
!u:: Send {Asc 0250}    ; Alt+u -> ú
>!+u:: Send {Asc 0218}  ; Shift+(Right)Alt+u -> Ú
!n:: Send {Asc 0241}    ; Alt+n -> ñ
>!+n:: Send {Asc 0209}  ; Shift+(Right)Alt+n -> Ñ
```

> ¡Oh si! ¡Excelente!

Adicionalmente en español usamos los símbolos de exclamación y apertura de forma emparejada, es decir, siempre deben tener símbolo de apertura y de cierre.

```cpp
!/:: Send {Asc 0191}{Asc 63}{left 1}    ; Alt+/ -> ¿?
!1:: Send {Asc 0161}{Asc 33}{left 1}    ; Alt+1 -> ¡!
```

![accents](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/yrambmp175octsbv55o8.gif)

Lo buenos de usar scripts de este tipo, es que podemos sobre cargarlos con más trucos. En este caso podemos hacer que escriba la pareja de símbolos y con el comando `{left 1}` mueva el cursor entre ellos.

---

# Extra

Aún conservo unos cuantos trucos más bajo las mangas, pero los considero opcionales.

Si tienes un teclado numérico a la derecha ¿por qué no usar la fila superior de números directamente con los símbolos cuando el `Num Lock` se encuentre activo?

Les debo confesar que fue uno de los cambios a los que mas me costó acostumbrarme, pero una vez la mente lo asimila es una dicha poder codear sin tener que estar presionando constantemente el modificador `Shift` (Mayús).

```cpp
#if GetKeyState("NumLock", "T")
    *1::!
    *2::@
    *3::#
    *4::$
    *5::Send `%
    *6::^
    *7::&
    *8::Send `*
    *9::(
    *0::)
    $+1::Send 1
    $+2::Send 2
    $+3::Send 3
    $+4::Send 4
    $+5::Send 5
    $+6::Send 6
    $+7::Send 7
    $+8::Send 8
    $+9::Send 9
    $+0::Send 0
#if
```

![numpad](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ielb5m23bvosj35gw570.gif)

> Si tienes un laptop o un teclado TKL (Ten Key Less) puedes usar la tecla `Insert` en vez de `NumLock` para activar o desactivar esta opción.

Y ahora hágase esta pregunta ¿cuántas veces usan la tecla `Caps Lock` (Bloq Mayús)? ne mi caso casi nunca. Cuando estuve probando otras distribuciones como **Dvorak** y especificamente **Workman** descubrí las maravillas de intercambiarla por el `Backspace` (retroceso) y poder hacer correcciones sin salir de la Fila Guía (Home Row) del teclado.

```cpp
CapsLock::Backspace
!CapsLock::CapsLock
```

![caps](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vdj6gfodm0if3m5rxk29.gif)

Pero en todo caso, si en algún momento necesitan activar el `Caps Lock` (Bloq Mayús), por ejemplo para escribir SQL lo pueden activar y desactivar usando `Alt+CapsLock`.

---

# Resumen

Finalmente, tenemos una distribución de teclado **en-US** para desarrollo completamente compatible, rápida, confiable y que puede ser usada por los Hispanohablantes sin dejar de usar **Qwerty**.

![en-us](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jbrvg5qoaqs66p91jc7x.gif)

Todo con un simple script de AutoHotkey:

```cpp
#NoEnv  ; Recommended for performance and compatibility with future AutoHotkey releases.
; #Warn  ; Enable warnings to assist with detecting common errors.
SendMode Input  ; Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir %A_ScriptDir%  ; Ensures a consistent starting directory.

; Modifiers
; ^ Ctrl
; ! Alt
; + Shift
; # Win
; < Left
; > Right

; Action
CapsLock::Backspace
!CapsLock::CapsLock     ; Alt+CapsLock -> Enable/Disable Caps Lock
PrintScreen::Send #+s

; Accents
!a:: Send {Asc 0225}    ; Alt+a -> á
>!+a:: Send {Asc 0193}  ; Shift+(Right)Alt+a -> Á
!e:: Send {Asc 0233}    ; Alt+e -> é
>!+e:: Send {Asc 0201}  ; Shift+(Right)Alt+e -> É
!i:: Send {Asc 0237}    ; Alt+i -> í
>!+i:: Send {Asc 0205}  ; Shift+(RightAlt+i -> Í
!o:: Send {Asc 0243}    ; Alt+o -> ó
>!+o:: Send {Asc 0211}  ; Shift+(Right)Alt+o -> Ó
!u:: Send {Asc 0250}    ; Alt+u -> ú
>!+u:: Send {Asc 0218}  ; Shift+(Right)Alt+u -> Ú
!n:: Send {Asc 0241}    ; Alt+n -> ñ
>!+n:: Send {Asc 0209}  ; Shift+(Right)Alt+n -> Ñ

; Symbols
!/:: Send {Asc 0191}{Asc 63}{left 1}    ; Alt+/ -> ¿?
!1:: Send {Asc 0161}{Asc 33}{left 1}    ; Alt+1 -> ¡!

; Swap Numbers Row
#if GetKeyState("NumLock", "T")
    *1::!
    *2::@
    *3::#
    *4::$
    *5::Send `%
    *6::^
    *7::&
    *8::Send `*
    *9::(
    *0::)
    $+1::Send 1
    $+2::Send 2
    $+3::Send 3
    $+4::Send 4
    $+5::Send 5
    $+6::Send 6
    $+7::Send 7
    $+8::Send 8
    $+9::Send 9
    $+0::Send 0
#if
```

Como les mencioné mas arriba, se que existen otras distribuciones de teclado como Dvorak, Colemak, Workman, Norman y otro montón más. He probado varias de ellas y termine por convencerme que no hay una distribución perfecta para todo. Si eres escritor podría ser un factor clave par aumentar la velocidad, pero en desarrollo no es un aspecto tan importante.

Por eso creo que con los cambio que estamos introduciendo con AutoHotkey, puedes seguir usando **Qwerty** y no vas a tener que enfrentar demasiados problemas en caso de que necesites usar el computador de alguien más o alguien necesite usar el tuyo.

Lo bueno de todo esto es que tenemos múltiples opciones y podemos elegir la que más nos guste acorde a las necesidades y gustos. Escoge con sabiduría lo que creas que es mejor para tí y concédete el permiso de probar cosas nuevas, te puedes llegar a sorprender.

---

Una última recomendación. Si trabajas en desarrollo de software, también podrías darle superpoderes a tu teclado para que escriba los operadores de JS/TS por ti.

{% post https://dev.to/equimancho/operadores-de-javascript-con-autohotkey-3o74 %}

---

**Fuentes:**

- [Wikipedia - Keyboard Layouts](https://en.wikipedia.org/wiki/Keyboard_layout)
- [Wikipedia - British and American Keyboards](https://en.wikipedia.org/wiki/British_and_American_keyboards)

---

**That’s All Folks!**
**Happy Coding** 🖖

[![cerveza](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/h4zle20oa7anpfjvap8n.png)](https://github.com/sponsors/deinsoftware)