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
|
import os
from ranger.directory import Directory, NoDirectoryGiven
class Environment():
# A collection of data which is relevant for more than
# one class.
def __init__(self, opt):
self.opt = opt
self.path = None
self.pathway = ()
self.directories = {}
self.pwd = None # current directory
self.cf = None # current file
self.keybuffer = ()
self.copy = None
self.termsize = (24, 80)
def key_append(self, key):
self.keybuffer += (key, )
def key_clear(self):
self.keybuffer = ()
def at_level(self, level):
if level <= 0:
try:
return self.pathway[level - 1]
except IndexError:
return None
else:
try:
return self.directories[self.cf.path]
except AttributeError:
return None
except KeyError:
return self.cf
def get_directory(self, path):
import os
path = os.path.abspath(path)
try:
return self.directories[path]
except KeyError:
self.directories[path] = Directory(path)
return self.directories[path]
def assign_correct_cursor_positions(self):
# Assign correct cursor positions for subdirectories
from ranger.debug import log
last_path = None
for path in reversed(self.pathway):
if last_path is None:
last_path = path
continue
path.move_pointer_to_file_path(last_path)
last_path = path
def enter_dir(self, path):
from os.path import normpath, join, expanduser
# get the absolute path
path = normpath(join(self.path, expanduser(path)))
try:
new_pwd = self.get_directory(path)
except NoDirectoryGiven:
return False
self.path = path
self.pwd = new_pwd
self.pwd.load_content_if_outdated()
# build the pathway, a tuple of directory objects which lie
# on the path to the current directory.
if path == '/':
self.pathway = (self.get_directory('/'), )
else:
pathway = []
currentpath = '/'
for dir in path.split('/'):
currentpath = os.path.join(currentpath, dir)
pathway.append(self.get_directory(currentpath))
self.pathway = tuple(pathway)
self.assign_correct_cursor_positions()
# set the current file.
self.pwd.directories_first = self.opt['directories_first']
self.pwd.sort_if_outdated()
self.cf = self.pwd.pointed_file
from ranger.debug import log
log(self.cf)
return True
|