« PortableApps.com Platform 10.0.1リリース! | トップページ | Phytonコンソールへエクセルのテーブルをコピペ »

2011年12月22日 (木)

AHKを使ってGeanyからDreamPieへ選択されたテキストを送って実行する。

MATLABのエディターはF9を押すと選択されたテキストがコンソールへと送られて、そのまま実行されるナイスな機能があります。Pythonをウィンドウズで使っている場合、似たようなことをするにはPyScripterというエディターでCtrl+F7で出来て、なかなかいいんだけど多少もっさりしているのとGeany+DreamPieの組み合わせに慣れすぎたためPyScripterはあまり使っていない。(UbuntuならGeanyだけでコンソールが統合された環境になるみたいだけども。)

ところが今日、偶然にもGeanyのWikiサイトができているのを発見し、こんなAutoHotKeyのスクリプトでGeanyとConsole2を連動させる方法みつけた。しかし、なぜか多少変更しないとうちの環境では動かなかったので、念のためConsole2の変更後を貼ってみる。

TestConsole()
{
    IfWinNotExist, ahk_class Console_2_Main,
    {
        Run, C:\Program Files (x86)\Console2\Console.exe -t Console2
        WinWait, ahk_class Console_2_Main,
    }
}

ActivateConsole()
{
    TestConsole()
    WinActivate, ahk_class Console_2_Main,
    WinWaitActive, ahk_class Console_2_Main,
}

#1::
WinGetActiveTitle, editor
old_clipboard = %clipboard%
Send, {CTRLDOWN}c{CTRLUP}
ActivateConsole()
Send, {SHIFTDOWN}{INSERT}{SHIFTUP}{RETURN}
WinActivate, %editor%,
clipboard = %old_clipboard%
return

Console.exeへのパスのところを自分の環境に合わせて変更するのは当たり前だけど、WikiではSend, {SHIFTDOWN}{INSERT}{SHIFTUP}{RETURN}のところがCnrl Endになっていてこれがだめだった。#2,#3は省略しました。

では、いよいよDreamPie版。

ActivateDreampie()
{
    IfWinExist DreamPie ahk_class gdkWindowToplevel
    {
    WinActivate
    }
    else
    {
        Run, C:\Users\ユーザー名\AppData\Local\DreamPie\dreampie.exe --hide-console-window "C:\Python27\python.exe"
        WinWait DreamPie ahk_class gdkWindowToplevel
        WinActivate DreamPie ahk_class gdkWindowToplevel
    }
}

LAlt & r::
F9::
WinGetActiveTitle, editor
old_clipboard = %clipboard%
Send, ^c
ActivateDreampie()
Click 100,100
Send, {Tab}
Send, ^a
Send, {Del}
Send, ^v
Send, ^{Enter}
WinActivate, %editor%,
clipboard = %old_clipboard%
return

ショートカットは!rでAlt+Rにしてみたが、Windowsキー+rなら#rになる。まあ詳しくはAHKのチュートリアルを参照。DreamPieへのパスとPythonへのパスも適当に変更してください。(追記:複数のキーを割り当てることもできることが判明したので、左のAlt+rにしたうえでF9も追加し、さらにマルチラインエディターの高さの設定に影響を受けにくいようにタブで移動してくるようにコード修正しました。)

追記 ClickのところはDreamPieの大きさによって変わります。たぶんディスプレイの解像度設定でDreamPieの大きさが変わるようです。AHKに付属しているWindow SpyをつかってMouse PositionのIn Active Windowの値を見ながら下のマルチライン入力窓の中をクリックするように調整してください。

(使い方)

AHKのBasicをインストールして、一度起動したらマイドキュメントにできるAutoHotKey.ahkというファイルを編集して上記の内容にします。あとはAHKを立ち上げた状態でGeanyでAltキーとRを押すとDreamPieがアクティブになって選択されたテキストが実行されるはず。DreamPieが起動していなかったら起動するようにしたまではいいけど、現時点ではDreamPieがすでに実行されていないとテキストがうまく貼りつけられないバグあり。これはちょっとやっただけではデバッグできんかった。。RunWaitでだめでWinWaitにしたがこれもだめ。

AutoHotKeyを使ってできそうなことはなんとなくわかっていたが、PythonでWin32com経由で鮮やかにできるんじゃないかとかおもいつ つ敬遠していたが、かなり自分のやりたいことに近いことをしているスクリプトをWikiに載せてくれた親切なお方のお陰でやる気になった。Dropbox PortableのAHK版も使っているのでAHKはすごそうだなぁとはおもっていたけど、いやいや便利だわ。初めて使ったけど簡単だし。Win32comはドキュメンテーションが絶望的に難しかったのをみたあとなので、お手軽なAHKは素晴らしいと思う。

さらに追記。MATLABのコンソールではESCキーを押すと入力中のテキストをクリアしてくれる。この機能もAHKで実装できた。ちゃんとDreamPieがアクティブなときだけ働くようにしてみた。使い方は、上にあるスクリプトに下のコードを追加するだけです。

さらに追記。初めのバージョンだと他のウインドウがアクティブなときにもESCキーイベントを奪ってしまい、そのウインドウがESCイベントを受け取らないようなので、Context-sensitive Hotkeysというのを使うように変更。

Esc::
IfWinActive DreamPie ahk_class gdkWindowToplevel
{
ActivateDreampie()
Click 100,100
Send, {Tab}
Send, ^a
Send, {Del}
}

#IfWinActive DreamPie ahk_class gdkWindowToplevel
Esc::
ActivateDreampie()
Click 100,100
send, {Tab}
Send, ^a
Send, {Del}

« PortableApps.com Platform 10.0.1リリース! | トップページ | Phytonコンソールへエクセルのテーブルをコピペ »

パソコン・インターネット」カテゴリの記事

Python」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック

« PortableApps.com Platform 10.0.1リリース! | トップページ | Phytonコンソールへエクセルのテーブルをコピペ »

しろののツイッタータイムライン

  • ツイッターは5つ目も凍結されました。6つ目での復活も不可能。なのでnoteに注力しています。

    と思ったら、イーロン・マスクの買収が公になってアカウントが復活できました。ありがとうマスク。

    トランプ関連記事の一覧リスト

オススメたち

2024年12月
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        

はてブ

無料ブログはココログ