summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rwxr-xr-xranger.py4
-rw-r--r--ranger/conf/colorschemes/snow.py32
-rw-r--r--ranger/conf/keys.py1
-rw-r--r--ranger/fm.py12
-rw-r--r--ranger/fsobject.py21
-rw-r--r--ranger/gui/colorscheme.py2
-rw-r--r--ranger/gui/wdisplay.py14
-rw-r--r--ranger/gui/wtitlebar.py25
-rw-r--r--test/tc_directory.py35
9 files changed, 107 insertions, 39 deletions
diff --git a/ranger.py b/ranger.py
index d4c4a961..8a2d5967 100755
--- a/ranger.py
+++ b/ranger.py
@@ -21,7 +21,7 @@ from ranger.environment import Environment
 from ranger.command import CommandList
 from ranger.conf import keys, options
 from ranger.gui.defaultui import DefaultUI as UI
-from ranger.conf.colorschemes.snow import Snow as ColorScheme
+from ranger.conf.colorschemes.snow import MyColorScheme
 
 import sys, os, locale
 
@@ -46,7 +46,7 @@ try:
 
 	env = Environment(opt)
 	commandlist = CommandList()
-	colorscheme = ColorScheme()
+	colorscheme = MyColorScheme()
 	keys.initialize_commands(commandlist)
 
 	my_ui = UI(env, commandlist, colorscheme)
diff --git a/ranger/conf/colorschemes/snow.py b/ranger/conf/colorschemes/snow.py
index 40909c9d..ee2ecb4a 100644
--- a/ranger/conf/colorschemes/snow.py
+++ b/ranger/conf/colorschemes/snow.py
@@ -1,14 +1,14 @@
 from ranger.gui.colorscheme import ColorScheme
 from ranger.gui.color import *
 
-class Snow(ColorScheme):
+class MyColorScheme(ColorScheme):
 	def use(self, context):
-		if context.reset:
-			return default_colors
+		fg, bg, attr = default_colors
 
-		if context.wdisplay:
-			fg, bg = default, default
+		if context.reset:
+			pass
 
+		elif context.in_display:
 			if context.selected:
 				attr = reverse
 			else:
@@ -19,20 +19,28 @@ class Snow(ColorScheme):
 
 			if context.directory:
 				fg = blue
-
-			if context.executable:
+			elif context.executable:
 				fg = green
 
 			if context.media:
-				fg = pink
+				fg = magenta
 
 			if context.link:
 				fg = cyan
 
 			if context.maindisplay and context.selected:
-				attr = attr | bold
-				fg = yellow
+				attr |= bold
 
-			return fg, bg, attr
+		elif context.in_titlebar:
+			attr |= bold
+
+			if context.hostname:
+				fg = green
+
+			elif context.directory:
+				fg = blue
+
+			elif context.link:
+				fg = cyan
 
-		return default_colors
+		return fg, bg, attr
diff --git a/ranger/conf/keys.py b/ranger/conf/keys.py
index 7c08ae4f..54e2ba0d 100644
--- a/ranger/conf/keys.py
+++ b/ranger/conf/keys.py
@@ -31,6 +31,7 @@ def initialize_commands(cl):
 	cl.bind(move_pages( -0.5 ),     'K')
 	cl.bind(move( absolute = 0 ),   'gg')
 	cl.bind(move( absolute = -1 ),  'G')
+	cl.bind(FM.edit_file,           'E')
 
 	cl.bind(toggle_option('show_hidden'), 'th')
 
diff --git a/ranger/fm.py b/ranger/fm.py
index c30fb92c..b8df319c 100644
--- a/ranger/fm.py
+++ b/ranger/fm.py
@@ -47,6 +47,18 @@ class FM():
 		from subprocess import Popen
 		Popen(('mplayer', '-fs', path), stdout = null, stderr = null)
 
+	def edit_file(self):
+		from subprocess import Popen
+		import os
+		if self.env.cf is None: return
+
+		self.ui.exit()
+
+		p = Popen(('vim', self.env.cf.path))
+		os.waitpid(p.pid, 0)
+
+		self.ui.initialize()
+
 	def move_pointer(self, relative = 0, absolute = None):
 		self.env.cf = self.env.pwd.move_pointer(relative, absolute)
 
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])
diff --git a/ranger/gui/colorscheme.py b/ranger/gui/colorscheme.py
index ff3f9243..e69e9d7e 100644
--- a/ranger/gui/colorscheme.py
+++ b/ranger/gui/colorscheme.py
@@ -1,4 +1,4 @@
-CONTEXT_KEYS = ['reset', 'wdisplay', 'wstatusbar', 'wtitlebar', 'wconsole', 'directory', 'file', 'maindisplay', 'executable', 'media', 'link', 'broken', 'selected', 'empty']
+CONTEXT_KEYS = ['reset', 'in_display', 'in_statusbar', 'in_titlebar', 'in_console', 'directory', 'file', 'maindisplay', 'executable', 'media', 'link', 'broken', 'selected', 'empty', 'currentfile', 'hostname']
 
 class ColorSchemeContext():
 	pass
