Refactoring.

This commit is contained in:
Nuno Cruces 2020-01-19 11:57:05 +00:00
parent f20505e1f4
commit 9668c61d8b
21 changed files with 51 additions and 56 deletions

View File

@ -34,8 +34,9 @@ Why reinvent this particular wheel?
* Unicode support
* WSL/Cygwin/MSYS2 [support](https://github.com/ncruces/zenity/wiki/Zenity-for-WSL,-Cygwin,-MSYS2)
* on macOS:
* only dependency is `osascript` (with [JXA](https://developer.apple.com/library/archive/releasenotes/InterapplicationCommunication/RN-JavaScriptForAutomation/Articles/Introduction.html))\
JavaScript is easier to template (with `html/template`)
* only dependency is `osascript`
(with [JXA](https://developer.apple.com/library/archive/releasenotes/InterapplicationCommunication/RN-JavaScriptForAutomation/Articles/Introduction.html);
`html/template` makes JavaScript easy to template)
* on other Unixes:
* wraps either one of `qarma`, `zenity`, `matedialog`,\
in that order of preference

View File

@ -9,7 +9,7 @@ import (
"strings"
"github.com/ncruces/zenity"
"github.com/ncruces/zenity/internal/cmd"
"github.com/ncruces/zenity/internal/zenutil"
)
//go:generate go run github.com/josephspurrier/goversioninfo/cmd/goversioninfo -platform-specific -manifest=win.manifest
@ -56,7 +56,7 @@ func main() {
flag.Parse()
validateFlags()
opts := loadFlags()
cmd.Command = true
zenutil.Command = true
switch {
case errorDlg:
@ -201,7 +201,7 @@ func loadFlags() []zenity.Option {
options = append(options, zenity.ShowHidden())
}
cmd.Separator = separator
zenutil.Separator = separator
return options
}
@ -209,12 +209,12 @@ func loadFlags() []zenity.Option {
func msgResult(ok bool, err error) {
if err == zenity.ErrExtraButton {
os.Stdout.WriteString(extraButton)
os.Stdout.WriteString(cmd.LineBreak)
os.Stdout.WriteString(zenutil.LineBreak)
os.Exit(1)
}
if err != nil {
os.Stderr.WriteString(err.Error())
os.Stderr.WriteString(cmd.LineBreak)
os.Stderr.WriteString(zenutil.LineBreak)
os.Exit(-1)
}
if ok {
@ -226,25 +226,25 @@ func msgResult(ok bool, err error) {
func strResult(s string, err error) {
if err != nil {
os.Stderr.WriteString(err.Error())
os.Stderr.WriteString(cmd.LineBreak)
os.Stderr.WriteString(zenutil.LineBreak)
os.Exit(-1)
}
if s == "" {
os.Exit(1)
}
os.Stdout.WriteString(s)
os.Stdout.WriteString(cmd.LineBreak)
os.Stdout.WriteString(zenutil.LineBreak)
os.Exit(0)
}
func lstResult(l []string, err error) {
if err != nil {
os.Stderr.WriteString(err.Error())
os.Stderr.WriteString(cmd.LineBreak)
os.Stderr.WriteString(zenutil.LineBreak)
os.Exit(-1)
}
os.Stdout.WriteString(strings.Join(l, separator))
os.Stdout.WriteString(cmd.LineBreak)
os.Stdout.WriteString(zenutil.LineBreak)
if l == nil {
os.Exit(1)
}

View File

@ -4,25 +4,24 @@ import (
"image/color"
"os/exec"
"github.com/ncruces/zenity/internal/osa"
"github.com/ncruces/zenity/internal/zen"
"github.com/ncruces/zenity/internal/zenutil"
)
func SelectColor(options ...Option) (color.Color, error) {
opts := optsParse(options)
var data osa.Color
var data zenutil.Color
if opts.color != nil {
r, g, b, _ := opts.color.RGBA()
data.Color = []float32{float32(r) / 0xffff, float32(g) / 0xffff, float32(b) / 0xffff}
}
out, err := osa.Run("color", data)
out, err := zenutil.Run("color", data)
if err, ok := err.(*exec.ExitError); ok && err.ExitCode() == 1 {
return nil, nil
}
if err != nil {
return nil, err
}
return zen.ParseColor(string(out)), nil
return zenutil.ParseColor(string(out)), nil
}

View File

@ -4,14 +4,13 @@ import (
"os/exec"
"strings"
"github.com/ncruces/zenity/internal/cmd"
"github.com/ncruces/zenity/internal/osa"
"github.com/ncruces/zenity/internal/zenutil"
)
func SelectFile(options ...Option) (string, error) {
opts := optsParse(options)
data := osa.File{
data := zenutil.File{
Prompt: opts.title,
Invisibles: opts.hidden,
}
@ -23,7 +22,7 @@ func SelectFile(options ...Option) (string, error) {
}
data.Location, _ = splitDirAndName(opts.filename)
out, err := osa.Run("file", data)
out, err := zenutil.Run("file", data)
if err, ok := err.(*exec.ExitError); ok && err.ExitCode() == 1 {
return "", nil
}
@ -39,11 +38,11 @@ func SelectFile(options ...Option) (string, error) {
func SelectFileMutiple(options ...Option) ([]string, error) {
opts := optsParse(options)
data := osa.File{
data := zenutil.File{
Prompt: opts.title,
Invisibles: opts.hidden,
Multiple: true,
Separator: cmd.Separator,
Separator: zenutil.Separator,
}
if opts.directory {
data.Operation = "chooseFolder"
@ -53,7 +52,7 @@ func SelectFileMutiple(options ...Option) ([]string, error) {
}
data.Location, _ = splitDirAndName(opts.filename)
out, err := osa.Run("file", data)
out, err := zenutil.Run("file", data)
if err, ok := err.(*exec.ExitError); ok && err.ExitCode() == 1 {
return nil, nil
}
@ -66,13 +65,13 @@ func SelectFileMutiple(options ...Option) ([]string, error) {
if len(out) == 0 {
return nil, nil
}
return strings.Split(string(out), cmd.Separator), nil
return strings.Split(string(out), zenutil.Separator), nil
}
func SelectFileSave(options ...Option) (string, error) {
opts := optsParse(options)
data := osa.File{
data := zenutil.File{
Prompt: opts.title,
}
if opts.directory {
@ -83,7 +82,7 @@ func SelectFileSave(options ...Option) (string, error) {
}
data.Location, data.Name = splitDirAndName(opts.filename)
out, err := osa.Run("file", data)
out, err := zenutil.Run("file", data)
if err, ok := err.(*exec.ExitError); ok && err.ExitCode() == 1 {
return "", nil
}

View File

@ -6,8 +6,7 @@ import (
"os/exec"
"strings"
"github.com/ncruces/zenity/internal/cmd"
"github.com/ncruces/zenity/internal/zen"
"github.com/ncruces/zenity/internal/zenutil"
)
// Display file selection dialog.
@ -30,7 +29,7 @@ func SelectFile(options ...Option) (string, error) {
}
args = append(args, initFilters(opts.filters)...)
out, err := zen.Run(args)
out, err := zenutil.Run(args)
if err, ok := err.(*exec.ExitError); ok && err.ExitCode() != 255 {
return "", nil
}
@ -51,7 +50,7 @@ func SelectFile(options ...Option) (string, error) {
func SelectFileMutiple(options ...Option) ([]string, error) {
opts := optsParse(options)
args := []string{"--file-selection", "--multiple", "--separator", cmd.Separator}
args := []string{"--file-selection", "--multiple", "--separator", zenutil.Separator}
if opts.directory {
args = append(args, "--directory")
}
@ -63,7 +62,7 @@ func SelectFileMutiple(options ...Option) ([]string, error) {
}
args = append(args, initFilters(opts.filters)...)
out, err := zen.Run(args)
out, err := zenutil.Run(args)
if err, ok := err.(*exec.ExitError); ok && err.ExitCode() != 255 {
return nil, nil
}
@ -73,7 +72,7 @@ func SelectFileMutiple(options ...Option) ([]string, error) {
if len(out) > 0 {
out = out[:len(out)-1]
}
return strings.Split(string(out), cmd.Separator), nil
return strings.Split(string(out), zenutil.Separator), nil
}
// Display save file selection dialog.
@ -99,7 +98,7 @@ func SelectFileSave(options ...Option) (string, error) {
}
args = append(args, initFilters(opts.filters)...)
out, err := zen.Run(args)
out, err := zenutil.Run(args)
if err, ok := err.(*exec.ExitError); ok && err.ExitCode() != 255 {
return "", nil
}

1
go.sum
View File

@ -1,3 +1,4 @@
golang.org/x/image v0.0.0-20191214001246-9130b4cfad52 h1:2fktqPPvDiVEEVT/vSTeoUPXfmRxRaGy6GU8jypvEn0=
golang.org/x/image v0.0.0-20191214001246-9130b4cfad52/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=

View File

@ -1,3 +0,0 @@
package osa
//go:generate go run generator.go scripts/

View File

@ -1,4 +1,4 @@
package zen
package zenutil
import (
"fmt"

View File

@ -1,4 +1,4 @@
package cmd
package zenutil
const LineBreak = "\n"

View File

@ -1,6 +1,6 @@
// +build !windows,!darwin
package cmd
package zenutil
const LineBreak = "\n"

View File

@ -1,4 +1,4 @@
package cmd
package zenutil
const LineBreak = "\r\n"

View File

@ -0,0 +1,3 @@
package zenutil
//go:generate go run osa_generator.go osascripts/

View File

@ -1,7 +1,7 @@
// Code generated by zenity; DO NOT EDIT.
// +build darwin
package osa
package zenutil
import "html/template"

View File

@ -52,7 +52,7 @@ func main() {
str.WriteString("</script>{{end}}")
}
out, err := os.Create("generated.go")
out, err := os.Create("osa_generated.go")
if err != nil {
log.Fatal(err)
}
@ -71,7 +71,7 @@ func main() {
var generator = template.Must(template.New("").Parse(`// Code generated by zenity; DO NOT EDIT.
// +build darwin
package osa
package zenutil
import "html/template"

View File

@ -1,12 +1,10 @@
package osa
package zenutil
import (
"os"
"os/exec"
"strings"
"syscall"
"github.com/ncruces/zenity/internal/cmd"
)
func Run(script string, data interface{}) ([]byte, error) {
@ -20,7 +18,7 @@ func Run(script string, data interface{}) ([]byte, error) {
res := buf.String()
res = res[len("<script>") : len(res)-len("\n</script>")]
if cmd.Command {
if Command {
path, err := exec.LookPath("osascript")
if err == nil {
os.Stderr.Close()

View File

@ -1,13 +1,11 @@
// +build !windows,!darwin
package zen
package zenutil
import (
"os"
"os/exec"
"syscall"
"github.com/ncruces/zenity/internal/cmd"
)
var tool, path string
@ -23,7 +21,7 @@ func init() {
}
func Run(args []string) ([]byte, error) {
if cmd.Command && path != "" {
if Command && path != "" {
syscall.Exec(path, append([]string{tool}, args...), os.Environ())
}
return exec.Command(tool, args...).Output()

View File

@ -3,7 +3,7 @@ package zenity
import (
"os/exec"
"github.com/ncruces/zenity/internal/osa"
"github.com/ncruces/zenity/internal/zenutil"
)
func Question(text string, options ...Option) (bool, error) {
@ -24,7 +24,7 @@ func Error(text string, options ...Option) (bool, error) {
func message(typ int, text string, options []Option) (bool, error) {
opts := optsParse(options)
data := osa.Msg{Text: text}
data := zenutil.Msg{Text: text}
dialog := typ == 0 || opts.icon != 0
if dialog {
@ -99,7 +99,7 @@ func message(typ int, text string, options []Option) (bool, error) {
}
}
out, err := osa.Run("msg", data)
out, err := zenutil.Run("msg", data)
if err, ok := err.(*exec.ExitError); ok && err.ExitCode() == 1 {
return false, nil
}

View File

@ -5,7 +5,7 @@ package zenity
import (
"os/exec"
"github.com/ncruces/zenity/internal/zen"
"github.com/ncruces/zenity/internal/zenutil"
)
// Display question dialog.
@ -84,7 +84,7 @@ func message(arg, text string, options []Option) (bool, error) {
args = append(args, "--icon-name=dialog-question")
}
out, err := zen.Run(args)
out, err := zenutil.Run(args)
if err, ok := err.(*exec.ExitError); ok && err.ExitCode() != 255 {
if len(out) > 0 && string(out[:len(out)-1]) == opts.extra {
return false, ErrExtraButton