Eu queria velocidade. Eu precisava de velocidade.
Todo esse clique, toda essa busca, todo o pensamento repetitivo e a sobrecarga mental estavam atrapalhando a realização do trabalho.
Eu precisava que os robôs fizessem o trabalho para mim.
Recentemente, mudei para o macOS depois de muitos anos no Windows, onde mexi no AutoHotkey.
Como um noob parente do Mac, comecei a hackear com Alfred , Karabiner e rapidamente encontrei consolo na forma de Hammerspoon.
Ah, Hammerspoon . Sim, eu havia consumido o código e os módulos — “Spoons” — das pessoas superinteligentes codificando e estendendo o Hammerspoon e isso me rendeu uma grande milhagem, mas eu precisava de mais .
Então, havia Lua. Eu queria me aprimorar em Lua.
A melhor maneira de fazer isso?Codifique alguma coisa.
Entre no Hellfred , uma coleção de 3 miniaplicativos construídos sobre
É uma maneira de mapear tarefas repetitivas e demoradas para sequências de teclas, comandos ou textos pesquisáveis.
Então você quer fogo rápido? Pule para a seção de instalação e tutorial abaixo oucheckout
o ramo basics
.
git checkout basics
Um utilitário de mapeamento rápido, baseado em modo e tecla de atalho para ação.
Inglês, por favor?
Quando digito um caractere ou uma sequência de caracteres, executo uma função específica, mas apenas se estiver em um modo específico.
OK. Um exemplo talvez?
launchGoogleChromeApp
(mas somente se eu estiver no modo padrão)changeToWindowManagerMode
(novamente, enquanto no modo padrão)centerWindowOnScreen
(enquanto no modo WindowManager)
Um utilitário seletor de pesquisa difusa com mapeamento de escolha para ação.
Inglês, por favor?
Quando pesquiso em uma lista de opções e seleciono uma, executo uma função específica. Se minha escolha tiver subescolhas (pense: parent => children
), mostre-as para que eu possa pesquisá-las.
OK. Um exemplo talvez?
Suponha que você tenha esta estrutura:
openGoogleInBrowser
.launchOrOpenApp
com o aplicativo selecionado.
Um utilitário de linha de comando com suporte básico de correspondência de strings.
Inglês, por favor?
Quando digito um comando e o envio, inspeciono meu comando em busca de padrões de string correspondentes e executo funções relacionadas a esse comando.
OK. Um exemplo talvez?
Quando eu digito o comando ' abrir notas ' e pressiono enter
, então executo qualquer função com um filter
(por exemplo, o comando deve começar com a palavra ' abrir ') e comportamento (por exemplo, aplicativo aberto associado a ' notas ') adequado para abrir as notas aplicativo.
Quando eu digito ' browse github ' e pressiono enter
, então executo qualquer função com um filtro (por exemplo, o comando começa com a palavra ' browse ') e comportamento (url aberto associado a ' github ') adequado para abrir o link.
~/.hammerspoon
`:
git clone https://github.com/braddevelop/hellfred.git ~/.hammerspoon
Existe um arquivo bootstrap para Hellfred com uma configuração pré-configurada. Vamos fazer referência a ele no arquivo init.lua do init.lua
.
https://gist.github.com/braddevelop/bac92b6797c087ca42f9363aab4972e0
Salve o arquivo e recarregue a configuração (ou economize algum tempo e use
Fora da caixa, os 3 aplicativos Hellfred estão prontos para uso e são pré-configurados com um exemplo de início rápido. Vamos testá-lo para garantir que tudo esteja conectado e funcionando.
shift
+ ⌘
+ h
c
shift
+ ⌥
+ h
enter
e o wiki de Hellfred será aberto em um navegadorshift
+ ^
+ h
enter
e o repositório de código para Hellfred será aberto em um navegador
O que Hellfire , Hellfuzz e Hellprompt conseguem é mapear um gatilho ou entrada para uma ação ou comportamento , if-this-then-that
, e embora tenhamos acabado de demonstrar o uso de cada aplicativo para alcançar o mesmo resultado, você descobrirá que cada aplicativo é mais adequado para certos casos de uso do que outros.
Agora vamos aumentar o calor e configurar algo um pouco mais útil. Vamos programar cada app para resolver os seguintes cenários para você pegar o jeito:
Você pode encontrar os arquivos finais para este passo a passo no diretório hellfred/extend/basics na ramificação básica do repositório.
Cada aplicativo segue um conjunto semelhante de etapas.
Subscriber
(Isso pode ser feito em hellfred-bootstrap.lua , mas criaremos arquivos separados para manter as coisas completamente limpas. Aproveitaremos os métodos de fábrica para facilitar a criação de objetos)
Hellfire funciona mais ou menos assim:
Inicializar o aplicativo
Isso já é feito com a pré-configuração no hellfred-bootstrap.lua
. Sinta-se à vontade para alterar a tecla de atalho para outra coisa.
https://gist.github.com/braddevelop/49c7e7c7c62350d93e7798ff2bf40541
Configurar objetos do Subscriber
triggers
e callbacks
de chamada são definidos pelo usuário e agrupados em objetos de configuração simples. Esses objetos, atuam como subscribers
quando cadastrados no respectivo app e notificados sempre que algo importante acontece dentro do app.
Os objetos de assinante para Hellfire seguem esta estrutura:
https://gist.github.com/braddevelop/20c9c5b97a85a9a5c4cb924b511e494a
Observação : se fireIfModeIs
não for definido, Hellfire definirá o modo ANY
por padrão, o que significa que o retorno de chamada será acionado em qualquer modo quando acionado.
Crie a seguinte estrutura de diretório se ela não existir: hellfred/extend/basics
.
Em seguida, crie um novo arquivo Lua dentro do diretório basics
chamado hellfirepack-applications.lua
— a convenção de nomenclatura do arquivo não tem importância.
Adicione este código:
https://gist.github.com/braddevelop/c12d37d64ce75b83a195666317a10aa2
Registre os assinantes com o aplicativo
De volta ao hellfred-bootstrap.lua
, precisamos cadastrar o pacote de assinantes que acabamos de configurar.
https://gist.github.com/braddevelop/2298469b805978062421f5a09d01d11a
Execute o aplicativo
Digite Hellfire ( shift
+ ⌘
+ h
) e digite qualquer um dos novos gatilhos:
f
para abrir o aplicativo Finder, t
para abrir o Terminal ou n
para abrir o aplicativo Notes.
Configurar objetos do Subscriber
Tudo bem, agora vamos configurar os assinantes para nosso iniciador de url de links comuns. Crie um novo arquivo Lua em hellfred/extend/basics
chamado hellfirepack-common-links.lua
Adicione este código:
https://gist.github.com/braddevelop/7d637464f45d2d9a4641e365ad2f20a1
Registre os assinantes com o aplicativo
De volta ao hellfred-bootstrap.lua
, precisamos cadastrar o pacote de assinantes que acabamos de configurar.
https://gist.github.com/braddevelop/f0dafb518797620747044afbc20da060
Execute o aplicativo
Digite Hellfire ( shift
+ ⌘
+ h
) e digite qualquer um dos novos gatilhos: t
, g
, h
ou s
.
Espere! Você notou que digitar o gatilho t
abriu o Terminal e abriu o site do TechCrunch ? Isso provavelmente não é o que queremos que aconteça. Vamos aproveitar o recurso Modo Hellfire .
Os modos oferecem uma maneira de fazer com que o mesmo acionador se comporte de maneira diferente em diferentes contextos.
Por padrão, o Hellfire é inicializado em um modo chamado... você adivinhou... modo ' Padrão '.
Podemos configurar alguns modos personalizados para usar com o Hellfire para que os gatilhos possam se comportar de maneira diferente em modos diferentes - ou 'namespaces', se você preferir.
Considere este fluxo:
Crie um novo arquivo Lua em hellfred/extend/basics
chamado hellfire-modes-extended.lua
.
Criaremos um modo separado para disparar os gatilhos de links comuns .
Adicione este código:
https://gist.github.com/braddevelop/1e3f345076a8cd5c4cdf843cad785c9e
Vamos requerer este arquivo em hellfred-bootstrap.lua
então é
Adicione o seguinte código em hellfred-bootstrap.lua
(na seção de metadados, na parte superior do arquivo)
https://gist.github.com/braddevelop/04a4ec21aab06f50760d1082b216426f
Agora precisamos de uma maneira de mudar o modo para o nosso novo modo Common Links.
Usaremos a sequência de teclas c
seguida por l
.
Também precisamos ser capazes de voltar ao modo padrão
Usaremos o ponto e vírgula ;
como um gatilho.
Isso é o seguinte…
Configurar objetos Subscriber
que acionam mudanças de modo
Crie um novo arquivo Lua em hellfred/extend/basics
chamado hellfire-mode-triggers.lua
Adicione este código:
https://gist.github.com/braddevelop/283acacb9634590208c3b29b6039dc12
Registre os assinantes com o aplicativo
Em hellfred-bootstrap.lua
, registre os assinantes para os novos gatilhos do modo:
https://gist.github.com/braddevelop/8afc4a576d550415f22c3c6fbf4152f1
Teste a alternância entre os modos
Agora digite Hellfire ( shift
+ ⌘
+ h
) e alterne entre os dois modos. Modos FTW!
Atualize os assinantes para trabalhar nos modos
Agora precisamos atualizar nossos assinantes em hellfirepack-common-links.lua
para que eles disparem apenas quando o modo Common Links estiver ativo.
Atualizaremos o método de fábrica e atribuiremos _G.HELLFIRE_MODES_EXTENDED.COMMON_LINKS
a fireIfModeIs
em vez de nil
.
O método atualizado deve ficar assim:
https://gist.github.com/braddevelop/152a16f87efe55f08e7ed7139225f757
Também precisamos atualizar nossos assinantes no hellfirepack-applications.lua
para que eles disparem apenas quando o modo padrão do Hellfire estiver ativo.
O método atualizado deve ficar assim:
https://gist.github.com/braddevelop/8ed8dea04397b0471299c8c89f8a9ae0
Execute o aplicativo
Digite Hellfire ( shift
+ ⌘
+ h
) e alterne entre os modos. O gatilho t
agora se comporta de maneira diferente dependendo do modo em que o Hellfire está.
É assim que o Hellprompt funciona:
Inicializar o aplicativo
Isso já é feito com a pré-configuração no hellfred-bootstrap.lua
. Sinta-se à vontade para alterar a tecla de atalho para outra coisa.
https://gist.github.com/braddevelop/11e9b4871182f90c57313ab6ffa939a4
Configurar objetos do Subscriber
Os assinantes do Hellprompt adotam uma estrutura diferente daquela do Hellfire.
Considere esta estrutura:
https://gist.github.com/braddevelop/c247d1d1429234c96f3e8c7d8a0b48df
Nota : Se o filter
não for definido, o retorno de chamada sempre será executado.
Crie um novo arquivo Lua em hellfred/extend/basics
chamado hellpromptpack-commands.lua
Adicione este código:
https://gist.github.com/braddevelop/6b18219f83fcf69826083d5dfce5d06f
Registre os assinantes com o aplicativo
De volta ao hellfred-bootstrap.lua
, precisamos cadastrar o pacote de assinantes que acabamos de configurar.
https://gist.github.com/braddevelop/f1b75646b7330fcb1c993a5737fd7d61
Execute o aplicativo
Digite Hellprompt ( shift
+ ^
+ h
) e teste esses comandos. Inferno!
Tentar:
browse news
e:
open terminal
É assim que o Hellfuzz funciona:
Inicializar o aplicativo
Isso já é feito com a pré-configuração no hellfred-bootstrap.lua
. Sinta-se à vontade para alterar a tecla de atalho para outra coisa.
https://gist.github.com/braddevelop/b18f575ec347503628e7457217b6e187
Configurar objetos do Subscriber
Os assinantes do Hellfuzz adotam uma estrutura diferente dos outros aplicativos.
Considere esta estrutura:
https://gist.github.com/braddevelop/56e9c22c6f921575637c73d60920d208
Observação : se nextChoicesFn
for definido, o callback
de chamada será ignorado.
Para facilitar as coisas, usaremos um método auxiliar para configurar assinantes para o Hellfuzz
Crie um novo arquivo Lua em hellfred/extend/basics
chamado hellfuzzpack-apps-and-links.lua
Adicione este código:
https://gist.github.com/braddevelop/3564ad1ec286a30eca1abb94cfd6a69a
Registre os assinantes com o aplicativo
Em hellfred-bootstrap.lua
, cadastre o pacote de assinantes.
https://gist.github.com/braddevelop/a90f9d5635377d74b145a892845c8273
Execute o aplicativo
Digite Hellfuzz ( shift
+ ⌥
+ h
) e digite um comando. Por exemplo, comece a digitar a palavra 'Terminal' , você verá a opção para abrir o Terminal destacada. Pressione enter
e o Terminal é aberto. Fumar quente!
Iniciador de link (usando conjuntos de opções aninhados)
Um recurso útil do Hellfuzz é a capacidade de aninhar conjuntos de opções.
Considere este fluxo atualizado:
Vamos tentar isso em nossa tarefa Link Launcher , criaremos a seguinte estrutura de escolha hierárquica:
Atualize o código em hellfuzzpack-apps-and-links.lua
para o seguinte:
https://gist.github.com/braddevelop/384b0ae9629faca95d5d4cb519cd8e61
Agora digite Hellfuzz ( shift
+ ⌥
+ h
) e comece a procurar por ' Links comuns '. Você pode selecionar a opção ' Links comuns ' e o subconjunto de opções de commonLinkNextChoices
será exibido e poderá ser pesquisado de forma difusa. Selecionar qualquer uma das opções de link abrirá o respectivo URL.
Fique atento aos próximos experimentos e extensões do Hellfred no repositório, verificando o branch extend
.
git checkout extend
Agora vá levantar o inferno \m/