5 puntos por GN⁺ 2023-08-23 | 1 comentarios | Compartir por WhatsApp
  • Como AutoHotKey es una herramienta potente de automatización para Windows pero puede resultar intimidante al principio, se publica como material de aprendizaje una colección de scripts personales usados en la práctica
  • El material está compuesto por un total de 14 archivos y se centra en ejemplos de automatización que se pueden usar de inmediato, como abrir carpetas, insertar texto y ampliar atajos por programa
  • Incluye desde entrada rápida de la fecha actual, em dash y ¯\_(ツ)_/¯ hasta un sistema de atajos modales para usuarios de vim y una demo sencilla de GUI
  • También hay un script para convertir marcas de tiempo entre UTC y hora local, lo que permite ver automatización práctica de flujos de trabajo más allá de simples atajos
  • Cada archivo incluye comentarios sobre lo que hace el código y, en algunos casos, por qué fue implementado así, por lo que se lee bien como una base de código educativa

Una colección de ejemplos de AutoHotKey cercana al trabajo real

Cómo leerlo como una base de código educativa

  • Este repositorio es un ejemplo de base de código educativa creada para que la gente aprenda leyendo código
  • Cada archivo incluye muchos comentarios sobre lo que hace el código y, en algunas implementaciones, también explica por qué se eligió ese enfoque
  • Una explicación aparte sobre las bases de código educativas continúa en este artículo del boletín
  • Si hay partes que requieren más explicación, se puede pedir a través de un issue en GitHub

