[Komodo Edit][Macro] 表示中のテキストにアクセスする
快適にMarkdown書きたい
前に書きましたが、例えば画面を2分割して一方でMarkdown書きながら、もう一方でプレビューするような事ができないので、どうすれば実現できるのか考えています。 Komodo Editのマクロは起動トリガの設定(ファイルを保存したら実行する等)が行えるので、そのあたりに糸口があると思い、まずはKomodo Editのマクロについて勉強しています。
Helpに書いてあるサンプルが間違ってる
マクロは、PythonかJavaScriptで記述する事ができます。 まともに書いた事ないのですが以前から学習したかったのでPythonで書いていく事にしました。
Komodo Edit HelpMacros->Macro API->Python Macros->Accessing the editorONLINE HELP:http://docs.activestate.com/komodo/8.5/macroapi.html#macroapi_py
Komodo Editのヘルプファイルにはマクロについての記述があり、”Accessing the editor”章には、Pythonによって表示中のテキストにアクセスする方法が書いてあります。
これが動かない。
Pythonの知識も、XPCOMの知識(XPCOMよくわかっていない。ミドルウェア?)も皆無の為、実行環境が悪いと思ってハマりました。Helpに載ってるコードが間違ってるとは思わなかった。
既に指摘されてた(2007年)
Scimoz object in Python
http://community.activestate.com/forum-topic/scimoz-object-python
最後に、「手元のドキュメント修正したyo」みたいな事が書いてあるけど、2014年現在でも修正されてないので忘れ去られているのだと思う。
Scimozによりテキストへアクセスする
僕の理解ではこのポストの内容から、修正後のコードは以下となり、view.scimoz による、Scimozのインスタンス取得が成功します(Helpのコードではエラーとなる)。 ※ Gist貼るとおかしい。何かと競合しているみたいだな。あとでなおします。
from xpcom import components
viewSvc = components.classes["@activestate.com/koViewService;1"]\
.getService(components.interfaces.koIViewService)
view = viewSvc.currentView.queryInterface(components.interfaces.koIScintillaView)
sm = view.scimoz
sm.currentPos # current position in the editor
sm.text # editor text
sm.selText # the selected text
scimoz.replaceSel("new text") # replace the current selection
Komodo EditはPython2を包含している
今回の件で、Pythonの実行環境が悪いのだと思い、プラットフォーム側のPython環境を調べていたら、Komodo Editは自らが持つPython環境を用いている事を知りました。 プラットフォーム側の環境がエディタの動作に影響を与えてしまうからです。
逆を返すと、プラットフォーム側のPythonに手を加えても、Komodo Edit上では利用できない事になる(と思う)。 Markdownのコンバートの為に、Markdown.pyを導入しようと考えていたけど代案が必要になりそうだな。