--- name: powertoys_shortcut_add kind: function lang: py domain: infra version: "1.0.0" purity: impure signature: "def powertoys_shortcut_add(keys: list[str], target_path: str, args: str = \"\", elevated: bool = False, exact_match: bool = False, start_in_dir: str = \"\", config_path: str | None = None) -> None" description: "Añade o reemplaza un atajo global en el config de PowerToys Keyboard Manager. Convierte nombres legibles de teclas a VK codes y escribe JSON compacto (una linea) para mantener compatibilidad con el formato de PowerToys." tags: [powertoys, keyboard, windows, wsl, shortcut, config, write, add] uses_functions: [] uses_types: [] returns: [] returns_optional: false error_type: "error_py_core" imports: [json, os] params: - name: keys desc: "Lista de nombres de teclas (case-insensitive). Ej: ['lctrl', 'lalt', 't']. Modificadores: lctrl/rctrl/ctrl, lalt/ralt/alt, lshift/rshift/shift, lwin/rwin/win. Letras: a-z. Digitos: 0-9. F-keys: f1-f12. Especiales: space, enter, tab, esc." - name: target_path desc: "Path Windows al ejecutable. Ej: 'C:\\\\Windows\\\\System32\\\\wt.exe'." - name: args desc: "Argumentos de linea de comandos para el programa (default vacio)." - name: elevated desc: "Si True, lanza el programa elevado (runProgramElevationLevel=1). Default False." - name: exact_match desc: "Si True, el atajo requiere coincidencia exacta de teclas. Default False." - name: start_in_dir desc: "Directorio de trabajo para el programa. Default string vacio." - name: config_path desc: "Path al default.json. Si None, usa $POWERTOYS_CONFIG o el path WSL por defecto para $USER." output: "None. Modifica el archivo default.json en disco." tested: false tests: [] test_file_path: "" file_path: "python/functions/infra/powertoys_shortcut_add.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, ValueError si un nombre de tecla no esta en VK_CODES. El JSON se escribe en formato compacto (separators=(",", ":")) — sin espacios ni saltos de linea — para mantener compatibilidad con el formato que usa PowerToys en el archivo original. El dict VK_CODES mapea "ctrl"->162, "alt"->164, "shift"->160, "win"->91 como aliases a las variantes izquierdas. Para especificar side derecho, usar "rctrl", "ralt", etc. Si ya existe una entrada con los mismos originalKeys, la reemplaza en su posicion original. --- ## Ejemplo ```python from infra.powertoys_shortcut_add import powertoys_shortcut_add # Anadir Ctrl+Alt+T -> Windows Terminal powertoys_shortcut_add( keys=["lctrl", "lalt", "t"], target_path=r"C:\Windows\System32\wt.exe", start_in_dir=r"C:\Users\lucas", ) # Anadir Win+Shift+E -> Explorer elevado powertoys_shortcut_add( keys=["win", "shift", "e"], target_path=r"C:\Windows\explorer.exe", elevated=True, ) ``` ## Notas Despues de modificar el config, PowerToys necesita reiniciarse para detectar los cambios. Usar `powertoys_restart_py_infra` para recargar la configuracion automaticamente.