Merge
This commit is contained in:
commit
c13acf6b19
7 changed files with 92 additions and 2 deletions
|
@ -144,6 +144,9 @@ func luaImportMicroUtil() *lua.LTable {
|
||||||
ulua.L.SetField(pkg, "GetLeadingWhitespace", luar.New(ulua.L, util.LuaGetLeadingWhitespace))
|
ulua.L.SetField(pkg, "GetLeadingWhitespace", luar.New(ulua.L, util.LuaGetLeadingWhitespace))
|
||||||
ulua.L.SetField(pkg, "IsWordChar", luar.New(ulua.L, util.LuaIsWordChar))
|
ulua.L.SetField(pkg, "IsWordChar", luar.New(ulua.L, util.LuaIsWordChar))
|
||||||
ulua.L.SetField(pkg, "String", luar.New(ulua.L, util.String))
|
ulua.L.SetField(pkg, "String", luar.New(ulua.L, util.String))
|
||||||
|
ulua.L.SetField(pkg, "Unzip", luar.New(ulua.L, util.Unzip))
|
||||||
|
ulua.L.SetField(pkg, "Version", luar.New(ulua.L, util.Version))
|
||||||
|
ulua.L.SetField(pkg, "SemVersion", luar.New(ulua.L, util.SemVersion))
|
||||||
ulua.L.SetField(pkg, "CharacterCountInString", luar.New(ulua.L, util.CharacterCountInString))
|
ulua.L.SetField(pkg, "CharacterCountInString", luar.New(ulua.L, util.CharacterCountInString))
|
||||||
ulua.L.SetField(pkg, "RuneStr", luar.New(ulua.L, func(r rune) string {
|
ulua.L.SetField(pkg, "RuneStr", luar.New(ulua.L, func(r rune) string {
|
||||||
return string(r)
|
return string(r)
|
||||||
|
|
|
@ -4,6 +4,7 @@ import (
|
||||||
"flag"
|
"flag"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
|
"log"
|
||||||
"os"
|
"os"
|
||||||
"os/signal"
|
"os/signal"
|
||||||
"regexp"
|
"regexp"
|
||||||
|
@ -351,7 +352,7 @@ func main() {
|
||||||
}
|
}
|
||||||
|
|
||||||
if clipErr != nil {
|
if clipErr != nil {
|
||||||
action.InfoBar.Error(clipErr, " or change 'clipboard' option")
|
log.Println(clipErr, " or change 'clipboard' option")
|
||||||
}
|
}
|
||||||
|
|
||||||
if a := config.GetGlobalOption("autosave").(float64); a > 0 {
|
if a := config.GetGlobalOption("autosave").(float64); a > 0 {
|
||||||
|
|
|
@ -42,6 +42,7 @@ func Initialize(m Method) error {
|
||||||
case External:
|
case External:
|
||||||
err = clipboard.Initialize()
|
err = clipboard.Initialize()
|
||||||
}
|
}
|
||||||
|
CurrentMethod = Internal
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
package lua
|
package lua
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"archive/zip"
|
||||||
"bytes"
|
"bytes"
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
@ -9,6 +10,7 @@ import (
|
||||||
"math"
|
"math"
|
||||||
"math/rand"
|
"math/rand"
|
||||||
"net"
|
"net"
|
||||||
|
"net/http"
|
||||||
"os"
|
"os"
|
||||||
"path"
|
"path"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
|
@ -74,6 +76,10 @@ func Import(pkg string) *lua.LTable {
|
||||||
return importUtf8()
|
return importUtf8()
|
||||||
case "humanize":
|
case "humanize":
|
||||||
return importHumanize()
|
return importHumanize()
|
||||||
|
case "net/http", "http":
|
||||||
|
return importHTTP()
|
||||||
|
case "archive/zip":
|
||||||
|
return importArchiveZip()
|
||||||
default:
|
default:
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
@ -383,6 +389,7 @@ func importOs() *lua.LTable {
|
||||||
L.SetField(pkg, "Symlink", luar.New(L, os.Symlink))
|
L.SetField(pkg, "Symlink", luar.New(L, os.Symlink))
|
||||||
L.SetField(pkg, "TempDir", luar.New(L, os.TempDir))
|
L.SetField(pkg, "TempDir", luar.New(L, os.TempDir))
|
||||||
L.SetField(pkg, "Truncate", luar.New(L, os.Truncate))
|
L.SetField(pkg, "Truncate", luar.New(L, os.Truncate))
|
||||||
|
L.SetField(pkg, "UserHomeDir", luar.New(L, os.UserHomeDir))
|
||||||
|
|
||||||
return pkg
|
return pkg
|
||||||
}
|
}
|
||||||
|
@ -570,3 +577,22 @@ func importHumanize() *lua.LTable {
|
||||||
|
|
||||||
return pkg
|
return pkg
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func importHTTP() *lua.LTable {
|
||||||
|
pkg := L.NewTable()
|
||||||
|
|
||||||
|
L.SetField(pkg, "Get", luar.New(L, http.Get))
|
||||||
|
L.SetField(pkg, "Post", luar.New(L, http.Post))
|
||||||
|
|
||||||
|
return pkg
|
||||||
|
}
|
||||||
|
|
||||||
|
func importArchiveZip() *lua.LTable {
|
||||||
|
pkg := L.NewTable()
|
||||||
|
|
||||||
|
L.SetField(pkg, "OpenReader", luar.New(L, zip.OpenReader))
|
||||||
|
L.SetField(pkg, "NewReader", luar.New(L, zip.NewReader))
|
||||||
|
L.SetField(pkg, "NewWriter", luar.New(L, zip.NewWriter))
|
||||||
|
|
||||||
|
return pkg
|
||||||
|
}
|
||||||
|
|
|
@ -1,9 +1,11 @@
|
||||||
package util
|
package util
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"archive/zip"
|
||||||
"bytes"
|
"bytes"
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"io"
|
||||||
"os"
|
"os"
|
||||||
"os/user"
|
"os/user"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
|
@ -435,3 +437,56 @@ func ParseSpecial(s string) string {
|
||||||
func String(s []byte) string {
|
func String(s []byte) string {
|
||||||
return string(s)
|
return string(s)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Unzip unzips a file to given folder
|
||||||
|
func Unzip(src, dest string) error {
|
||||||
|
r, err := zip.OpenReader(src)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
defer r.Close()
|
||||||
|
|
||||||
|
os.MkdirAll(dest, 0755)
|
||||||
|
|
||||||
|
// Closure to address file descriptors issue with all the deferred .Close() methods
|
||||||
|
extractAndWriteFile := func(f *zip.File) error {
|
||||||
|
rc, err := f.Open()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
defer rc.Close()
|
||||||
|
|
||||||
|
path := filepath.Join(dest, f.Name)
|
||||||
|
|
||||||
|
// Check for ZipSlip (Directory traversal)
|
||||||
|
if !strings.HasPrefix(path, filepath.Clean(dest)+string(os.PathSeparator)) {
|
||||||
|
return fmt.Errorf("illegal file path: %s", path)
|
||||||
|
}
|
||||||
|
|
||||||
|
if f.FileInfo().IsDir() {
|
||||||
|
os.MkdirAll(path, f.Mode())
|
||||||
|
} else {
|
||||||
|
os.MkdirAll(filepath.Dir(path), f.Mode())
|
||||||
|
f, err := os.OpenFile(path, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, f.Mode())
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
defer f.Close()
|
||||||
|
|
||||||
|
_, err = io.Copy(f, rc)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, f := range r.File {
|
||||||
|
err := extractAndWriteFile(f)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
|
@ -87,7 +87,8 @@ These may vary widely based on the 16 colors selected for your terminal.
|
||||||
True color requires your terminal to support it. This means that the
|
True color requires your terminal to support it. This means that the
|
||||||
environment variable `COLORTERM` should have the value `truecolor`, `24bit`,
|
environment variable `COLORTERM` should have the value `truecolor`, `24bit`,
|
||||||
or `24-bit`. In addition, to enable true color in micro, the environment
|
or `24-bit`. In addition, to enable true color in micro, the environment
|
||||||
variable `MICRO_TRUECOLOR` must be set to 1.
|
variable `MICRO_TRUECOLOR` must be set to 1. Note that you have to create
|
||||||
|
and set this variable yourself.
|
||||||
|
|
||||||
* `solarized-tc`: this is the solarized colorscheme for true color.
|
* `solarized-tc`: this is the solarized colorscheme for true color.
|
||||||
* `atom-dark-tc`: this colorscheme is based off of Atom's "dark" colorscheme.
|
* `atom-dark-tc`: this colorscheme is based off of Atom's "dark" colorscheme.
|
||||||
|
|
|
@ -285,6 +285,7 @@ The packages and functions are listed below (in Go type signatures):
|
||||||
string is a word character.
|
string is a word character.
|
||||||
- `String(b []byte) string`: converts a byte array to a string.
|
- `String(b []byte) string`: converts a byte array to a string.
|
||||||
- `RuneStr(r rune) string`: converts a rune to a string.
|
- `RuneStr(r rune) string`: converts a rune to a string.
|
||||||
|
- `Unzip(src, dest string) error`: unzips a file to given folder.
|
||||||
|
|
||||||
This may seem like a small list of available functions but some of the objects
|
This may seem like a small list of available functions but some of the objects
|
||||||
returned by the functions have many methods. The Lua plugin may access any
|
returned by the functions have many methods. The Lua plugin may access any
|
||||||
|
@ -358,6 +359,8 @@ strings
|
||||||
regexp
|
regexp
|
||||||
errors
|
errors
|
||||||
time
|
time
|
||||||
|
archive/zip
|
||||||
|
net/http
|
||||||
```
|
```
|
||||||
|
|
||||||
For documentation for each of these functions, see the Go standard
|
For documentation for each of these functions, see the Go standard
|
||||||
|
|
Loading…
Reference in a new issue