[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を導入しようと考えていたけど代案が必要になりそうだな。