summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--code/directory.py33
-rw-r--r--code/environment.py16
-rw-r--r--code/fm.py36
-rw-r--r--code/ui.py39
-rw-r--r--ranger16
5 files changed, 120 insertions, 20 deletions
diff --git a/code/directory.py b/code/directory.py
new file mode 100644
index 00000000..4cb9fd72
--- /dev/null
+++ b/code/directory.py
@@ -0,0 +1,33 @@
+
+class Directory():
+	def __init__(self, path):
+		self.path = path
+		self.files_loaded = False
+		self.scheduled = False
+		self.files = None
+		self.mtime = None
+		self.exists = True
+
+	def load_files(self):
+		import os
+		try:
+			self.files = os.listdir(self.path)
+			self.exists = True
+		except OSError:
+			self.files = []
+			self.exists = False
+		self.files_loaded = True
+
+	def __len__(self):
+		return len(self.files)
+	
+	def __getitem__(self, key):
+		return self.files[key]
+
+if __name__ == '__main__':
+	d = Directory('.')
+	d.load_files()
+	print(d.files)
+	print(d[1])
+
+	
diff --git a/code/environment.py b/code/environment.py
new file mode 100644
index 00000000..d0ff5763
--- /dev/null
+++ b/code/environment.py
@@ -0,0 +1,16 @@
+class Vector():
+	def __init__(self, x, y):
+		self.x = x
+		self.y = y
+
+class Environment():
+	# A collection of data which is relevant for more than
+	# one class.
+	def __init__(self):
+		self.path = None
+		self.directories = {}
+		self.pwd = None # current directory
+		self.cf = None # current file
+		self.keybuffer = ''
+		self.copy = None
+		self.termsize = Vector(80, 24)
diff --git a/code/fm.py b/code/fm.py
index 76316a9d..8029d915 100644
--- a/code/fm.py
+++ b/code/fm.py
@@ -1,38 +1,52 @@
-import time
 import sys
-from code import ui, debug
+import ui, debug, directory
 
 class FM():
-	def __init__(self, options):
-		self.singleton = None
+	def __init__(self, options, environment):
 		self.options = options
-		self.ui = ui.UI()
+		self.env = environment
+
+	def setup(self, path, ui):
+		self.ui = ui
+		self.enter_dir(path)
+
+	def enter_dir(self, path):
+		self.env.path = path
+		try:
+			self.pwd = self.env.directories[path]
+		except KeyError:
+			self.env.pwd = directory.Directory(path)
+			self.env.directories[path] = self.env.pwd
+
+		self.env.pwd.load_files()
+		if len(self.env.pwd) > 0: self.env.cf = self.env.pwd[0]
 
 	def run(self):
 		try:
 			while 1:
 				try:
+					self.ui.feed(self.env.directories, self.env.pwd, self.env.cf, self.env.termsize)
 					self.ui.draw()
 				except KeyboardInterrupt:
 					self.interrupt()
 				except:
-					debug.log(sys.exc_info()[1])
+					raise
 
 				try:
-					key = None
-#					key = curses.getch()
-#					curses.flushinp()
+					key = self.ui.get_next_key()
 					self.press(key)
 				except KeyboardInterrupt:
 					self.interrupt()
 		except:
+			self.ui.exit()
 			raise
-			pass
 
 	def press(self, key):
-		pass
+		if (key == ord('q')):
+			raise SystemExit()
 
 	def interrupt(self):
+		import time
 		self.buffer = ""
 		time.sleep(0.2)
 
diff --git a/code/ui.py b/code/ui.py
index 0e48a68a..7d8fd828 100644
--- a/code/ui.py
+++ b/code/ui.py
@@ -1,4 +1,41 @@
+import curses
 class UI():
+	def __init__(self, options):
+		self.scr = curses.initscr()
+		self.scr.leaveok(1)
+		curses.noecho()
+		curses.halfdelay(3)
+
+		self.options = options
+		self.directories = None
+		self.pwd = None
+		self.cf = None
+		self.termsize = None
+		self.rows = 0
+		self.cols = 0
+
+	def feed(self, directories, pwd, cf, termsize):
+		self.directories = directories
+		self.pwd = pwd
+		self.cf = cf
+		self.termsize = termsize
+		self.cols = termsize.x
+		self.rows = termsize.y
+
+	def exit(self):
+		curses.nocbreak()
+		curses.echo()
+		curses.endwin()
+
 	def draw(self):
 		import time
-		time.sleep(0.1)
+		self.scr.erase()
+		for i in range(1, len(self.pwd)):
+			self.scr.addstr(i, 0, self.pwd[i])
+		self.scr.refresh()
+
+	def get_next_key(self):
+		key = self.scr.getch()
+		curses.flushinp()
+		return key
+
diff --git a/ranger b/ranger
index 585108b8..175b9803 100644
--- a/ranger
+++ b/ranger
@@ -3,10 +3,7 @@
 
 # TODO: cd after exit
 
-from code import debug
-from code import fm
-from code import ui
-from code import options
+from code import debug, fm, ui, options, environment
 
 # TODO: find out the real name of this script and include files relative to here
 
@@ -16,14 +13,17 @@ from code import options
 
 # TODO: initialize classes
 
-# TODO: run main loop
-
 
 def main():
 	import locale
 	locale.setlocale(locale.LC_ALL, 'en_US.utf8')
 
-	fm.singleton = fm.FM(options.get())
-	fm.singleton.run()
+	path = '.'
+	opt = options.get()
+	env = environment.Environment()
+
+	my_fm = fm.FM(opt, env)
+	my_fm.setup(path, ui.UI(opt))
+	my_fm.run()
 
 if __name__ == "__main__": main()