about summary refs log tree commit diff stats
path: root/ranger/fsobject.py
diff options
context:
space:
mode:
Diffstat (limited to 'ranger/fsobject.py')
-rw-r--r--ranger/fsobject.py21
1 files changed, 20 insertions, 1 deletions
diff --git a/ranger/fsobject.py b/ranger/fsobject.py
index e482f5fa..081c22be 100644
--- a/ranger/fsobject.py
+++ b/ranger/fsobject.py
@@ -60,12 +60,13 @@ class FileSystemObject(object):
 			elif os.path.isfile(self.path):
 				self.type = T_FILE
 				self.size = self.stat.st_size
-				self.infostring = ' %d' % self.stat.st_size
+				self.infostring = ' ' + human_readable(self.stat.st_size)
 			else:
 				self.type = T_UNKNOWN
 				self.infostring = None
 
 		else:
+			self.stat = None
 			self.islink = False
 			self.infostring = None
 			self.type = T_NONEXISTANT
@@ -90,3 +91,21 @@ class FileSystemObject(object):
 			self.load()
 			return True
 		return False
+
+ONE_KB = 1024
+UNITS = tuple('BKMGTY')
+MAX_I = len(UNITS) - 1
+
+def human_readable(byte):
+	i = 0
+	flt = float(byte)
+
+	while flt > ONE_KB and i < MAX_I:
+		flt /= ONE_KB
+		i += 1
+	
+	if int(flt) == flt:
+		return '%.0f %s' % (flt, UNITS[i])
+
+	else:
+		return '%.2f %s' % (flt, UNITS[i])