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')
31 return strings.ToLower(text)[0] == 'y'
34 // CleanConfig performs cleanup in the user's configuration directory
36 fmt.Println("Cleaning your configuration directory at", config.ConfigDir)
37 fmt.Printf("Please consider backing up %s before continuing\n", config.ConfigDir)
39 if !shouldContinue() {
40 fmt.Println("Stopping early")
44 fmt.Println("Cleaning default settings")
45 config.WriteSettings(filepath.Join(config.ConfigDir, "settings.json"))
47 // detect unused options
48 var unusedOptions []string
49 defaultSettings := config.DefaultAllSettings()
50 for k := range config.GlobalSettings {
51 if _, ok := defaultSettings[k]; !ok {
53 for _, p := range config.Plugins {
54 if strings.HasPrefix(k, p.Name+".") || k == p.Name {
59 unusedOptions = append(unusedOptions, k)
64 if len(unusedOptions) > 0 {
65 fmt.Println("The following options are unused:")
67 sort.Strings(unusedOptions)
69 for _, s := range unusedOptions {
70 fmt.Printf("%s (value: %v)\n", s, config.GlobalSettings[s])
73 fmt.Printf("These options will be removed from %s\n", filepath.Join(config.ConfigDir, "settings.json"))
76 for _, s := range unusedOptions {
77 delete(config.GlobalSettings, s)
80 err := config.OverwriteSettings(filepath.Join(config.ConfigDir, "settings.json"))
82 fmt.Println("Error writing settings.json file: " + err.Error())
85 fmt.Println("Removed unused options")
90 // detect incorrectly formatted buffer/ files
91 files, err := ioutil.ReadDir(filepath.Join(config.ConfigDir, "buffers"))
94 var buffer buffer.SerializedBuffer
95 for _, f := range files {
96 fname := filepath.Join(config.ConfigDir, "buffers", f.Name())
97 file, e := os.Open(fname)
100 decoder := gob.NewDecoder(file)
101 err = decoder.Decode(&buffer)
103 if err != nil && f.Name() != "history" {
104 badFiles = append(badFiles, fname)
110 if len(badFiles) > 0 {
111 fmt.Printf("Detected %d files with an invalid format in %s\n", len(badFiles), filepath.Join(config.ConfigDir, "buffers"))
112 fmt.Println("These files store cursor and undo history.")
113 fmt.Printf("Removing badly formatted files in %s\n", filepath.Join(config.ConfigDir, "buffers"))
115 if shouldContinue() {
117 for _, f := range badFiles {
127 fmt.Println("Failed to remove files")
129 fmt.Printf("Removed %d badly formatted files\n", removed)
136 // detect plugins/ directory
137 plugins := filepath.Join(config.ConfigDir, "plugins")
138 if stat, err := os.Stat(plugins); err == nil && stat.IsDir() {
139 fmt.Printf("Found directory %s\n", plugins)
140 fmt.Printf("Plugins should now be stored in %s\n", filepath.Join(config.ConfigDir, "plug"))
141 fmt.Printf("Removing %s\n", plugins)
143 if shouldContinue() {
144 os.RemoveAll(plugins)
150 fmt.Println("Done cleaning")