def fix_defaultnames(objectswithdefaultnames):
    """Find objects with names that Maya uses when the user creates an object 
    and fails to rename it. 
    ---
    Naming (detect default names). 
    Open list window with object names for review.
    fix_defaultobjectnames(list) create a UI for renaming objects with 
    invalid (default) names.
    """
    verbose = cmds.optionVar(query='checkmateVerbosity')
    
    if cmds.window('showObjectNamesWin', exists=True):
        cmds.deleteUI('showObjectNamesWin')
    win = cmds.window('showObjectNamesWin', 
        width =340, 
        height=400, 
        title="Objects with default names")
    cmds.scrollLayout(childResizable=True)
    cmds.columnLayout(adjustableColumn=True)
    numitems = 0
    for item in objectswithdefaultnames:
        if numitems < 500:
            numitems = numitems + 1
            # cmds.button(label='select', command='cmds.select(\'%s\')' % item)
            cmds.nameField(object=item, 
                receiveFocusCommand='cmds.select(\'%s\')' % item)
        else :
            break
    cmds.showWindow(win)
def run(*arg, **kwargs):
    """ Detect default names.
    ---
    Open list window with 
    object names for review.
    has_defaultnames() -> boolean, int, list
    """
        
    t0 = float(time.time())
    
    valid_kwargs = ['verbose', 'type']
    for k, v in kwargs.iteritems():
        if k not in valid_kwargs:
            raise TypeError("Invalid keyword argument %s" % k)  
    
    try:
        verbose = kwargs['verbose']
    except KeyError:
    	verbose=False
    	if cmds.optionVar(exists='checkmateVerbosity'):
    		verbose = cmds.optionVar(query='checkmateVerbosity')
    else:
        verbose=False
    
    try:
        type = kwargs['type']
    except KeyError:
    	type = None
    else:
        pass
    
    numberofobjects = 0    
    result = False
    err = None
    ignore = ['persp', 'top', 'front', 'side', 'lambert1', 'particleCloud1']
    names= ['Box', 'Char', 'Circle', 'Cylinder', 'Plane', 'Sphere', 'Text_', 'ambientLight', 'annotation',
    'areaLight',  'blinn', 'phongE', 'phong', 'rampShader', 'nurbsCube', 'camera', 'curve', 'directionalLight', 
    'effector', 'file', 'fluid', 'group', 'ikHandle1', 'joint', 'lambert', 'locator', 'null', 'nurbsCircle', 
    'nurbsCone', 'nurbsCube', 'nurbsCylinder1 nurbsPlane', 'nurbsSphere', 'nurbsSquare', 'nurbsTorus', 'ocean',
     'particle', 'pCone', 'pCube', 'pCylinder', 'pHelix1 pPipe', 'pPlane', 'pPrism', 'pPyramid', 'pSolid', 'pSphere', 
     'pTorus', 'plane', 'pointLight', 'polySurface', 'Rectangle', 'shotFar', 'shotMid', 'shotNear', 'spotLight', 
     'stereoCamera', 'strokeBrush', 'subdivCone', 'subdivCube1', 'subdivCylinder', 'subdivPlane', 'subdivSphere', 'subdivTorus', 'volumeLight', 'Object']

    defaultnames = dict()
    foundnames = dict()
    foundnodes = dict()
    #foundnodes = {'a': ['b','c']}
    
    if type == 'materials':
        nodes = [x for x in cmds.ls(materials=True) if not x in ignore]
    elif type == 'textures':
        nodes = [x for x in cmds.ls(type='file') if not x in ignore]
    elif type == None:
        nodes = [x for x in cmds.ls(transforms=True) if not x in ignore]

    if cmds.text("NameText", q = True, exists = True):
        cmds.deleteUI("NameText")
    if cmds.separator("SepNameText", q = True, exists = True):
        cmds.deleteUI("SepNameText")
        
    cmds.text("NameText", p = "ReviewLayout", label = " Please rename the following nodes")
    cmds.separator("SepNameText")
    for node in nodes:
        for name in names:
            # match one or more numbers at the end of the name
            exp = ''.join([name, "\d+$"])
            if (re.compile(exp).match(node)) and  True or False:
                result=True
                numberofobjects += 1
                #Name Field
                cmds.nameField( node + "Text", p = "ReviewLayout", object = node, enable = True, rfc = partial(cmds.select, node))
                #print node
                # count the found name
                #countnames[name] = countnames.get(name, 0) + 1
                if foundnames.get(name):
                    foundnames.get(name).append(node)
                else:
                    foundnames[name] = [node,]
                    #foundnames[name] = foundnames.get(name, 0) + 1
                # print 'node : %s -> %s' % (node, name)
                # if there is an entry for node in found nodes, append the name to the list of names for node
                if foundnodes.get(node):
                    foundnodes.get(node).append(name)
                else:
                    foundnodes[node] = [name,]
    if numberofobjects == 0:
        cmds.deleteUI("NameText")
        cmds.deleteUI("SepNameText")
    for k, v in foundnames.iteritems():
        if verbose:
            print '%s  -> found %s' % (k, len(v))
        cmds.select(v, add=True)
    print '%-24s : %.6f seconds' % ('scene.names.run()', (float(time.time())-t0)) 
    return result, numberofobjects, foundnames