Show More
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: iso-8859-1 -*- |
|
1 | # -*- coding: iso-8859-1 -*- | |
2 |
|
2 | |||
3 | import curses, fcntl, signal, struct, tty, textwrap |
|
3 | import curses, fcntl, signal, struct, tty, textwrap, inspect | |
4 |
|
4 | |||
5 | import astyle, ipipe |
|
5 | import astyle, ipipe | |
6 |
|
6 | |||
@@ -13,119 +13,6 b' except NameError:' | |||||
13 | set = sets.Set |
|
13 | set = sets.Set | |
14 |
|
14 | |||
15 |
|
15 | |||
16 | _ibrowse_help = """ |
|
|||
17 | down |
|
|||
18 | Move the cursor to the next line. |
|
|||
19 |
|
||||
20 | up |
|
|||
21 | Move the cursor to the previous line. |
|
|||
22 |
|
||||
23 | pagedown |
|
|||
24 | Move the cursor down one page (minus overlap). |
|
|||
25 |
|
||||
26 | pageup |
|
|||
27 | Move the cursor up one page (minus overlap). |
|
|||
28 |
|
||||
29 | left |
|
|||
30 | Move the cursor left. |
|
|||
31 |
|
||||
32 | right |
|
|||
33 | Move the cursor right. |
|
|||
34 |
|
||||
35 | home |
|
|||
36 | Move the cursor to the first column. |
|
|||
37 |
|
||||
38 | end |
|
|||
39 | Move the cursor to the last column. |
|
|||
40 |
|
||||
41 | prevattr |
|
|||
42 | Move the cursor one attribute column to the left. |
|
|||
43 |
|
||||
44 | nextattr |
|
|||
45 | Move the cursor one attribute column to the right. |
|
|||
46 |
|
||||
47 | pick |
|
|||
48 | 'Pick' the object under the cursor (i.e. the row the cursor is on). This |
|
|||
49 | leaves the browser and returns the picked object to the caller. (In IPython |
|
|||
50 | this object will be available as the '_' variable.) |
|
|||
51 |
|
||||
52 | pickattr |
|
|||
53 | 'Pick' the attribute under the cursor (i.e. the row/column the cursor is on). |
|
|||
54 |
|
||||
55 | pickallattrs |
|
|||
56 | Pick' the complete column under the cursor (i.e. the attribute under the |
|
|||
57 | cursor) from all currently fetched objects. These attributes will be returned |
|
|||
58 | as a list. |
|
|||
59 |
|
||||
60 | tooglemark |
|
|||
61 | Mark/unmark the object under the cursor. Marked objects have a '!' after the |
|
|||
62 | row number). |
|
|||
63 |
|
||||
64 | pickmarked |
|
|||
65 | 'Pick' marked objects. Marked objects will be returned as a list. |
|
|||
66 |
|
||||
67 | pickmarkedattr |
|
|||
68 | 'Pick' the attribute under the cursor from all marked objects (This returns a |
|
|||
69 | list). |
|
|||
70 |
|
||||
71 | enterdefault |
|
|||
72 | Enter the object under the cursor. (what this mean depends on the object |
|
|||
73 | itself (i.e. how it implements the '__xiter__' method). This opens a new |
|
|||
74 | browser 'level'. |
|
|||
75 |
|
||||
76 | enter |
|
|||
77 | Enter the object under the cursor. If the object provides different enter |
|
|||
78 | modes a menu of all modes will be presented; choose one and enter it (via the |
|
|||
79 | 'enter' or 'enterdefault' command). |
|
|||
80 |
|
||||
81 | enterattr |
|
|||
82 | Enter the attribute under the cursor. |
|
|||
83 |
|
||||
84 | leave |
|
|||
85 | Leave the current browser level and go back to the previous one. |
|
|||
86 |
|
||||
87 | detail |
|
|||
88 | Show a detail view of the object under the cursor. This shows the name, type, |
|
|||
89 | doc string and value of the object attributes (and it might show more |
|
|||
90 | attributes than in the list view, depending on the object). |
|
|||
91 |
|
||||
92 | detailattr |
|
|||
93 | Show a detail view of the attribute under the cursor. |
|
|||
94 |
|
||||
95 | markrange |
|
|||
96 | Mark all objects from the last marked object before the current cursor |
|
|||
97 | position to the cursor position. |
|
|||
98 |
|
||||
99 | sortattrasc |
|
|||
100 | Sort the objects (in ascending order) using the attribute under the cursor as |
|
|||
101 | the sort key. |
|
|||
102 |
|
||||
103 | sortattrdesc |
|
|||
104 | Sort the objects (in descending order) using the attribute under the cursor as |
|
|||
105 | the sort key. |
|
|||
106 |
|
||||
107 | hideattr |
|
|||
108 | Hide the attribute under the cursor. |
|
|||
109 |
|
||||
110 | unhideattrs |
|
|||
111 | Make all attributes visible again. |
|
|||
112 |
|
||||
113 | goto |
|
|||
114 | Jump to a row. The row number can be entered at the bottom of the screen. |
|
|||
115 |
|
||||
116 | find |
|
|||
117 | Search forward for a row. At the bottom of the screen the condition can be |
|
|||
118 | entered. |
|
|||
119 |
|
||||
120 | findbackwards |
|
|||
121 | Search backward for a row. At the bottom of the screen the condition can be |
|
|||
122 | entered. |
|
|||
123 |
|
||||
124 | help |
|
|||
125 | This screen. |
|
|||
126 | """ |
|
|||
127 |
|
||||
128 |
|
||||
129 | class UnassignedKeyError(Exception): |
|
16 | class UnassignedKeyError(Exception): | |
130 | """ |
|
17 | """ | |
131 | Exception that is used for reporting unassigned keys. |
|
18 | Exception that is used for reporting unassigned keys. | |
@@ -213,13 +100,25 b' class _BrowserHelp(object):' | |||||
213 |
|
100 | |||
214 | fields = ("key", "description") |
|
101 | fields = ("key", "description") | |
215 |
|
102 | |||
216 | for (i, command) in enumerate(_ibrowse_help.strip().split("\n\n")): |
|
103 | commands = [] | |
|
104 | for name in dir(self.browser): | |||
|
105 | if name.startswith("cmd_"): | |||
|
106 | command = getattr(self.browser, name) | |||
|
107 | commands.append((inspect.getsourcelines(command)[-1], name[4:], command)) | |||
|
108 | commands.sort() | |||
|
109 | commands = [(c[1], c[2]) for c in commands] | |||
|
110 | for (i, (name, command)) in enumerate(commands): | |||
217 | if i: |
|
111 | if i: | |
218 | yield ipipe.Fields(fields, key="", description="") |
|
112 | yield ipipe.Fields(fields, key="", description="") | |
219 |
|
113 | |||
220 |
|
|
114 | description = command.__doc__ | |
|
115 | if description is None: | |||
|
116 | lines = [] | |||
|
117 | else: | |||
|
118 | lines = [l.strip() for l in description.splitlines() if l.strip()] | |||
|
119 | description = "\n".join(lines) | |||
|
120 | lines = textwrap.wrap(description, 60) | |||
221 | keys = allkeys.get(name, []) |
|
121 | keys = allkeys.get(name, []) | |
222 | lines = textwrap.wrap(description, 60) |
|
|||
223 |
|
122 | |||
224 | yield ipipe.Fields(fields, description=astyle.Text((self.style_header, name))) |
|
123 | yield ipipe.Fields(fields, description=astyle.Text((self.style_header, name))) | |
225 | for i in xrange(max(len(keys), len(lines))): |
|
124 | for i in xrange(max(len(keys), len(lines))): | |
@@ -1026,51 +925,74 b' class ibrowse(ipipe.Display):' | |||||
1026 | # don't beep again (as long as the same key is pressed) |
|
925 | # don't beep again (as long as the same key is pressed) | |
1027 | self._dobeep = False |
|
926 | self._dobeep = False | |
1028 |
|
927 | |||
1029 | def cmd_quit(self): |
|
|||
1030 | self.returnvalue = None |
|
|||
1031 | return True |
|
|||
1032 |
|
||||
1033 | def cmd_up(self): |
|
928 | def cmd_up(self): | |
|
929 | """ | |||
|
930 | Move the cursor to the previous row. | |||
|
931 | """ | |||
1034 | level = self.levels[-1] |
|
932 | level = self.levels[-1] | |
1035 | self.report("up") |
|
933 | self.report("up") | |
1036 | level.moveto(level.curx, level.cury-self.stepy) |
|
934 | level.moveto(level.curx, level.cury-self.stepy) | |
1037 |
|
935 | |||
1038 | def cmd_down(self): |
|
936 | def cmd_down(self): | |
|
937 | """ | |||
|
938 | Move the cursor to the next row. | |||
|
939 | """ | |||
1039 | level = self.levels[-1] |
|
940 | level = self.levels[-1] | |
1040 | self.report("down") |
|
941 | self.report("down") | |
1041 | level.moveto(level.curx, level.cury+self.stepy) |
|
942 | level.moveto(level.curx, level.cury+self.stepy) | |
1042 |
|
943 | |||
1043 | def cmd_pageup(self): |
|
944 | def cmd_pageup(self): | |
|
945 | """ | |||
|
946 | Move the cursor up one page. | |||
|
947 | """ | |||
1044 | level = self.levels[-1] |
|
948 | level = self.levels[-1] | |
1045 | self.report("page up") |
|
949 | self.report("page up") | |
1046 | level.moveto(level.curx, level.cury-level.mainsizey+self.pageoverlapy) |
|
950 | level.moveto(level.curx, level.cury-level.mainsizey+self.pageoverlapy) | |
1047 |
|
951 | |||
1048 | def cmd_pagedown(self): |
|
952 | def cmd_pagedown(self): | |
|
953 | """ | |||
|
954 | Move the cursor down one page. | |||
|
955 | """ | |||
1049 | level = self.levels[-1] |
|
956 | level = self.levels[-1] | |
1050 | self.report("page down") |
|
957 | self.report("page down") | |
1051 | level.moveto(level.curx, level.cury+level.mainsizey-self.pageoverlapy) |
|
958 | level.moveto(level.curx, level.cury+level.mainsizey-self.pageoverlapy) | |
1052 |
|
959 | |||
1053 | def cmd_left(self): |
|
960 | def cmd_left(self): | |
|
961 | """ | |||
|
962 | Move the cursor left. | |||
|
963 | """ | |||
1054 | level = self.levels[-1] |
|
964 | level = self.levels[-1] | |
1055 | self.report("left") |
|
965 | self.report("left") | |
1056 | level.moveto(level.curx-self.stepx, level.cury) |
|
966 | level.moveto(level.curx-self.stepx, level.cury) | |
1057 |
|
967 | |||
1058 | def cmd_right(self): |
|
968 | def cmd_right(self): | |
|
969 | """ | |||
|
970 | Move the cursor right. | |||
|
971 | """ | |||
1059 | level = self.levels[-1] |
|
972 | level = self.levels[-1] | |
1060 | self.report("right") |
|
973 | self.report("right") | |
1061 | level.moveto(level.curx+self.stepx, level.cury) |
|
974 | level.moveto(level.curx+self.stepx, level.cury) | |
1062 |
|
975 | |||
1063 | def cmd_home(self): |
|
976 | def cmd_home(self): | |
|
977 | """ | |||
|
978 | Move the cursor to the first column. | |||
|
979 | """ | |||
1064 | level = self.levels[-1] |
|
980 | level = self.levels[-1] | |
1065 | self.report("home") |
|
981 | self.report("home") | |
1066 | level.moveto(0, level.cury) |
|
982 | level.moveto(0, level.cury) | |
1067 |
|
983 | |||
1068 | def cmd_end(self): |
|
984 | def cmd_end(self): | |
|
985 | """ | |||
|
986 | Move the cursor to the last column. | |||
|
987 | """ | |||
1069 | level = self.levels[-1] |
|
988 | level = self.levels[-1] | |
1070 | self.report("end") |
|
989 | self.report("end") | |
1071 | level.moveto(level.datasizex+level.mainsizey-self.pageoverlapx, level.cury) |
|
990 | level.moveto(level.datasizex+level.mainsizey-self.pageoverlapx, level.cury) | |
1072 |
|
991 | |||
1073 | def cmd_prevattr(self): |
|
992 | def cmd_prevattr(self): | |
|
993 | """ | |||
|
994 | Move the cursor one attribute column to the left. | |||
|
995 | """ | |||
1074 | level = self.levels[-1] |
|
996 | level = self.levels[-1] | |
1075 | if level.displayattr[0] is None or level.displayattr[0] == 0: |
|
997 | if level.displayattr[0] is None or level.displayattr[0] == 0: | |
1076 | self.beep() |
|
998 | self.beep() | |
@@ -1084,6 +1006,9 b' class ibrowse(ipipe.Display):' | |||||
1084 | level.moveto(pos, level.cury) |
|
1006 | level.moveto(pos, level.cury) | |
1085 |
|
1007 | |||
1086 | def cmd_nextattr(self): |
|
1008 | def cmd_nextattr(self): | |
|
1009 | """ | |||
|
1010 | Move the cursor one attribute column to the right. | |||
|
1011 | """ | |||
1087 | level = self.levels[-1] |
|
1012 | level = self.levels[-1] | |
1088 | if level.displayattr[0] is None or level.displayattr[0] == len(level.displayattrs)-1: |
|
1013 | if level.displayattr[0] is None or level.displayattr[0] == len(level.displayattrs)-1: | |
1089 | self.beep() |
|
1014 | self.beep() | |
@@ -1097,11 +1022,20 b' class ibrowse(ipipe.Display):' | |||||
1097 | level.moveto(pos, level.cury) |
|
1022 | level.moveto(pos, level.cury) | |
1098 |
|
1023 | |||
1099 | def cmd_pick(self): |
|
1024 | def cmd_pick(self): | |
|
1025 | """ | |||
|
1026 | 'Pick' the object under the cursor (i.e. the row the cursor is on). | |||
|
1027 | This leaves the browser and returns the picked object to the caller. | |||
|
1028 | (In IPython this object will be available as the '_' variable.) | |||
|
1029 | """ | |||
1100 | level = self.levels[-1] |
|
1030 | level = self.levels[-1] | |
1101 | self.returnvalue = level.items[level.cury].item |
|
1031 | self.returnvalue = level.items[level.cury].item | |
1102 | return True |
|
1032 | return True | |
1103 |
|
1033 | |||
1104 | def cmd_pickattr(self): |
|
1034 | def cmd_pickattr(self): | |
|
1035 | """ | |||
|
1036 | 'Pick' the attribute under the cursor (i.e. the row/column the | |||
|
1037 | cursor is on). | |||
|
1038 | """ | |||
1105 | level = self.levels[-1] |
|
1039 | level = self.levels[-1] | |
1106 | attrname = level.displayattr[1] |
|
1040 | attrname = level.displayattr[1] | |
1107 | if attrname is ipipe.noitem: |
|
1041 | if attrname is ipipe.noitem: | |
@@ -1117,6 +1051,11 b' class ibrowse(ipipe.Display):' | |||||
1117 | return True |
|
1051 | return True | |
1118 |
|
1052 | |||
1119 | def cmd_pickallattrs(self): |
|
1053 | def cmd_pickallattrs(self): | |
|
1054 | """ | |||
|
1055 | Pick' the complete column under the cursor (i.e. the attribute under | |||
|
1056 | the cursor) from all currently fetched objects. These attributes | |||
|
1057 | will be returned as a list. | |||
|
1058 | """ | |||
1120 | level = self.levels[-1] |
|
1059 | level = self.levels[-1] | |
1121 | attrname = level.displayattr[1] |
|
1060 | attrname = level.displayattr[1] | |
1122 | if attrname is ipipe.noitem: |
|
1061 | if attrname is ipipe.noitem: | |
@@ -1132,11 +1071,19 b' class ibrowse(ipipe.Display):' | |||||
1132 | return True |
|
1071 | return True | |
1133 |
|
1072 | |||
1134 | def cmd_pickmarked(self): |
|
1073 | def cmd_pickmarked(self): | |
|
1074 | """ | |||
|
1075 | 'Pick' marked objects. Marked objects will be returned as a list. | |||
|
1076 | """ | |||
1135 | level = self.levels[-1] |
|
1077 | level = self.levels[-1] | |
1136 | self.returnvalue = [cache.item for cache in level.items if cache.marked] |
|
1078 | self.returnvalue = [cache.item for cache in level.items if cache.marked] | |
1137 | return True |
|
1079 | return True | |
1138 |
|
1080 | |||
1139 | def cmd_pickmarkedattr(self): |
|
1081 | def cmd_pickmarkedattr(self): | |
|
1082 | """ | |||
|
1083 | 'Pick' the attribute under the cursor from all marked objects | |||
|
1084 | (This returns a list). | |||
|
1085 | """ | |||
|
1086 | ||||
1140 | level = self.levels[-1] |
|
1087 | level = self.levels[-1] | |
1141 | attrname = level.displayattr[1] |
|
1088 | attrname = level.displayattr[1] | |
1142 | if attrname is ipipe.noitem: |
|
1089 | if attrname is ipipe.noitem: | |
@@ -1153,6 +1100,10 b' class ibrowse(ipipe.Display):' | |||||
1153 | return True |
|
1100 | return True | |
1154 |
|
1101 | |||
1155 | def cmd_markrange(self): |
|
1102 | def cmd_markrange(self): | |
|
1103 | """ | |||
|
1104 | Mark all objects from the last marked object before the current cursor | |||
|
1105 | position to the cursor position. | |||
|
1106 | """ | |||
1156 | level = self.levels[-1] |
|
1107 | level = self.levels[-1] | |
1157 | self.report("markrange") |
|
1108 | self.report("markrange") | |
1158 | start = None |
|
1109 | start = None | |
@@ -1172,6 +1123,11 b' class ibrowse(ipipe.Display):' | |||||
1172 | level.marked += 1 |
|
1123 | level.marked += 1 | |
1173 |
|
1124 | |||
1174 | def cmd_enterdefault(self): |
|
1125 | def cmd_enterdefault(self): | |
|
1126 | """ | |||
|
1127 | Enter the object under the cursor. (what this mean depends on the object | |||
|
1128 | itself (i.e. how it implements the '__xiter__' method). This opens a new | |||
|
1129 | browser 'level'. | |||
|
1130 | """ | |||
1175 | level = self.levels[-1] |
|
1131 | level = self.levels[-1] | |
1176 | try: |
|
1132 | try: | |
1177 | item = level.items[level.cury].item |
|
1133 | item = level.items[level.cury].item | |
@@ -1183,6 +1139,9 b' class ibrowse(ipipe.Display):' | |||||
1183 | self.enter(item, "default") |
|
1139 | self.enter(item, "default") | |
1184 |
|
1140 | |||
1185 | def cmd_leave(self): |
|
1141 | def cmd_leave(self): | |
|
1142 | """ | |||
|
1143 | Leave the current browser level and go back to the previous one. | |||
|
1144 | """ | |||
1186 | self.report("leave") |
|
1145 | self.report("leave") | |
1187 | if len(self.levels) > 1: |
|
1146 | if len(self.levels) > 1: | |
1188 | self._calcheaderlines(len(self.levels)-1) |
|
1147 | self._calcheaderlines(len(self.levels)-1) | |
@@ -1192,6 +1151,11 b' class ibrowse(ipipe.Display):' | |||||
1192 | curses.beep() |
|
1151 | curses.beep() | |
1193 |
|
1152 | |||
1194 | def cmd_enter(self): |
|
1153 | def cmd_enter(self): | |
|
1154 | """ | |||
|
1155 | Enter the object under the cursor. If the object provides different | |||
|
1156 | enter modes a menu of all modes will be presented; choose one and enter | |||
|
1157 | it (via the 'enter' or 'enterdefault' command). | |||
|
1158 | """ | |||
1195 | level = self.levels[-1] |
|
1159 | level = self.levels[-1] | |
1196 | try: |
|
1160 | try: | |
1197 | item = level.items[level.cury].item |
|
1161 | item = level.items[level.cury].item | |
@@ -1203,6 +1167,9 b' class ibrowse(ipipe.Display):' | |||||
1203 | self.enter(item, None) |
|
1167 | self.enter(item, None) | |
1204 |
|
1168 | |||
1205 | def cmd_enterattr(self): |
|
1169 | def cmd_enterattr(self): | |
|
1170 | """ | |||
|
1171 | Enter the attribute under the cursor. | |||
|
1172 | """ | |||
1206 | level = self.levels[-1] |
|
1173 | level = self.levels[-1] | |
1207 | attrname = level.displayattr[1] |
|
1174 | attrname = level.displayattr[1] | |
1208 | if attrname is ipipe.noitem: |
|
1175 | if attrname is ipipe.noitem: | |
@@ -1223,6 +1190,12 b' class ibrowse(ipipe.Display):' | |||||
1223 | self.enter(attr, None) |
|
1190 | self.enter(attr, None) | |
1224 |
|
1191 | |||
1225 | def cmd_detail(self): |
|
1192 | def cmd_detail(self): | |
|
1193 | """ | |||
|
1194 | Show a detail view of the object under the cursor. This shows the | |||
|
1195 | name, type, doc string and value of the object attributes (and it | |||
|
1196 | might show more attributes than in the list view, depending on | |||
|
1197 | the object). | |||
|
1198 | """ | |||
1226 | level = self.levels[-1] |
|
1199 | level = self.levels[-1] | |
1227 | try: |
|
1200 | try: | |
1228 | item = level.items[level.cury].item |
|
1201 | item = level.items[level.cury].item | |
@@ -1234,6 +1207,9 b' class ibrowse(ipipe.Display):' | |||||
1234 | self.enter(item, "detail") |
|
1207 | self.enter(item, "detail") | |
1235 |
|
1208 | |||
1236 | def cmd_detailattr(self): |
|
1209 | def cmd_detailattr(self): | |
|
1210 | """ | |||
|
1211 | Show a detail view of the attribute under the cursor. | |||
|
1212 | """ | |||
1237 | level = self.levels[-1] |
|
1213 | level = self.levels[-1] | |
1238 | attrname = level.displayattr[1] |
|
1214 | attrname = level.displayattr[1] | |
1239 | if attrname is ipipe.noitem: |
|
1215 | if attrname is ipipe.noitem: | |
@@ -1254,6 +1230,10 b' class ibrowse(ipipe.Display):' | |||||
1254 | self.enter(attr, "detail") |
|
1230 | self.enter(attr, "detail") | |
1255 |
|
1231 | |||
1256 | def cmd_tooglemark(self): |
|
1232 | def cmd_tooglemark(self): | |
|
1233 | """ | |||
|
1234 | Mark/unmark the object under the cursor. Marked objects have a '!' | |||
|
1235 | after the row number). | |||
|
1236 | """ | |||
1257 | level = self.levels[-1] |
|
1237 | level = self.levels[-1] | |
1258 | self.report("toggle mark") |
|
1238 | self.report("toggle mark") | |
1259 | try: |
|
1239 | try: | |
@@ -1269,6 +1249,10 b' class ibrowse(ipipe.Display):' | |||||
1269 | level.marked += 1 |
|
1249 | level.marked += 1 | |
1270 |
|
1250 | |||
1271 | def cmd_sortattrasc(self): |
|
1251 | def cmd_sortattrasc(self): | |
|
1252 | """ | |||
|
1253 | Sort the objects (in ascending order) using the attribute under | |||
|
1254 | the cursor as the sort key. | |||
|
1255 | """ | |||
1272 | level = self.levels[-1] |
|
1256 | level = self.levels[-1] | |
1273 | attrname = level.displayattr[1] |
|
1257 | attrname = level.displayattr[1] | |
1274 | if attrname is ipipe.noitem: |
|
1258 | if attrname is ipipe.noitem: | |
@@ -1286,6 +1270,10 b' class ibrowse(ipipe.Display):' | |||||
1286 | level.sort(key) |
|
1270 | level.sort(key) | |
1287 |
|
1271 | |||
1288 | def cmd_sortattrdesc(self): |
|
1272 | def cmd_sortattrdesc(self): | |
|
1273 | """ | |||
|
1274 | Sort the objects (in descending order) using the attribute under | |||
|
1275 | the cursor as the sort key. | |||
|
1276 | """ | |||
1289 | level = self.levels[-1] |
|
1277 | level = self.levels[-1] | |
1290 | attrname = level.displayattr[1] |
|
1278 | attrname = level.displayattr[1] | |
1291 | if attrname is ipipe.noitem: |
|
1279 | if attrname is ipipe.noitem: | |
@@ -1302,18 +1290,52 b' class ibrowse(ipipe.Display):' | |||||
1302 | return None |
|
1290 | return None | |
1303 | level.sort(key, reverse=True) |
|
1291 | level.sort(key, reverse=True) | |
1304 |
|
1292 | |||
|
1293 | def cmd_hideattr(self): | |||
|
1294 | """ | |||
|
1295 | Hide the attribute under the cursor. | |||
|
1296 | """ | |||
|
1297 | level = self.levels[-1] | |||
|
1298 | if level.displayattr[0] is None: | |||
|
1299 | self.beep() | |||
|
1300 | else: | |||
|
1301 | self.report("hideattr") | |||
|
1302 | level.hiddenattrs.add(level.displayattr[1]) | |||
|
1303 | level.moveto(level.curx, level.cury, refresh=True) | |||
|
1304 | ||||
|
1305 | def cmd_unhideattrs(self): | |||
|
1306 | """ | |||
|
1307 | Make all attributes visible again. | |||
|
1308 | """ | |||
|
1309 | level = self.levels[-1] | |||
|
1310 | self.report("unhideattrs") | |||
|
1311 | level.hiddenattrs.clear() | |||
|
1312 | level.moveto(level.curx, level.cury, refresh=True) | |||
|
1313 | ||||
1305 | def cmd_goto(self): |
|
1314 | def cmd_goto(self): | |
|
1315 | """ | |||
|
1316 | Jump to a row. The row number can be entered at the | |||
|
1317 | bottom of the screen. | |||
|
1318 | """ | |||
1306 | self.startkeyboardinput("goto") |
|
1319 | self.startkeyboardinput("goto") | |
1307 |
|
1320 | |||
1308 | def cmd_find(self): |
|
1321 | def cmd_find(self): | |
|
1322 | """ | |||
|
1323 | Search forward for a row. The search condition can be entered at the | |||
|
1324 | bottom of the screen. | |||
|
1325 | """ | |||
1309 | self.startkeyboardinput("find") |
|
1326 | self.startkeyboardinput("find") | |
1310 |
|
1327 | |||
1311 | def cmd_findbackwards(self): |
|
1328 | def cmd_findbackwards(self): | |
|
1329 | """ | |||
|
1330 | Search backward for a row. The search condition can be entered at the | |||
|
1331 | bottom of the screen. | |||
|
1332 | """ | |||
1312 | self.startkeyboardinput("findbackwards") |
|
1333 | self.startkeyboardinput("findbackwards") | |
1313 |
|
1334 | |||
1314 | def cmd_help(self): |
|
1335 | def cmd_help(self): | |
1315 | """ |
|
1336 | """ | |
1316 | The help command |
|
1337 | Opens the help screen as a new browser level, describing keyboard | |
|
1338 | shortcuts. | |||
1317 | """ |
|
1339 | """ | |
1318 | for level in self.levels: |
|
1340 | for level in self.levels: | |
1319 | if isinstance(level.input, _BrowserHelp): |
|
1341 | if isinstance(level.input, _BrowserHelp): | |
@@ -1323,24 +1345,16 b' class ibrowse(ipipe.Display):' | |||||
1323 |
|
1345 | |||
1324 | self.enter(_BrowserHelp(self), "default") |
|
1346 | self.enter(_BrowserHelp(self), "default") | |
1325 |
|
1347 | |||
|
1348 | def cmd_quit(self): | |||
|
1349 | """ | |||
|
1350 | Quit the browser and return to the IPython prompt. | |||
|
1351 | """ | |||
|
1352 | self.returnvalue = None | |||
|
1353 | return True | |||
|
1354 | ||||
1326 | def sigwinchhandler(self, signal, frame): |
|
1355 | def sigwinchhandler(self, signal, frame): | |
1327 | self.resized = True |
|
1356 | self.resized = True | |
1328 |
|
1357 | |||
1329 | def cmd_hideattr(self): |
|
|||
1330 | level = self.levels[-1] |
|
|||
1331 | if level.displayattr[0] is None: |
|
|||
1332 | self.beep() |
|
|||
1333 | else: |
|
|||
1334 | self.report("hideattr") |
|
|||
1335 | level.hiddenattrs.add(level.displayattr[1]) |
|
|||
1336 | level.moveto(level.curx, level.cury, refresh=True) |
|
|||
1337 |
|
||||
1338 | def cmd_unhideattrs(self): |
|
|||
1339 | level = self.levels[-1] |
|
|||
1340 | self.report("unhideattrs") |
|
|||
1341 | level.hiddenattrs.clear() |
|
|||
1342 | level.moveto(level.curx, level.cury, refresh=True) |
|
|||
1343 |
|
||||
1344 | def _dodisplay(self, scr): |
|
1358 | def _dodisplay(self, scr): | |
1345 | """ |
|
1359 | """ | |
1346 | This method is the workhorse of the browser. It handles screen |
|
1360 | This method is the workhorse of the browser. It handles screen |
@@ -1,3 +1,8 b'' | |||||
|
1 | 2006-06-23 Walter Doerwald <walter@livinglogic.de> | |||
|
2 | ||||
|
3 | * IPython/Extensions/ibrowse.py: Put the documentation of the keyboard | |||
|
4 | commands into the methods implementing them. | |||
|
5 | ||||
1 | 2006-06-22 Fernando Perez <Fernando.Perez@colorado.edu> |
|
6 | 2006-06-22 Fernando Perez <Fernando.Perez@colorado.edu> | |
2 |
|
7 | |||
3 | * ipython.el (ipython-indentation-hook): cleanup patch, submitted |
|
8 | * ipython.el (ipython-indentation-hook): cleanup patch, submitted |
General Comments 0
You need to be logged in to leave comments.
Login now