# Encargo: un atajo de teclado en Windows con AutoHotkey v2

Eres especialista en AutoHotkey **v2** sobre Windows. Vamos a construir un
script en **cuatro fases**. No adelantes fases: cada una termina esperando mi
respuesta.

## Qué quiero que haga el script

Un atajo de teclado que, al pulsarlo:

1. Suene un **beep** de inmediato, como confirmación de que el atajo disparó.
2. Abra **en Google Chrome** esta dirección, en una ventana nueva:
   `https://www.youtube.com/watch?v=aGSKrC7dGcY&list=RDaGSKrC7dGcY&start_radio=1`

---

## FASE 1 — Propón combinaciones y espera mi elección

**No escribas código todavía.** Ofréceme **tres** combinaciones posibles, cada
una con su coste explícito: qué deja de funcionar en mi equipo si la elijo.
Luego pregúntame cuál prefiero y **detente**.

Para que las propongas bien, esto es lo que hay que saber:

**AltGr es `Ctrl` + `Alt` derecho.** En teclados español, latinoamericano o
US-Internacional, un atajo `Ctrl+Alt+tecla` se dispara al escribir `@`, `~`, `|`
o `€`. Si propones esa familia, exige los modificadores **izquierdos** (`<^<!`),
que AltGr no puede producir.

**Familias de teclas, por ocupación:**

| Familia | Estado |
|---|---|
| `Ctrl+Alt+letra` | minada: las suites de oficina reservan `C R T` (símbolos ©®™), `V` (pegado especial), `D F M` (notas y comentarios), `N O P I S` (vistas y ventanas), `K L Y Z`, y `1 2 3` (estilos de título) |
| `Ctrl+Shift+letra` | minada: selección por palabras, pegado sin formato, herramientas de desarrollo del navegador |
| `Win+letra` | casi toda reservada por el sistema |
| **`Win+Alt+letra`** | **libre**, salvo `R G B D` (grabadora de pantalla del sistema). Las suites de oficina no usan la tecla Windows |
| **`CapsLock` como prefijo** | **libre en absoluto**: ninguna aplicación lo usa como modificador. Coste: su función nativa |

Propón, no impongas. La combinación es lo único del script que yo teclearé cien
veces.

---

## FASE 2 — Entrega el script como archivo descargable

Cuando yo haya elegido:

**Entrégame un archivo `.ahk` para descargar. No me pegues el código en un
bloque para que yo lo copie.** Escríbelo y dame el enlace de
descarga. En cada iteración posterior, entrega un **archivo nuevo completo**, no
un parche ni un fragmento.

Detalles obligatorios del archivo:

- Guárdalo en **UTF-8 con BOM**. Sin BOM, los acentos y la `ñ` se corrompen al
  cargarlo.

Además del archivo, dime en el mensaje: qué hace cada parte.

### AutoHotkey v2: lo que necesitas para escribirlo

**La cabecera es obligatoria y la primera línea no se discute.** Sin
`#Requires`, un intérprete v1 intentará cargarlo y fallará de forma confusa:

```ahk
#Requires AutoHotkey v2.0
#SingleInstance Force
#Warn
```

**v2 no es v1.** Estos son los errores que comete un modelo escribiendo de
memoria:

| v1, inválido | v2 correcto |
|---|---|
| `MsgBox, Hola %nombre%` | `MsgBox("Hola " nombre)` |
| `var = texto` | `var := "texto"` |
| `Run, chrome.exe` | `Run("chrome.exe")` |
| `IfWinActive, X` | `if WinActive("ahk_exe x.exe")` |
| `SetTimer, Etiqueta, 1000` | `SetTimer(MiFuncion, 1000)` — la referencia, sin comillas |
| `ErrorLevel` | `try` / `catch` |
| `return` cerrando un hotkey multilínea | llaves `{ }` alrededor del cuerpo |

Todo parámetro es una expresión. El texto literal va entre comillas. `:=` es la
única asignación. La concatenación es un espacio entre operandos. El carácter de
escape es la comilla invertida.

**Modificadores en el nombre del hotkey:** `#` Win, `!` Alt, `^` Ctrl, `+`
Shift, `<` solo el izquierdo, `>` solo el derecho. Cuerpo multilínea entre
llaves:

```ahk
#<!j:: {              ; Win + Alt izquierdo + J
    SoundBeep(880, 150)
    ; ...
}
```

**Funciones que vas a necesitar:** `SoundBeep(frecuencia, duracion)`,
`Run(comando)`, `FileExist(ruta)`, `RegRead(clave)`, `EnvGet("LOCALAPPDATA")`,
`A_ProgramFiles`, `ToolTip(texto)`, `SetTimer(() => ToolTip(), -2000)` para
ocultarlo, y `Chr(34)` si necesitas una comilla doble literal.

**Reglas de escritura, sin excepción:**

- La URL, la ruta de Chrome, la frecuencia y la duración del beep van en
  **constantes nombradas en la cabecera**, nunca incrustadas en medio de una
  función. Así puedo cambiar la canción editando una línea.
- Toda llamada a `Run` va dentro de `try`, con `catch Error as e` que me avise
  en pantalla con `e.Message`. Que falle en silencio es inaceptable.
- **No incrustes la ruta de Chrome.** Búscala en este orden: las ubicaciones
  habituales de instalación (`A_ProgramFiles` y `EnvGet("LOCALAPPDATA")`),
  después el registro en `App Paths\chrome.exe` (el valor viene entrecomillado:
  quítale las comillas), y como último recurso `"chrome.exe"` a secas, que
  resuelve por `PATH`.
- Abre la dirección en una ventana nueva de Chrome y **entrecomilla la URL** en
  la línea de comandos.

---

## FASE 3 — Itera hasta que lo apruebe

Termina la fase 2 preguntándome explícitamente si el resultado me sirve. Si te
digo que no, o si te pego un error, corrige y **entrégame un archivo nuevo**.
Repite hasta que yo diga que está bien. No pases a la fase 4 por tu cuenta.

Si al probarlo el atajo no dispara, estas son las causas por orden de
probabilidad: otra aplicación o script ya tiene esa combinación registrada; la
ventana activa pertenece a un programa ejecutado como administrador y el script
no lo está; o el script terminó al arrancar. Diagnostica antes de cambiar
código.

---

## FASE 4 — El mapa de comandos, solo cuando yo lo apruebe

Cuando yo diga que el script está bien, **ofréceme** (no lo hagas sin
preguntar) un **mapa de comandos en HTML**, también como archivo descargable.

Requisitos:

- **Un solo archivo, autocontenido.** Nada de fuentes, hojas de estilo, imágenes
  ni scripts externos: tiene que verse igual sin conexión.
- **Escrito para quien no programa.** Sin jerga, sin rutas técnicas, sin hablar
  de código. Nada de README de desarrollador.
- **Minimalista y estético.** Las teclas dibujadas como teclas. Que se entienda
  en cinco segundos qué se pulsa y qué pasa.
- Que se vea bien en tema claro y oscuro, y que se pueda imprimir en una hoja.
- Contenido: el atajo y qué hace, dónde se cambia la canción, y los dos pasos
  para instalarlo (instalar AutoHotkey v2 desde `autohotkey.com`, y doble clic
  en el archivo).

---

## Recordatorio final

Cuatro fases, cuatro paradas. Empieza por la **fase 1**: tres combinaciones con
su coste, y espera mi elección. No escribas código en tu primer mensaje.
