Some plugin callbacks

This commit is contained in:
Zachary Yedidia
2019-03-19 18:28:51 -04:00
parent 5ab6c9795f
commit 3335f377a9
8 changed files with 96 additions and 22 deletions

View File

@@ -4,8 +4,12 @@ import (
"strings"
"time"
luar "layeh.com/gopher-luar"
"github.com/zyedidia/micro/internal/buffer"
"github.com/zyedidia/micro/internal/config"
"github.com/zyedidia/micro/internal/display"
ulua "github.com/zyedidia/micro/internal/lua"
"github.com/zyedidia/micro/internal/screen"
"github.com/zyedidia/tcell"
)
@@ -110,6 +114,8 @@ func NewBufPane(buf *buffer.Buffer, win display.BWindow) *BufPane {
h.Cursor = h.Buf.GetActiveCursor()
h.mouseReleased = true
config.RunPluginFn("onBufPaneOpen", luar.New(ulua.L, h))
return h
}

View File

@@ -5,3 +5,7 @@ var InfoBar *InfoPane
func InitGlobals() {
InfoBar = NewInfoBar()
}
func GetInfoBar() *InfoPane {
return InfoBar
}

View File

@@ -12,10 +12,13 @@ import (
"time"
"unicode/utf8"
luar "layeh.com/gopher-luar"
"github.com/zyedidia/micro/internal/config"
"github.com/zyedidia/micro/pkg/highlight"
ulua "github.com/zyedidia/micro/internal/lua"
"github.com/zyedidia/micro/internal/screen"
. "github.com/zyedidia/micro/internal/util"
"github.com/zyedidia/micro/pkg/highlight"
"golang.org/x/text/encoding/htmlindex"
"golang.org/x/text/encoding/unicode"
"golang.org/x/text/transform"
@@ -228,6 +231,11 @@ func NewBuffer(r io.Reader, size int64, path string, cursorPosition []string, bt
}
}
err = config.RunPluginFn("onBufferOpen", luar.New(ulua.L, b))
if err != nil {
screen.TermMessage(err)
}
OpenBuffers = append(OpenBuffers, b)
return b

View File

@@ -2,6 +2,7 @@ package config
import (
"errors"
"log"
lua "github.com/yuin/gopher-lua"
ulua "github.com/zyedidia/micro/internal/lua"
@@ -9,12 +10,26 @@ import (
var ErrNoSuchFunction = errors.New("No such function exists")
// LoadAllPlugins loads all detected plugins (in runtime/plugins and ConfigDir/plugins)
func LoadAllPlugins() {
for _, p := range Plugins {
p.Load()
}
}
// RunPluginFn runs a given function in all plugins
func RunPluginFn(fn string, args ...lua.LValue) error {
var reterr error
for _, p := range Plugins {
log.Println(p.Name, fn)
_, err := p.Call(fn, args...)
if err != nil && err != ErrNoSuchFunction {
reterr = errors.New("Plugin " + p.Name + ": " + err.Error())
}
}
return reterr
}
type Plugin struct {
Name string // name of plugin
Info RuntimeFile // json file containing info

View File

@@ -2,6 +2,7 @@ package config
import (
"io/ioutil"
"log"
"os"
"path"
"path/filepath"
@@ -137,6 +138,7 @@ func InitRuntimeFiles() {
// Search ConfigDir for plugin-scripts
plugdir := filepath.Join(ConfigDir, "plugins")
files, _ := ioutil.ReadDir(plugdir)
log.Println("reading", plugdir)
for _, d := range files {
if d.IsDir() {
srcs, _ := ioutil.ReadDir(filepath.Join(plugdir, d.Name()))

View File

@@ -23,11 +23,6 @@ import (
var L *lua.LState
func init() {
L = lua.NewState()
L.SetGlobal("import", luar.New(L, Import))
}
// LoadFile loads a lua file
func LoadFile(module string, file string, data []byte) error {
pluginDef := []byte("module(\"" + module + "\", package.seeall)")