WIP: zenity command (linux).
This commit is contained in:
parent
51595d7ecc
commit
3fe55c184b
7 changed files with 64 additions and 17 deletions
23
file_unix.go
23
file_unix.go
|
@ -5,6 +5,9 @@ package zenity
|
||||||
import (
|
import (
|
||||||
"os/exec"
|
"os/exec"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
|
"github.com/ncruces/zenity/internal/cmd"
|
||||||
|
"github.com/ncruces/zenity/internal/zen"
|
||||||
)
|
)
|
||||||
|
|
||||||
func SelectFile(options ...Option) (string, error) {
|
func SelectFile(options ...Option) (string, error) {
|
||||||
|
@ -18,8 +21,8 @@ func SelectFile(options ...Option) (string, error) {
|
||||||
args = append(args, "--filename", opts.filename)
|
args = append(args, "--filename", opts.filename)
|
||||||
}
|
}
|
||||||
args = append(args, zenityFilters(opts.filters)...)
|
args = append(args, zenityFilters(opts.filters)...)
|
||||||
cmd := exec.Command("zenity", args...)
|
|
||||||
out, err := cmd.Output()
|
out, err := zen.Run(args)
|
||||||
if err, ok := err.(*exec.ExitError); ok && err.ExitCode() != 255 {
|
if err, ok := err.(*exec.ExitError); ok && err.ExitCode() != 255 {
|
||||||
return "", nil
|
return "", nil
|
||||||
}
|
}
|
||||||
|
@ -35,7 +38,7 @@ func SelectFile(options ...Option) (string, error) {
|
||||||
func SelectFileMutiple(options ...Option) ([]string, error) {
|
func SelectFileMutiple(options ...Option) ([]string, error) {
|
||||||
opts := optsParse(options)
|
opts := optsParse(options)
|
||||||
|
|
||||||
args := []string{"--file-selection", "--multiple", "--separator=\x1e"}
|
args := []string{"--file-selection", "--multiple", "--separator", cmd.Separator}
|
||||||
if opts.title != "" {
|
if opts.title != "" {
|
||||||
args = append(args, "--title", opts.title)
|
args = append(args, "--title", opts.title)
|
||||||
}
|
}
|
||||||
|
@ -43,8 +46,8 @@ func SelectFileMutiple(options ...Option) ([]string, error) {
|
||||||
args = append(args, "--filename", opts.filename)
|
args = append(args, "--filename", opts.filename)
|
||||||
}
|
}
|
||||||
args = append(args, zenityFilters(opts.filters)...)
|
args = append(args, zenityFilters(opts.filters)...)
|
||||||
cmd := exec.Command("zenity", args...)
|
|
||||||
out, err := cmd.Output()
|
out, err := zen.Run(args)
|
||||||
if err, ok := err.(*exec.ExitError); ok && err.ExitCode() != 255 {
|
if err, ok := err.(*exec.ExitError); ok && err.ExitCode() != 255 {
|
||||||
return nil, nil
|
return nil, nil
|
||||||
}
|
}
|
||||||
|
@ -54,7 +57,7 @@ func SelectFileMutiple(options ...Option) ([]string, error) {
|
||||||
if len(out) > 0 {
|
if len(out) > 0 {
|
||||||
out = out[:len(out)-1]
|
out = out[:len(out)-1]
|
||||||
}
|
}
|
||||||
return strings.Split(string(out), "\x1e"), nil
|
return strings.Split(string(out), cmd.Separator), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func SelectFileSave(options ...Option) (string, error) {
|
func SelectFileSave(options ...Option) (string, error) {
|
||||||
|
@ -71,8 +74,8 @@ func SelectFileSave(options ...Option) (string, error) {
|
||||||
args = append(args, "--confirm-overwrite")
|
args = append(args, "--confirm-overwrite")
|
||||||
}
|
}
|
||||||
args = append(args, zenityFilters(opts.filters)...)
|
args = append(args, zenityFilters(opts.filters)...)
|
||||||
cmd := exec.Command("zenity", args...)
|
|
||||||
out, err := cmd.Output()
|
out, err := zen.Run(args)
|
||||||
if err, ok := err.(*exec.ExitError); ok && err.ExitCode() != 255 {
|
if err, ok := err.(*exec.ExitError); ok && err.ExitCode() != 255 {
|
||||||
return "", nil
|
return "", nil
|
||||||
}
|
}
|
||||||
|
@ -95,8 +98,8 @@ func SelectDirectory(options ...Option) (string, error) {
|
||||||
if opts.filename != "" {
|
if opts.filename != "" {
|
||||||
args = append(args, "--filename", opts.filename)
|
args = append(args, "--filename", opts.filename)
|
||||||
}
|
}
|
||||||
cmd := exec.Command("zenity", args...)
|
|
||||||
out, err := cmd.Output()
|
out, err := zen.Run(args)
|
||||||
if err, ok := err.(*exec.ExitError); ok && err.ExitCode() != 255 {
|
if err, ok := err.(*exec.ExitError); ok && err.ExitCode() != 255 {
|
||||||
return "", nil
|
return "", nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,6 @@
|
||||||
package cmd
|
package cmd
|
||||||
|
|
||||||
|
const LineBreak = "\n"
|
||||||
|
|
||||||
var Command bool
|
var Command bool
|
||||||
var Separator = "\x00"
|
var Separator = "\x00"
|
|
@ -1,5 +1,8 @@
|
||||||
// +build !windows
|
// +build !windows,!darwin
|
||||||
|
|
||||||
package cmd
|
package cmd
|
||||||
|
|
||||||
const LineBreak = "\n"
|
const LineBreak = "\n"
|
||||||
|
|
||||||
|
var Command bool
|
||||||
|
var Separator = "\x1e"
|
||||||
|
|
|
@ -1,3 +1,6 @@
|
||||||
package cmd
|
package cmd
|
||||||
|
|
||||||
const LineBreak = "\r\n"
|
const LineBreak = "\r\n"
|
||||||
|
|
||||||
|
var Command bool
|
||||||
|
var Separator string
|
||||||
|
|
|
@ -21,10 +21,10 @@ func Run(script string, data interface{}) ([]byte, error) {
|
||||||
res = res[len("<script>") : len(res)-len("\n</script>")]
|
res = res[len("<script>") : len(res)-len("\n</script>")]
|
||||||
|
|
||||||
if cmd.Command {
|
if cmd.Command {
|
||||||
cmd, err := exec.LookPath("osascript")
|
path, err := exec.LookPath("osascript")
|
||||||
if err == nil {
|
if err == nil {
|
||||||
os.Stderr.Close()
|
os.Stderr.Close()
|
||||||
syscall.Exec(cmd, []string{"osascript", "-l", "JavaScript", "-e", res}, nil)
|
syscall.Exec(path, []string{"osascript", "-l", "JavaScript", "-e", res}, nil)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
30
internal/zen/zen_unix.go
Normal file
30
internal/zen/zen_unix.go
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
// +build !windows,!darwin
|
||||||
|
|
||||||
|
package zen
|
||||||
|
|
||||||
|
import (
|
||||||
|
"os"
|
||||||
|
"os/exec"
|
||||||
|
"syscall"
|
||||||
|
|
||||||
|
"github.com/ncruces/zenity/internal/cmd"
|
||||||
|
)
|
||||||
|
|
||||||
|
var tool, path string
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
for _, tool = range [3]string{"matedialog", "qarma", "zenity"} {
|
||||||
|
path, _ = exec.LookPath(tool)
|
||||||
|
if path != "" {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
tool = "zenity"
|
||||||
|
}
|
||||||
|
|
||||||
|
func Run(args []string) ([]byte, error) {
|
||||||
|
if cmd.Command && path != "" {
|
||||||
|
syscall.Exec(path, append([]string{tool}, args...), os.Environ())
|
||||||
|
}
|
||||||
|
return exec.Command(tool, args...).Output()
|
||||||
|
}
|
14
msg_unix.go
14
msg_unix.go
|
@ -2,7 +2,11 @@
|
||||||
|
|
||||||
package zenity
|
package zenity
|
||||||
|
|
||||||
import "os/exec"
|
import (
|
||||||
|
"os/exec"
|
||||||
|
|
||||||
|
"github.com/ncruces/zenity/internal/zen"
|
||||||
|
)
|
||||||
|
|
||||||
func Error(text string, options ...Option) (bool, error) {
|
func Error(text string, options ...Option) (bool, error) {
|
||||||
return message("--error", text, options)
|
return message("--error", text, options)
|
||||||
|
@ -23,7 +27,10 @@ func Warning(text string, options ...Option) (bool, error) {
|
||||||
func message(arg, text string, options []Option) (bool, error) {
|
func message(arg, text string, options []Option) (bool, error) {
|
||||||
opts := optsParse(options)
|
opts := optsParse(options)
|
||||||
|
|
||||||
args := []string{arg, "--text", text, "--no-markup"}
|
args := []string{arg}
|
||||||
|
if text != "" {
|
||||||
|
args = append(args, "--text", text, "--no-markup")
|
||||||
|
}
|
||||||
if opts.title != "" {
|
if opts.title != "" {
|
||||||
args = append(args, "--title", opts.title)
|
args = append(args, "--title", opts.title)
|
||||||
}
|
}
|
||||||
|
@ -56,8 +63,7 @@ func message(arg, text string, options []Option) (bool, error) {
|
||||||
args = append(args, "--icon-name=dialog-warning")
|
args = append(args, "--icon-name=dialog-warning")
|
||||||
}
|
}
|
||||||
|
|
||||||
cmd := exec.Command("zenity", args...)
|
out, err := zen.Run(args)
|
||||||
out, err := cmd.Output()
|
|
||||||
if err, ok := err.(*exec.ExitError); ok && err.ExitCode() != 255 {
|
if err, ok := err.(*exec.ExitError); ok && err.ExitCode() != 255 {
|
||||||
if len(out) > 0 && string(out[:len(out)-1]) == opts.extra {
|
if len(out) > 0 && string(out[:len(out)-1]) == opts.extra {
|
||||||
return false, ErrExtraButton
|
return false, ErrExtraButton
|
||||||
|
|
Loading…
Reference in a new issue