1
2
3
4
5
6 import os
7
8 from libxyz.core.plugins import BasePlugin
9 from libxyz.core import UserData
10
11 from libxyz.exceptions import XYZRuntimeError
12
14 "Plugin where"
15
16 NAME = u"where"
17 AUTHOR = u"Max E. Kuznecov <syhpoon@syhpoon.name>"
18 VERSION = u"0.2"
19 BRIEF_DESCRIPTION = _(u"Save panels locations")
20 FULL_DESCRIPTION = _(u"When starting load previously saved locations")
21 NAMESPACE = u"misc"
22 MIN_XYZ_VERSION = 4
23 DOC = None
24 HOMEPAGE = "http://xyzcmd.syhpoon.name/"
25 EVENTS = None
26
37
38
39
41 """
42 Restore locations on startup.
43 File format is following:
44 /panel-1/path
45 /panel-2/path
46 <Number of tabs in panel-1>
47 <Active tab index in panel-1>
48 <Active tab selected name in panel-1>
49 panel-1 tab-1 path
50 panel-1 tab-1 selected
51 panel-1 tab-n path
52 panel-1 tab-n selected
53 <Number of tabs in panel-2>
54 <Active tab index in panel-2>
55 <Active tab selected name in panel-2>
56 panel-2 tab-1 path
57 panel-2 tab-1 selected
58 panel-2 tab-n path
59 panel-2 tab-n selected
60 """
61
62 chdir = self.xyz.pm.from_load(":sys:panel", "chdir")
63 new_tab = self.xyz.pm.from_load(":sys:panel", "new_tab")
64 select = self.xyz.pm.from_load(":sys:panel", "select")
65 switch = self.xyz.pm.from_load(":sys:panel", "switch_tab")
66
67 def restore_tabs(d, num, active):
68 i = 0
69
70 while i < num:
71 tab_path = d[i].rstrip()
72 tab_selected = d[i + 1].rstrip()
73
74 chdir(tab_path, active=active)
75 select(tab_selected, active=active)
76
77 if i < num - 2:
78 new_tab(active=active)
79
80 i += 2
81
82 return i
83
84
85
86 f = None
87 try:
88 f = self._ud.openfile(self._wfile, "r", "data")
89 data = [x.rstrip() for x in f.readlines()]
90 act = data[0]
91 inact = data[1]
92
93 chdir(act)
94 chdir(inact, active=False)
95
96 tabsnum = int(data[2]) * 2
97 active_tab = int(data[3])
98 selected = data[4]
99
100 data = data[5:]
101
102 restored = restore_tabs(data, tabsnum, True)
103
104 tabsnum = int(data[restored]) * 2
105 iactive_tab = int(data[restored + 1])
106 iselected = data[restored + 2]
107
108 data = data[restored + 3:]
109
110 restore_tabs(data, tabsnum, False)
111
112 switch(iactive_tab, active=False)
113 switch(active_tab)
114 select(iselected, active=False)
115 select(selected)
116 except IOError:
117 pass
118
119 if f:
120 f.close()
121
122
123
125 """
126 Save locations on shutdown
127 """
128
129 panel = self.xyz.pm.load(":sys:panel")
130
131 act = panel.cwd()
132 inact = panel.cwd(active=False)
133 tabs = panel.get_tabs()
134 inacttabs = panel.get_tabs(active=False)
135
136 f = None
137
138 try:
139 data = [act, inact]
140 data.append(str(len(tabs)))
141 data.append(str(panel.active_tab()))
142 data.append(str(panel.get_selected().name))
143
144 for tab_path, tab_selected in tabs:
145 if tab_selected is None:
146 tab_selected = os.path.sep
147
148 data.extend([tab_path, tab_selected])
149
150 data.append(str(len(inacttabs)))
151 data.append(str(panel.active_tab(active=False)))
152 data.append(str(panel.get_selected(active=False).name))
153
154 for itab_path, itab_selected in inacttabs:
155 if itab_selected is None:
156 itab_selected = os.path.sep
157
158 data.extend([itab_path, itab_selected])
159
160 f = self._ud.openfile(self._wfile, "w", "data")
161
162 f.write("\n".join(data))
163 except XYZRuntimeError, e:
164 xyzlog.info(_(u"Unable to open where data file: %s")
165 % ustring(str(e)))
166 if f:
167 f.close()
168