diff --git a/file_darwin.go b/file_darwin.go
index e46ad9e..a8e89a8 100644
--- a/file_darwin.go
+++ b/file_darwin.go
@@ -2,11 +2,13 @@ package zenity
import (
"strings"
+
+ "github.com/ncruces/zenity/internal/osa"
)
func SelectFile(options ...Option) (string, error) {
opts := optsParse(options)
- out, err := osaRun("file", osaFile{
+ out, err := osa.Run("file", osa.File{
Operation: "chooseFile",
Prompt: opts.title,
Location: opts.filename,
@@ -23,7 +25,7 @@ func SelectFile(options ...Option) (string, error) {
func SelectFileMutiple(options ...Option) ([]string, error) {
opts := optsParse(options)
- out, err := osaRun("file", osaFile{
+ out, err := osa.Run("file", osa.File{
Operation: "chooseFile",
Multiple: true,
Prompt: opts.title,
@@ -44,7 +46,7 @@ func SelectFileMutiple(options ...Option) ([]string, error) {
func SelectFileSave(options ...Option) (string, error) {
opts := optsParse(options)
- out, err := osaRun("file", osaFile{
+ out, err := osa.Run("file", osa.File{
Operation: "chooseFileName",
Prompt: opts.title,
Location: opts.filename,
@@ -60,7 +62,7 @@ func SelectFileSave(options ...Option) (string, error) {
func SelectDirectory(options ...Option) (string, error) {
opts := optsParse(options)
- out, err := osaRun("file", osaFile{
+ out, err := osa.Run("file", osa.File{
Operation: "chooseFolder",
Prompt: opts.title,
Location: opts.filename,
@@ -83,11 +85,3 @@ func appleFilters(filters []FileFilter) []string {
}
return filter
}
-
-type osaFile struct {
- Operation string
- Prompt string
- Location string
- Type []string
- Multiple bool
-}
diff --git a/internal/osa/osa_darwin.go b/internal/osa/osa_darwin.go
new file mode 100644
index 0000000..b497663
--- /dev/null
+++ b/internal/osa/osa_darwin.go
@@ -0,0 +1,43 @@
+package osa
+
+import (
+ "os/exec"
+ "strings"
+)
+
+//go:generate go run scripts/generate.go scripts/
+
+func Run(script string, data interface{}) ([]byte, error) {
+ var buf strings.Builder
+
+ err := scripts.ExecuteTemplate(&buf, script, data)
+ if err != nil {
+ return nil, err
+ }
+
+ res := buf.String()
+ res = res[len("")]
+ cmd := exec.Command("osascript", "-l", "JavaScript")
+ cmd.Stdin = strings.NewReader(res)
+ return cmd.Output()
+}
+
+type File struct {
+ Operation string
+ Prompt string
+ Location string
+ Type []string
+ Multiple bool
+}
+
+type Msg struct {
+ Dialog bool
+ Text string
+ Message string
+ As string
+ Title string
+ Icon string
+ Buttons []string
+ Cancel int
+ Default int
+}
diff --git a/osa_scripts/file.gots b/internal/osa/scripts/file.gots
similarity index 100%
rename from osa_scripts/file.gots
rename to internal/osa/scripts/file.gots
diff --git a/osa_scripts/generate.go b/internal/osa/scripts/generate.go
similarity index 93%
rename from osa_scripts/generate.go
rename to internal/osa/scripts/generate.go
index 30c3049..9c6fe9f 100644
--- a/osa_scripts/generate.go
+++ b/internal/osa/scripts/generate.go
@@ -68,9 +68,9 @@ func main() {
var generator = template.Must(template.New("").Parse(`// Code generated by zenity; DO NOT EDIT.
-package zenity
+package osa
import "html/template"
-var osaScripts = template.Must(template.New("").Parse(` + "`{{.}}`" + `))
+var scripts = template.Must(template.New("").Parse(` + "`{{.}}`" + `))
`))
diff --git a/osa_scripts/msg.gots b/internal/osa/scripts/msg.gots
similarity index 100%
rename from osa_scripts/msg.gots
rename to internal/osa/scripts/msg.gots
diff --git a/msg_darwin.go b/msg_darwin.go
index cfb945a..251ca87 100644
--- a/msg_darwin.go
+++ b/msg_darwin.go
@@ -2,6 +2,8 @@ package zenity
import (
"os/exec"
+
+ "github.com/ncruces/zenity/internal/osa"
)
func Error(text string, options ...Option) (bool, error) {
@@ -23,7 +25,7 @@ func Warning(text string, options ...Option) (bool, error) {
func message(dialog int, text string, options []Option) (bool, error) {
opts := optsParse(options)
- data := osaMsg{
+ data := osa.Msg{
Text: text,
Title: opts.title,
Dialog: opts.icon != 0 || dialog == 2,
@@ -96,7 +98,7 @@ func message(dialog int, text string, options []Option) (bool, error) {
}
}
- _, err := osaRun("msg", data)
+ _, err := osa.Run("msg", data)
if err, ok := err.(*exec.ExitError); ok && err.ExitCode() == 1 {
return false, nil
}
@@ -105,15 +107,3 @@ func message(dialog int, text string, options []Option) (bool, error) {
}
return true, err
}
-
-type osaMsg struct {
- Dialog bool
- Text string
- Message string
- As string
- Title string
- Icon string
- Buttons []string
- Cancel int
- Default int
-}
diff --git a/osa_darwin.go b/osa_darwin.go
deleted file mode 100644
index 4f5c793..0000000
--- a/osa_darwin.go
+++ /dev/null
@@ -1,22 +0,0 @@
-package zenity
-
-import (
- "os/exec"
- "strings"
-)
-
-//go:generate go run osa_scripts/generate.go osa_scripts/
-
-func osaRun(script string, data interface{}) ([]byte, error) {
- var buf strings.Builder
-
- err := osaScripts.ExecuteTemplate(&buf, script, data)
- if err != nil {
- return nil, err
- }
-
- var res = buf.String()
- cmd := exec.Command("osascript", "-l", "JavaScript")
- cmd.Stdin = strings.NewReader(res[len("")])
- return cmd.Output()
-}