about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorhut <hut@lavabit.com>2009-07-04 21:47:15 +0200
committerhut <hut@lavabit.com>2009-07-04 21:47:15 +0200
commitb1855df62ae954142ca7bbc5888212bc75081303 (patch)
treee77c1d24f0a58476def55d3442363267e19be054
parentf0c18d64739e496cf943ea794fa937cff0a7916d (diff)
downloadranger-b1855df62ae954142ca7bbc5888212bc75081303.tar.gz
request a confirmation on deletion
-rw-r--r--code/draw.rb7
-rw-r--r--code/keys.rb67
-rwxr-xr-xranger.rb30
3 files changed, 68 insertions, 36 deletions
diff --git a/code/draw.rb b/code/draw.rb
index b493c846..1b40d47d 100644
--- a/code/draw.rb
+++ b/code/draw.rb
@@ -281,13 +281,14 @@ module Fm
 			btm = lines - 1
 
 			case @buffer
-			when 'seriouslydd', 'dd'
-				puti btm, "Are you serious? Please press y to confirm."
+			when /^delete/, /^dd/
+				puti btm, "#@buffer    ".rjust(cols)
+				puti btm, 'Are you serious? (' + Option.confirm_string + ')'
 
 			when 'S'
 				puti btm, "Sort by (n)ame (s)ize (m)time (c)time (CAPITAL:reversed)"
 			when 't'
-				puti btm, "Toggle (h)idden_files (d)irs_first (f)ilepreview (p)review (w)idebar"
+				puti btm, "Toggle (h)idden_files (d)irs_first (f)ilepreview (p)review (w)idebar (c)d (!)confirm"
 			else
 				attr_set(Color.base)
 				attr_set(Color.info)
diff --git a/code/keys.rb b/code/keys.rb
index 5a549d5c..86a6f235 100644
--- a/code/keys.rb
+++ b/code/keys.rb
@@ -1,22 +1,39 @@
 module Fm
 	# ALL combinations of multiple keys (but without the last letter)
 	# or regexps which match combinations need to be in here!
-	COMBS = %w(
-		g dd seriouslydd y c Z delet cu
-		ter ta S ?? ?g ?f ?m ?l ?c ?o ?z
-		o m ` ' go
-
-		um
-
-		/:[^<]*/
-		/[fF/!].*/
-		/r\d*\w*[^r]/
-		/(cw|cd|mv).*/
-		/b(l(o(c(k(.*)?)?)?)?)?/
-		/m(k(d(i(r(.*)?)?)?)?)?/
-		/t(o(u(c(h(.*)?)?)?)?)?/
-		/r(e(n(a(m(e(.*)?)?)?)?)?)?/
-	)
+	def key_combinations
+		return @@key_combinations if @@key_combinations
+
+		@@key_combinations = %w[
+			g y c Z cu
+			ter ta S ?? ?g ?f ?m ?l ?c ?o ?z
+			o m ` ' go
+			deleteI\ am   ddI\ am
+
+			um
+
+			/:[^<]*/
+			/[fF/!].*/
+			/r\d*\w*[^r]/
+			/(cw|cd|mv).*/
+			/b(l(o(c(k(.*)?)?)?)?)?/
+			/m(k(d(i(r(.*)?)?)?)?)?/
+			/t(o(u(c(h(.*)?)?)?)?)?/
+			/r(e(n(a(m(e(.*)?)?)?)?)?)?/
+		]
+
+		need_confirmation = %w[
+			delete
+			dd
+		]
+
+
+		for str in need_confirmation
+			@@key_combinations << (str + Option.confirm_string).chop
+		end
+
+		return @@key_combinations
+	end
 
 	def self.press(key)
 		return if @ignore_until and Time.now < @ignore_until
@@ -95,7 +112,7 @@ module Fm
 
 		## Destructive {{{
 
-		when 'ddy'
+		when 'dd' + Option.confirm_string
 			new_path = move_to_trash(currentfile)
 			if new_path
 				new_path = Directory::Entry.new(new_path)
@@ -105,14 +122,14 @@ module Fm
 			end
 			@pwd.schedule
 
-		when 'seriouslyddy'
+		when 'dfd' + Option.confirm_string
 			cf = currrentfile
 			if cf and cf.exists?
 				cf.delete!
 				@pwd.schedule
 			end
 
-		when 'delete'
+		when 'delete' + Option.confirm_string
 			files = selection
 			@marked = []
 			for f in files
@@ -442,6 +459,9 @@ module Fm
 			end
 			@pwd.schedule
 
+		when 't!'
+			Option.confirm ^= true
+
 		when 'tw'
 			Option.wide_bar ^= true
 
@@ -560,13 +580,18 @@ module Fm
 	end
 
 
-	@@key_regexp = nil
+	def self.recalculate_key_combinations
+		@@key_combinations = nil
+		@@key_regexp = nil
+	end
+	recalculate_key_combinations
+
 	def key_regexp
 		return @@key_regexp if @@key_regexp
 
 		# Create a regular expression which detects combos
 		ary = []
-		for token in COMBS
+		for token in key_combinations
 			if token =~ /^\/(.*)\/$/
 				ary << $1
 			elsif token.size > 0
diff --git a/ranger.rb b/ranger.rb
index 7fbe4824..f668d053 100755
--- a/ranger.rb
+++ b/ranger.rb
@@ -30,20 +30,26 @@ end
 
 ## default options
 opt = {
-	:show_hidden => false,
-	:sort => :name,
-	:dir_first => true,
-	:sort_reverse => false,
-	:cd => ARGV.include?('--cd'),
-	:colorscheme => true,
-	:ascii_only => true,
-	:wide_bar => true,
-	:file_preview => true,
-	:preview => true,
-	:colorscheme => 'default'
+	:show_hidden            => false,
+	:sort                   => :name,
+	:dir_first              => true,
+	:sort_reverse           => false,
+	:cd                     => ARGV.include?('--cd'),
+	:colorscheme            => true,
+	:ascii_only             => true,
+	:wide_bar               => true,
+	:confirm_string         => "yes I am!",
+	:confirm                => true,
+	:file_preview           => true,
+	:preview                => true,
+	:colorscheme            => 'default'
 }
 
-Option = Struct.new(*opt.keys).new(*opt.values)
+class OptionClass < Struct.new(*opt.keys)
+	def confirm_string; confirm ? super : "" end
+end
+
+Option = OptionClass.new(*opt.values)
 opt = nil
 
 load 'ranger.conf'