ぺんちゃん日記

食と歴史と IT と。 Web の旅人ぺんじろうが好奇心赴くままに彷徨います 。

【AutoHotkey】過去の自分のブログ記事を探す作業を楽にしたい。

f:id:yasushiito:20190403184928p:plain
ブログをマメに更新すると決めて一年近く経とうとしています。
過去記事も増えてきたと共に、年をまたいだせいでサイドバーに表示されている月ごとのインデックスが年間にまとめられてしまって過去記事を掘り出す作業が億劫になってきました。
面倒かなと思ったらもう負けです。
過去記事を引用したり参照する作業するが面倒になってしまって自分で読んでもイライラするようなまとめ方になってしまいます。
そこで、ワンクリックと少々で自分のブログを検索できるようにしたいと思いました。

検索方法。

自分のブログを検索するには二つの方法があると思います。
一つは自分のブログページに表示されている検索ボックスから行うこと。
もう一つはGoogle の検索オプションsite:をつけて自分のブログに限定して検索すること。
どちらも get methodでの検索クエリが使えます。
URL の後ろの方に?つけて検索条件を渡すタイプですね。
これなら下手なキーボードショートカットや画像認識による操作を行わなくても検索結果を開けます。
ただし、はてなの検索クエリは日本語などのマルチバイト文字をエスケープしてからでないと文字化けしてしまうでしょう。
Auto HOT Key 公式には URL エンコードの関数はなかったでしたよね。
非公式なら Web で見つかりますが導入コストはかかります。
待てよ? Chrome の URL バーにコピペする手順だから、 Chrome がうまいこと行ってくれるのではなかろうか。
と言うか今検証したら URL エンコードなしで大丈夫だ。
ということで、 はてなの検索を使えばノイズが少ないメリットがあり、 Google なら エゴサ的に 幅広く探せます。
好みの問題になりますね。

どこに割り当てるか。

自分が管理しているランチャーアプリ eltest のボタンを追加しても良いのですが、アプリの追加工事は作業量が多い上に配置できるボタンの数も限られているのでキーボード操作だけで起動できるなら きれいに片付きます。
特にScrLkキーの長押しで Google 検索を開く機能を以前に実装してあるので、比較的用途が似ています。
検索関連で何かしたい時はとりあえず scrlk しておけば何とかなる仕組みにしておけば導入は楽です。

Chrome で自分のブログページを開いているときに単語をセレクトしておけば Scroll lock キー長押しでマイブログ検索が走るようにしてみてはどうでしょうか?
弱点としては、自分のブログを開いていなければならず、おまけにその中から検索したい単語を探してマウスドラッグで選択反転しているときに限るということです。
なかなか厳しい条件ですね。
自分のブログを探したい瞬間なんて大抵の場合は記事の編集中なので、編集フォームに目的の単語が見つかると考えられます。
何の脈絡もなく参照されるのはそれはそれで問題あるのできつい縛りでもないかなと考えます。
まずは編集フォームを埋めないと資料を集めもままならないので記事を書くプレッシャーになるかもしれません。
この方式なら実装は比較的シンプルなので試してから考えます。

実装。

scrlk 長押しの時に起動する処理wordgooglesearch修正します。

アプリ種別で条件分けするgooglesearchfordomain関数に Chromeだった時の動作を追加します。

googlesearchfordomain(target, title){
    ;アプリケーションの種類を判別するためにプロセス名を取得する。
    WinGet, pn, ProcessName, ahk_id %target%
    ;Visual Studio CODE の場合。
    if pn = Code.exe
    {
        searchvscode(target, title)
        return
    }
    ;Chromeの場合はタイトルから判別する。
    pos := RegExMatch(title,"- Google Chrome$")
    if pos > 0
    {
        searchchrome(target, title)
        return
    }
    ;何のドメインにも該当しなかったら単純に選択テキストをコピーする。
    ;アプリケーションによっては何もコピーできないことがあるのでクリップボードをクリア。
    clipboard := ""
    Send, ^c
    Sleep, 100
    return
}

myahk/wordgooglesearch.ahk at master · yasushiito/myahk

Visual Studio CODE の判別は実行プロセス名で行いましたが、 Chrome はウインドウタイトル名で行なった方が間違いがないです。
タイトル末尾の Google Chrome正規表現で探します。


次は Chrome だった時の処理を書きます。

;Chrome から検索ワードを拾う場合。
;自分のはてなブログでキーワード選択している場合は過去の記事限定で検索する。
;検索ワードはクリップボードに設定して帰される。
;自分のはてな ID をグローバル変数に読み込んでおく必要がある。
searchchrome(target, title){
    global hatenaid
    ;表示ページが自分のブログであるかを判定するためにクロームに切り替えてページの URL を取得。
    WinActivate, ahk_id %target%
    url := getbrowserurl()
    ;選択中の単語をクリップボードに送る。
    ;テキスト選択されていないことを考慮してクリップボードはクリアしておく。
    clipboard := ""
    Send, ^c
    Sleep, 100
    ;自分のブログに限定する検索オプション。
    opt := " site:" . hatenaid . ".hatenablog.com "
    ;編集ページの URL の場合。
    IfInString, url, blog.hatena.ne.jp/%hatenaid%, {
        clipboard .= opt
        return
    }
    ;表示中の記事から検索ワードを拾うとき。
    IfInString, url, %hatenaid%.hatenablog.com, {
        clipboard .= opt
        return
    }
    return

myahk/wordgooglesearch.ahk at master · yasushiito/myahk


ブラウザの URL を取得して、自分のはてな ID が含まれる URL だった時に 検索オプションのサイト指定をつけます。
URL を取得した際にクリップボードにゴミが残ることがあるので忘れずにクリアします。
検索オプションはsite:の後に注目したいドメインとパス( http の後ろ)を指定します。
自分のブログの URL は2種類あって、訪問者が見るはてなブログの URL と、自分が記事編集するための管理ページ URL となります。
前者ははてなブログドメインサブドメインに自分のはてな ID が当たります。
私の場合ははてな ID がyasushiitoなのでyasushiito.hatenablog.comですね。
後者ははてなサブドメインブログの配下のパスとなります。
スラッシュの後ろに ID が来ますから私の場合はblog.hatena.ne.jp/yasushiitoですね。
単語とオプションを付けた検索ワードを準備できたらクリップボードに入れて処理を返します。
上位な処理では検索ワードがクリップボードにセットされて帰ってくることを期待しています。

Scrlk の長押し判定はこんな感じですね。

;長押しした時はアクティブウィンドウのカーソル周辺の単語を Chrome でネット検索する。
ScrollLock::
    ;長押し判定。
    ;スクリーンキーボードからマウスクリックで2入力しているので左ボタンを監視している。
    KeyWait, LButton, T1
    if ErrorLevel
    {
        wordgooglesearch(workurl)
        Return
    }

    Return

myahk/full.ahk at master · yasushiito/myahk


この記事を書くときにも早速使っていますが、違和感はありません。
Good ハックでした。


この記事に登場するAutohotkey スクリプトについて

この記事の中で私が作成したプログラムは、全て自由に使うことができます。
詳しくはこちら