def abbrev_path(path = None): """ Abbreviate a full path (or the current path, if None is provided) to make it shorter, yet still unambiguous. This function takes a directory path and tries to abbreviate it as much as possible while making sure that the resulting shortened path is not ambiguous: a path element is only abbreviated if its shortened form is unique in its directory (in other words, if a sybling would have the same abbreviation, the original name is kept). The abbreviation is performed by keeping only the first letter of each "word" composing a path element. "Words" are defined by CamelCase, underscore_separation or "whitespace separation". """ if not path: path = os.getcwd().decode(sys.getfilesystemencoding()) path = path[0].upper() + path[1:] current_dir = path[ : 3] path = path[3 : ] path_abbrev = current_dir[ : 2] for elem in path.split('\\')[ : -1]: elem_abbrev = common.abbrev_string(elem) for other in os.listdir(current_dir): if os.path.isdir(current_dir + '\\' + other) and common.abbrev_string(other).lower() == elem_abbrev.lower() and other.lower() != elem.lower(): # Found other directory with the same abbreviation # In this case, we use the entire name elem_abbrev = elem break current_dir += '\\' + elem path_abbrev += '\\' + elem_abbrev return path_abbrev + '\\' + path.split('\\')[-1]