« 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」カテゴリの記事

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

コメント

コメントを書く

コメントは記事投稿者が公開するまで表示されません。

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

トラックバック

この記事のトラックバックURL:
http://app.f.cocolog-nifty.com/t/trackback/1169291/43465130

この記事へのトラックバック一覧です: AHKを使ってGeanyからDreamPieへ選択されたテキストを送って実行する。:

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

広告欄


やっつけタイムライン

広告欄

はてブ

人目の訪問です。

  • follow us in feedly

    かなり更新が不定期なため、RSSリーダーをオススメします。現在Feedlyに122人登録頂いています。多謝!RSSを表示

    ブログランキング用 にほんブログ村 IT技術ブログ Pythonへ ブログランキングならblogram






    Jenny Mayhem
2017年2月
      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        

Amazon

IT技術注目記事

無料ブログはココログ