Microのプラグイン開発で使用できるパッケージ

Microのプラグイン開発で、

local micro = import("micro")

のような書き方でパッケージをインポートします。


このimportですが、Luaの仕様には用意されていないらしく、Microに組み込んだLuaの機能になるらしいです。


高度なプラグイン開発の為にimportで何のパッケージを読み込むことができるか?を見ていきます。




確認すべきコードは下記の2ファイルになります。

https://github.com/zyedidia/micro/blob/master/cmd/micro/initlua.go

https://github.com/zyedidia/micro/blob/master/internal/lua/lua.go


どちらのファイルにも共通で、

ulua.L.SetField(pkg, "Log", luar.New(ulua.L, log.Println))

のようなコードがあります。


上記のコードは

local micro = import("micro")

のmicro変数に格納されるメソッドを指し、

micro.Log(文字列)

に該当します。


このコードはGo言語の方のlogパッケージ内のPrintlnに該当します。

log package - log#Println - Go Packages


このようにコードを辿っていくことで、使用できる機能や変数の中に挿入したデータの詳細を確認することができます。




Microのプラグイン開発、入力フィールドに文字列を表示するで見ました

bp:OpenBuffer(buf)

ですが、OpenBufferというメソットがどのような処理で、引数には何の型のデータを挿入すれば良いか?を確認したいとします。


OpenBufferの方は

https://github.com/zyedidia/micro/blob/master/internal/action/bufpane.go

のファイルにコードが書かれていまして、

func (h *BufPane) OpenBuffer(b *buffer.Buffer)

になっていました。


第一引数に挿入する*buffer.Bufferは

https://github.com/zyedidia/micro/blob/master/internal/buffer/buffer.go

のファイルにコードが書かれていまして、

type Buffer struct {
	*EventHandler
	*SharedBuffer

	fini        int32
	cursors     []*Cursor
	curCursor   int
	StartCursor Loc

	// OptionCallback is called after a buffer option value is changed.
	// The display module registers its OptionCallback to ensure the buffer window
	// is properly updated when needed. This is a workaround for the fact that
	// the buffer module cannot directly call the display's API (it would mean
	// a circular dependency between packages).
	OptionCallback func(option string, nativeValue interface{})

	// The display module registers its own GetVisualX function for getting
	// the correct visual x location of a cursor when softwrap is used.
	// This is hacky. Maybe it would be better to move all the visual x logic
	// from buffer to display, but it would require rewriting a lot of code.
	GetVisualX func(loc Loc) int

	// Last search stores the last successful search
	LastSearch      string
	LastSearchRegex bool
	// HighlightSearch enables highlighting all instances of the last successful search
	HighlightSearch bool
}

のように書かれていました。


これらの内容を踏まえ、冒頭の

local micro = import("micro")

https://github.com/zyedidia/micro/blob/master/cmd/micro/initlua.go

ulua.L.SetGlobal("import", luar.New(ulua.L, LuaImport))

で機能を追加していることがわかりました。


Microのプラグインで使用できるパッケージについて

micro/runtime/help/plugins.md at master · zyedidia/micro#Accessing micro functions

マインクラフト用ビジュアルエディタを開発しています。
詳しくはinunosinsi/mcws_blockly - githubをご覧ください。