paint-brush
Hellfred ou: Como aprendi a automatizar o macOS e me tornar incrivelmente produtivoby@bradblundell
2,927
2,927

Hellfred ou: Como aprendi a automatizar o macOS e me tornar incrivelmente produtivo

Brad Blundell9m2022/08/12
Read on Terminal Reader
Read this story w/o Javascript

Os aplicativos Hellfred são desenvolvidos com base no Hammerspoon para que você possa automatizar tarefas e aumentar a produtividade programando atalhos em seus fluxos de trabalho diários.

Companies Mentioned

Mention Thumbnail
Mention Thumbnail

Coin Mentioned

Mention Thumbnail
featured image - Hellfred ou: Como aprendi a automatizar o macOS e me tornar incrivelmente produtivo
Brad Blundell HackerNoon profile picture


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 colher de martelo para que você possa automatizar tarefas, aumentar a produtividade e eliminar o desperdício de tempo programando atalhos em seus fluxos de trabalho diários.


É uma maneira de mapear tarefas repetitivas e demoradas para sequências de teclas, comandos ou textos pesquisáveis.



Hellfuzz. Uma pesquisa difusa, mapeador de escolha para comportamento.


Fogo do inferno. Um mapeador de chaves para comportamento.


Hellprompt. Um mapeador de comando para comportamento.


TL;DR

Então você quer fogo rápido? Pule para a seção de instalação e tutorial abaixo ou baixe o repositório e checkout o ramo basics .


 git checkout basics



os aplicativos

fogo do inferno

Um utilitário de mapeamento rápido, baseado em modo e tecla de atalho para ação.

  • Suporta gatilhos de tecla única, bem como sequências de acordes de chave como gatilhos.
  • Expõe praticamente todas as teclas do teclado, incluindo teclas modificadoras para usar como gatilhos.
  • Os modos permitem que o mesmo gatilho tenha diferentes comportamentos em diferentes contextos.


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?

  • Quando eu digito c , execute a função launchGoogleChromeApp (mas somente se eu estiver no modo padrão)
  • Quando eu digito w seguido por m , execute a função changeToWindowManagerMode (novamente, enquanto no modo padrão)
  • Quando eu digito c , então executo a função centerWindowOnScreen (enquanto no modo WindowManager)


Hellfuzz

Um utilitário seletor de pesquisa difusa com mapeamento de escolha para ação.

  • Oferece suporte a conjuntos de opções de vários níveis (aninhados).


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:

  • Quando eu digito ' goog ', destaque a opção ' Abrir Google '. Selecionar esta opção executará a função openGoogleInBrowser .
  • Como alternativa, se eu digitar ' aplicativo ', destaque a opção ' Iniciar aplicativos '. A seleção desta opção substituirá as opções atuais por Terminal , Notes e Calendar (o subconjunto de opções para Launch Apps )
  • Quando eu pesquiso por meio deles e seleciono um, o Hellfuzz executará launchOrOpenApp com o aplicativo selecionado.


Hellprompt

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.



Instalação: Firestarter

  1. Baixe e instale o Hammerspoon
  2. Instale Hellfred: Clone o repositório para seu diretório ` ~/.hammerspoon `:


 git clone https://github.com/braddevelop/hellfred.git ~/.hammerspoon

Bootstrap: Ilumine

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 recarregamento chique )


O que está na caixa? Experimente a pré-configuração

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.

Experimente o Hellfire

  • Abra o Hellfire com a tecla de atalho shift + + h
  • Digite o caractere c
  • O repositório de Hellfred será aberto em um navegador.

Tente Hellfuzz

  • Abra o Hellfuzz com a tecla de atalho shift + + h
  • Digite a palavra ' wiki '
  • Isso destaca a opção ' Open Hellfred wiki '
  • Pressione enter e o wiki de Hellfred será aberto em um navegador

Experimente o Hellprompt

  • Abra o Hellprompt com a tecla de atalho shift + ^ + h
  • Digite ' código aberto '
  • Pressione 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.



Tutorial: Uma configuração básica

O que estaremos programando

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:

  1. Um iniciador de aplicativos simples
  2. Um lançador de URL para links comumente visitados


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.


Padrões a serem observados

Cada aplicativo segue um conjunto semelhante de etapas.

  1. Inicialize o aplicativo com uma ligação de tecla de atalho
  2. Configurar objetos ` 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)
  3. Registre os assinantes com o aplicativo
  4. Tecla de atalho para executar o aplicativo
  5. Destrua tarefas demoradas


Configuração para Hellfire

Hellfire funciona mais ou menos assim:


Iniciador de aplicativos

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.


Link Launcher (usando os modos Hellfire)

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 é globalmente acessível. Faremos o mesmo com o arquivo Hellfire Modes para que tenhamos acesso aos modos internos do Hellfire em outras partes do nosso aplicativo.


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á.


Configuração para Hellprompt

É assim que o Hellprompt funciona:

Iniciador de aplicativo e URL

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


Configuração para Hellfuzz

É assim que o Hellfuzz funciona:

Iniciador de aplicativos

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.



Extensões: Adicione combustível ao fogo.

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/