diff --git a/ranger/gui/wdisplay.py b/ranger/gui/wdisplay.py
index f021279b..00f73a93 100644
--- a/ranger/gui/wdisplay.py
+++ b/ranger/gui/wdisplay.py
@@ -46,13 +46,14 @@ class WDisplay(SuperClass):
 	def draw_directory(self):
 		from ranger.directory import Directory
 		import curses
+		import stat
 
 		self.target.show_hidden = self.show_hidden
 		self.target.load_content_if_outdated()
 		self.target.directories_first = self.directories_first
 		self.target.sort_if_outdated()
 
-		base_color = ['wdisplay']
+		base_color = ['in_display']
 
 		if self.main_display:
 			base_color.append('maindisplay')
@@ -73,10 +74,12 @@ class WDisplay(SuperClass):
 
 		selected_i = self.target.pointed_index
 		for line in range(self.hei):
-			# last file reached?
 			i = line + self.scroll_begin
-			try: drawed = self.target[i]
-			except IndexError: break
+
+			try:
+				drawed = self.target[i]
+			except IndexError:
+				break
 
 			this_color = base_color[:]
 
@@ -88,6 +91,9 @@ class WDisplay(SuperClass):
 			else:
 				this_color.append('file')
 
+			if drawed.stat is not None and drawed.stat.st_mode & stat.S_IXUSR:
+				this_color.append('executable')
+
 			if drawed.islink:
 				this_color.append('link')
 
diff --git a/ranger/gui/wtitlebar.py b/ranger/gui/wtitlebar.py
index 2ac8ae65..b95311dd 100644
--- a/ranger/gui/wtitlebar.py
+++ b/ranger/gui/wtitlebar.py
@@ -1,12 +1,33 @@
-import curses
+import curses, socket
 from ranger.gui.widget import Widget as SuperClass
 
+
 class WTitleBar(SuperClass):
 	def feed_env(self, env):
 		self.pathway = env.pathway
+		self.cf = env.cf
 
 	def draw(self):
 		self.win.move(self.y, self.x)
+
+		try:
+			self.color('in_titlebar', 'hostname')
+			self.win.addnstr(socket.gethostname(), self.wid)
+		except:
+			pass
+
 		for path in self.pathway:
 			currentx = self.win.getyx()[1]
-			self.win.addnstr(path.basename + ' / ', (self.wid - currentx))
+
+			if path.islink:
+				self.color('in_titlebar', 'link')
+			else:
+				self.color('in_titlebar', 'directory')
+
+			self.win.addnstr(path.basename + '/', max(self.wid - currentx, 0))
+		if self.cf is not None:
+			currentx = self.win.getyx()[1]
+			self.color('in_titlebar', 'file')
+			self.win.addnstr(self.cf.basename, max(self.wid - currentx, 0))
+		self.color_reset()
+
diff --git a/test/tc_directory.py b/test/tc_directory.py
index 275e3129..c2129a29 100644
--- a/test/tc_directory.py
+++ b/test/tc_directory.py
@@ -66,23 +66,24 @@ class Test1(unittest.TestCase):
 		self.assertRaises(fsobject.NotLoadedYet, len, dir)
 		self.assertRaises(fsobject.NotLoadedYet, dir.__getitem__, 0)
 
-	def test_modify_frozen_clone(self):
-		dir = Directory(TESTDIR)
-		clone = dir.frozen_clone()
-
-		# assert that their attributes are equal, except for frozen, which
-		# should be true for the clone.
-		self.assertTrue(clone.frozen)
-		clone.frozen = False
-		self.assertEqual(dir.__dict__, clone.__dict__)
-		clone.frozen = True
-
-		# check for inequality after loading filenames with one object
-		self.assertEqual(dir.filenames, clone.filenames)
-		dir.load_content()
-		self.assertNotEqual(dir.filenames, clone.filenames)
-
-		self.assertRaises(fsobject.FrozenException, clone.load_content)
+	# This test is obsolete!
+#	def test_modify_frozen_clone(self):
+#		dir = Directory(TESTDIR)
+#		clone = dir.frozen_clone()
+#
+#		# assert that their attributes are equal, except for frozen, which
+#		# should be true for the clone.
+#		self.assertTrue(clone.frozen)
+#		clone.frozen = False
+#		self.assertEqual(dir.__dict__, clone.__dict__)
+#		clone.frozen = True
+#
+#		# check for inequality after loading filenames with one object
+#		self.assertEqual(dir.filenames, clone.filenames)
+#		dir.load_content()
+#		self.assertNotEqual(dir.filenames, clone.filenames)
+#
+#		self.assertRaises(fsobject.FrozenException, clone.load_content)
 
 	def test_load_if_outdated(self):
 		import os
+0100 committer hut <hut@lavabit.com> 2010-01-01 22:34:02 +0100 readme: updated' href='/akspecs/ranger/commit/README?h=v1.5.0&id=36e4e71ee5643fc0b2c501956086434389ec5384'>36e4e71e ^
f6ae504c ^
4ea0f69a ^
36e4e71e ^

4ea0f69a ^

36e4e71e ^






4ea0f69a ^

306c76d8 ^






b6aff4c3 ^

306c76d8 ^
4ea0f69a ^

45cf5174 ^












1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137