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