diff --git a/internal/diff.go b/internal/diff.go index 3ee856a..57e3bb2 100644 --- a/internal/diff.go +++ b/internal/diff.go @@ -4,6 +4,7 @@ import ( "fmt" "os/exec" "regexp" + "strconv" "strings" log "github.com/sirupsen/logrus" @@ -91,7 +92,21 @@ func diffPlistFile(oldPlist string, newPlist string, newSettings map[string]stri if key != "" && value != "" { plistFileName := oldPlist[len(viper.GetString("TmpPreferencesDir"))+1:] originalPlist := fmt.Sprintf("%s/%s", viper.GetString("PreferencesDir"), plistFileName) - command := fmt.Sprintf("defaults write %s \"%s\" \"%s\"", originalPlist, key, value) + + typeOfValue := "" // default is string + if _, err := strconv.ParseBool(value); err == nil { + typeOfValue = " -bool" + } else if _, err := strconv.Atoi(value); err == nil { + if strings.Contains(value, ".") { + typeOfValue = " -float" + } else { + typeOfValue = " -int" + } + } + + command := fmt.Sprintf( + "defaults write %s \"%s\"%s \"%s\"", originalPlist, key, typeOfValue, value, + ) log.Debug("") log.Debug(originalPlist) diff --git a/internal/diff_test.go b/internal/diff_test.go index 0c98b6d..403a47f 100644 --- a/internal/diff_test.go +++ b/internal/diff_test.go @@ -53,7 +53,7 @@ func Test_diffPlistFile_valueChanged(t *testing.T) { ) assert.Contains(t, settingsMap, "_HIHideMenuBar") assert.Equal(t, - "defaults write $HOME/Library/Preferences/.GlobalPreferences.plist.valueChanged \"_HIHideMenuBar\" \"false\"", + "defaults write $HOME/Library/Preferences/.GlobalPreferences.plist.valueChanged \"_HIHideMenuBar\" -bool \"false\"", settingsMap["_HIHideMenuBar"], ) } @@ -97,7 +97,7 @@ func TestDiffPreferences_valueChanged(t *testing.T) { DiffPreferences("testdata/old_tmp/", "testdata/new_tmp/", settingsMap) assert.Contains(t, settingsMap, "_HIHideMenuBar") assert.Equal(t, - "defaults write $HOME/Library/Preferences/.GlobalPreferences.plist.valueChanged \"_HIHideMenuBar\" \"false\"", + "defaults write $HOME/Library/Preferences/.GlobalPreferences.plist.valueChanged \"_HIHideMenuBar\" -bool \"false\"", settingsMap["_HIHideMenuBar"], ) assert.Contains(t, settingsMap, "AppleFontSmoothing")