---
name: powertoys_shortcut_list
kind: function
lang: py
domain: infra
version: "1.0.0"
purity: impure
signature: "def powertoys_shortcut_list(config_path: str | None = None) -> list[dict]"
description: "Lee el default.json de PowerToys Keyboard Manager y devuelve los atajos globales con VK codes convertidos a nombres legibles."
tags: [powertoys, keyboard, windows, wsl, shortcut, config, read]
uses_functions: []
uses_types: []
returns: []
returns_optional: false
error_type: "error_py_core"
imports: [json, os]
params:
  - name: config_path
    desc: "Path absoluto al default.json. Si es None, usa $POWERTOYS_CONFIG o el path WSL por defecto para $USER."
output: "Lista de dicts con campos: keys (list[str] nombres legibles), target (str path al exe), args (str argumentos), elevated (bool), exact_match (bool), start_in_dir (str)."
tested: false
tests: []
test_file_path: ""
file_path: "python/functions/infra/powertoys_shortcut_list.py"
notes: |
  error_py_core no existe en el registry. Esta funcion lanza excepciones nativas de Python:
  FileNotFoundError si config_path no existe, json.JSONDecodeError si el JSON es invalido.
  El caller debe manejar estas excepciones. Cuando error_py_core se cree en el registry,
  actualizar error_type.

  Solo lee remapShortcuts.global (no appSpecific, no remapKeys, no remapKeysToText).
  El dict VK_CODES esta definido en el modulo — no hay cross-file imports para mantener KISS.
---

## Ejemplo

```python
from infra.powertoys_shortcut_list import powertoys_shortcut_list

shortcuts = powertoys_shortcut_list()
for s in shortcuts:
    print(s["keys"], "->", s["target"])
# ["lctrl", "lalt", "t"] -> C:\Windows\System32\wt.exe
```

## Notas

Mapeo VK codes: lctrl=162, rctrl=163, lalt=164, ralt=165, lshift=160, rshift=161,
lwin=91, rwin=92, A-Z=65-90, 0-9=48-57, F1-F12=112-123, space=32, enter=13, tab=9, esc=27.
VK codes desconocidos se devuelven como string numerico (ej: "190").
