about summary refs log tree commit diff stats
path: root/code
diff options
context:
space:
mode:
authorhut <hut@lavabit.com>2009-07-04 16:35:10 +0200
committerhut <hut@lavabit.com>2009-07-04 16:35:10 +0200
commit3181c245fef832344129b522311300e4a3075e85 (patch)
treec7c58a55aae4ab9db999afabdcc71e10c6bd622d /code
parentb908c61d849cd1344814a9465930060616b30a8c (diff)
downloadranger-3181c245fef832344129b522311300e4a3075e85.tar.gz
restructured
Diffstat (limited to 'code')
-rw-r--r--code/keys.rb330
1 files changed, 171 insertions, 159 deletions
diff --git a/code/keys.rb b/code/keys.rb
index 339b3f29..94b60859 100644
--- a/code/keys.rb
+++ b/code/keys.rb
@@ -18,90 +18,6 @@ module Fm
 		/r(e(n(a(m(e(.*)?)?)?)?)?)?/
 	)
 
-	# Create a regular expression which detects these combos
-	ary = []
-	for token in COMBS
-		if token =~ /^\/(.*)\/$/
-			ary << $1
-		elsif token.size > 0
-			ary << token.each_char.map {|t|
-				if t == '?'
-					t = '\?'
-				end
-
-				"(?:#{t}"
-			}.join +
-				(')?' * (token.size - 1)) + ')'
-		end
-	end
-	REGX = Regexp.new('^(?:' + ary.uniq.join('|') + ')$')
-
-	def self.ignore_keys_for(t)
-		@ignore_until = Time.now + t
-	end
-
-	def self.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 self.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 self.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
-
 	def self.press(key)
 		return if @ignore_until and Time.now < @ignore_until
 
@@ -192,10 +108,6 @@ module Fm
 		when 'N'
 			search(@search_string, 0, true)
 
-#		when 'fh'
-#			@buffer.clear
-#			press('h')
-
 		when /^F(.+)$/
 			str = $1
 			if str =~ /^\s?(.*)(<cr>|<esc>)$/
@@ -302,43 +214,11 @@ module Fm
 		when /^block.*stop$/
 			@buffer = ''
 
-		when 'tw'
-			Option.wide_bar ^= true
-
-		when 'tp'
-			Option.preview ^= true
-
-		when 'tf'
-			Option.file_preview ^= true
-
-		when 'th'
-			Option.show_hidden ^= true
-			@pwd.refresh!
-
-		when 'tc'
-			Option.cd ^= true
-
-		when 'td'
-			Option.dir_first ^= true
-			@pwd.schedule
-
 		when 'P'
 			for f in @copy
 				File.symlink(f.path, File.expand_path(f.basename))
 			end
 
-		when /^(?:`|'|go)(.)$/
-			if dir = @memory[$1] and not @pwd.path == dir
-				remember_dir
-				enter_dir_safely(dir)
-			end
-
-		when '<tab>'
-			if dir = @memory['`'] and not @pwd.path == dir
-				remember_dir
-				enter_dir_safely(dir)
-			end
-
 #		when '<s-tab>'
 #			if dir = @memory['`'] and not @pwd.path == dir
 #				remember_dir
@@ -355,40 +235,6 @@ module Fm
 #				enter_dir_safely(dir)
 #			end
 
-		when /^m(.)$/
-			@memory[$1] = @pwd.path
-
-		when /^um(.)$/
-			@memory.delete($1)
-
-		when ' '
-			if currentfile.marked
-				@marked.delete(currentfile)
-				currentfile.marked = false
-			else
-				@marked << currentfile
-				currentfile.marked = true
-			end
-
-			@pwd.pos += 1
-
-		when 'v'
-			@marked = []
-			for file in @pwd.files
-				if file.marked
-					file.marked = false
-				else
-					file.marked = true
-					@marked << file
-				end
-			end
-
-		when 'V'
-			for file in @marked
-				file.marked = false
-			end
-			@marked = []
-
 		## Destructive {{{
 
 		when 'dd'
@@ -475,7 +321,12 @@ module Fm
 
 		## }}}
 
+		## Movement {{{
+
 		## gX {{{
+		when 'gg'
+			@pwd.pos = 0
+
 		when 'g0'
 			remember_dir
 			enter_dir('/')
@@ -509,10 +360,6 @@ module Fm
 			enter_dir('/srv')
 		## }}}
 
-		## Movement {{{
-		when 'gg'
-			@pwd.pos = 0
-
 		when 'G'
 			@pwd.pos = @pwd.size - 1
 
@@ -548,6 +395,25 @@ module Fm
 					enter_dir_safely($1)
 				end
 			end
+
+		when /^(?:`|'|go)(.)$/
+			if dir = @memory[$1] and not @pwd.path == dir
+				remember_dir
+				enter_dir_safely(dir)
+			end
+
+		when '<tab>'
+			if dir = @memory['`'] and not @pwd.path == dir
+				remember_dir
+				enter_dir_safely(dir)
+			end
+
+		when /^m(.)$/
+			@memory[$1] = @pwd.path
+
+		when /^um(.)$/
+			@memory.delete($1)
+
 		## }}}
 
 		## Launching applications {{{
@@ -585,6 +451,20 @@ module Fm
 			system("amixer", "-q", "set", "PCM", val, "unmute")
 
 		## }}}
+
+		## Control {{{
+
+		when ' '
+			if currentfile.marked
+				@marked.delete(currentfile)
+				currentfile.marked = false
+			else
+				@marked << currentfile
+				currentfile.marked = true
+			end
+
+			@pwd.pos += 1
+
 		
 		when 'ZZ', '<c-d>', ':q<cr>', 'Q'
 			exit
@@ -596,9 +476,52 @@ module Fm
 		when '<c-r>'
 			Fm.boot_up
 
+		when 'v'
+			@marked = []
+			for file in @pwd.files
+				if file.marked
+					file.marked = false
+				else
+					file.marked = true
+					@marked << file
+				end
+			end
+
+		when 'V'
+			for file in @marked
+				file.marked = false
+			end
+			@marked = []
+
+		## }}}
+
+		## Options {{{
+
+		when 'tw'
+			Option.wide_bar ^= true
+
+		when 'tp'
+			Option.preview ^= true
+
+		when 'tf'
+			Option.file_preview ^= true
+
+		when 'th'
+			Option.show_hidden ^= true
+			@pwd.refresh!
+
+		when 'tc'
+			Option.cd ^= true
+
+		when 'td'
+			Option.dir_first ^= true
+			@pwd.schedule
+
+		## }}}
+
 		end
 
-		@buffer = '' unless @buffer == '' or @buffer =~ REGX
+		@buffer = '' unless @buffer == '' or @buffer =~ key_regexp
 	end
 	
 	def self.ascend(wait = false, all=false)
@@ -624,5 +547,94 @@ module Fm
 			enter_dir(@buffer=='H' ? '..' : @path[-2].path)
 		end
 	end
+
+	def ignore_keys_for(t)
+		@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
+
+
+	def key_regexp
+		return @@key_regexp if @@key_regexp
+
+		# Create a regular expression which detects combos
+		ary = []
+		for token in COMBS
+			if token =~ /^\/(.*)\/$/
+				ary << $1
+			elsif token.size > 0
+				ary << token.each_char.map {|t|
+					if t == '?'
+						t = '\?'
+					end
+
+					"(?:#{t}"
+				}.join +
+					(')?' * (token.size - 1)) + ')'
+			end
+		end
+		@@key_regexp = Regexp.new('^(?:' + ary.uniq.join('|') + ')$')
+	end
 end