Quería velocidad. Necesitaba velocidad.
Todo este clic, toda esta búsqueda, todo el pensamiento repetitivo y la sobrecarga mental se interponían para hacer el trabajo.
Necesitaba que los robots hicieran el trabajo por mí.
Recientemente me mudé a macOS después de muchos años en Windows, donde jugué con AutoHotkey.
Como un novato relativo de Mac, comencé a piratear con Alfred , Karabiner y rápidamente encontré consuelo en la forma de Hammerspoon.
Ah, cuchara de martillo. Sí, había consumido el código y los módulos, "Spoons", de las personas súper inteligentes que codificaban y extendían Hammerspoon y eso me hizo ganar un gran kilometraje, pero necesitaba más .
Luego, estaba Lua. Quería mejorar en Lua.
¿La mejor manera de hacerlo?Codificar algo.
Ingrese a Hellfred , una colección de 3 mini-aplicaciones construidas sobre
Es una forma de asignar tareas repetitivas que consumen mucho tiempo a secuencias de teclas, comandos o textos de búsqueda.
Entonces, ¿quieres fuego rápido? Pase a la sección de instalación y tutorial a continuación ocheckout
un basics
a la rama básica.
git checkout basics
Una utilidad de mapeo rápida, basada en modos, de teclas de acceso directo a la acción.
¿En inglés por favor?
Cuando escribo un carácter o una secuencia de caracteres, ejecuto una función específica, pero solo si estoy en un modo particular.
Está bien. ¿Un ejemplo tal vez?
launchGoogleChromeApp
(pero solo si estoy en modo predeterminado)changeToWindowManagerMode
(nuevamente, mientras estoy en el modo predeterminado)centerWindowOnScreen
(mientras está en el modo WindowManager)
Una utilidad de selección de búsqueda difusa con mapeo de elección a acción.
¿En inglés por favor?
Cuando busco en una lista de opciones y selecciono una, ejecuto una función específica. Si mi elección tiene subopciones (piense: parent => children
), entonces muéstrame esas para que pueda buscarlas.
Está bien. ¿Un ejemplo tal vez?
Supongamos que tiene esta estructura:
openGoogleInBrowser
.launchOrOpenApp
con la aplicación seleccionada.
Una utilidad similar a la línea de comandos con soporte básico de coincidencia de cadenas.
¿En inglés por favor?
Cuando escribo un comando y lo envío, inspecciono mi comando en busca de patrones de cadena coincidentes y ejecuto funciones relacionadas con ese comando.
Está bien. ¿Un ejemplo tal vez?
Cuando escribo el comando ' abrir notas ' y luego presiono enter
, luego ejecuto cualquier función con un filter
(por ejemplo, el comando debe comenzar con la palabra ' abrir ') y comportamiento (por ejemplo, abrir la aplicación asociada con ' notas ') adecuado para abrir las Notas aplicación
Cuando escribo ' explorar github ' y luego presiono enter
, luego ejecuto cualquier función con un filtro (por ejemplo, el comando comienza con la palabra ' examinar ') y comportamiento (abrir URL asociada con ' github ') adecuado para abrir el enlace.
~/.hammerspoon
`:
git clone https://github.com/braddevelop/hellfred.git ~/.hammerspoon
Hay un archivo de arranque para Hellfred con una configuración preconfigurada. Hagámosle referencia en el archivo init.lua
de Hammerspoon.
https://gist.github.com/braddevelop/bac92b6797c087ca42f9363aab4972e0
Guarde el archivo y vuelva a cargar la configuración (o ahórrese algo de tiempo y use
Las 3 aplicaciones de Hellfred están listas para usar y están preconfiguradas con un ejemplo de inicio rápido. Probémoslo para asegurarnos de que todo esté cableado y encendido.
shift
+ ⌘
+ h
c
shift
+ ⌥
+ h
enter
y la wiki de Hellfred se abrirá en un navegador.shift
+ ^
+ h
enter
y el repositorio de código para Hellfred se abrirá en un navegador.
Lo que logran Hellfire , Hellfuzz y Hellprompt es asignar un disparador o entrada a una acción o comportamiento , if-this-then-that
, y aunque acabamos de demostrar el uso de cada aplicación para lograr el mismo resultado, encontrará que cada aplicación es más adecuada para ciertos casos de uso que otros.
Ahora subamos la temperatura y configuremos algo un poco más útil. Vamos a programar cada aplicación para que resuelva los siguientes escenarios para que puedas dominar las cosas:
Puede encontrar los archivos finales de este tutorial en el directorio hellfred/extend/basics en la rama básica del repositorio.
Cada aplicación sigue un conjunto similar de pasos.
Subscriber
(esto podría hacerse en hellfred-bootstrap.lua , pero crearemos archivos separados para mantener las cosas absolutamente limpias. Aprovecharemos los métodos de fábrica para que la creación de objetos sea muy sencilla)
Hellfire funciona un poco como esto:
Inicializar la aplicación
Esto ya está hecho con la configuración previa en hellfred-bootstrap.lua
. Siéntase libre de cambiar la tecla de acceso rápido a otra cosa.
https://gist.github.com/braddevelop/49c7e7c7c62350d93e7798ff2bf40541
Configurar objetos de Subscriber
los triggers
y las callbacks
de llamada están definidos por el usuario y se envuelven dentro de objetos de configuración simples. Estos objetos actúan como subscribers
cuando se registran en la aplicación respectiva y se les notifica cada vez que sucede algo importante dentro de la aplicación.
Los objetos de suscriptor para Hellfire siguen esta estructura:
https://gist.github.com/braddevelop/20c9c5b97a85a9a5c4cb924b511e494a
Nota : si fireIfModeIs
no está definido, Hellfire configurará ANY
modo de forma predeterminada, lo que significa que la devolución de llamada se activará en cualquier modo cuando se active.
Cree la siguiente estructura de directorios si no existe: hellfred/extend/basics
.
Luego cree un nuevo archivo Lua dentro del directorio basics
llamado hellfirepack-applications.lua
; la convención de nomenclatura de archivos no tiene importancia.
Añade este código:
https://gist.github.com/braddevelop/c12d37d64ce75b83a195666317a10aa2
Registrar los suscriptores con la aplicación
De vuelta en hellfred-bootstrap.lua
, debemos registrar el paquete de suscriptores que acabamos de configurar.
https://gist.github.com/braddevelop/2298469b805978062421f5a09d01d11a
Ejecute la aplicación
Ingrese Hellfire ( shift
+ ⌘
+ h
) y escriba cualquiera de los nuevos disparadores:
f
para abrir la aplicación Finder, t
para abrir Terminal o n
para abrir la aplicación Notas.
Configurar objetos de Subscriber
Muy bien, ahora configuremos los suscriptores para nuestro iniciador de URL de enlaces comunes. Cree un nuevo archivo Lua en hellfred/extend/basics
llamado hellfirepack-common-links.lua
Añade este código:
https://gist.github.com/braddevelop/7d637464f45d2d9a4641e365ad2f20a1
Registrar los suscriptores con la aplicación
De vuelta en hellfred-bootstrap.lua
, debemos registrar el paquete de suscriptores que acabamos de configurar.
https://gist.github.com/braddevelop/f0dafb518797620747044afbc20da060
Ejecute la aplicación
Ingresa Hellfire ( shift
+ ⌘
+ h
) y escribe cualquiera de los nuevos activadores: t
, g
, h
o s
.
¡Aférrate! ¿ t
que al escribir el gatillo se abrió Terminal y también se abrió el sitio web de TechCrunch ? Probablemente no sea eso lo que queremos que suceda. Aprovechemos la función Modo Hellfire .
Los modos ofrecen una manera de hacer que el mismo disparador se comporte de manera diferente en diferentes contextos.
Por defecto, Hellfire se inicializa en un modo llamado... lo has adivinado... modo ' Predeterminado '.
Podemos configurar algunos modos personalizados para usar con Hellfire para que los activadores se comporten de manera diferente en diferentes modos, o 'espacios de nombres' si lo desea.
Considere este flujo:
Cree un nuevo archivo Lua en hellfred/extend/basics
llamado hellfire-modes-extended.lua
.
Crearemos un modo separado para que se disparen los activadores de enlaces comunes .
Añade este código:
https://gist.github.com/braddevelop/1e3f345076a8cd5c4cdf843cad785c9e
Vamos a requerir este archivo en hellfred-bootstrap.lua
para que sea
Agregue el siguiente código en hellfred-bootstrap.lua
(en la sección de metadatos, hacia la parte superior del archivo)
https://gist.github.com/braddevelop/04a4ec21aab06f50760d1082b216426f
Ahora necesitamos una forma de cambiar el modo a nuestro nuevo modo Vínculos comunes.
Usaremos la secuencia de teclas c
seguida de l
.
También necesitamos poder volver al modo predeterminado
Usaremos el punto y coma ;
como disparador.
Eso es lo siguiente…
Configurar objetos de Subscriber
que desencadenan cambios de modo
Cree un nuevo archivo Lua en hellfred/extend/basics
llamado hellfire-mode-triggers.lua
Añade este código:
https://gist.github.com/braddevelop/283acacb9634590208c3b29b6039dc12
Registrar los suscriptores con la aplicación
En hellfred-bootstrap.lua
, registre los suscriptores para los activadores del nuevo modo:
https://gist.github.com/braddevelop/8afc4a576d550415f22c3c6fbf4152f1
Prueba de cambio entre modos
Ahora ingrese Hellfire ( shift
+ ⌘
+ h
) y alterne entre los dos modos. Modos FTW!
Actualizar suscriptores para trabajar en modos
Ahora necesitamos actualizar a nuestros suscriptores en hellfirepack-common-links.lua
para que solo se activen cuando el modo Common Links esté activo.
Actualizaremos el método de fábrica y asignaremos _G.HELLFIRE_MODES_EXTENDED.COMMON_LINKS
a fireIfModeIs
en lugar de nil
.
El método actualizado debería verse así:
https://gist.github.com/braddevelop/152a16f87efe55f08e7ed7139225f757
También necesitamos actualizar a nuestros suscriptores en hellfirepack-applications.lua
para que solo se activen cuando el modo predeterminado de Hellfire esté activo.
El método actualizado debería verse así:
https://gist.github.com/braddevelop/8ed8dea04397b0471299c8c89f8a9ae0
Ejecute la aplicación
Ingrese Hellfire ( shift
+ ⌘
+ h
) y alterne entre los modos. El disparador t
ahora se comporta de manera diferente según el modo en el que se encuentre Hellfire. ¡Diablos, sí!
Así es como funciona Hellprompt:
Inicializar la aplicación
Esto ya está hecho con la configuración previa en hellfred-bootstrap.lua
. Siéntase libre de cambiar la tecla de acceso rápido a otra cosa.
https://gist.github.com/braddevelop/11e9b4871182f90c57313ab6ffa939a4
Configurar objetos de Subscriber
Los suscriptores de Hellprompt tienen una estructura diferente a los de Hellfire.
Considere esta estructura:
https://gist.github.com/braddevelop/c247d1d1429234c96f3e8c7d8a0b48df
Nota : si el filter
no está definido, la devolución de llamada siempre se ejecutará.
Cree un nuevo archivo Lua en hellfred/extend/basics
llamado hellpromptpack-commands.lua
Añade este código:
https://gist.github.com/braddevelop/6b18219f83fcf69826083d5dfce5d06f
Registrar los suscriptores con la aplicación
De vuelta en hellfred-bootstrap.lua
, debemos registrar el paquete de suscriptores que acabamos de configurar.
https://gist.github.com/braddevelop/f1b75646b7330fcb1c993a5737fd7d61
Ejecute la aplicación
Ingrese Hellprompt ( shift
+ ^
+ h
) y pruebe esos comandos. ¡Infierno!
Probar:
browse news
y:
open terminal
Así es como funciona Hellfuzz:
Inicializar la aplicación
Esto ya está hecho con la configuración previa en hellfred-bootstrap.lua
. Siéntase libre de cambiar la tecla de acceso rápido a otra cosa.
https://gist.github.com/braddevelop/b18f575ec347503628e7457217b6e187
Configurar objetos de Subscriber
Los suscriptores de Hellfuzz tienen una estructura diferente a las otras aplicaciones.
Considere esta estructura:
https://gist.github.com/braddevelop/56e9c22c6f921575637c73d60920d208
Nota : si se define nextChoicesFn
, se ignora la callback
de llamada.
Para facilitar las cosas, usaremos un método de ayuda para configurar suscriptores para Hellfuzz
Cree un nuevo archivo Lua en hellfred/extend/basics
llamado hellfuzzpack-apps-and-links.lua
Añade este código:
https://gist.github.com/braddevelop/3564ad1ec286a30eca1abb94cfd6a69a
Registrar los suscriptores con la aplicación
En hellfred-bootstrap.lua
, registra el paquete de suscriptores.
https://gist.github.com/braddevelop/a90f9d5635377d74b145a892845c8273
Ejecute la aplicación
Ingresa Hellfuzz ( shift
+ ⌥
+ h
) y escribe un comando. Por ejemplo, comience a escribir la palabra 'Terminal' , verá que la opción para abrir Terminal está resaltada. Presiona enter
y se abre la Terminal . ¡Ahumado en caliente!
Link Launcher (utilizando conjuntos de opciones anidados)
Una característica útil de Hellfuzz es la capacidad de anidar conjuntos de opciones.
Considere este flujo actualizado:
Probemos esto en nuestra tarea Link Launcher , crearemos la siguiente estructura de elección jerárquica:
Actualice el código en hellfuzzpack-apps-and-links.lua
a lo siguiente:
https://gist.github.com/braddevelop/384b0ae9629faca95d5d4cb519cd8e61
Ahora ingrese Hellfuzz ( shift
+ ⌥
+ h
) y comience a buscar ' Enlaces comunes '. Puede seleccionar la opción ' Enlaces comunes ', y el subconjunto de opciones de commonLinkNextChoices
se mostrará y podrá realizar búsquedas aproximadas. Al seleccionar cualquiera de las opciones de enlace, se abrirá la URL respectiva.
Esté atento a los próximos experimentos y extensiones de Hellfred en el repositorio consultando la rama extend
.
git checkout extend
Ahora ve a armar el infierno \m/