IronPythonを用いて、秀丸マクロで「.NET Frameworkの多くの機能をシームレスに近い形で利用する」ためのライブラリとなります。
秀丸エディタ ver8.73以上
Visual Studio 2017 C++ ランタイム
x86版をインストールしたことが無い方はインストールしてください。
お手持ちのOSが64bitか32bitかには関わりなく、x86版のインストールが必要です。
.NET Framework 4.8以上。
https://github.com/IronLanguages/ironpython3/releases/tag/v3.4.1より、
IronPython 3.4.1.1を「.msiのインストーラーを利用して」インストールしてください。
(※インストーラーを経由してインストールすることでアセンブリのGAC登録などがされます)
正確に、このバージョン「3.4.1.1」である必要性があります。
秀丸エディタ64bit版をご利用の方は、hmPy_x64.zipをダウンロードし、hmPy.dllを差し替えてください。
(又、この場合は、Microsoft VC++ 再頒布可能パッケージは、64bit版をインストールしてください。)
hmPyはストアアプリ版でも利用することが出来ます。詳細は左メニューのストアアプリ版での利用などを参照してください。
from hmPy import * とすることで、
秀丸のキーワードや関数等を、pythonの関数としてインポートできます。
プログラミング言語としては「Python」派生の1つとなる「IronPython」となります。
「IronPython」はMicrosoftによって「Visual Studio 2010・2012・2013・2015・2017」にて正式にサポートされて続けていた数少ない言語の1つです。
残念ながら Visual Studio 2019 にてサポートから外れましが、Visual Studio 2019 や Visual Studio 2022 であっても、
Pythonの環境としてIronPythonを指定するとデバッグ機能が Visual Studio と統合される形で上手く機能します。
WindowsのAPIを綺麗に使いやすくした .NETを 秀丸マクロで取り扱うことが出来ます。
に至るまで、.NET Frameworkへと自由に美しくアクセス可能です。
秀丸エディタ 8.66にて、「ヒアドキュメント」が実装されたため、
IronPythonをそのままマクロ内に記述出来るようになりました。(エスケープ等の必要性がなくなりました!)
詳細は後述されています。
IronPythonは、プログラミング上の「文法記述」としては、Python2.7とほぼ完全互換です。
Pythonは世界中で、そして、あらゆる分野で利用される世界トップクラスの人気の言語です。
これまで秀丸マクロライブラリなどに、よくあがっていたマクロは
「別途インタプリタが別プロセスとして実行され、その実行結果を返します」
といったものが大半でした。
(例えば、別途Perlインタプリタが入っていれば、それを呼び出し、解釈し、結果をアウトプット枠に表示します、など)
しかし、このhmPyは違います!!
秀丸マクロと同じプロセス空間で動作していますので、ガッチリ秀丸と完全連携しています。
#PY = loaddll( hidemarudir + @"\hmPy.dll" ); // 以下の文字列を「IronPythonの環境スコープへと追加書き込みし、追加分だけ実行する」 #_ = dllfuncw(#PY, "DoString", R"IRONPYTHON( from hmPy import * message("あいう", "それで"); title("タイトルを変更"); title(-1); # マクロ終了後も維持 )IRONPYTHON" ); freedll(#PY);
#PY = loaddll( hidemarudir + @"\hmPy.dll" ); // 以下の文字列を「IronPythonの環境スコープへと追加書き込みし、追加分だけ実行する」 #_ = dllfuncw(#PY, "DoString", """""""""""""""""""""""""""""""""""""""""""""""""" from hmPy import * message("あいう", "それで"); title("タイトルを変更"); title(-1); # マクロ終了後も維持 """""""""""""""""""""""""""""""""""""""""""""""""" ); freedll(#PY);
「a」に「3」、「b」に「10」を定義し、足しこんで表示。
#PY = loaddll( hidemarudir + @"\hmPy.dll" ); // 以下の文字列を「IronPythonの環境スコープへと追加書き込みし、追加分だけ実行する」 #_ = dllfuncw(#PY, "DoString", R"IRONPYTHON( a = 3 b = 10 hm.Macro.Var["#a"] = a # python空間 ⇒ 秀丸マクロ空間へ代入 hm.Macro.Var["#b"] = b # python空間 ⇒ 秀丸マクロ空間へ代入 # 秀丸マクロとして文字列を評価して実行 hm.Macro.Eval( r""" message(str(#a)); message(str(#b)); """ ); c = a + b hm.debuginfo(c) # DebugMonitorに表示。 hm.Macro.Var["#c"] = c # python空間 ⇒ 秀丸マクロ空間へ代入 )IRONPYTHON" ); // 秀丸マクロ空間に代入されている変数は、当然pythonの外から見える message(str(#c)); freedll(#PY);
.NET FrameWorkを使って、ダイアログ表示
#PY = loaddll( hidemarudir + @"\hmPy.dll" ); #_ = dllfuncw(#PY, "DoString", R"IRONPYTHON( import clr # .NETが使えるようにする。 import System # Systemのシンボルを読み込み clr.AddReferenceByPartialName('System.Windows.Forms') # System.Windows.Forms を使えるようにする。 System.Windows.Forms.MessageBox.Show( "秀丸からのメッセージ", "秀丸からのタイトル", System.Windows.Forms.MessageBoxButtons.YesNoCancel ) )IRONPYTHON" ); freedll(#PY);
#PY = loaddll( hidemarudir + @"\hmPy.dll" ); #_ = dllfuncw( #PY, "DoString", R"IRONPYTHON( import clr clr.AddReferenceByPartialName('System.Windows.Forms') clr.AddReferenceByPartialName('System.Drawing') from System.Windows.Forms import * from System.Drawing import * class IronPythonForm(Form): def __init__(self): self.Text = 'こんにちわ' self.Size = Size(400, 200) self.btn = Button() self.btn.Location = Point(16, 16) self.btn.Width = 200 self.btn.Text = "クリック" self.btn.Click += self.btn_Click self.count = 0; self.Controls.Add(self.btn) def btn_Click(self, sender, e): self.count += 1 MessageBox.Show( "今開いているファイルは…\n" + hm.Macro.Var['filename2'] ); hm.OutputPane.Output(str(self.count) + "\r\n") f = IronPythonForm() f.ShowDialog() )IRONPYTHON" ); freedll( #PY );
hmPyは、Apache License 2.0となります。