47 lines
1.1 KiB
Go
47 lines
1.1 KiB
Go
package osstyle
|
|
|
|
import (
|
|
"github.com/pkg/errors"
|
|
"log"
|
|
"os/exec"
|
|
"strings"
|
|
)
|
|
|
|
const (
|
|
errorMessageIndicatingInLightMode = `The domain/default pair of (kCFPreferencesAnyApplication, AppleInterfaceStyle) does not exist`
|
|
)
|
|
|
|
// Usage: https://stefan.sofa-rockers.org/2018/10/23/macos-dark-mode-terminal-vim/
|
|
func darwinGetOSColorScheme() ColorScheme {
|
|
d, err := exec.Command("defaults", "read", "-g", "AppleInterfaceStyle").Output()
|
|
if err != nil {
|
|
var exitErr *exec.ExitError
|
|
if errors.As(err, &exitErr) {
|
|
stdErr := string(exitErr.Stderr)
|
|
|
|
if strings.Contains(stdErr, errorMessageIndicatingInLightMode) {
|
|
log.Printf("error message indicates that macOS is in light mode")
|
|
return ColorSchemeLightMode
|
|
}
|
|
|
|
log.Printf("cannot get current OS color scheme: %v - stderr: [%v]", err, stdErr)
|
|
} else {
|
|
log.Printf("cannot get current OS color scheme: %v", err)
|
|
}
|
|
|
|
return ColorSchemeUnknown
|
|
}
|
|
|
|
switch string(d) {
|
|
case "Dark\n":
|
|
return ColorSchemeDarkMode
|
|
case "Light\n":
|
|
return ColorSchemeLightMode
|
|
}
|
|
return ColorSchemeUnknown
|
|
}
|
|
|
|
func init() {
|
|
getOSColorScheme = darwinGetOSColorScheme
|
|
}
|