docs: def save(self):
          """
          Save the project configuration
  
          This method dumps the configuration for each project and the project
          paths (see the :attr:`all_projects` attribute) to the hard drive
          """
          project_paths = OrderedDict()
          for project, d in OrderedDict(self).items():
              if isinstance(d, dict):
                  project_path = d['root']
                  fname = osp.join(project_path, '.project', '.project.yml')
                  if not osp.exists(osp.dirname(fname)):
                      os.makedirs(osp.dirname(fname))
                  if osp.exists(fname):
                      os.rename(fname, fname + '~')
                  d = self.rel_paths(copy.deepcopy(d))
                  safe_dump(d, fname, default_flow_style=False)
                  project_paths[project] = project_path
              else:
                  project_paths = self.project_paths[project]
          self.project_paths = project_paths
          safe_dump(project_paths, self.all_projects, default_flow_style=False)