1 comentarios

 
GN⁺ 2023-08-23
Opiniones de Hacker News
  • Creo que por primera vez puedo aportar algo útil a una discusión sobre código. Como escritor, tengo un script de AutoHotkey que abre rápidamente un notepad.exe vacío en cualquier momento: se abre al presionar la tecla ~, se cierra al volver a presionarla, y si hay contenido aparece el cuadro de diálogo para guardar.
    Eso es todo lo que hace mi AHK.

    • Es curioso que esa misma tecla también se use convencionalmente para alternar la terminal. Así como los programadores “viven” en la terminal, me pregunto si quienes trabajan en gráficos digitales abren de forma parecida un bloc de bocetos o un programa de dibujo.
      Cuando quieres ir y venir rápidamente a la ventana anterior sin cerrar ni minimizar nada, el atajo predeterminado de Windows Alt + Escape resulta útil. A diferencia de Alt+Tab, no muestra la vista general de ventanas, sino que cambia directamente a la ventana que tenía el foco justo antes.
      En AutoHotkey v1 se puede armar una plantilla de switcher/launcher que busque un fragmento del título de la ventana y la active; si ya está activa, vuelve con send, !{escape}; y si no existe, la ejecuta. Si no quieres desordenar la barra de tareas, también puedes usar WinHide/WinShow, aunque no funciona bien con algunas ventanas, y para detectar ventanas a veces conviene más usar ahk_exe o ahk_class.
    • Creo que Notepad++ sería mejor por el autoguardado. Me parece que una de sus mejores funciones es que incluso los documentos no guardados se guardan automáticamente.
    • Si pasas el script anterior a AutoHotkey 2, puedes escribirlo de forma más simple, como “Tilde opens Notepad”. La idea es revisar WinActive("Untitled - Notepad") y WinExist("*Untitled - Notepad") para cerrar o activar la ventana, y si no existe, ejecutar Run "Notepad".
    • Es apenas un poco más rápido que presionar la tecla Windows, escribir “Notepad” y luego Enter. En cambio, si haces que abra un único documento notes.txt, podrías cargar tus notas, agregarles contenido y hasta guardar/cerrar con un solo atajo, lo cual sería más interesante.
    • Es un buen enfoque. Con las funciones WinActive() o WinExist() puedes combinar varias condiciones de título con or y, si hace falta, también incluir una condición ahk_class, como "Untitled - Notepad ahk_class Notepad".
  • AutoHotkey es genial, pero ojalá el lenguaje fuera un poco más normal. La pasé mal intentando hacer de forma estable una versión con proporción áurea de Aero Snap; no parece que manejar varios monitores y tamaños tenga por qué ser tan difícil, pero entre la sintaxis rara de Loop y los fallos silenciosos por errores simples, dejó de ser divertido y terminé rindiéndome.
    También encontré un módulo ahk para Python, pero combinado con el módulo keyboard no funcionaba tan bien como AutoHotkey como listener de atajos.
    https://github.com/idbrii/daveconfig/blob/main/win/autohotke...
    https://pypi.org/project/ahk/

    • Por eso existe AutoHotkey v2. Es como el momento Python 3 de AHK: estuvo disponible durante años y la versión estable salió hace más o menos un año, pero todavía no parece haber mucha adopción.
    • Por eso no lo estaba usando mucho, salvo para cambiar CapsLock a Control. Quizás ya sea hora de hacer un Lisp DSL que compile a AHK.
    • Sí, ese es el mayor problema de AHK, y v2 mejora bastante esa parte. Sueño con que exista un listener de atajos universal que pueda usarse desde cualquier lenguaje, quizá mediante alguna magia de plugins wasm.
  • Para mi boda hice una cabina de fotos con AutoHotKey. Usé un software simple para controlar por USB la Nikon de mi prometida, junto con IrfanView en la laptop; configuré IrfanView para vigilar una carpeta y mostrar siempre la foto más reciente.
    Con AutoHotKey hice una GUI sencilla con botones de Preview, Autofocus y “SNAP”; al presionar SNAP, mostraba una cuenta regresiva grande, tomaba la foto, minimizaba el software de la cámara y traía IrfanView al frente. Unos segundos después volvía a la GUI con los botones. A los invitados les encantó, nos ahorramos varios cientos de euros en el alquiler de una cabina de fotos y además obtuvimos buenas fotos.

  • Este script de AutoHotKey me cambió las reglas del juego. Mapea Ctrl + Shift + V a pegar sin formato: convierte el portapapeles a texto, lo pega, espera un momento y luego restaura el portapapeles original.

    • Como referencia, también se puede hacer sin AutoHotKey con Powertoys o PureText. Es muy útil.
      https://learn.microsoft.com/en-us/windows/powertoys/
      https://stevemiller.net/puretext/
    • Es realmente raro que pegar con formato sea el valor predeterminado. Hasta ahora nunca quise pegar manteniendo el formato, y tampoco entiendo a qué caso de uso apunta.
    • Ctrl+Shift+V es excelente. Debería convertirse en el atajo estándar del sistema operativo para el portapapeles.
      También sería bueno tener un portapapeles con múltiples valores, como los últimos 5 clips, aunque quizá eso ya sea pedir demasiado.
  • AHK es una de esas apps que me mantienen atado a Windows. La uso para agregar al teclado caracteres como äöüß y áóúñ, controlar el brillo de las luces de mi cuarto y departamento, insertar marcas de tiempo como 08:39 –, 2023-08-22 08:39:46 o 2023-08-22 — Tuesday con uno o dos botones, y encender o apagar el monitor con un enchufe compatible con Tasmota al alternar la tecla Pause
    Eso sí, me gustaría que tuviera una función para usar un segundo teclado como pad de botones y, a la vez, tragarse esas pulsaciones. Por eso estoy usando un teclado Bluetooth pequeño conectado a una Raspberry Pi Zero para tener más botones

    • En macOS, Hammerspoon parece ser la mejor opción
      https://www.hammerspoon.org/
    • Si estás dispuesto a asumir el costo, puedes buscar un teclado barato que soporte QMK u otro firmware personalizado, y mapear algunas teclas a F13~F24 o a combinaciones difíciles de presionar como Ctrl+Alt+Shift+P
    • Alguna vez obtuve buenos resultados usando Luamacros para interceptar un segundo teclado y pasar las pulsaciones a AutoHotKey
      https://miquelvir.medium.com/secondkeyboard-1c39e52e023b
      También está esto: https://github.com/evilC/AutoHotInterception
    • En Linux uso AutoKey. Es menos potente que AHK, pero me gusta que use Python básico
      https://github.com/autokey/autokey
    • Con AutoHotInterception, AHK puede distinguir distintos teclados/mouses según su ID de hardware. Puedes tener un layout y macros propios en un teclado separado
  • Yo también uso AutoHotKey todo el tiempo. Tengo 6 atajos para sellos de fecha/hora, lanzadores de PuTTY/SSH para hosts y puertos seriales que uso seguido, lanzadores basados en estado para más de 10 apps como Outlook, Windows Terminal y Total Commander, pegado sin formato desde cualquier lugar, pegado eliminando saltos de línea, una capa de entrada AltGr para caracteres especiales y emoji, y hasta atajos de medios/volumen

  • En mi laptop personal con Linux tengo Caps Lock y Escape intercambiados, y ya me acostumbré. Cuando hacía dual boot con Windows, usaba Powertoys para la misma configuración, pero en el trabajo no puedo instalar ni Powertoys ni Uncap, así que AutoHotKey es mi única opción
    Seguí una respuesta de StackOverflow y terminé con Caps Lock y Escape enviando ambas teclas a la vez, lo que a veces me arruina mensajes en Teams
    https://github.com/microsoft/PowerToys
    https://github.com/susam/uncap
    https://stackoverflow.com/questions/38558376/how-to-map-caps...

    • Kanata es excelente. Soporta tanto Linux como Windows, pero como mi trabajo principal es en Linux, todavía no lo he probado en Windows
      https://github.com/jtroo/kanata
    • También recomiendo los modificadores en la fila base. La idea es que, si presionas una tecla brevemente, funcione como siempre, y si la mantienes presionada, haga otra cosa
      Por ejemplo, https://github.com/evilC/TapHoldManager implementa esto en AHK. Si pones Shift/Ctrl/Win/Alt debajo de fdsa y jkl;, reduces el uso de los meñiques y tus dedos pueden permanecer más tiempo en la fila base
    • Durante años he intercambiado estas teclas con AHK, y un script simple como este funciona: CapsLock::Esc, Esc::CapsLock
      También recopilé otras mejoras rápidas con AHK, como ejecutar programas con atajos globales: https://nickjanetakis.com/blog/remap-and-set-global-hotkeys-...
    • También vale la pena probar el registro de mapa de scancodes. Lo uso para intercambiar Ctrl/CapsLock, y funciona bien incluso en software RDP o apps con privilegios de administrador donde PowerToys no podía encargarse
      https://superuser.com/questions/550679/where-can-i-find-wind...
    • Me topé con el mismo problema y al final hice algo que funciona a la fuerza
      https://github.com/hwalinga/dotfiles/blob/master/CapsLockCtr...
      También implementa una doble función: CapsLock actúa como Ctrl cuando se presiona junto con otra tecla, y como Esc cuando se presiona brevemente
  • Como dijeron otros, AHK permite hacer una cantidad sorprendente de cosas en Windows. Personalmente, diría que gracias a AHK ahorré o gané más de 100 mil dólares
    Pero el lenguaje AHK en sí no es de los más agradables para escribir. Me pregunto por qué no hay herramientas igual de potentes en Python o Lua, y https://github.com/pywinauto/pywinauto tampoco funcionó tan bien como AHK en la práctica. Al final, por debajo todo es WinAPI, así que C# también podría ser una opción si hubiera una buena biblioteca envoltorio. Creo que AHK es popular porque, aunque es feo, funciona

    • Si todavía no lo hiciste, conviene probar pasar a v2. Salió a principios de este año y el lenguaje se volvió mucho menos feo. Desapareció la distinción entre comandos y funciones: ahora todo son funciones
    • Hay un intento de reescribir AHK en C# y también dar soporte a otros sistemas operativos
      https://www.autohotkey.com/boards/viewtopic.php?f=80&t=77248
    • AHK es popular en gran parte porque la fealdad que la mayoría de los lenguajes de programación “de verdad” no tolerarían facilita el acceso inicial
    • PyAutoGui también es muy bueno. Lo he usado durante mucho tiempo y hace poco reescribí algunas automatizaciones simples de AHK con él. No es un reemplazo 1:1, así que sigo usando AutoHotKey, pero sus funciones de automatización de UI están bien hechas
  • AutoHotKey es excelente. Lo uso para cambiar de app más rápido y, en mi caso, controlo todo usando Right Alt como tecla para “activar atajos”
    Si la mantengo presionada y pulso una tecla de letra, voy alternando entre las instancias de esa app. Por ejemplo, Alt+C cambia a las ventanas de VS Code, y las combinaciones Alt+F abren nuevas instancias de apps, como una nueva ventana de Chrome con un perfil específico. Alt+número se puede asignar a la ventana actualmente enfocada, y al tocar Alt se activa el modo de edición, donde la ventana actual se puede asignar a una tecla numérica. En el modo de edición, H/J/K/L se convierten en teclas de navegación arriba/abajo/izquierda/derecha, lo que hace que cambiar de app sea mucho más rápido

  • Lo más impresionante fue un script que encontré y modifiqué cuando jugaba Diablo 3 hace tiempo. Me estaba causando problemas de lesión por esfuerzo repetitivo porque apretaba demasiado la mano del mouse contra el mousepad, así que busqué una forma de jugar con control
    Ese script vinculaba el movimiento analógico a un pequeño círculo alrededor del personaje, lo que permitía correr suavemente en cualquier dirección, y al presionar un botón cambiaba el rango a uno más lejano para lanzar habilidades a distancia. Con apenas un poco de personalización por clase, funcionaba sorprendentemente bien