about summary refs log tree commit diff stats
path: root/code/directory.rb
diff options
context:
space:
mode:
Diffstat (limited to 'code/directory.rb')
-rw-r--r--code/directory.rb15
1 files changed, 12 insertions, 3 deletions
diff --git a/code/directory.rb b/code/directory.rb
index 92782907..6099d891 100644
--- a/code/directory.rb
+++ b/code/directory.rb
@@ -2,6 +2,7 @@ require 'code/extensions/basic'
 
 class Directory
 	@@filter = nil
+	BAD_TIME = Time.at(1)
 
 	def initialize(path, allow_delay=false)
 		@path = path
@@ -9,6 +10,7 @@ class Directory
 		@files = []
 		@file_size = 0
 		@pointed_file = nil
+		@sort_time = BAD_TIME
 		@width = 1000
 		@read = false
 		@free_space = nil
@@ -47,7 +49,7 @@ class Directory
 	end
 
 	attr_reader(:path, :files, :pos, :width, :files_raw,
-					:file_size, :read)
+					:file_size, :read, :sort_time)
 	attr_accessor(:scheduled)
 
 	def self.filter=(x)
@@ -185,7 +187,7 @@ class Directory
 			log("getting file info of #{@path}")
 			get_file_info 
 		end
-		sort
+		sort_if_needed
 	end
 
 	def schedule()
@@ -196,13 +198,19 @@ class Directory
 		oldfile = @pointed_file
 		read_dir
 		get_file_info
-		sort
+		sort_if_needed
 
 		if @files.include? oldfile
 			self.pointed_file = oldfile
 		end
 	end
 
+	def sort_if_needed
+		if @sort_time < Fm.sort_time
+			sort
+		end
+	end
+
 	def sort_sub(x, y)
 		case Option.sort
 		when :ext
@@ -221,6 +229,7 @@ class Directory
 	end
 
 	def sort()
+		@sort_time = Time.now
 		files = @files.sort {|x,y|
 			if Option.list_dir_first
 				if x.dir?