diff --git a/twander.py b/twander.py index bd59b05..ec14d50 100755 --- a/twander.py +++ b/twander.py @@ -6,7 +6,7 @@ # Program Information PROGNAME = "twander" -RCSID = "$Id: twander.py,v 3.110 2003/02/28 00:19:27 tundra Exp $" +RCSID = "$Id: twander.py,v 3.111 2003/02/28 01:10:24 tundra Exp $" VERSION = RCSID.split()[2] # Copyright Information @@ -624,7 +624,7 @@ wBADEXE = "Could Not Execute Command:\n\n%s" wBADRHS = "Ignoring Line %s.\nOption Assignment Has Bad Righthand Side:\n\n%s" wBADSCNUM = "Ignoring Line %s.\nShortcut Number Must Be From 1-12:\n\n%s" -wBADSORTFLD = "Don't Know How To Sort By: %s\n\nWill Sort By Name Instead." +wBADSORTFLD = "Don't Know How To Sort By: %s\n\nWill Sort By %s Instead." wCONFOPEN = "Cannot Open Configuration File:\n%s" wDIRSCREDEF = "Ignoring Line %s.\nDirectory Shortcut Defined More Than Once:\n\n%s" wDUPKEY = "Ignoring Line %s.\nFound Duplicate Command Key '%s':\n\n%s" @@ -1683,15 +1683,27 @@ self.DirList.activate(0) self.MouseNewDir = FALSE - # See if its time to do a refresh + # Do autorefreshing as required if AUTOREFRESH: self.ElapsedTime += POLLINT + + # Is it time for a referesh? if self.ElapsedTime >= REFRESHINT: + # Don't autorefresh on drive list views if UI.CurrentDir != SHOWDRIVES: - RefreshDirList() - self.ElapsedTime = 0 + + # Don't autorefresh if there is a lock outstanding + # Try back again in 1/4 the usual time + # This avoids a deadly embrace which can happen + # if you spin on this lock, waiting for it to release + + if not UI.DirListMutex.test(): + RefreshDirList() + self.ElapsedTime = 0 + else: + self.ElapsedTime = REFRESHINT * 3/4 # Setup next polling event self.DirList.after(POLLINT, self.poll) @@ -2849,8 +2861,9 @@ # Check to see if SORTBYFIELD makes sense if SORTBYFIELD.lower() not in Name2Key.keys(): - WrnMsg(wBADSORTFLD % SORTBYFIELD) - SORTBYFIELD = fNAME + default = UI.OptionsString["SORTBYFIELD"] + WrnMsg(wBADSORTFLD % (SORTBYFIELD, default)) + SORTBYFIELD = default LoadHelpMenu() UI.TotalSize = 0 @@ -2884,6 +2897,8 @@ filelist = os.listdir(currentdir) keyindex = Name2Key[SORTBYFIELD.lower()] + dList, fList = [], [] + for x in range(len(filelist)): @@ -2895,78 +2910,99 @@ detail, fields = FileDetails(file, currentdir) - # Get the key by which to sort - we decrement it by one because - # the user expresses it as a 1-relative value. - # Collapse case on Win32 when sorting by name - - sortkey = fields[keyindex] - if OSNAME == 'nt' and (SORTBYFIELD.lower() == fNAME.lower()): - sortkey = sortkey.lower - + # Decide whether we have to sort or not, act accordingly - # Keep track of the file name and its details, separating directories from files - # Build corresponding key list for sorting + if SORTBYFIELD.lower() == fNONE.lower(): - if detail[0] == ST_SPECIALS["04"]: + # Nope, no sorting, just load-up the return data structures + # with either the file name or the details string depending + # on whether or not we're displaying details at the moment. - fileinfo.append((file+PSEP, detail+PSEP)) - dKeys.setdefault(sortkey, []).append(x) + if UI.DetailsOn: + dList.append(detail) + else: + dList.append(file) + + # Yup, we're going to sort later - build index/return data structures + else: + + # Get the key by which to sort - we decrement it by one because + # the user expresses it as a 1-relative value. + # Collapse case on Win32 when sorting by name + + sortkey = fields[keyindex] + if OSNAME == 'nt' and (SORTBYFIELD.lower() == fNAME.lower()): + sortkey = sortkey.lower + + + # Keep track of the file name and its details, separating directories from files + # Build corresponding key list for sorting + + if detail[0] == ST_SPECIALS["04"]: + + fileinfo.append((file+PSEP, detail+PSEP)) + dKeys.setdefault(sortkey, []).append(x) + + else: + fileinfo.append((file, detail)) + fKeys.setdefault(sortkey, []).append(x) + + + # If sorting has been requested, do so now + + if SORTBYFIELD.lower() != fNONE.lower(): + + # Sort keys according to user's desire for Dir/File separation + + if SORTSEPARATE: + dk = dKeys.keys() + dk.sort() + fk = fKeys.keys() + fk.sort() else: - fileinfo.append((file, detail)) - fKeys.setdefault(sortkey, []).append(x) - + # Combine the two key dicts into one composite + # dictionary (dKeys) - - # Sort keys according to user's desire for Dir/File separation - - if SORTSEPARATE: - dk = dKeys.keys() - dk.sort() - fk = fKeys.keys() - fk.sort() + for key in fKeys.keys(): + for val in fKeys[key]: + dKeys.setdefault(key, []).append(val) - else: - # Combine the two key dicts into one composite - # dictionary (dKeys) + dk = dKeys.keys() + dk.sort() + fk = [] + + # Reverse the sorts, if requested + + if SORTREVERSE: + dk.reverse() + fk.reverse() + + # Build corresponding dir/file lists, observing user's + # request for detail information + + for x in dk: + + for index in dKeys[x]: + + if UI.DetailsOn: + dList.append(fileinfo[index][1]) + else: + dList.append(fileinfo[index][0]) + + for x in fk: + + for index in fKeys[x]: + + if UI.DetailsOn: + fList.append(fileinfo[index][1]) + else: + fList.append(fileinfo[index][0]) + + # Sorting logic ends here - for key in fKeys.keys(): - for val in fKeys[key]: - dKeys.setdefault(key, []).append(val) - - dk = dKeys.keys() - dk.sort() - fk = [] - # Reverse the sorts, if requested - - if SORTREVERSE: - dk.reverse() - fk.reverse() - - # Build corresponding dir/file lists, observing user's - # request for detail information - - dList, fList = [], [] - - for x in dk: - - for index in dKeys[x]: - - if UI.DetailsOn: - dList.append(fileinfo[index][1]) - else: - dList.append(fileinfo[index][0]) - - for x in fk: - - for index in fKeys[x]: - - if UI.DetailsOn: - fList.append(fileinfo[index][1]) - else: - fList.append(fileinfo[index][0]) - + # Now return results in their final form if UI.DetailsOn: dotdot = [FileDetails(".." + PSEP, currentdir)[0],]