13 "github.com/zyedidia/micro/v2/internal/buffer"
14 "github.com/zyedidia/micro/v2/internal/config"
17 func shouldContinue() bool {
18 reader := bufio.NewReader(os.Stdin)
19 fmt.Print("Continue [Y/n]: ")
20 text, err := reader.ReadString('\n')
26 text = strings.TrimRight(text, "\r\n")
28 return len(text) == 0 || strings.ToLower(text)[0] == 'y'
31 // CleanConfig performs cleanup in the user's configuration directory
33 fmt.Println("Cleaning your configuration directory at", config.ConfigDir)
34 fmt.Printf("Please consider backing up %s before continuing\n", config.ConfigDir)
36 if !shouldContinue() {
37 fmt.Println("Stopping early")
41 fmt.Println("Cleaning default settings")
42 config.WriteSettings(filepath.Join(config.ConfigDir, "settings.json"))
44 // detect unused options
45 var unusedOptions []string
46 defaultSettings := config.DefaultAllSettings()
47 for k := range config.GlobalSettings {
48 if _, ok := defaultSettings[k]; !ok {
50 for _, p := range config.Plugins {
51 if strings.HasPrefix(k, p.Name+".") || k == p.Name {
56 unusedOptions = append(unusedOptions, k)
61 if len(unusedOptions) > 0 {
62 fmt.Println("The following options are unused:")
64 sort.Strings(unusedOptions)
66 for _, s := range unusedOptions {
67 fmt.Printf("%s (value: %v)\n", s, config.GlobalSettings[s])
70 fmt.Printf("These options will be removed from %s\n", filepath.Join(config.ConfigDir, "settings.json"))
73 for _, s := range unusedOptions {
74 delete(config.GlobalSettings, s)
77 err := config.OverwriteSettings(filepath.Join(config.ConfigDir, "settings.json"))
79 fmt.Println("Error writing settings.json file: " + err.Error())
82 fmt.Println("Removed unused options")
87 // detect incorrectly formatted buffer/ files
88 files, err := ioutil.ReadDir(filepath.Join(config.ConfigDir, "buffers"))
91 var buffer buffer.SerializedBuffer
92 for _, f := range files {
93 fname := filepath.Join(config.ConfigDir, "buffers", f.Name())
94 file, e := os.Open(fname)
97 decoder := gob.NewDecoder(file)
98 err = decoder.Decode(&buffer)
100 if err != nil && f.Name() != "history" {
101 badFiles = append(badFiles, fname)
107 if len(badFiles) > 0 {
108 fmt.Printf("Detected %d files with an invalid format in %s\n", len(badFiles), filepath.Join(config.ConfigDir, "buffers"))
109 fmt.Println("These files store cursor and undo history.")
110 fmt.Printf("Removing badly formatted files in %s\n", filepath.Join(config.ConfigDir, "buffers"))
112 if shouldContinue() {
114 for _, f := range badFiles {
124 fmt.Println("Failed to remove files")
126 fmt.Printf("Removed %d badly formatted files\n", removed)
133 // detect plugins/ directory
134 plugins := filepath.Join(config.ConfigDir, "plugins")
135 if stat, err := os.Stat(plugins); err == nil && stat.IsDir() {
136 fmt.Printf("Found directory %s\n", plugins)
137 fmt.Printf("Plugins should now be stored in %s\n", filepath.Join(config.ConfigDir, "plug"))
138 fmt.Printf("Removing %s\n", plugins)
140 if shouldContinue() {
141 os.RemoveAll(plugins)
147 fmt.Println("Done cleaning")