Je voulais de la vitesse. J'avais besoin de vitesse.
Tous ces clics, toutes ces recherches, toutes les pensées répétitives et les frais généraux mentaux empêchaient réellement de faire le travail.
J'avais besoin que les robots fassent le travail pour moi.
J'étais récemment passé à macOS après de nombreuses années sur Windows où j'avais bricolé avec AutoHotkey.
En tant que parent Mac noob, j'ai commencé à bidouiller avec Alfred , Karabiner et j'ai rapidement trouvé du réconfort sous la forme de Hammerspoon.
Ah, Hammerspoon . Oui, j'avais consommé le code et les modules - "Spoons" - des personnes super intelligentes codant et étendant Hammerspoon et cela m'a fait gagner beaucoup de temps, mais j'avais besoin de plus .
Ensuite, il y avait Lua. Je voulais me perfectionner en Lua.
La meilleure façon de le faire ?Codez quelque chose.
Entrez Hellfred , une collection de 3 mini-applications construites sur
C'est un moyen de mapper des tâches répétitives et chronophages sur des séquences de touches, des commandes ou des textes interrogeables.
Alors vous voulez du feu rapide ? Passez à la section d'installation et de didacticiel ci-dessous oucheckout
la branche basics
.
git checkout basics
Un utilitaire de mappage rapide, basé sur le mode, raccourci vers action.
En anglais s'il vous plaît?
Lorsque je tape un caractère ou une séquence de caractères, j'exécute alors une fonction spécifique, mais uniquement si je suis dans un mode particulier.
D'accord. Un exemple peut-être ?
launchGoogleChromeApp
(mais uniquement si je suis en mode par défaut)changeToWindowManagerMode
(encore une fois, en mode par défaut)centerWindowOnScreen
(en mode WindowManager)
Un utilitaire de sélection de recherche floue avec mappage choix-action.
En anglais s'il vous plaît?
Lorsque je recherche dans une liste de choix et que j'en sélectionne un, j'exécute une fonction spécifique. Si mon choix a des sous-choix (pensez: parent => children
), alors montrez-moi ceux-ci pour que je puisse les parcourir.
D'accord. Un exemple peut-être ?
Supposons que vous ayez cette structure :
openGoogleInBrowser
.launchOrOpenApp
avec l'application sélectionnée.
Un utilitaire de type ligne de commande avec prise en charge de la correspondance de chaîne de base.
En anglais s'il vous plaît?
Lorsque je tape une commande et que je la soumets, j'inspecte ma commande pour tout modèle de chaîne correspondant et j'exécute les fonctions liées à cette commande.
D'accord. Un exemple peut-être ?
Lorsque je tape la commande ' open notes ' puis que j'appuie sur enter
, j'exécute n'importe quelle fonction avec un filter
(par exemple, la commande doit commencer par le mot ' open ') et un comportement (par exemple, ouvrir l'application associée à ' notes ') approprié pour ouvrir les Notes application.
Lorsque je tape ' browse github ' puis que j'appuie sur enter
, j'exécute n'importe quelle fonction avec un filtre (par exemple, la commande commence par le mot ' browse ') et un comportement (open url associé à ' github ') adapté pour ouvrir le lien.
~/.hammerspoon
` :
git clone https://github.com/braddevelop/hellfred.git ~/.hammerspoon
Il existe un fichier bootstrap pour Hellfred avec une configuration préconfigurée. Faisons référence à cela dans le fichier init.lua
de Hammerspoon.
https://gist.github.com/braddevelop/bac92b6797c087ca42f9363aab4972e0
Enregistrez le fichier et rechargez la configuration (ou gagnez du temps et utilisez
Prêtes à l'emploi, les 3 applications Hellfred sont prêtes à l'emploi et sont préconfigurées avec un exemple de démarrage rapide. Testons-le pour nous assurer que tout fonctionne correctement.
shift
+ ⌘
+ h
c
shift
+ ⌥
+ h
enter
et le wiki de Hellfred s'ouvrira dans un navigateurshift
+ ^
+ h
enter
et le dépôt de code pour Hellfred s'ouvrira dans un navigateur
Ce que Hellfire , Hellfuzz et Hellprompt réalisent est de mapper un déclencheur ou une entrée à une action ou un comportement , if-this-then-that
, et bien que nous venons de démontrer l'utilisation de chaque application pour obtenir le même résultat, vous trouverez chaque application plus adaptée à certains cas d'utilisation que d'autres.
Montons maintenant le feu et configurons quelque chose d'un peu plus utile. Nous allons programmer chaque application pour résoudre les scénarios suivants afin que vous puissiez maîtriser les choses :
Vous pouvez trouver les fichiers finaux de cette procédure pas à pas dans le répertoire hellfred/extend/basics sur la branche basics du référentiel.
Chaque application suit un ensemble d'étapes similaire.
Subscriber
` (Cela pourrait être fait dans hellfred-bootstrap.lua mais nous allons créer des fichiers séparés pour garder les choses parfaitement propres. Nous tirerons parti des méthodes d'usine pour rendre la création d'objets un jeu d'enfant)
Hellfire fonctionne un peu comme ceci :
Initialiser l'application
Ceci est déjà fait avec la pré-configuration dans hellfred-bootstrap.lua
. N'hésitez pas à changer le raccourci clavier pour autre chose.
https://gist.github.com/braddevelop/49c7e7c7c62350d93e7798ff2bf40541
Configurer les objets Subscriber
les triggers
et callbacks
sont définis par l'utilisateur et encapsulés dans des objets de configuration simples. Ces objets agissent en tant subscribers
lorsqu'ils sont enregistrés auprès de l'application respective et avertis chaque fois que quelque chose d'important se produit dans l'application.
Les objets abonnés pour Hellfire suivent cette structure :
https://gist.github.com/braddevelop/20c9c5b97a85a9a5c4cb924b511e494a
Remarque : Si fireIfModeIs
n'est pas défini, Hellfire définira le mode ANY
par défaut, ce qui signifie que le rappel se déclenchera dans n'importe quel mode lorsqu'il sera déclenché.
Créez la structure de répertoire suivante si elle n'existe pas : hellfred/extend/basics
.
Créez ensuite un nouveau fichier Lua dans le répertoire de basics
appelé hellfirepack-applications.lua
- la convention de dénomination des fichiers n'a aucune importance.
Ajoutez ce code :
https://gist.github.com/braddevelop/c12d37d64ce75b83a195666317a10aa2
Enregistrez les abonnés avec l'application
De retour dans hellfred-bootstrap.lua
, nous devons enregistrer le pack d'abonnés que nous venons de configurer.
https://gist.github.com/braddevelop/2298469b805978062421f5a09d01d11a
Exécutez l'application
Entrez Hellfire ( shift
+ ⌘
+ h
) et tapez l'un des nouveaux déclencheurs :
f
pour ouvrir l'application Finder, t
pour ouvrir Terminal ou n
pour ouvrir l'application Notes.
Configurer les objets Subscriber
Bon maintenant, configurons les abonnés pour notre lanceur d'url Common Links. Créez un nouveau fichier Lua dans hellfred/extend/basics
appelé hellfirepack-common-links.lua
Ajoutez ce code :
https://gist.github.com/braddevelop/7d637464f45d2d9a4641e365ad2f20a1
Enregistrez les abonnés avec l'application
De retour dans hellfred-bootstrap.lua
, nous devons enregistrer le pack d'abonnés que nous venons de configurer.
https://gist.github.com/braddevelop/f0dafb518797620747044afbc20da060
Exécutez l'application
Entrez Hellfire ( shift
+ ⌘
+ h
) et tapez l'un des nouveaux déclencheurs : t
, g
, h
ou s
.
Attendez! Avez-vous remarqué que la saisie du déclencheur a lancé Terminal t
ouvert le site Web TechCrunch ? Ce n'est probablement pas ce que nous souhaitons. Profitons de la fonctionnalité Hellfire's Mode .
Les modes offrent un moyen de faire en sorte que le même déclencheur se comporte différemment dans différents contextes.
Par défaut, Hellfire s'initialise dans un mode appelé… vous l'avez deviné… mode ' Default '.
Nous pouvons configurer certains modes personnalisés à utiliser avec Hellfire afin que les déclencheurs puissent se comporter différemment sous différents modes - ou "espaces de noms" si vous le souhaitez.
Considérez ce flux :
Créez un nouveau fichier Lua dans hellfred/extend/basics
appelé hellfire-modes-extended.lua
.
Nous allons créer un mode séparé pour que les déclencheurs de liens communs se déclenchent .
Ajoutez ce code :
https://gist.github.com/braddevelop/1e3f345076a8cd5c4cdf843cad785c9e
Nous allons exiger ce fichier dans hellfred-bootstrap.lua
donc c'est
Ajoutez le code suivant dans hellfred-bootstrap.lua
(sous la section metadata, vers le haut du fichier)
https://gist.github.com/braddevelop/04a4ec21aab06f50760d1082b216426f
Nous avons maintenant besoin d'un moyen de changer le mode pour notre nouveau mode Common Links.
Nous utiliserons la séquence de touches c
suivie de l
.
Nous devons également pouvoir revenir au mode par défaut
Nous utiliserons le point-virgule ;
comme déclencheur.
C'est la prochaine…
Configurer les objets Subscriber
qui déclenchent des changements de mode
Créez un nouveau fichier Lua dans hellfred/extend/basics
appelé hellfire-mode-triggers.lua
Ajoutez ce code :
https://gist.github.com/braddevelop/283acacb9634590208c3b29b6039dc12
Enregistrez les abonnés avec l'application
Dans hellfred-bootstrap.lua
, enregistrez les abonnés pour les nouveaux déclencheurs de mode :
https://gist.github.com/braddevelop/8afc4a576d550415f22c3c6fbf4152f1
Tester la commutation entre les modes
Entrez maintenant dans Hellfire ( shift
+ ⌘
+ h
) et basculez entre les deux modes. Mode FTW !
Mettre à jour les abonnés pour travailler dans les modes
Nous devons maintenant mettre à jour nos abonnés dans hellfirepack-common-links.lua
afin qu'ils ne se déclenchent que lorsque le mode Common Links est actif.
Nous allons mettre à jour la méthode d'usine et attribuer _G.HELLFIRE_MODES_EXTENDED.COMMON_LINKS
à fireIfModeIs
au lieu de nil
.
La méthode mise à jour devrait ressembler à ceci :
https://gist.github.com/braddevelop/152a16f87efe55f08e7ed7139225f757
Nous devons également mettre à jour nos abonnés dans hellfirepack-applications.lua
afin qu'ils ne se déclenchent que lorsque le mode par défaut de Hellfire est actif.
La méthode mise à jour devrait ressembler à ceci :
https://gist.github.com/braddevelop/8ed8dea04397b0471299c8c89f8a9ae0
Exécutez l'application
Entrez Hellfire ( shift
+ ⌘
+ h
) et basculez entre les modes. La gâchette se t
désormais différemment selon le mode dans lequel se trouve Hellfire. Hell yeah !
Voici comment Hellprompt fonctionne :
Initialiser l'application
Ceci est déjà fait avec la pré-configuration dans hellfred-bootstrap.lua
. N'hésitez pas à changer le raccourci clavier pour autre chose.
https://gist.github.com/braddevelop/11e9b4871182f90c57313ab6ffa939a4
Configurer les objets Subscriber
Les abonnés à Hellprompt adoptent une structure différente de ceux de Hellfire.
Considérez cette structure :
https://gist.github.com/braddevelop/c247d1d1429234c96f3e8c7d8a0b48df
Note : Si filter
n'est pas défini alors le callback sera toujours exécuté.
Créez un nouveau fichier Lua dans hellfred/extend/basics
appelé hellpromptpack-commands.lua
Ajoutez ce code :
https://gist.github.com/braddevelop/6b18219f83fcf69826083d5dfce5d06f
Enregistrez les abonnés avec l'application
De retour dans hellfred-bootstrap.lua
, nous devons enregistrer le pack d'abonnés que nous venons de configurer.
https://gist.github.com/braddevelop/f1b75646b7330fcb1c993a5737fd7d61
Exécutez l'application
Entrez Hellprompt ( shift
+ ^
+ h
) et testez ces commandes. Enfer!
Essayer:
browse news
et:
open terminal
Voici comment Hellfuzz fonctionne :
Initialiser l'application
Ceci est déjà fait avec la pré-configuration dans hellfred-bootstrap.lua
. N'hésitez pas à changer le raccourci clavier pour autre chose.
https://gist.github.com/braddevelop/b18f575ec347503628e7457217b6e187
Configurer les objets Subscriber
Les abonnés à Hellfuzz adoptent une structure différente des autres applications.
Considérez cette structure :
https://gist.github.com/braddevelop/56e9c22c6f921575637c73d60920d208
Remarque : Si nextChoicesFn
est défini, le callback
est ignoré.
Pour faciliter les choses, nous utiliserons une méthode d'assistance pour configurer les abonnés pour Hellfuzz
Créez un nouveau fichier Lua dans hellfred/extend/basics
appelé hellfuzzpack-apps-and-links.lua
Ajoutez ce code :
https://gist.github.com/braddevelop/3564ad1ec286a30eca1abb94cfd6a69a
Enregistrez les abonnés avec l'application
Dans hellfred-bootstrap.lua
, enregistrez le pack d'abonnés.
https://gist.github.com/braddevelop/a90f9d5635377d74b145a892845c8273
Exécutez l'application
Entrez Hellfuzz ( shift
+ ⌥
+ h
) et tapez une commande. Par exemple, commencez à taper le mot 'Terminal' , vous verrez l'option d'ouverture du Terminal en surbrillance. Appuyez sur enter
et le terminal s'ouvre. Fumage à chaud!
Lanceur de liens (utilisant des ensembles de choix imbriqués)
Une fonctionnalité pratique de Hellfuzz est la possibilité d'imbriquer des ensembles de choix.
Considérez ce flux mis à jour :
Essayons cela sur notre tâche Link Launcher , nous allons créer la structure de choix hiérarchique suivante :
Mettez à jour le code dans hellfuzzpack-apps-and-links.lua
comme suit :
https://gist.github.com/braddevelop/384b0ae9629faca95d5d4cb519cd8e61
Entrez maintenant Hellfuzz ( shift
+ ⌥
+ h
) et lancez la recherche de ' Liens communs '. Vous pouvez sélectionner le choix ' Liens communs ', et le sous-ensemble de choix de commonLinkNextChoices
sera affiché et pourra faire l'objet d'une recherche approximative. La sélection de l'une des options de lien ouvrira l'URL correspondante.
Recherchez les prochaines expériences et extensions Hellfred sur le dépôt en consultant la branche d' extend
.
git checkout extend
Maintenant, va soulever l'enfer \m/