スピードが欲しかった。スピードが必要でした。
このクリックのすべて、このすべての検索、すべての反復的な思考と精神的なオーバーヘッドは、実際に仕事を成し遂げるのに切り込んでいました.
私はロボットが私のために仕事をする必要がありました。
AutoHotkey をいじくり回していた Windows で何年も過ごした後、最近 macOS に移行しました。
親戚の Mac 初心者として、私はAlfredやKarabinerと一緒にハッキングを始め、Hammerspoon の形ですぐに慰めを見つけました。
あ、ハンマースプーン。はい、Hammerspoon のコーディングと拡張を行う非常に賢い人々からコードとモジュール (「Spoons」) を消費しました。
それから、ルアがいました。 Luaのスキルアップがしたかった。
そうするための最良の方法は?何かをコーディングします。
上に構築された 3 つのミニアプリのコレクションであるHellfredに入ります
これは、反復的で時間のかかるタスクをキー シーケンス、コマンド、または検索可能なテキストにマッピングする方法です。
それで、あなたは速射が欲しいですか?以下のインストールとチュートリアルのセクションにスキップするか、basics
ブランチをcheckout
します。
git checkout basics
クイックファイア、モードベース、ホットキーからアクションへのマッピング ユーティリティ。
英語でお願いします?
文字または一連の文字を入力すると、特定の機能が実行されますが、特定のモードにいる場合のみです。
Ok。多分例?
launchGoogleChromeApp
を実行すると (ただし、デフォルト モードの場合のみ)changeToWindowManagerMode
が実行されます (これもデフォルト モードで実行されます)。centerWindowOnScreen
を実行すると (WindowManager モードで)
選択からアクションへのマッピングを備えたファジー検索チューザー ユーティリティ。
英語でお願いします?
選択肢のリストを検索して 1 つを選択すると、特定の機能が実行されます。私の選択にサブチョイスがある場合 ( parent => children
と考えてください)、それらを表示して検索できるようにします。
Ok。多分例?
次の構造があるとします。
openGoogleInBrowser
が実行されます。launchOrOpenApp
を実行します。
基本的な文字列マッチングをサポートするコマンドラインのようなユーティリティ。
英語でお願いします?
コマンドを入力して送信すると、一致する文字列パターンがないかコマンドを検査し、そのコマンドに関連する関数を実行します。
Ok。多分例?
コマンド ' open notes ' をenter
して Enter キーを押すと、 filter
(コマンドは ' open ' で始まる必要があります) と動作 (' notes ' に関連付けられた open app など) を使用して任意の関数を実行します。アプリ。
「 browse github 」とenter
してEnterキーを押すと、リンクを開くのに適したフィルター(たとえば、コマンドは「 browse 」という単語で始まる)と動作(「 github 」に関連付けられたURLを開く)を使用して任意の関数を実行します。
~/.hammerspoon
` ディレクトリにクローンします。
git clone https://github.com/braddevelop/hellfred.git ~/.hammerspoon
Hellfred 用のブートストラップファイルがあり、セットアップが事前に構成されています。 Hammerspoon のinit.lua
ファイルで参照してみましょう。
https://gist.github.com/braddevelop/bac92b6797c087ca42f9363aab4972e0
ファイルを保存して構成をリロードします (または、時間を節約して
すぐに使用できる 3 つの Hellfred アプリが用意されており、クイックスタートの例で事前構成されています。すべてが配線され、発火していることを確認するためにテストしてみましょう。
shift
+ ⌘
+ h
でHellfireを開きますc
を入力しますshift
+ ⌥
+ h
でHellfuzzを開きますenter
の wiki が開きますshift
+ ^
+ h
でHellpromptを開きますenter
キーを押すと、Hellfred のコード リポジトリがブラウザーで開きます。
Hellfire 、 Hellfuzz 、およびHellpromptが実現するのは、トリガーまたは入力をアクションまたは動作にマッピングするif-this-then-that
です。他のものよりも特定のユースケース。
それでは、熱を上げて、もう少し便利なものを構成しましょう。各アプリをプログラムして、次のシナリオを解決し、物事のこつをつかむことができるようにします。
このチュートリアルの最終的なファイルは、リポジトリのbasicsブランチのhellfred/extend/basicsディレクトリにあります。
各アプリは同様の一連の手順に従います。
Subscriber
` オブジェクトを構成します (これはhellfred-bootstrap.luaで行うことができますが、物事をきれいに保つために別のファイルを作成します。ファクトリ メソッドを活用して、オブジェクトの作成を簡単にします)
ヘルファイアは次のように動作します:
アプリを初期化する
これは、 hellfred-bootstrap.lua
の事前設定ですでに行われています。ホットキーを別のものに自由に変更してください。
https://gist.github.com/braddevelop/49c7e7c7c62350d93e7798ff2bf40541
Subscriber
オブジェクトの構成
triggers
とcallbacks
はユーザー定義であり、単純な構成オブジェクト内にラップされます。これらのオブジェクトは、それぞれのアプリに登録されるとsubscribers
として機能し、アプリ内で何か重要なことが発生するたびに通知されます。
Hellfire のサブスクライバー オブジェクトは、次の構造に従います。
https://gist.github.com/braddevelop/20c9c5b97a85a9a5c4cb924b511e494a
注: fireIfModeIs
が定義されていない場合、Hellfire はデフォルトでANY
モードを設定します。つまり、コールバックがトリガーされると、どのモードでも起動します。
次のディレクトリ構造が存在しない場合は作成します: hellfred/extend/basics
。
次に、 basics
ディレクトリ内にhellfirepack-applications.lua
という名前の新しい Lua ファイルを作成します。ファイルの命名規則は重要ではありません。
次のコードを追加します。
https://gist.github.com/braddevelop/c12d37d64ce75b83a195666317a10aa2
サブスクライバーをアプリに登録する
hellfred-bootstrap.lua
に戻り、設定したサブスクライバーのパックを登録する必要があります。
https://gist.github.com/braddevelop/2298469b805978062421f5a09d01d11a
アプリを実行する
Hellfire ( shift
+ ⌘
+ h
) を入力し、新しいトリガーのいずれかを入力します。
f
で Finder アプリを開くか、 t
でターミナルを開くか、 n
で Notes アプリを開きます。
Subscriber
オブジェクトの構成
それでは、Common Links url ランチャーのサブスクライバーを構成しましょう。 hellfred/extend/basics
に、 hellfirepack-common-links.lua
という名前の新しい Lua ファイルを作成します。
次のコードを追加します。
https://gist.github.com/braddevelop/7d637464f45d2d9a4641e365ad2f20a1
サブスクライバーをアプリに登録する
hellfred-bootstrap.lua
に戻り、設定したサブスクライバーのパックを登録する必要があります。
https://gist.github.com/braddevelop/f0dafb518797620747044afbc20da060
アプリを実行する
Hellfire ( shift
+ ⌘
+ h
) を入力し、新しいトリガーのいずれかを入力します: t
、 g
、 h
またはs
。
ちょっとまって!トリガーを入力すると、 t
が起動し、 TechCrunchの Web サイトが開くことに気づきましたか?それはおそらく私たちが望んでいることではありません。ヘルファイアモードの特徴を活かしましょう。
モードは、同じトリガーが異なるコンテキストで異なる動作をする方法を提供します。
デフォルトでは、Hellfire は「デフォルト」モードと呼ばれるモードで初期化されます。
Hellfire で使用するいくつかのカスタム モードを構成して、異なるモード (必要に応じて「名前空間」) でトリガーが異なる動作をするようにすることができます。
次のフローを検討してください。
hellfred/extend/basics
に、 hellfire-modes-extended.lua
という名前の新しい Lua ファイルを作成します。
一般的なリンク トリガーを起動するための別のモードを作成します。
次のコードを追加します。
https://gist.github.com/braddevelop/1e3f345076a8cd5c4cdf843cad785c9e
このファイルをhellfred-bootstrap.lua
で要求するので、
次のコードをhellfred-bootstrap.lua
に追加します (メタデータ セクションの下、ファイルの上部に向かって)
https://gist.github.com/braddevelop/04a4ec21aab06f50760d1082b216426f
ここで、モードを新しいCommon Links モードに変更する方法が必要です。
c
の後にl
が続くキーシーケンスを使用します。
デフォルトモードに戻せるようにする必要もあります
セミコロンを使用します;
トリガーとして。
それは次の…
モード変更をトリガーするSubscriber
オブジェクトを構成する
hellfred/extend/basics
に、 hellfire-mode-triggers.lua
という名前の新しい Lua ファイルを作成します。
次のコードを追加します。
https://gist.github.com/braddevelop/283acacb9634590208c3b29b6039dc12
サブスクライバーをアプリに登録する
hellfred-bootstrap.lua
で、新しいモード トリガーのサブスクライバーを登録します。
https://gist.github.com/braddevelop/8afc4a576d550415f22c3c6fbf4152f1
モードの切り替えテスト
Hellfire ( shift
+ ⌘
+ h
) に入り、2 つのモードを切り替えます。モード FTW!
モードで動作するようにサブスクライバーを更新する
次に、 hellfirepack-common-links.lua
サブスクライバーを更新して、 Common Links モードがアクティブな場合にのみサブスクライバーが起動するようにする必要があります。
ファクトリ メソッドを更新し、 fireIfModeIs
をnil
の代わりに_G.HELLFIRE_MODES_EXTENDED.COMMON_LINKS
に割り当てます。
更新されたメソッドは次のようになります。
https://gist.github.com/braddevelop/152a16f87efe55f08e7ed7139225f757
また、 Hellfire のデフォルト モードがアクティブな場合にのみ起動するように、 hellfirepack-applications.lua
のサブスクライバーを更新する必要があります。
更新されたメソッドは次のようになります。
https://gist.github.com/braddevelop/8ed8dea04397b0471299c8c89f8a9ae0
アプリを実行する
Hellfire ( shift
+ ⌘
+ h
) に入り、モードを切り替えます。トリガーt
は、 Hellfireのモードに応じて異なる動作をするようになりました。
Hellprompt の機能は次のとおりです。
アプリを初期化する
これは、 hellfred-bootstrap.lua
の事前設定ですでに行われています。ホットキーを別のものに自由に変更してください。
https://gist.github.com/braddevelop/11e9b4871182f90c57313ab6ffa939a4
Subscriber
オブジェクトの構成
Hellprompt のサブスクライバーは、Hellfire のサブスクライバーとは異なる構造をとります。
次の構造を検討してください。
https://gist.github.com/braddevelop/c247d1d1429234c96f3e8c7d8a0b48df
注: filter
が定義されていない場合、コールバックは常に実行されます。
hellfred/extend/basics
に、 hellpromptpack-commands.lua
という名前の新しい Lua ファイルを作成します。
次のコードを追加します。
https://gist.github.com/braddevelop/6b18219f83fcf69826083d5dfce5d06f
サブスクライバーをアプリに登録する
hellfred-bootstrap.lua
に戻り、設定したサブスクライバーのパックを登録する必要があります。
https://gist.github.com/braddevelop/f1b75646b7330fcb1c993a5737fd7d61
アプリを実行する
Hellprompt ( shift
+ ^
+ h
) を入力して、これらのコマンドをテストします。インフェルノ!
試す:
browse news
と:
open terminal
これが Hellfuzz の仕組みです。
アプリを初期化する
これは、 hellfred-bootstrap.lua
の事前設定ですでに行われています。ホットキーを別のものに自由に変更してください。
https://gist.github.com/braddevelop/b18f575ec347503628e7457217b6e187
Subscriber
オブジェクトの構成
Hellfuzz のサブスクライバーは、他のアプリとは異なる構造をとります。
次の構造を検討してください。
https://gist.github.com/braddevelop/56e9c22c6f921575637c73d60920d208
注: nextChoicesFn
が定義されている場合、 callback
は無視されます。
簡単にするために、ヘルパー メソッドを使用して Hellfuzz のサブスクライバーを構成します。
hellfred/extend/basics
に、 hellfuzzpack-apps-and-links.lua
という名前の新しい Lua ファイルを作成します。
次のコードを追加します。
https://gist.github.com/braddevelop/3564ad1ec286a30eca1abb94cfd6a69a
サブスクライバーをアプリに登録する
hellfred-bootstrap.lua
で、サブスクライバーのパックを登録します。
https://gist.github.com/braddevelop/a90f9d5635377d74b145a892845c8273
アプリを実行する
Hellfuzz ( shift
+ ⌥
+ h
) と入力し、コマンドを入力します。たとえば、 「ターミナル」という単語を入力し始めると、ターミナルを開くオプションが強調表示されます。 enter
を押すと、ターミナルが開きます。熱い喫煙!
Link Launcher (ネストされた選択肢セットを使用)
Hellfuzz の便利な機能は、一連の選択肢をネストできることです。
次の更新されたフローを検討してください。
Link Launcherタスクでこれを試してみましょう。次の階層的な選択構造を作成します。
hellfuzzpack-apps-and-links.lua
のコードを次のように更新します。
https://gist.github.com/braddevelop/384b0ae9629faca95d5d4cb519cd8e61
ここで Hellfuzz ( shift
+ ⌥
+ h
) と入力し、「 Common links 」の検索を開始します。 「 Common links 」の選択肢を選択すると、 commonLinkNextChoices
からの選択肢のサブセットが表示され、あいまい検索が可能になります。リンク オプションのいずれかを選択すると、それぞれの URL が開きます。
extend
ブランチをチェックして、レポでの今後の Hellfred の実験と拡張機能に注目してください。
git checkout extend
さあ、地獄に行きましょう\m/