about summary refs log tree commit diff stats
path: root/code/keys.rb
diff options
context:
space:
mode:
authorhut <hut@lavabit.com>2009-07-24 02:10:05 +0200
committerhut <hut@lavabit.com>2009-07-24 02:10:05 +0200
commitcbda44e7ca9d957dd48b231b7d463e89d5081053 (patch)
tree06ce04b5eaa8ac0c02a186cf2c9bdfdee2155ada /code/keys.rb
parent3cd5b440d7d7e4714726fa3a68b9724d1bc6d0bc (diff)
downloadranger-cbda44e7ca9d957dd48b231b7d463e89d5081053.tar.gz
implemented #13 (special keys for quick navigation)
Diffstat (limited to 'code/keys.rb')
-rw-r--r--code/keys.rb88
1 files changed, 19 insertions, 69 deletions
diff --git a/code/keys.rb b/code/keys.rb
index d35e6107..b7822d19 100644
--- a/code/keys.rb
+++ b/code/keys.rb
@@ -238,14 +238,10 @@ module Fm
 			end
 
 		when 'n'
-			if @search_string.empty?
-				find_newest
-			else
-				search(@search_string, 1)
-			end
+			quicksearch(1)
 
 		when 'N'
-			search(@search_string, 0, true)
+			quicksearch(-1)
 
 		when /^cd(.+)$/
 			str = $1
@@ -275,11 +271,22 @@ module Fm
 		when /^um(.)$/
 			@memory.delete($1)
 
-		when /^f(.+)$/
+		when FIND_KEY_REGEXP
+			Option.search_method = FIND_PROPERTIES[$1]
+			search_reset!
+			quicksearch(1)
+
+		when 'fh'
+			Option.search_method = :handler
+			quicksearch(1)
+
+
+		when /^f[rf](.+)$/
 			str = $1
+			Option.search_method = :regexp
 			if str =~ /^\s?(.*)(L|;|<cr>|<esc>)$/
 				@buffer = ''
-				@search_string = $1
+				@search_string = $1 unless $1.empty?
 				press('l') if $2 == ';' or $2 == 'L'
 			else
 				test = hints(str)
@@ -297,6 +304,7 @@ module Fm
 			str = $1
 			if str =~ /^\s?(.*)(L|;|<cr>|<esc>)$/
 				@buffer = ''
+				Option.search_method = :regexp
 				@search_string = $1
 
 				press 'l' if $2 == ';' or $2 == 'L'
@@ -601,7 +609,7 @@ module Fm
 		# and do NOT use spaces or newlines inside a regexp
 
 		@@key_combinations = %w[
-			g y c Z cu
+			g y c Z cu f
 			ter ta S e
 			?? ?g ?f ?m ?l ?c ?o ?z ?s
 			o m ` ' go
@@ -609,8 +617,8 @@ module Fm
 			um
 
 			/:[^<]*/
-			/[fF/!].*/
-			/(r|cw|cm|co|cd|mv|gf).*/
+			/[F/!].*/
+			/(r|ff|fr|cw|cm|co|cd|mv|gf).*/
 			/b(l(o(c(k(.*)?)?)?)?)?/
 			/g(r(e(p(.*)?)?)?)?/
 			/m(k(d(i(r(.*)?)?)?)?)?/
@@ -669,64 +677,6 @@ module Fm
 		@ignore_until = Time.now + t
 	end
 
-	def search(str, offset=0, backwards=false)
-		begin
-			rx = Regexp.new(str, Regexp::IGNORECASE)
-		rescue
-			return false
-		end
-
-		ary = @pwd.files_raw.dup
-		ary.wrap(@pwd.pos + offset)
-
-		ary.reverse! if backwards
-
-		for f in ary
-			g = File.basename(f)
-			if g =~ rx
-				@pwd.pointed_file = f
-				break
-			end
-		end
-	end
-
-	def find_newest()
-		newest = nil
-		for f in @pwd.files
-			if newest.nil? or newest.ctime < f.ctime
-				newest = f
-			end
-		end
-		@pwd.pointed_file = newest.path
-	end
-
-	def hints(str)
-		begin
-			rx = Regexp.new(str, Regexp::IGNORECASE)
-		rescue
-			return false
-		end
-
-		ary = @pwd.files_raw.dup
-		ary.wrap(@pwd.pos)
-
-		n = 0
-		pointed = false
-		for f in ary
-			g = File.basename(f)
-			if g =~ rx
-				unless pointed
-					log "point at #{f}"
-					@pwd.pointed_file = f
-					pointed = true
-				end
-				n += 1
-			end
-		end
-
-		return n
-	end
-
 	def self.remember_dir
 		@memory["`"] = @memory["'"] = @pwd.path
 	end