##// END OF EJS Templates
Give the ibrowse cursor row a blue background....
walter.doerwald -
Show More
@@ -1,1663 +1,1663 b''
1 # -*- coding: iso-8859-1 -*-
1 # -*- coding: iso-8859-1 -*-
2
2
3 import curses, fcntl, signal, struct, tty, textwrap, inspect
3 import curses, fcntl, signal, struct, tty, textwrap, inspect
4
4
5 import astyle, ipipe
5 import astyle, ipipe
6
6
7
7
8 # Python 2.3 compatibility
8 # Python 2.3 compatibility
9 try:
9 try:
10 set
10 set
11 except NameError:
11 except NameError:
12 import sets
12 import sets
13 set = sets.Set
13 set = sets.Set
14
14
15
15
16 class UnassignedKeyError(Exception):
16 class UnassignedKeyError(Exception):
17 """
17 """
18 Exception that is used for reporting unassigned keys.
18 Exception that is used for reporting unassigned keys.
19 """
19 """
20
20
21
21
22 class UnknownCommandError(Exception):
22 class UnknownCommandError(Exception):
23 """
23 """
24 Exception that is used for reporting unknown command (this should never
24 Exception that is used for reporting unknown command (this should never
25 happen).
25 happen).
26 """
26 """
27
27
28
28
29 class CommandError(Exception):
29 class CommandError(Exception):
30 """
30 """
31 Exception that is used for reporting that a command can't be executed.
31 Exception that is used for reporting that a command can't be executed.
32 """
32 """
33
33
34
34
35 class Keymap(dict):
35 class Keymap(dict):
36 """
36 """
37 Stores mapping of keys to commands.
37 Stores mapping of keys to commands.
38 """
38 """
39 def __init__(self):
39 def __init__(self):
40 self._keymap = {}
40 self._keymap = {}
41
41
42 def __setitem__(self, key, command):
42 def __setitem__(self, key, command):
43 if isinstance(key, str):
43 if isinstance(key, str):
44 for c in key:
44 for c in key:
45 dict.__setitem__(self, ord(c), command)
45 dict.__setitem__(self, ord(c), command)
46 else:
46 else:
47 dict.__setitem__(self, key, command)
47 dict.__setitem__(self, key, command)
48
48
49 def __getitem__(self, key):
49 def __getitem__(self, key):
50 if isinstance(key, str):
50 if isinstance(key, str):
51 key = ord(key)
51 key = ord(key)
52 return dict.__getitem__(self, key)
52 return dict.__getitem__(self, key)
53
53
54 def __detitem__(self, key):
54 def __detitem__(self, key):
55 if isinstance(key, str):
55 if isinstance(key, str):
56 key = ord(key)
56 key = ord(key)
57 dict.__detitem__(self, key)
57 dict.__detitem__(self, key)
58
58
59 def register(self, command, *keys):
59 def register(self, command, *keys):
60 for key in keys:
60 for key in keys:
61 self[key] = command
61 self[key] = command
62
62
63 def get(self, key, default=None):
63 def get(self, key, default=None):
64 if isinstance(key, str):
64 if isinstance(key, str):
65 key = ord(key)
65 key = ord(key)
66 return dict.get(self, key, default)
66 return dict.get(self, key, default)
67
67
68 def findkey(self, command, default=ipipe.noitem):
68 def findkey(self, command, default=ipipe.noitem):
69 for (key, commandcandidate) in self.iteritems():
69 for (key, commandcandidate) in self.iteritems():
70 if commandcandidate == command:
70 if commandcandidate == command:
71 return key
71 return key
72 if default is ipipe.noitem:
72 if default is ipipe.noitem:
73 raise KeyError(command)
73 raise KeyError(command)
74 return default
74 return default
75
75
76
76
77 class _BrowserCachedItem(object):
77 class _BrowserCachedItem(object):
78 # This is used internally by ``ibrowse`` to store a item together with its
78 # This is used internally by ``ibrowse`` to store a item together with its
79 # marked status.
79 # marked status.
80 __slots__ = ("item", "marked")
80 __slots__ = ("item", "marked")
81
81
82 def __init__(self, item):
82 def __init__(self, item):
83 self.item = item
83 self.item = item
84 self.marked = False
84 self.marked = False
85
85
86
86
87 class _BrowserHelp(object):
87 class _BrowserHelp(object):
88 style_header = astyle.Style.fromstr("red:blacK")
88 style_header = astyle.Style.fromstr("yellow:black:bold")
89 # This is used internally by ``ibrowse`` for displaying the help screen.
89 # This is used internally by ``ibrowse`` for displaying the help screen.
90 def __init__(self, browser):
90 def __init__(self, browser):
91 self.browser = browser
91 self.browser = browser
92
92
93 def __xrepr__(self, mode):
93 def __xrepr__(self, mode):
94 yield (-1, True)
94 yield (-1, True)
95 if mode == "header" or mode == "footer":
95 if mode == "header" or mode == "footer":
96 yield (astyle.style_default, "ibrowse help screen")
96 yield (astyle.style_default, "ibrowse help screen")
97 else:
97 else:
98 yield (astyle.style_default, repr(self))
98 yield (astyle.style_default, repr(self))
99
99
100 def __xiter__(self, mode):
100 def __xiter__(self, mode):
101 # Get reverse key mapping
101 # Get reverse key mapping
102 allkeys = {}
102 allkeys = {}
103 for (key, cmd) in self.browser.keymap.iteritems():
103 for (key, cmd) in self.browser.keymap.iteritems():
104 allkeys.setdefault(cmd, []).append(key)
104 allkeys.setdefault(cmd, []).append(key)
105
105
106 fields = ("key", "description")
106 fields = ("key", "description")
107
107
108 commands = []
108 commands = []
109 for name in dir(self.browser):
109 for name in dir(self.browser):
110 if name.startswith("cmd_"):
110 if name.startswith("cmd_"):
111 command = getattr(self.browser, name)
111 command = getattr(self.browser, name)
112 commands.append((inspect.getsourcelines(command)[-1], name[4:], command))
112 commands.append((inspect.getsourcelines(command)[-1], name[4:], command))
113 commands.sort()
113 commands.sort()
114 commands = [(c[1], c[2]) for c in commands]
114 commands = [(c[1], c[2]) for c in commands]
115 for (i, (name, command)) in enumerate(commands):
115 for (i, (name, command)) in enumerate(commands):
116 if i:
116 if i:
117 yield ipipe.Fields(fields, key="", description="")
117 yield ipipe.Fields(fields, key="", description="")
118
118
119 description = command.__doc__
119 description = command.__doc__
120 if description is None:
120 if description is None:
121 lines = []
121 lines = []
122 else:
122 else:
123 lines = [l.strip() for l in description.splitlines() if l.strip()]
123 lines = [l.strip() for l in description.splitlines() if l.strip()]
124 description = "\n".join(lines)
124 description = "\n".join(lines)
125 lines = textwrap.wrap(description, 60)
125 lines = textwrap.wrap(description, 60)
126 keys = allkeys.get(name, [])
126 keys = allkeys.get(name, [])
127
127
128 yield ipipe.Fields(fields, description=astyle.Text((self.style_header, name)))
128 yield ipipe.Fields(fields, description=astyle.Text((self.style_header, name)))
129 for i in xrange(max(len(keys), len(lines))):
129 for i in xrange(max(len(keys), len(lines))):
130 try:
130 try:
131 key = self.browser.keylabel(keys[i])
131 key = self.browser.keylabel(keys[i])
132 except IndexError:
132 except IndexError:
133 key = ""
133 key = ""
134 try:
134 try:
135 line = lines[i]
135 line = lines[i]
136 except IndexError:
136 except IndexError:
137 line = ""
137 line = ""
138 yield ipipe.Fields(fields, key=key, description=line)
138 yield ipipe.Fields(fields, key=key, description=line)
139
139
140
140
141 class _BrowserLevel(object):
141 class _BrowserLevel(object):
142 # This is used internally to store the state (iterator, fetch items,
142 # This is used internally to store the state (iterator, fetch items,
143 # position of cursor and screen, etc.) of one browser level
143 # position of cursor and screen, etc.) of one browser level
144 # An ``ibrowse`` object keeps multiple ``_BrowserLevel`` objects in
144 # An ``ibrowse`` object keeps multiple ``_BrowserLevel`` objects in
145 # a stack.
145 # a stack.
146 def __init__(self, browser, input, iterator, mainsizey, *attrs):
146 def __init__(self, browser, input, iterator, mainsizey, *attrs):
147 self.browser = browser
147 self.browser = browser
148 self.input = input
148 self.input = input
149 self.header = [x for x in ipipe.xrepr(input, "header") if not isinstance(x[0], int)]
149 self.header = [x for x in ipipe.xrepr(input, "header") if not isinstance(x[0], int)]
150 # iterator for the input
150 # iterator for the input
151 self.iterator = iterator
151 self.iterator = iterator
152
152
153 # is the iterator exhausted?
153 # is the iterator exhausted?
154 self.exhausted = False
154 self.exhausted = False
155
155
156 # attributes to be display (autodetected if empty)
156 # attributes to be display (autodetected if empty)
157 self.attrs = attrs
157 self.attrs = attrs
158
158
159 # fetched items (+ marked flag)
159 # fetched items (+ marked flag)
160 self.items = ipipe.deque()
160 self.items = ipipe.deque()
161
161
162 # Number of marked objects
162 # Number of marked objects
163 self.marked = 0
163 self.marked = 0
164
164
165 # Vertical cursor position
165 # Vertical cursor position
166 self.cury = 0
166 self.cury = 0
167
167
168 # Horizontal cursor position
168 # Horizontal cursor position
169 self.curx = 0
169 self.curx = 0
170
170
171 # Index of first data column
171 # Index of first data column
172 self.datastartx = 0
172 self.datastartx = 0
173
173
174 # Index of first data line
174 # Index of first data line
175 self.datastarty = 0
175 self.datastarty = 0
176
176
177 # height of the data display area
177 # height of the data display area
178 self.mainsizey = mainsizey
178 self.mainsizey = mainsizey
179
179
180 # width of the data display area (changes when scrolling)
180 # width of the data display area (changes when scrolling)
181 self.mainsizex = 0
181 self.mainsizex = 0
182
182
183 # Size of row number (changes when scrolling)
183 # Size of row number (changes when scrolling)
184 self.numbersizex = 0
184 self.numbersizex = 0
185
185
186 # Attribute names to display (in this order)
186 # Attribute names to display (in this order)
187 self.displayattrs = []
187 self.displayattrs = []
188
188
189 # index and name of attribute under the cursor
189 # index and name of attribute under the cursor
190 self.displayattr = (None, ipipe.noitem)
190 self.displayattr = (None, ipipe.noitem)
191
191
192 # Maps attribute names to column widths
192 # Maps attribute names to column widths
193 self.colwidths = {}
193 self.colwidths = {}
194
194
195 # Set of hidden attributes
195 # Set of hidden attributes
196 self.hiddenattrs = set()
196 self.hiddenattrs = set()
197
197
198 # This takes care of all the caches etc.
198 # This takes care of all the caches etc.
199 self.moveto(0, 0, refresh=True)
199 self.moveto(0, 0, refresh=True)
200
200
201 def fetch(self, count):
201 def fetch(self, count):
202 # Try to fill ``self.items`` with at least ``count`` objects.
202 # Try to fill ``self.items`` with at least ``count`` objects.
203 have = len(self.items)
203 have = len(self.items)
204 while not self.exhausted and have < count:
204 while not self.exhausted and have < count:
205 try:
205 try:
206 item = self.iterator.next()
206 item = self.iterator.next()
207 except StopIteration:
207 except StopIteration:
208 self.exhausted = True
208 self.exhausted = True
209 break
209 break
210 else:
210 else:
211 have += 1
211 have += 1
212 self.items.append(_BrowserCachedItem(item))
212 self.items.append(_BrowserCachedItem(item))
213
213
214 def calcdisplayattrs(self):
214 def calcdisplayattrs(self):
215 # Calculate which attributes are available from the objects that are
215 # Calculate which attributes are available from the objects that are
216 # currently visible on screen (and store it in ``self.displayattrs``)
216 # currently visible on screen (and store it in ``self.displayattrs``)
217
217
218 attrnames = set()
218 attrnames = set()
219 self.displayattrs = []
219 self.displayattrs = []
220 if self.attrs:
220 if self.attrs:
221 # If the browser object specifies a fixed list of attributes,
221 # If the browser object specifies a fixed list of attributes,
222 # simply use it (removing hidden attributes).
222 # simply use it (removing hidden attributes).
223 for attrname in self.attrs:
223 for attrname in self.attrs:
224 if attrname not in attrnames and attrname not in self.hiddenattrs:
224 if attrname not in attrnames and attrname not in self.hiddenattrs:
225 self.displayattrs.append(attrname)
225 self.displayattrs.append(attrname)
226 attrnames.add(attrname)
226 attrnames.add(attrname)
227 else:
227 else:
228 endy = min(self.datastarty+self.mainsizey, len(self.items))
228 endy = min(self.datastarty+self.mainsizey, len(self.items))
229 for i in xrange(self.datastarty, endy):
229 for i in xrange(self.datastarty, endy):
230 for attrname in ipipe.xattrs(self.items[i].item, "default"):
230 for attrname in ipipe.xattrs(self.items[i].item, "default"):
231 if attrname not in attrnames and attrname not in self.hiddenattrs:
231 if attrname not in attrnames and attrname not in self.hiddenattrs:
232 self.displayattrs.append(attrname)
232 self.displayattrs.append(attrname)
233 attrnames.add(attrname)
233 attrnames.add(attrname)
234
234
235 def getrow(self, i):
235 def getrow(self, i):
236 # Return a dictinary with the attributes for the object
236 # Return a dictinary with the attributes for the object
237 # ``self.items[i]``. Attribute names are taken from
237 # ``self.items[i]``. Attribute names are taken from
238 # ``self.displayattrs`` so ``calcdisplayattrs()`` must have been
238 # ``self.displayattrs`` so ``calcdisplayattrs()`` must have been
239 # called before.
239 # called before.
240 row = {}
240 row = {}
241 item = self.items[i].item
241 item = self.items[i].item
242 for attrname in self.displayattrs:
242 for attrname in self.displayattrs:
243 try:
243 try:
244 value = ipipe._getattr(item, attrname, ipipe.noitem)
244 value = ipipe._getattr(item, attrname, ipipe.noitem)
245 except (KeyboardInterrupt, SystemExit):
245 except (KeyboardInterrupt, SystemExit):
246 raise
246 raise
247 except Exception, exc:
247 except Exception, exc:
248 value = exc
248 value = exc
249 # only store attribute if it exists (or we got an exception)
249 # only store attribute if it exists (or we got an exception)
250 if value is not ipipe.noitem:
250 if value is not ipipe.noitem:
251 # remember alignment, length and colored text
251 # remember alignment, length and colored text
252 row[attrname] = ipipe.xformat(value, "cell", self.browser.maxattrlength)
252 row[attrname] = ipipe.xformat(value, "cell", self.browser.maxattrlength)
253 return row
253 return row
254
254
255 def calcwidths(self):
255 def calcwidths(self):
256 # Recalculate the displayed fields and their widths.
256 # Recalculate the displayed fields and their widths.
257 # ``calcdisplayattrs()'' must have been called and the cache
257 # ``calcdisplayattrs()'' must have been called and the cache
258 # for attributes of the objects on screen (``self.displayrows``)
258 # for attributes of the objects on screen (``self.displayrows``)
259 # must have been filled. This returns a dictionary mapping
259 # must have been filled. This returns a dictionary mapping
260 # column names to widths.
260 # column names to widths.
261 self.colwidths = {}
261 self.colwidths = {}
262 for row in self.displayrows:
262 for row in self.displayrows:
263 for attrname in self.displayattrs:
263 for attrname in self.displayattrs:
264 try:
264 try:
265 length = row[attrname][1]
265 length = row[attrname][1]
266 except KeyError:
266 except KeyError:
267 length = 0
267 length = 0
268 # always add attribute to colwidths, even if it doesn't exist
268 # always add attribute to colwidths, even if it doesn't exist
269 if attrname not in self.colwidths:
269 if attrname not in self.colwidths:
270 self.colwidths[attrname] = len(ipipe._attrname(attrname))
270 self.colwidths[attrname] = len(ipipe._attrname(attrname))
271 newwidth = max(self.colwidths[attrname], length)
271 newwidth = max(self.colwidths[attrname], length)
272 self.colwidths[attrname] = newwidth
272 self.colwidths[attrname] = newwidth
273
273
274 # How many characters do we need to paint the largest item number?
274 # How many characters do we need to paint the largest item number?
275 self.numbersizex = len(str(self.datastarty+self.mainsizey-1))
275 self.numbersizex = len(str(self.datastarty+self.mainsizey-1))
276 # How must space have we got to display data?
276 # How must space have we got to display data?
277 self.mainsizex = self.browser.scrsizex-self.numbersizex-3
277 self.mainsizex = self.browser.scrsizex-self.numbersizex-3
278 # width of all columns
278 # width of all columns
279 self.datasizex = sum(self.colwidths.itervalues()) + len(self.colwidths)
279 self.datasizex = sum(self.colwidths.itervalues()) + len(self.colwidths)
280
280
281 def calcdisplayattr(self):
281 def calcdisplayattr(self):
282 # Find out which attribute the cursor is on and store this
282 # Find out which attribute the cursor is on and store this
283 # information in ``self.displayattr``.
283 # information in ``self.displayattr``.
284 pos = 0
284 pos = 0
285 for (i, attrname) in enumerate(self.displayattrs):
285 for (i, attrname) in enumerate(self.displayattrs):
286 if pos+self.colwidths[attrname] >= self.curx:
286 if pos+self.colwidths[attrname] >= self.curx:
287 self.displayattr = (i, attrname)
287 self.displayattr = (i, attrname)
288 break
288 break
289 pos += self.colwidths[attrname]+1
289 pos += self.colwidths[attrname]+1
290 else:
290 else:
291 self.displayattr = (None, ipipe.noitem)
291 self.displayattr = (None, ipipe.noitem)
292
292
293 def moveto(self, x, y, refresh=False):
293 def moveto(self, x, y, refresh=False):
294 # Move the cursor to the position ``(x,y)`` (in data coordinates,
294 # Move the cursor to the position ``(x,y)`` (in data coordinates,
295 # not in screen coordinates). If ``refresh`` is true, all cached
295 # not in screen coordinates). If ``refresh`` is true, all cached
296 # values will be recalculated (e.g. because the list has been
296 # values will be recalculated (e.g. because the list has been
297 # resorted, so screen positions etc. are no longer valid).
297 # resorted, so screen positions etc. are no longer valid).
298 olddatastarty = self.datastarty
298 olddatastarty = self.datastarty
299 oldx = self.curx
299 oldx = self.curx
300 oldy = self.cury
300 oldy = self.cury
301 x = int(x+0.5)
301 x = int(x+0.5)
302 y = int(y+0.5)
302 y = int(y+0.5)
303 newx = x # remember where we wanted to move
303 newx = x # remember where we wanted to move
304 newy = y # remember where we wanted to move
304 newy = y # remember where we wanted to move
305
305
306 scrollbordery = min(self.browser.scrollbordery, self.mainsizey//2)
306 scrollbordery = min(self.browser.scrollbordery, self.mainsizey//2)
307 scrollborderx = min(self.browser.scrollborderx, self.mainsizex//2)
307 scrollborderx = min(self.browser.scrollborderx, self.mainsizex//2)
308
308
309 # Make sure that the cursor didn't leave the main area vertically
309 # Make sure that the cursor didn't leave the main area vertically
310 if y < 0:
310 if y < 0:
311 y = 0
311 y = 0
312 # try to get enough items to fill the screen
312 # try to get enough items to fill the screen
313 self.fetch(max(y+scrollbordery+1, self.mainsizey))
313 self.fetch(max(y+scrollbordery+1, self.mainsizey))
314 if y >= len(self.items):
314 if y >= len(self.items):
315 y = max(0, len(self.items)-1)
315 y = max(0, len(self.items)-1)
316
316
317 # Make sure that the cursor stays on screen vertically
317 # Make sure that the cursor stays on screen vertically
318 if y < self.datastarty+scrollbordery:
318 if y < self.datastarty+scrollbordery:
319 self.datastarty = max(0, y-scrollbordery)
319 self.datastarty = max(0, y-scrollbordery)
320 elif y >= self.datastarty+self.mainsizey-scrollbordery:
320 elif y >= self.datastarty+self.mainsizey-scrollbordery:
321 self.datastarty = max(0, min(y-self.mainsizey+scrollbordery+1,
321 self.datastarty = max(0, min(y-self.mainsizey+scrollbordery+1,
322 len(self.items)-self.mainsizey))
322 len(self.items)-self.mainsizey))
323
323
324 if refresh: # Do we need to refresh the complete display?
324 if refresh: # Do we need to refresh the complete display?
325 self.calcdisplayattrs()
325 self.calcdisplayattrs()
326 endy = min(self.datastarty+self.mainsizey, len(self.items))
326 endy = min(self.datastarty+self.mainsizey, len(self.items))
327 self.displayrows = map(self.getrow, xrange(self.datastarty, endy))
327 self.displayrows = map(self.getrow, xrange(self.datastarty, endy))
328 self.calcwidths()
328 self.calcwidths()
329 # Did we scroll vertically => update displayrows
329 # Did we scroll vertically => update displayrows
330 # and various other attributes
330 # and various other attributes
331 elif self.datastarty != olddatastarty:
331 elif self.datastarty != olddatastarty:
332 # Recalculate which attributes we have to display
332 # Recalculate which attributes we have to display
333 olddisplayattrs = self.displayattrs
333 olddisplayattrs = self.displayattrs
334 self.calcdisplayattrs()
334 self.calcdisplayattrs()
335 # If there are new attributes, recreate the cache
335 # If there are new attributes, recreate the cache
336 if self.displayattrs != olddisplayattrs:
336 if self.displayattrs != olddisplayattrs:
337 endy = min(self.datastarty+self.mainsizey, len(self.items))
337 endy = min(self.datastarty+self.mainsizey, len(self.items))
338 self.displayrows = map(self.getrow, xrange(self.datastarty, endy))
338 self.displayrows = map(self.getrow, xrange(self.datastarty, endy))
339 elif self.datastarty<olddatastarty: # we did scroll up
339 elif self.datastarty<olddatastarty: # we did scroll up
340 # drop rows from the end
340 # drop rows from the end
341 del self.displayrows[self.datastarty-olddatastarty:]
341 del self.displayrows[self.datastarty-olddatastarty:]
342 # fetch new items
342 # fetch new items
343 for i in xrange(olddatastarty-1,
343 for i in xrange(min(olddatastarty, self.datastarty+self.mainsizey)-1,
344 self.datastarty-1, -1):
344 self.datastarty-1, -1):
345 try:
345 try:
346 row = self.getrow(i)
346 row = self.getrow(i)
347 except IndexError:
347 except IndexError:
348 # we didn't have enough objects to fill the screen
348 # we didn't have enough objects to fill the screen
349 break
349 break
350 self.displayrows.insert(0, row)
350 self.displayrows.insert(0, row)
351 else: # we did scroll down
351 else: # we did scroll down
352 # drop rows from the start
352 # drop rows from the start
353 del self.displayrows[:self.datastarty-olddatastarty]
353 del self.displayrows[:self.datastarty-olddatastarty]
354 # fetch new items
354 # fetch new items
355 for i in xrange(olddatastarty+self.mainsizey,
355 for i in xrange(max(olddatastarty+self.mainsizey, self.datastarty),
356 self.datastarty+self.mainsizey):
356 self.datastarty+self.mainsizey):
357 try:
357 try:
358 row = self.getrow(i)
358 row = self.getrow(i)
359 except IndexError:
359 except IndexError:
360 # we didn't have enough objects to fill the screen
360 # we didn't have enough objects to fill the screen
361 break
361 break
362 self.displayrows.append(row)
362 self.displayrows.append(row)
363 self.calcwidths()
363 self.calcwidths()
364
364
365 # Make sure that the cursor didn't leave the data area horizontally
365 # Make sure that the cursor didn't leave the data area horizontally
366 if x < 0:
366 if x < 0:
367 x = 0
367 x = 0
368 elif x >= self.datasizex:
368 elif x >= self.datasizex:
369 x = max(0, self.datasizex-1)
369 x = max(0, self.datasizex-1)
370
370
371 # Make sure that the cursor stays on screen horizontally
371 # Make sure that the cursor stays on screen horizontally
372 if x < self.datastartx+scrollborderx:
372 if x < self.datastartx+scrollborderx:
373 self.datastartx = max(0, x-scrollborderx)
373 self.datastartx = max(0, x-scrollborderx)
374 elif x >= self.datastartx+self.mainsizex-scrollborderx:
374 elif x >= self.datastartx+self.mainsizex-scrollborderx:
375 self.datastartx = max(0, min(x-self.mainsizex+scrollborderx+1,
375 self.datastartx = max(0, min(x-self.mainsizex+scrollborderx+1,
376 self.datasizex-self.mainsizex))
376 self.datasizex-self.mainsizex))
377
377
378 if x == oldx and y == oldy and (x != newx or y != newy): # couldn't move
378 if x == oldx and y == oldy and (x != newx or y != newy): # couldn't move
379 self.browser.beep()
379 self.browser.beep()
380 else:
380 else:
381 self.curx = x
381 self.curx = x
382 self.cury = y
382 self.cury = y
383 self.calcdisplayattr()
383 self.calcdisplayattr()
384
384
385 def sort(self, key, reverse=False):
385 def sort(self, key, reverse=False):
386 """
386 """
387 Sort the currently list of items using the key function ``key``. If
387 Sort the currently list of items using the key function ``key``. If
388 ``reverse`` is true the sort order is reversed.
388 ``reverse`` is true the sort order is reversed.
389 """
389 """
390 curitem = self.items[self.cury] # Remember where the cursor is now
390 curitem = self.items[self.cury] # Remember where the cursor is now
391
391
392 # Sort items
392 # Sort items
393 def realkey(item):
393 def realkey(item):
394 return key(item.item)
394 return key(item.item)
395 self.items = ipipe.deque(sorted(self.items, key=realkey, reverse=reverse))
395 self.items = ipipe.deque(sorted(self.items, key=realkey, reverse=reverse))
396
396
397 # Find out where the object under the cursor went
397 # Find out where the object under the cursor went
398 cury = self.cury
398 cury = self.cury
399 for (i, item) in enumerate(self.items):
399 for (i, item) in enumerate(self.items):
400 if item is curitem:
400 if item is curitem:
401 cury = i
401 cury = i
402 break
402 break
403
403
404 self.moveto(self.curx, cury, refresh=True)
404 self.moveto(self.curx, cury, refresh=True)
405
405
406
406
407 class _CommandInput(object):
407 class _CommandInput(object):
408 keymap = Keymap()
408 keymap = Keymap()
409 keymap.register("left", curses.KEY_LEFT)
409 keymap.register("left", curses.KEY_LEFT)
410 keymap.register("right", curses.KEY_RIGHT)
410 keymap.register("right", curses.KEY_RIGHT)
411 keymap.register("home", curses.KEY_HOME, "\x01") # Ctrl-A
411 keymap.register("home", curses.KEY_HOME, "\x01") # Ctrl-A
412 keymap.register("end", curses.KEY_END, "\x05") # Ctrl-E
412 keymap.register("end", curses.KEY_END, "\x05") # Ctrl-E
413 # FIXME: What's happening here?
413 # FIXME: What's happening here?
414 keymap.register("backspace", curses.KEY_BACKSPACE, "\x08\x7f")
414 keymap.register("backspace", curses.KEY_BACKSPACE, "\x08\x7f")
415 keymap.register("delete", curses.KEY_DC)
415 keymap.register("delete", curses.KEY_DC)
416 keymap.register("delend", 0x0b) # Ctrl-K
416 keymap.register("delend", 0x0b) # Ctrl-K
417 keymap.register("execute", "\r\n")
417 keymap.register("execute", "\r\n")
418 keymap.register("up", curses.KEY_UP)
418 keymap.register("up", curses.KEY_UP)
419 keymap.register("down", curses.KEY_DOWN)
419 keymap.register("down", curses.KEY_DOWN)
420 keymap.register("incsearchup", curses.KEY_PPAGE)
420 keymap.register("incsearchup", curses.KEY_PPAGE)
421 keymap.register("incsearchdown", curses.KEY_NPAGE)
421 keymap.register("incsearchdown", curses.KEY_NPAGE)
422 keymap.register("exit", "\x18"), # Ctrl-X
422 keymap.register("exit", "\x18"), # Ctrl-X
423
423
424 def __init__(self, prompt):
424 def __init__(self, prompt):
425 self.prompt = prompt
425 self.prompt = prompt
426 self.history = []
426 self.history = []
427 self.maxhistory = 100
427 self.maxhistory = 100
428 self.input = ""
428 self.input = ""
429 self.curx = 0
429 self.curx = 0
430 self.cury = -1 # blank line
430 self.cury = -1 # blank line
431
431
432 def start(self):
432 def start(self):
433 self.input = ""
433 self.input = ""
434 self.curx = 0
434 self.curx = 0
435 self.cury = -1 # blank line
435 self.cury = -1 # blank line
436
436
437 def handlekey(self, browser, key):
437 def handlekey(self, browser, key):
438 cmdname = self.keymap.get(key, None)
438 cmdname = self.keymap.get(key, None)
439 if cmdname is not None:
439 if cmdname is not None:
440 cmdfunc = getattr(self, "cmd_%s" % cmdname, None)
440 cmdfunc = getattr(self, "cmd_%s" % cmdname, None)
441 if cmdfunc is not None:
441 if cmdfunc is not None:
442 return cmdfunc(browser)
442 return cmdfunc(browser)
443 curses.beep()
443 curses.beep()
444 elif key != -1:
444 elif key != -1:
445 try:
445 try:
446 char = chr(key)
446 char = chr(key)
447 except ValueError:
447 except ValueError:
448 curses.beep()
448 curses.beep()
449 else:
449 else:
450 return self.handlechar(browser, char)
450 return self.handlechar(browser, char)
451
451
452 def handlechar(self, browser, char):
452 def handlechar(self, browser, char):
453 self.input = self.input[:self.curx] + char + self.input[self.curx:]
453 self.input = self.input[:self.curx] + char + self.input[self.curx:]
454 self.curx += 1
454 self.curx += 1
455 return True
455 return True
456
456
457 def dohistory(self):
457 def dohistory(self):
458 self.history.insert(0, self.input)
458 self.history.insert(0, self.input)
459 del self.history[:-self.maxhistory]
459 del self.history[:-self.maxhistory]
460
460
461 def cmd_backspace(self, browser):
461 def cmd_backspace(self, browser):
462 if self.curx:
462 if self.curx:
463 self.input = self.input[:self.curx-1] + self.input[self.curx:]
463 self.input = self.input[:self.curx-1] + self.input[self.curx:]
464 self.curx -= 1
464 self.curx -= 1
465 return True
465 return True
466 else:
466 else:
467 curses.beep()
467 curses.beep()
468
468
469 def cmd_delete(self, browser):
469 def cmd_delete(self, browser):
470 if self.curx<len(self.input):
470 if self.curx<len(self.input):
471 self.input = self.input[:self.curx] + self.input[self.curx+1:]
471 self.input = self.input[:self.curx] + self.input[self.curx+1:]
472 return True
472 return True
473 else:
473 else:
474 curses.beep()
474 curses.beep()
475
475
476 def cmd_delend(self, browser):
476 def cmd_delend(self, browser):
477 if self.curx<len(self.input):
477 if self.curx<len(self.input):
478 self.input = self.input[:self.curx]
478 self.input = self.input[:self.curx]
479 return True
479 return True
480
480
481 def cmd_left(self, browser):
481 def cmd_left(self, browser):
482 if self.curx:
482 if self.curx:
483 self.curx -= 1
483 self.curx -= 1
484 return True
484 return True
485 else:
485 else:
486 curses.beep()
486 curses.beep()
487
487
488 def cmd_right(self, browser):
488 def cmd_right(self, browser):
489 if self.curx < len(self.input):
489 if self.curx < len(self.input):
490 self.curx += 1
490 self.curx += 1
491 return True
491 return True
492 else:
492 else:
493 curses.beep()
493 curses.beep()
494
494
495 def cmd_home(self, browser):
495 def cmd_home(self, browser):
496 if self.curx:
496 if self.curx:
497 self.curx = 0
497 self.curx = 0
498 return True
498 return True
499 else:
499 else:
500 curses.beep()
500 curses.beep()
501
501
502 def cmd_end(self, browser):
502 def cmd_end(self, browser):
503 if self.curx < len(self.input):
503 if self.curx < len(self.input):
504 self.curx = len(self.input)
504 self.curx = len(self.input)
505 return True
505 return True
506 else:
506 else:
507 curses.beep()
507 curses.beep()
508
508
509 def cmd_up(self, browser):
509 def cmd_up(self, browser):
510 if self.cury < len(self.history)-1:
510 if self.cury < len(self.history)-1:
511 self.cury += 1
511 self.cury += 1
512 self.input = self.history[self.cury]
512 self.input = self.history[self.cury]
513 self.curx = len(self.input)
513 self.curx = len(self.input)
514 return True
514 return True
515 else:
515 else:
516 curses.beep()
516 curses.beep()
517
517
518 def cmd_down(self, browser):
518 def cmd_down(self, browser):
519 if self.cury >= 0:
519 if self.cury >= 0:
520 self.cury -= 1
520 self.cury -= 1
521 if self.cury>=0:
521 if self.cury>=0:
522 self.input = self.history[self.cury]
522 self.input = self.history[self.cury]
523 else:
523 else:
524 self.input = ""
524 self.input = ""
525 self.curx = len(self.input)
525 self.curx = len(self.input)
526 return True
526 return True
527 else:
527 else:
528 curses.beep()
528 curses.beep()
529
529
530 def cmd_incsearchup(self, browser):
530 def cmd_incsearchup(self, browser):
531 prefix = self.input[:self.curx]
531 prefix = self.input[:self.curx]
532 cury = self.cury
532 cury = self.cury
533 while True:
533 while True:
534 cury += 1
534 cury += 1
535 if cury >= len(self.history):
535 if cury >= len(self.history):
536 break
536 break
537 if self.history[cury].startswith(prefix):
537 if self.history[cury].startswith(prefix):
538 self.input = self.history[cury]
538 self.input = self.history[cury]
539 self.cury = cury
539 self.cury = cury
540 return True
540 return True
541 curses.beep()
541 curses.beep()
542
542
543 def cmd_incsearchdown(self, browser):
543 def cmd_incsearchdown(self, browser):
544 prefix = self.input[:self.curx]
544 prefix = self.input[:self.curx]
545 cury = self.cury
545 cury = self.cury
546 while True:
546 while True:
547 cury -= 1
547 cury -= 1
548 if cury <= 0:
548 if cury <= 0:
549 break
549 break
550 if self.history[cury].startswith(prefix):
550 if self.history[cury].startswith(prefix):
551 self.input = self.history[self.cury]
551 self.input = self.history[self.cury]
552 self.cury = cury
552 self.cury = cury
553 return True
553 return True
554 curses.beep()
554 curses.beep()
555
555
556 def cmd_exit(self, browser):
556 def cmd_exit(self, browser):
557 browser.mode = "default"
557 browser.mode = "default"
558 return True
558 return True
559
559
560 def cmd_execute(self, browser):
560 def cmd_execute(self, browser):
561 raise NotImplementedError
561 raise NotImplementedError
562
562
563
563
564 class _CommandGoto(_CommandInput):
564 class _CommandGoto(_CommandInput):
565 def __init__(self):
565 def __init__(self):
566 _CommandInput.__init__(self, "goto object #")
566 _CommandInput.__init__(self, "goto object #")
567
567
568 def handlechar(self, browser, char):
568 def handlechar(self, browser, char):
569 # Only accept digits
569 # Only accept digits
570 if not "0" <= char <= "9":
570 if not "0" <= char <= "9":
571 curses.beep()
571 curses.beep()
572 else:
572 else:
573 return _CommandInput.handlechar(self, browser, char)
573 return _CommandInput.handlechar(self, browser, char)
574
574
575 def cmd_execute(self, browser):
575 def cmd_execute(self, browser):
576 level = browser.levels[-1]
576 level = browser.levels[-1]
577 if self.input:
577 if self.input:
578 self.dohistory()
578 self.dohistory()
579 level.moveto(level.curx, int(self.input))
579 level.moveto(level.curx, int(self.input))
580 browser.mode = "default"
580 browser.mode = "default"
581 return True
581 return True
582
582
583
583
584 class _CommandFind(_CommandInput):
584 class _CommandFind(_CommandInput):
585 def __init__(self):
585 def __init__(self):
586 _CommandInput.__init__(self, "find expression")
586 _CommandInput.__init__(self, "find expression")
587
587
588 def cmd_execute(self, browser):
588 def cmd_execute(self, browser):
589 level = browser.levels[-1]
589 level = browser.levels[-1]
590 if self.input:
590 if self.input:
591 self.dohistory()
591 self.dohistory()
592 while True:
592 while True:
593 cury = level.cury
593 cury = level.cury
594 level.moveto(level.curx, cury+1)
594 level.moveto(level.curx, cury+1)
595 if cury == level.cury:
595 if cury == level.cury:
596 curses.beep()
596 curses.beep()
597 break # hit end
597 break # hit end
598 item = level.items[level.cury].item
598 item = level.items[level.cury].item
599 try:
599 try:
600 globals = ipipe.getglobals(None)
600 globals = ipipe.getglobals(None)
601 if eval(self.input, globals, ipipe.AttrNamespace(item)):
601 if eval(self.input, globals, ipipe.AttrNamespace(item)):
602 break # found something
602 break # found something
603 except (KeyboardInterrupt, SystemExit):
603 except (KeyboardInterrupt, SystemExit):
604 raise
604 raise
605 except Exception, exc:
605 except Exception, exc:
606 browser.report(exc)
606 browser.report(exc)
607 curses.beep()
607 curses.beep()
608 break # break on error
608 break # break on error
609 browser.mode = "default"
609 browser.mode = "default"
610 return True
610 return True
611
611
612
612
613 class _CommandFindBackwards(_CommandInput):
613 class _CommandFindBackwards(_CommandInput):
614 def __init__(self):
614 def __init__(self):
615 _CommandInput.__init__(self, "find backwards expression")
615 _CommandInput.__init__(self, "find backwards expression")
616
616
617 def cmd_execute(self, browser):
617 def cmd_execute(self, browser):
618 level = browser.levels[-1]
618 level = browser.levels[-1]
619 if self.input:
619 if self.input:
620 self.dohistory()
620 self.dohistory()
621 while level.cury:
621 while level.cury:
622 level.moveto(level.curx, level.cury-1)
622 level.moveto(level.curx, level.cury-1)
623 item = level.items[level.cury].item
623 item = level.items[level.cury].item
624 try:
624 try:
625 globals = ipipe.getglobals(None)
625 globals = ipipe.getglobals(None)
626 if eval(self.input, globals, ipipe.AttrNamespace(item)):
626 if eval(self.input, globals, ipipe.AttrNamespace(item)):
627 break # found something
627 break # found something
628 except (KeyboardInterrupt, SystemExit):
628 except (KeyboardInterrupt, SystemExit):
629 raise
629 raise
630 except Exception, exc:
630 except Exception, exc:
631 browser.report(exc)
631 browser.report(exc)
632 curses.beep()
632 curses.beep()
633 break # break on error
633 break # break on error
634 else:
634 else:
635 curses.beep()
635 curses.beep()
636 browser.mode = "default"
636 browser.mode = "default"
637 return True
637 return True
638
638
639
639
640 class ibrowse(ipipe.Display):
640 class ibrowse(ipipe.Display):
641 # Show this many lines from the previous screen when paging horizontally
641 # Show this many lines from the previous screen when paging horizontally
642 pageoverlapx = 1
642 pageoverlapx = 1
643
643
644 # Show this many lines from the previous screen when paging vertically
644 # Show this many lines from the previous screen when paging vertically
645 pageoverlapy = 1
645 pageoverlapy = 1
646
646
647 # Start scrolling when the cursor is less than this number of columns
647 # Start scrolling when the cursor is less than this number of columns
648 # away from the left or right screen edge
648 # away from the left or right screen edge
649 scrollborderx = 10
649 scrollborderx = 10
650
650
651 # Start scrolling when the cursor is less than this number of lines
651 # Start scrolling when the cursor is less than this number of lines
652 # away from the top or bottom screen edge
652 # away from the top or bottom screen edge
653 scrollbordery = 5
653 scrollbordery = 5
654
654
655 # Accelerate by this factor when scrolling horizontally
655 # Accelerate by this factor when scrolling horizontally
656 acceleratex = 1.05
656 acceleratex = 1.05
657
657
658 # Accelerate by this factor when scrolling vertically
658 # Accelerate by this factor when scrolling vertically
659 acceleratey = 1.05
659 acceleratey = 1.05
660
660
661 # The maximum horizontal scroll speed
661 # The maximum horizontal scroll speed
662 # (as a factor of the screen width (i.e. 0.5 == half a screen width)
662 # (as a factor of the screen width (i.e. 0.5 == half a screen width)
663 maxspeedx = 0.5
663 maxspeedx = 0.5
664
664
665 # The maximum vertical scroll speed
665 # The maximum vertical scroll speed
666 # (as a factor of the screen height (i.e. 0.5 == half a screen height)
666 # (as a factor of the screen height (i.e. 0.5 == half a screen height)
667 maxspeedy = 0.5
667 maxspeedy = 0.5
668
668
669 # The maximum number of header lines for browser level
669 # The maximum number of header lines for browser level
670 # if the nesting is deeper, only the innermost levels are displayed
670 # if the nesting is deeper, only the innermost levels are displayed
671 maxheaders = 5
671 maxheaders = 5
672
672
673 # The approximate maximum length of a column entry
673 # The approximate maximum length of a column entry
674 maxattrlength = 200
674 maxattrlength = 200
675
675
676 # Styles for various parts of the GUI
676 # Styles for various parts of the GUI
677 style_objheadertext = astyle.Style.fromstr("white:black:bold|reverse")
677 style_objheadertext = astyle.Style.fromstr("white:black:bold|reverse")
678 style_objheadernumber = astyle.Style.fromstr("white:blue:bold|reverse")
678 style_objheadernumber = astyle.Style.fromstr("white:blue:bold|reverse")
679 style_objheaderobject = astyle.Style.fromstr("white:black:reverse")
679 style_objheaderobject = astyle.Style.fromstr("white:black:reverse")
680 style_colheader = astyle.Style.fromstr("blue:white:reverse")
680 style_colheader = astyle.Style.fromstr("blue:white:reverse")
681 style_colheaderhere = astyle.Style.fromstr("green:black:bold|reverse")
681 style_colheaderhere = astyle.Style.fromstr("green:black:bold|reverse")
682 style_colheadersep = astyle.Style.fromstr("blue:black:reverse")
682 style_colheadersep = astyle.Style.fromstr("blue:black:reverse")
683 style_number = astyle.Style.fromstr("blue:white:reverse")
683 style_number = astyle.Style.fromstr("blue:white:reverse")
684 style_numberhere = astyle.Style.fromstr("green:black:bold|reverse")
684 style_numberhere = astyle.Style.fromstr("green:black:bold|reverse")
685 style_sep = astyle.Style.fromstr("blue:black")
685 style_sep = astyle.Style.fromstr("blue:black")
686 style_data = astyle.Style.fromstr("white:black")
686 style_data = astyle.Style.fromstr("white:black")
687 style_datapad = astyle.Style.fromstr("blue:black:bold")
687 style_datapad = astyle.Style.fromstr("blue:black:bold")
688 style_footer = astyle.Style.fromstr("black:white")
688 style_footer = astyle.Style.fromstr("black:white")
689 style_report = astyle.Style.fromstr("white:black")
689 style_report = astyle.Style.fromstr("white:black")
690
690
691 # Column separator in header
691 # Column separator in header
692 headersepchar = "|"
692 headersepchar = "|"
693
693
694 # Character for padding data cell entries
694 # Character for padding data cell entries
695 datapadchar = "."
695 datapadchar = "."
696
696
697 # Column separator in data area
697 # Column separator in data area
698 datasepchar = "|"
698 datasepchar = "|"
699
699
700 # Character to use for "empty" cell (i.e. for non-existing attributes)
700 # Character to use for "empty" cell (i.e. for non-existing attributes)
701 nodatachar = "-"
701 nodatachar = "-"
702
702
703 # Prompts for modes that require keyboard input
703 # Prompts for modes that require keyboard input
704 prompts = {
704 prompts = {
705 "goto": _CommandGoto(),
705 "goto": _CommandGoto(),
706 "find": _CommandFind(),
706 "find": _CommandFind(),
707 "findbackwards": _CommandFindBackwards()
707 "findbackwards": _CommandFindBackwards()
708 }
708 }
709
709
710 # Maps curses key codes to "function" names
710 # Maps curses key codes to "function" names
711 keymap = Keymap()
711 keymap = Keymap()
712 keymap.register("quit", "q")
712 keymap.register("quit", "q")
713 keymap.register("up", curses.KEY_UP)
713 keymap.register("up", curses.KEY_UP)
714 keymap.register("down", curses.KEY_DOWN)
714 keymap.register("down", curses.KEY_DOWN)
715 keymap.register("pageup", curses.KEY_PPAGE)
715 keymap.register("pageup", curses.KEY_PPAGE)
716 keymap.register("pagedown", curses.KEY_NPAGE)
716 keymap.register("pagedown", curses.KEY_NPAGE)
717 keymap.register("left", curses.KEY_LEFT)
717 keymap.register("left", curses.KEY_LEFT)
718 keymap.register("right", curses.KEY_RIGHT)
718 keymap.register("right", curses.KEY_RIGHT)
719 keymap.register("home", curses.KEY_HOME, "\x01")
719 keymap.register("home", curses.KEY_HOME, "\x01")
720 keymap.register("end", curses.KEY_END, "\x05")
720 keymap.register("end", curses.KEY_END, "\x05")
721 keymap.register("prevattr", "<\x1b")
721 keymap.register("prevattr", "<\x1b")
722 keymap.register("nextattr", ">\t")
722 keymap.register("nextattr", ">\t")
723 keymap.register("pick", "p")
723 keymap.register("pick", "p")
724 keymap.register("pickattr", "P")
724 keymap.register("pickattr", "P")
725 keymap.register("pickallattrs", "C")
725 keymap.register("pickallattrs", "C")
726 keymap.register("pickmarked", "m")
726 keymap.register("pickmarked", "m")
727 keymap.register("pickmarkedattr", "M")
727 keymap.register("pickmarkedattr", "M")
728 keymap.register("enterdefault", "\r\n")
728 keymap.register("enterdefault", "\r\n")
729 # FIXME: What's happening here?
729 # FIXME: What's happening here?
730 keymap.register("leave", curses.KEY_BACKSPACE, "x\x08\x7f")
730 keymap.register("leave", curses.KEY_BACKSPACE, "x\x08\x7f")
731 keymap.register("hideattr", "h")
731 keymap.register("hideattr", "h")
732 keymap.register("unhideattrs", "H")
732 keymap.register("unhideattrs", "H")
733 keymap.register("help", "?")
733 keymap.register("help", "?")
734 keymap.register("enter", "e")
734 keymap.register("enter", "e")
735 keymap.register("enterattr", "E")
735 keymap.register("enterattr", "E")
736 keymap.register("detail", "d")
736 keymap.register("detail", "d")
737 keymap.register("detailattr", "D")
737 keymap.register("detailattr", "D")
738 keymap.register("tooglemark", " ")
738 keymap.register("tooglemark", " ")
739 keymap.register("markrange", "r")
739 keymap.register("markrange", "r")
740 keymap.register("sortattrasc", "v")
740 keymap.register("sortattrasc", "v")
741 keymap.register("sortattrdesc", "V")
741 keymap.register("sortattrdesc", "V")
742 keymap.register("goto", "g")
742 keymap.register("goto", "g")
743 keymap.register("find", "f")
743 keymap.register("find", "f")
744 keymap.register("findbackwards", "b")
744 keymap.register("findbackwards", "b")
745
745
746 def __init__(self, *attrs):
746 def __init__(self, *attrs):
747 """
747 """
748 Create a new browser. If ``attrs`` is not empty, it is the list
748 Create a new browser. If ``attrs`` is not empty, it is the list
749 of attributes that will be displayed in the browser, otherwise
749 of attributes that will be displayed in the browser, otherwise
750 these will be determined by the objects on screen.
750 these will be determined by the objects on screen.
751 """
751 """
752 self.attrs = attrs
752 self.attrs = attrs
753
753
754 # Stack of browser levels
754 # Stack of browser levels
755 self.levels = []
755 self.levels = []
756 # how many colums to scroll (Changes when accelerating)
756 # how many colums to scroll (Changes when accelerating)
757 self.stepx = 1.
757 self.stepx = 1.
758
758
759 # how many rows to scroll (Changes when accelerating)
759 # how many rows to scroll (Changes when accelerating)
760 self.stepy = 1.
760 self.stepy = 1.
761
761
762 # Beep on the edges of the data area? (Will be set to ``False``
762 # Beep on the edges of the data area? (Will be set to ``False``
763 # once the cursor hits the edge of the screen, so we don't get
763 # once the cursor hits the edge of the screen, so we don't get
764 # multiple beeps).
764 # multiple beeps).
765 self._dobeep = True
765 self._dobeep = True
766
766
767 # Cache for registered ``curses`` colors and styles.
767 # Cache for registered ``curses`` colors and styles.
768 self._styles = {}
768 self._styles = {}
769 self._colors = {}
769 self._colors = {}
770 self._maxcolor = 1
770 self._maxcolor = 1
771
771
772 # How many header lines do we want to paint (the numbers of levels
772 # How many header lines do we want to paint (the numbers of levels
773 # we have, but with an upper bound)
773 # we have, but with an upper bound)
774 self._headerlines = 1
774 self._headerlines = 1
775
775
776 # Index of first header line
776 # Index of first header line
777 self._firstheaderline = 0
777 self._firstheaderline = 0
778
778
779 # curses window
779 # curses window
780 self.scr = None
780 self.scr = None
781 # report in the footer line (error, executed command etc.)
781 # report in the footer line (error, executed command etc.)
782 self._report = None
782 self._report = None
783
783
784 # value to be returned to the caller (set by commands)
784 # value to be returned to the caller (set by commands)
785 self.returnvalue = None
785 self.returnvalue = None
786
786
787 # The mode the browser is in
787 # The mode the browser is in
788 # e.g. normal browsing or entering an argument for a command
788 # e.g. normal browsing or entering an argument for a command
789 self.mode = "default"
789 self.mode = "default"
790
790
791 # set by the SIGWINCH signal handler
791 # set by the SIGWINCH signal handler
792 self.resized = False
792 self.resized = False
793
793
794 def nextstepx(self, step):
794 def nextstepx(self, step):
795 """
795 """
796 Accelerate horizontally.
796 Accelerate horizontally.
797 """
797 """
798 return max(1., min(step*self.acceleratex,
798 return max(1., min(step*self.acceleratex,
799 self.maxspeedx*self.levels[-1].mainsizex))
799 self.maxspeedx*self.levels[-1].mainsizex))
800
800
801 def nextstepy(self, step):
801 def nextstepy(self, step):
802 """
802 """
803 Accelerate vertically.
803 Accelerate vertically.
804 """
804 """
805 return max(1., min(step*self.acceleratey,
805 return max(1., min(step*self.acceleratey,
806 self.maxspeedy*self.levels[-1].mainsizey))
806 self.maxspeedy*self.levels[-1].mainsizey))
807
807
808 def getstyle(self, style):
808 def getstyle(self, style):
809 """
809 """
810 Register the ``style`` with ``curses`` or get it from the cache,
810 Register the ``style`` with ``curses`` or get it from the cache,
811 if it has been registered before.
811 if it has been registered before.
812 """
812 """
813 try:
813 try:
814 return self._styles[style.fg, style.bg, style.attrs]
814 return self._styles[style.fg, style.bg, style.attrs]
815 except KeyError:
815 except KeyError:
816 attrs = 0
816 attrs = 0
817 for b in astyle.A2CURSES:
817 for b in astyle.A2CURSES:
818 if style.attrs & b:
818 if style.attrs & b:
819 attrs |= astyle.A2CURSES[b]
819 attrs |= astyle.A2CURSES[b]
820 try:
820 try:
821 color = self._colors[style.fg, style.bg]
821 color = self._colors[style.fg, style.bg]
822 except KeyError:
822 except KeyError:
823 curses.init_pair(
823 curses.init_pair(
824 self._maxcolor,
824 self._maxcolor,
825 astyle.COLOR2CURSES[style.fg],
825 astyle.COLOR2CURSES[style.fg],
826 astyle.COLOR2CURSES[style.bg]
826 astyle.COLOR2CURSES[style.bg]
827 )
827 )
828 color = curses.color_pair(self._maxcolor)
828 color = curses.color_pair(self._maxcolor)
829 self._colors[style.fg, style.bg] = color
829 self._colors[style.fg, style.bg] = color
830 self._maxcolor += 1
830 self._maxcolor += 1
831 c = color | attrs
831 c = color | attrs
832 self._styles[style.fg, style.bg, style.attrs] = c
832 self._styles[style.fg, style.bg, style.attrs] = c
833 return c
833 return c
834
834
835 def addstr(self, y, x, begx, endx, text, style):
835 def addstr(self, y, x, begx, endx, text, style):
836 """
836 """
837 A version of ``curses.addstr()`` that can handle ``x`` coordinates
837 A version of ``curses.addstr()`` that can handle ``x`` coordinates
838 that are outside the screen.
838 that are outside the screen.
839 """
839 """
840 text2 = text[max(0, begx-x):max(0, endx-x)]
840 text2 = text[max(0, begx-x):max(0, endx-x)]
841 if text2:
841 if text2:
842 self.scr.addstr(y, max(x, begx), text2, self.getstyle(style))
842 self.scr.addstr(y, max(x, begx), text2, self.getstyle(style))
843 return len(text)
843 return len(text)
844
844
845 def addchr(self, y, x, begx, endx, c, l, style):
845 def addchr(self, y, x, begx, endx, c, l, style):
846 x0 = max(x, begx)
846 x0 = max(x, begx)
847 x1 = min(x+l, endx)
847 x1 = min(x+l, endx)
848 if x1>x0:
848 if x1>x0:
849 self.scr.addstr(y, x0, c*(x1-x0), self.getstyle(style))
849 self.scr.addstr(y, x0, c*(x1-x0), self.getstyle(style))
850 return l
850 return l
851
851
852 def _calcheaderlines(self, levels):
852 def _calcheaderlines(self, levels):
853 # Calculate how many headerlines do we have to display, if we have
853 # Calculate how many headerlines do we have to display, if we have
854 # ``levels`` browser levels
854 # ``levels`` browser levels
855 if levels is None:
855 if levels is None:
856 levels = len(self.levels)
856 levels = len(self.levels)
857 self._headerlines = min(self.maxheaders, levels)
857 self._headerlines = min(self.maxheaders, levels)
858 self._firstheaderline = levels-self._headerlines
858 self._firstheaderline = levels-self._headerlines
859
859
860 def getstylehere(self, style):
860 def getstylehere(self, style):
861 """
861 """
862 Return a style for displaying the original style ``style``
862 Return a style for displaying the original style ``style``
863 in the row the cursor is on.
863 in the row the cursor is on.
864 """
864 """
865 return astyle.Style(style.fg, style.bg, style.attrs | astyle.A_BOLD)
865 return astyle.Style(style.fg, astyle.COLOR_BLUE, style.attrs | astyle.A_BOLD)
866
866
867 def report(self, msg):
867 def report(self, msg):
868 """
868 """
869 Store the message ``msg`` for display below the footer line. This
869 Store the message ``msg`` for display below the footer line. This
870 will be displayed as soon as the screen is redrawn.
870 will be displayed as soon as the screen is redrawn.
871 """
871 """
872 self._report = msg
872 self._report = msg
873
873
874 def enter(self, item, mode, *attrs):
874 def enter(self, item, mode, *attrs):
875 """
875 """
876 Enter the object ``item`` in the mode ``mode``. If ``attrs`` is
876 Enter the object ``item`` in the mode ``mode``. If ``attrs`` is
877 specified, it will be used as a fixed list of attributes to display.
877 specified, it will be used as a fixed list of attributes to display.
878 """
878 """
879 try:
879 try:
880 iterator = ipipe.xiter(item, mode)
880 iterator = ipipe.xiter(item, mode)
881 except (KeyboardInterrupt, SystemExit):
881 except (KeyboardInterrupt, SystemExit):
882 raise
882 raise
883 except Exception, exc:
883 except Exception, exc:
884 curses.beep()
884 curses.beep()
885 self.report(exc)
885 self.report(exc)
886 else:
886 else:
887 self._calcheaderlines(len(self.levels)+1)
887 self._calcheaderlines(len(self.levels)+1)
888 level = _BrowserLevel(
888 level = _BrowserLevel(
889 self,
889 self,
890 item,
890 item,
891 iterator,
891 iterator,
892 self.scrsizey-1-self._headerlines-2,
892 self.scrsizey-1-self._headerlines-2,
893 *attrs
893 *attrs
894 )
894 )
895 self.levels.append(level)
895 self.levels.append(level)
896
896
897 def startkeyboardinput(self, mode):
897 def startkeyboardinput(self, mode):
898 """
898 """
899 Enter mode ``mode``, which requires keyboard input.
899 Enter mode ``mode``, which requires keyboard input.
900 """
900 """
901 self.mode = mode
901 self.mode = mode
902 self.prompts[mode].start()
902 self.prompts[mode].start()
903
903
904 def keylabel(self, keycode):
904 def keylabel(self, keycode):
905 """
905 """
906 Return a pretty name for the ``curses`` key ``keycode`` (used in the
906 Return a pretty name for the ``curses`` key ``keycode`` (used in the
907 help screen and in reports about unassigned keys).
907 help screen and in reports about unassigned keys).
908 """
908 """
909 if keycode <= 0xff:
909 if keycode <= 0xff:
910 specialsnames = {
910 specialsnames = {
911 ord("\n"): "RETURN",
911 ord("\n"): "RETURN",
912 ord(" "): "SPACE",
912 ord(" "): "SPACE",
913 ord("\t"): "TAB",
913 ord("\t"): "TAB",
914 ord("\x7f"): "DELETE",
914 ord("\x7f"): "DELETE",
915 ord("\x08"): "BACKSPACE",
915 ord("\x08"): "BACKSPACE",
916 }
916 }
917 if keycode in specialsnames:
917 if keycode in specialsnames:
918 return specialsnames[keycode]
918 return specialsnames[keycode]
919 elif 0x00 < keycode < 0x20:
919 elif 0x00 < keycode < 0x20:
920 return "CTRL-%s" % chr(keycode + 64)
920 return "CTRL-%s" % chr(keycode + 64)
921 return repr(chr(keycode))
921 return repr(chr(keycode))
922 for name in dir(curses):
922 for name in dir(curses):
923 if name.startswith("KEY_") and getattr(curses, name) == keycode:
923 if name.startswith("KEY_") and getattr(curses, name) == keycode:
924 return name
924 return name
925 return str(keycode)
925 return str(keycode)
926
926
927 def beep(self, force=False):
927 def beep(self, force=False):
928 if force or self._dobeep:
928 if force or self._dobeep:
929 curses.beep()
929 curses.beep()
930 # don't beep again (as long as the same key is pressed)
930 # don't beep again (as long as the same key is pressed)
931 self._dobeep = False
931 self._dobeep = False
932
932
933 def cmd_up(self):
933 def cmd_up(self):
934 """
934 """
935 Move the cursor to the previous row.
935 Move the cursor to the previous row.
936 """
936 """
937 level = self.levels[-1]
937 level = self.levels[-1]
938 self.report("up")
938 self.report("up")
939 level.moveto(level.curx, level.cury-self.stepy)
939 level.moveto(level.curx, level.cury-self.stepy)
940
940
941 def cmd_down(self):
941 def cmd_down(self):
942 """
942 """
943 Move the cursor to the next row.
943 Move the cursor to the next row.
944 """
944 """
945 level = self.levels[-1]
945 level = self.levels[-1]
946 self.report("down")
946 self.report("down")
947 level.moveto(level.curx, level.cury+self.stepy)
947 level.moveto(level.curx, level.cury+self.stepy)
948
948
949 def cmd_pageup(self):
949 def cmd_pageup(self):
950 """
950 """
951 Move the cursor up one page.
951 Move the cursor up one page.
952 """
952 """
953 level = self.levels[-1]
953 level = self.levels[-1]
954 self.report("page up")
954 self.report("page up")
955 level.moveto(level.curx, level.cury-level.mainsizey+self.pageoverlapy)
955 level.moveto(level.curx, level.cury-level.mainsizey+self.pageoverlapy)
956
956
957 def cmd_pagedown(self):
957 def cmd_pagedown(self):
958 """
958 """
959 Move the cursor down one page.
959 Move the cursor down one page.
960 """
960 """
961 level = self.levels[-1]
961 level = self.levels[-1]
962 self.report("page down")
962 self.report("page down")
963 level.moveto(level.curx, level.cury+level.mainsizey-self.pageoverlapy)
963 level.moveto(level.curx, level.cury+level.mainsizey-self.pageoverlapy)
964
964
965 def cmd_left(self):
965 def cmd_left(self):
966 """
966 """
967 Move the cursor left.
967 Move the cursor left.
968 """
968 """
969 level = self.levels[-1]
969 level = self.levels[-1]
970 self.report("left")
970 self.report("left")
971 level.moveto(level.curx-self.stepx, level.cury)
971 level.moveto(level.curx-self.stepx, level.cury)
972
972
973 def cmd_right(self):
973 def cmd_right(self):
974 """
974 """
975 Move the cursor right.
975 Move the cursor right.
976 """
976 """
977 level = self.levels[-1]
977 level = self.levels[-1]
978 self.report("right")
978 self.report("right")
979 level.moveto(level.curx+self.stepx, level.cury)
979 level.moveto(level.curx+self.stepx, level.cury)
980
980
981 def cmd_home(self):
981 def cmd_home(self):
982 """
982 """
983 Move the cursor to the first column.
983 Move the cursor to the first column.
984 """
984 """
985 level = self.levels[-1]
985 level = self.levels[-1]
986 self.report("home")
986 self.report("home")
987 level.moveto(0, level.cury)
987 level.moveto(0, level.cury)
988
988
989 def cmd_end(self):
989 def cmd_end(self):
990 """
990 """
991 Move the cursor to the last column.
991 Move the cursor to the last column.
992 """
992 """
993 level = self.levels[-1]
993 level = self.levels[-1]
994 self.report("end")
994 self.report("end")
995 level.moveto(level.datasizex+level.mainsizey-self.pageoverlapx, level.cury)
995 level.moveto(level.datasizex+level.mainsizey-self.pageoverlapx, level.cury)
996
996
997 def cmd_prevattr(self):
997 def cmd_prevattr(self):
998 """
998 """
999 Move the cursor one attribute column to the left.
999 Move the cursor one attribute column to the left.
1000 """
1000 """
1001 level = self.levels[-1]
1001 level = self.levels[-1]
1002 if level.displayattr[0] is None or level.displayattr[0] == 0:
1002 if level.displayattr[0] is None or level.displayattr[0] == 0:
1003 self.beep()
1003 self.beep()
1004 else:
1004 else:
1005 self.report("prevattr")
1005 self.report("prevattr")
1006 pos = 0
1006 pos = 0
1007 for (i, attrname) in enumerate(level.displayattrs):
1007 for (i, attrname) in enumerate(level.displayattrs):
1008 if i == level.displayattr[0]-1:
1008 if i == level.displayattr[0]-1:
1009 break
1009 break
1010 pos += level.colwidths[attrname] + 1
1010 pos += level.colwidths[attrname] + 1
1011 level.moveto(pos, level.cury)
1011 level.moveto(pos, level.cury)
1012
1012
1013 def cmd_nextattr(self):
1013 def cmd_nextattr(self):
1014 """
1014 """
1015 Move the cursor one attribute column to the right.
1015 Move the cursor one attribute column to the right.
1016 """
1016 """
1017 level = self.levels[-1]
1017 level = self.levels[-1]
1018 if level.displayattr[0] is None or level.displayattr[0] == len(level.displayattrs)-1:
1018 if level.displayattr[0] is None or level.displayattr[0] == len(level.displayattrs)-1:
1019 self.beep()
1019 self.beep()
1020 else:
1020 else:
1021 self.report("nextattr")
1021 self.report("nextattr")
1022 pos = 0
1022 pos = 0
1023 for (i, attrname) in enumerate(level.displayattrs):
1023 for (i, attrname) in enumerate(level.displayattrs):
1024 if i == level.displayattr[0]+1:
1024 if i == level.displayattr[0]+1:
1025 break
1025 break
1026 pos += level.colwidths[attrname] + 1
1026 pos += level.colwidths[attrname] + 1
1027 level.moveto(pos, level.cury)
1027 level.moveto(pos, level.cury)
1028
1028
1029 def cmd_pick(self):
1029 def cmd_pick(self):
1030 """
1030 """
1031 'Pick' the object under the cursor (i.e. the row the cursor is on).
1031 'Pick' the object under the cursor (i.e. the row the cursor is on).
1032 This leaves the browser and returns the picked object to the caller.
1032 This leaves the browser and returns the picked object to the caller.
1033 (In IPython this object will be available as the '_' variable.)
1033 (In IPython this object will be available as the '_' variable.)
1034 """
1034 """
1035 level = self.levels[-1]
1035 level = self.levels[-1]
1036 self.returnvalue = level.items[level.cury].item
1036 self.returnvalue = level.items[level.cury].item
1037 return True
1037 return True
1038
1038
1039 def cmd_pickattr(self):
1039 def cmd_pickattr(self):
1040 """
1040 """
1041 'Pick' the attribute under the cursor (i.e. the row/column the
1041 'Pick' the attribute under the cursor (i.e. the row/column the
1042 cursor is on).
1042 cursor is on).
1043 """
1043 """
1044 level = self.levels[-1]
1044 level = self.levels[-1]
1045 attrname = level.displayattr[1]
1045 attrname = level.displayattr[1]
1046 if attrname is ipipe.noitem:
1046 if attrname is ipipe.noitem:
1047 curses.beep()
1047 curses.beep()
1048 self.report(AttributeError(ipipe._attrname(attrname)))
1048 self.report(AttributeError(ipipe._attrname(attrname)))
1049 return
1049 return
1050 attr = ipipe._getattr(level.items[level.cury].item, attrname)
1050 attr = ipipe._getattr(level.items[level.cury].item, attrname)
1051 if attr is ipipe.noitem:
1051 if attr is ipipe.noitem:
1052 curses.beep()
1052 curses.beep()
1053 self.report(AttributeError(ipipe._attrname(attrname)))
1053 self.report(AttributeError(ipipe._attrname(attrname)))
1054 else:
1054 else:
1055 self.returnvalue = attr
1055 self.returnvalue = attr
1056 return True
1056 return True
1057
1057
1058 def cmd_pickallattrs(self):
1058 def cmd_pickallattrs(self):
1059 """
1059 """
1060 Pick' the complete column under the cursor (i.e. the attribute under
1060 Pick' the complete column under the cursor (i.e. the attribute under
1061 the cursor) from all currently fetched objects. These attributes
1061 the cursor) from all currently fetched objects. These attributes
1062 will be returned as a list.
1062 will be returned as a list.
1063 """
1063 """
1064 level = self.levels[-1]
1064 level = self.levels[-1]
1065 attrname = level.displayattr[1]
1065 attrname = level.displayattr[1]
1066 if attrname is ipipe.noitem:
1066 if attrname is ipipe.noitem:
1067 curses.beep()
1067 curses.beep()
1068 self.report(AttributeError(ipipe._attrname(attrname)))
1068 self.report(AttributeError(ipipe._attrname(attrname)))
1069 return
1069 return
1070 result = []
1070 result = []
1071 for cache in level.items:
1071 for cache in level.items:
1072 attr = ipipe._getattr(cache.item, attrname)
1072 attr = ipipe._getattr(cache.item, attrname)
1073 if attr is not ipipe.noitem:
1073 if attr is not ipipe.noitem:
1074 result.append(attr)
1074 result.append(attr)
1075 self.returnvalue = result
1075 self.returnvalue = result
1076 return True
1076 return True
1077
1077
1078 def cmd_pickmarked(self):
1078 def cmd_pickmarked(self):
1079 """
1079 """
1080 'Pick' marked objects. Marked objects will be returned as a list.
1080 'Pick' marked objects. Marked objects will be returned as a list.
1081 """
1081 """
1082 level = self.levels[-1]
1082 level = self.levels[-1]
1083 self.returnvalue = [cache.item for cache in level.items if cache.marked]
1083 self.returnvalue = [cache.item for cache in level.items if cache.marked]
1084 return True
1084 return True
1085
1085
1086 def cmd_pickmarkedattr(self):
1086 def cmd_pickmarkedattr(self):
1087 """
1087 """
1088 'Pick' the attribute under the cursor from all marked objects
1088 'Pick' the attribute under the cursor from all marked objects
1089 (This returns a list).
1089 (This returns a list).
1090 """
1090 """
1091
1091
1092 level = self.levels[-1]
1092 level = self.levels[-1]
1093 attrname = level.displayattr[1]
1093 attrname = level.displayattr[1]
1094 if attrname is ipipe.noitem:
1094 if attrname is ipipe.noitem:
1095 curses.beep()
1095 curses.beep()
1096 self.report(AttributeError(ipipe._attrname(attrname)))
1096 self.report(AttributeError(ipipe._attrname(attrname)))
1097 return
1097 return
1098 result = []
1098 result = []
1099 for cache in level.items:
1099 for cache in level.items:
1100 if cache.marked:
1100 if cache.marked:
1101 attr = ipipe._getattr(cache.item, attrname)
1101 attr = ipipe._getattr(cache.item, attrname)
1102 if attr is not ipipe.noitem:
1102 if attr is not ipipe.noitem:
1103 result.append(attr)
1103 result.append(attr)
1104 self.returnvalue = result
1104 self.returnvalue = result
1105 return True
1105 return True
1106
1106
1107 def cmd_markrange(self):
1107 def cmd_markrange(self):
1108 """
1108 """
1109 Mark all objects from the last marked object before the current cursor
1109 Mark all objects from the last marked object before the current cursor
1110 position to the cursor position.
1110 position to the cursor position.
1111 """
1111 """
1112 level = self.levels[-1]
1112 level = self.levels[-1]
1113 self.report("markrange")
1113 self.report("markrange")
1114 start = None
1114 start = None
1115 if level.items:
1115 if level.items:
1116 for i in xrange(level.cury, -1, -1):
1116 for i in xrange(level.cury, -1, -1):
1117 if level.items[i].marked:
1117 if level.items[i].marked:
1118 start = i
1118 start = i
1119 break
1119 break
1120 if start is None:
1120 if start is None:
1121 self.report(CommandError("no mark before cursor"))
1121 self.report(CommandError("no mark before cursor"))
1122 curses.beep()
1122 curses.beep()
1123 else:
1123 else:
1124 for i in xrange(start, level.cury+1):
1124 for i in xrange(start, level.cury+1):
1125 cache = level.items[i]
1125 cache = level.items[i]
1126 if not cache.marked:
1126 if not cache.marked:
1127 cache.marked = True
1127 cache.marked = True
1128 level.marked += 1
1128 level.marked += 1
1129
1129
1130 def cmd_enterdefault(self):
1130 def cmd_enterdefault(self):
1131 """
1131 """
1132 Enter the object under the cursor. (what this mean depends on the object
1132 Enter the object under the cursor. (what this mean depends on the object
1133 itself (i.e. how it implements the '__xiter__' method). This opens a new
1133 itself (i.e. how it implements the '__xiter__' method). This opens a new
1134 browser 'level'.
1134 browser 'level'.
1135 """
1135 """
1136 level = self.levels[-1]
1136 level = self.levels[-1]
1137 try:
1137 try:
1138 item = level.items[level.cury].item
1138 item = level.items[level.cury].item
1139 except IndexError:
1139 except IndexError:
1140 self.report(CommandError("No object"))
1140 self.report(CommandError("No object"))
1141 curses.beep()
1141 curses.beep()
1142 else:
1142 else:
1143 self.report("entering object (default mode)...")
1143 self.report("entering object (default mode)...")
1144 self.enter(item, "default")
1144 self.enter(item, "default")
1145
1145
1146 def cmd_leave(self):
1146 def cmd_leave(self):
1147 """
1147 """
1148 Leave the current browser level and go back to the previous one.
1148 Leave the current browser level and go back to the previous one.
1149 """
1149 """
1150 self.report("leave")
1150 self.report("leave")
1151 if len(self.levels) > 1:
1151 if len(self.levels) > 1:
1152 self._calcheaderlines(len(self.levels)-1)
1152 self._calcheaderlines(len(self.levels)-1)
1153 self.levels.pop(-1)
1153 self.levels.pop(-1)
1154 else:
1154 else:
1155 self.report(CommandError("This is the last level"))
1155 self.report(CommandError("This is the last level"))
1156 curses.beep()
1156 curses.beep()
1157
1157
1158 def cmd_enter(self):
1158 def cmd_enter(self):
1159 """
1159 """
1160 Enter the object under the cursor. If the object provides different
1160 Enter the object under the cursor. If the object provides different
1161 enter modes a menu of all modes will be presented; choose one and enter
1161 enter modes a menu of all modes will be presented; choose one and enter
1162 it (via the 'enter' or 'enterdefault' command).
1162 it (via the 'enter' or 'enterdefault' command).
1163 """
1163 """
1164 level = self.levels[-1]
1164 level = self.levels[-1]
1165 try:
1165 try:
1166 item = level.items[level.cury].item
1166 item = level.items[level.cury].item
1167 except IndexError:
1167 except IndexError:
1168 self.report(CommandError("No object"))
1168 self.report(CommandError("No object"))
1169 curses.beep()
1169 curses.beep()
1170 else:
1170 else:
1171 self.report("entering object...")
1171 self.report("entering object...")
1172 self.enter(item, None)
1172 self.enter(item, None)
1173
1173
1174 def cmd_enterattr(self):
1174 def cmd_enterattr(self):
1175 """
1175 """
1176 Enter the attribute under the cursor.
1176 Enter the attribute under the cursor.
1177 """
1177 """
1178 level = self.levels[-1]
1178 level = self.levels[-1]
1179 attrname = level.displayattr[1]
1179 attrname = level.displayattr[1]
1180 if attrname is ipipe.noitem:
1180 if attrname is ipipe.noitem:
1181 curses.beep()
1181 curses.beep()
1182 self.report(AttributeError(ipipe._attrname(attrname)))
1182 self.report(AttributeError(ipipe._attrname(attrname)))
1183 return
1183 return
1184 try:
1184 try:
1185 item = level.items[level.cury].item
1185 item = level.items[level.cury].item
1186 except IndexError:
1186 except IndexError:
1187 self.report(CommandError("No object"))
1187 self.report(CommandError("No object"))
1188 curses.beep()
1188 curses.beep()
1189 else:
1189 else:
1190 attr = ipipe._getattr(item, attrname)
1190 attr = ipipe._getattr(item, attrname)
1191 if attr is ipipe.noitem:
1191 if attr is ipipe.noitem:
1192 self.report(AttributeError(ipipe._attrname(attrname)))
1192 self.report(AttributeError(ipipe._attrname(attrname)))
1193 else:
1193 else:
1194 self.report("entering object attribute %s..." % ipipe._attrname(attrname))
1194 self.report("entering object attribute %s..." % ipipe._attrname(attrname))
1195 self.enter(attr, None)
1195 self.enter(attr, None)
1196
1196
1197 def cmd_detail(self):
1197 def cmd_detail(self):
1198 """
1198 """
1199 Show a detail view of the object under the cursor. This shows the
1199 Show a detail view of the object under the cursor. This shows the
1200 name, type, doc string and value of the object attributes (and it
1200 name, type, doc string and value of the object attributes (and it
1201 might show more attributes than in the list view, depending on
1201 might show more attributes than in the list view, depending on
1202 the object).
1202 the object).
1203 """
1203 """
1204 level = self.levels[-1]
1204 level = self.levels[-1]
1205 try:
1205 try:
1206 item = level.items[level.cury].item
1206 item = level.items[level.cury].item
1207 except IndexError:
1207 except IndexError:
1208 self.report(CommandError("No object"))
1208 self.report(CommandError("No object"))
1209 curses.beep()
1209 curses.beep()
1210 else:
1210 else:
1211 self.report("entering detail view for object...")
1211 self.report("entering detail view for object...")
1212 self.enter(item, "detail")
1212 self.enter(item, "detail")
1213
1213
1214 def cmd_detailattr(self):
1214 def cmd_detailattr(self):
1215 """
1215 """
1216 Show a detail view of the attribute under the cursor.
1216 Show a detail view of the attribute under the cursor.
1217 """
1217 """
1218 level = self.levels[-1]
1218 level = self.levels[-1]
1219 attrname = level.displayattr[1]
1219 attrname = level.displayattr[1]
1220 if attrname is ipipe.noitem:
1220 if attrname is ipipe.noitem:
1221 curses.beep()
1221 curses.beep()
1222 self.report(AttributeError(ipipe._attrname(attrname)))
1222 self.report(AttributeError(ipipe._attrname(attrname)))
1223 return
1223 return
1224 try:
1224 try:
1225 item = level.items[level.cury].item
1225 item = level.items[level.cury].item
1226 except IndexError:
1226 except IndexError:
1227 self.report(CommandError("No object"))
1227 self.report(CommandError("No object"))
1228 curses.beep()
1228 curses.beep()
1229 else:
1229 else:
1230 attr = ipipe._getattr(item, attrname)
1230 attr = ipipe._getattr(item, attrname)
1231 if attr is ipipe.noitem:
1231 if attr is ipipe.noitem:
1232 self.report(AttributeError(ipipe._attrname(attrname)))
1232 self.report(AttributeError(ipipe._attrname(attrname)))
1233 else:
1233 else:
1234 self.report("entering detail view for attribute...")
1234 self.report("entering detail view for attribute...")
1235 self.enter(attr, "detail")
1235 self.enter(attr, "detail")
1236
1236
1237 def cmd_tooglemark(self):
1237 def cmd_tooglemark(self):
1238 """
1238 """
1239 Mark/unmark the object under the cursor. Marked objects have a '!'
1239 Mark/unmark the object under the cursor. Marked objects have a '!'
1240 after the row number).
1240 after the row number).
1241 """
1241 """
1242 level = self.levels[-1]
1242 level = self.levels[-1]
1243 self.report("toggle mark")
1243 self.report("toggle mark")
1244 try:
1244 try:
1245 item = level.items[level.cury]
1245 item = level.items[level.cury]
1246 except IndexError: # no items?
1246 except IndexError: # no items?
1247 pass
1247 pass
1248 else:
1248 else:
1249 if item.marked:
1249 if item.marked:
1250 item.marked = False
1250 item.marked = False
1251 level.marked -= 1
1251 level.marked -= 1
1252 else:
1252 else:
1253 item.marked = True
1253 item.marked = True
1254 level.marked += 1
1254 level.marked += 1
1255
1255
1256 def cmd_sortattrasc(self):
1256 def cmd_sortattrasc(self):
1257 """
1257 """
1258 Sort the objects (in ascending order) using the attribute under
1258 Sort the objects (in ascending order) using the attribute under
1259 the cursor as the sort key.
1259 the cursor as the sort key.
1260 """
1260 """
1261 level = self.levels[-1]
1261 level = self.levels[-1]
1262 attrname = level.displayattr[1]
1262 attrname = level.displayattr[1]
1263 if attrname is ipipe.noitem:
1263 if attrname is ipipe.noitem:
1264 curses.beep()
1264 curses.beep()
1265 self.report(AttributeError(ipipe._attrname(attrname)))
1265 self.report(AttributeError(ipipe._attrname(attrname)))
1266 return
1266 return
1267 self.report("sort by %s (ascending)" % ipipe._attrname(attrname))
1267 self.report("sort by %s (ascending)" % ipipe._attrname(attrname))
1268 def key(item):
1268 def key(item):
1269 try:
1269 try:
1270 return ipipe._getattr(item, attrname, None)
1270 return ipipe._getattr(item, attrname, None)
1271 except (KeyboardInterrupt, SystemExit):
1271 except (KeyboardInterrupt, SystemExit):
1272 raise
1272 raise
1273 except Exception:
1273 except Exception:
1274 return None
1274 return None
1275 level.sort(key)
1275 level.sort(key)
1276
1276
1277 def cmd_sortattrdesc(self):
1277 def cmd_sortattrdesc(self):
1278 """
1278 """
1279 Sort the objects (in descending order) using the attribute under
1279 Sort the objects (in descending order) using the attribute under
1280 the cursor as the sort key.
1280 the cursor as the sort key.
1281 """
1281 """
1282 level = self.levels[-1]
1282 level = self.levels[-1]
1283 attrname = level.displayattr[1]
1283 attrname = level.displayattr[1]
1284 if attrname is ipipe.noitem:
1284 if attrname is ipipe.noitem:
1285 curses.beep()
1285 curses.beep()
1286 self.report(AttributeError(ipipe._attrname(attrname)))
1286 self.report(AttributeError(ipipe._attrname(attrname)))
1287 return
1287 return
1288 self.report("sort by %s (descending)" % ipipe._attrname(attrname))
1288 self.report("sort by %s (descending)" % ipipe._attrname(attrname))
1289 def key(item):
1289 def key(item):
1290 try:
1290 try:
1291 return ipipe._getattr(item, attrname, None)
1291 return ipipe._getattr(item, attrname, None)
1292 except (KeyboardInterrupt, SystemExit):
1292 except (KeyboardInterrupt, SystemExit):
1293 raise
1293 raise
1294 except Exception:
1294 except Exception:
1295 return None
1295 return None
1296 level.sort(key, reverse=True)
1296 level.sort(key, reverse=True)
1297
1297
1298 def cmd_hideattr(self):
1298 def cmd_hideattr(self):
1299 """
1299 """
1300 Hide the attribute under the cursor.
1300 Hide the attribute under the cursor.
1301 """
1301 """
1302 level = self.levels[-1]
1302 level = self.levels[-1]
1303 if level.displayattr[0] is None:
1303 if level.displayattr[0] is None:
1304 self.beep()
1304 self.beep()
1305 else:
1305 else:
1306 self.report("hideattr")
1306 self.report("hideattr")
1307 level.hiddenattrs.add(level.displayattr[1])
1307 level.hiddenattrs.add(level.displayattr[1])
1308 level.moveto(level.curx, level.cury, refresh=True)
1308 level.moveto(level.curx, level.cury, refresh=True)
1309
1309
1310 def cmd_unhideattrs(self):
1310 def cmd_unhideattrs(self):
1311 """
1311 """
1312 Make all attributes visible again.
1312 Make all attributes visible again.
1313 """
1313 """
1314 level = self.levels[-1]
1314 level = self.levels[-1]
1315 self.report("unhideattrs")
1315 self.report("unhideattrs")
1316 level.hiddenattrs.clear()
1316 level.hiddenattrs.clear()
1317 level.moveto(level.curx, level.cury, refresh=True)
1317 level.moveto(level.curx, level.cury, refresh=True)
1318
1318
1319 def cmd_goto(self):
1319 def cmd_goto(self):
1320 """
1320 """
1321 Jump to a row. The row number can be entered at the
1321 Jump to a row. The row number can be entered at the
1322 bottom of the screen.
1322 bottom of the screen.
1323 """
1323 """
1324 self.startkeyboardinput("goto")
1324 self.startkeyboardinput("goto")
1325
1325
1326 def cmd_find(self):
1326 def cmd_find(self):
1327 """
1327 """
1328 Search forward for a row. The search condition can be entered at the
1328 Search forward for a row. The search condition can be entered at the
1329 bottom of the screen.
1329 bottom of the screen.
1330 """
1330 """
1331 self.startkeyboardinput("find")
1331 self.startkeyboardinput("find")
1332
1332
1333 def cmd_findbackwards(self):
1333 def cmd_findbackwards(self):
1334 """
1334 """
1335 Search backward for a row. The search condition can be entered at the
1335 Search backward for a row. The search condition can be entered at the
1336 bottom of the screen.
1336 bottom of the screen.
1337 """
1337 """
1338 self.startkeyboardinput("findbackwards")
1338 self.startkeyboardinput("findbackwards")
1339
1339
1340 def cmd_help(self):
1340 def cmd_help(self):
1341 """
1341 """
1342 Opens the help screen as a new browser level, describing keyboard
1342 Opens the help screen as a new browser level, describing keyboard
1343 shortcuts.
1343 shortcuts.
1344 """
1344 """
1345 for level in self.levels:
1345 for level in self.levels:
1346 if isinstance(level.input, _BrowserHelp):
1346 if isinstance(level.input, _BrowserHelp):
1347 curses.beep()
1347 curses.beep()
1348 self.report(CommandError("help already active"))
1348 self.report(CommandError("help already active"))
1349 return
1349 return
1350
1350
1351 self.enter(_BrowserHelp(self), "default")
1351 self.enter(_BrowserHelp(self), "default")
1352
1352
1353 def cmd_quit(self):
1353 def cmd_quit(self):
1354 """
1354 """
1355 Quit the browser and return to the IPython prompt.
1355 Quit the browser and return to the IPython prompt.
1356 """
1356 """
1357 self.returnvalue = None
1357 self.returnvalue = None
1358 return True
1358 return True
1359
1359
1360 def sigwinchhandler(self, signal, frame):
1360 def sigwinchhandler(self, signal, frame):
1361 self.resized = True
1361 self.resized = True
1362
1362
1363 def _dodisplay(self, scr):
1363 def _dodisplay(self, scr):
1364 """
1364 """
1365 This method is the workhorse of the browser. It handles screen
1365 This method is the workhorse of the browser. It handles screen
1366 drawing and the keyboard.
1366 drawing and the keyboard.
1367 """
1367 """
1368 self.scr = scr
1368 self.scr = scr
1369 curses.halfdelay(1)
1369 curses.halfdelay(1)
1370 footery = 2
1370 footery = 2
1371
1371
1372 keys = []
1372 keys = []
1373 for key in ("quit", "help"):
1373 for key in ("quit", "help"):
1374 key = self.keymap.findkey(key, None)
1374 key = self.keymap.findkey(key, None)
1375 if key is not None:
1375 if key is not None:
1376 keys.append("%s=quit" % self.keylabel(key))
1376 keys.append("%s=quit" % self.keylabel(key))
1377 helpmsg = " | %s" % " ".join(keys)
1377 helpmsg = " | %s" % " ".join(keys)
1378
1378
1379 scr.clear()
1379 scr.clear()
1380 msg = "Fetching first batch of objects..."
1380 msg = "Fetching first batch of objects..."
1381 (self.scrsizey, self.scrsizex) = scr.getmaxyx()
1381 (self.scrsizey, self.scrsizex) = scr.getmaxyx()
1382 scr.addstr(self.scrsizey//2, (self.scrsizex-len(msg))//2, msg)
1382 scr.addstr(self.scrsizey//2, (self.scrsizex-len(msg))//2, msg)
1383 scr.refresh()
1383 scr.refresh()
1384
1384
1385 lastc = -1
1385 lastc = -1
1386
1386
1387 self.levels = []
1387 self.levels = []
1388 # enter the first level
1388 # enter the first level
1389 self.enter(self.input, ipipe.xiter(self.input, "default"), *self.attrs)
1389 self.enter(self.input, ipipe.xiter(self.input, "default"), *self.attrs)
1390
1390
1391 self._calcheaderlines(None)
1391 self._calcheaderlines(None)
1392
1392
1393 while True:
1393 while True:
1394 level = self.levels[-1]
1394 level = self.levels[-1]
1395 (self.scrsizey, self.scrsizex) = scr.getmaxyx()
1395 (self.scrsizey, self.scrsizex) = scr.getmaxyx()
1396 level.mainsizey = self.scrsizey-1-self._headerlines-footery
1396 level.mainsizey = self.scrsizey-1-self._headerlines-footery
1397
1397
1398 # Paint object header
1398 # Paint object header
1399 for i in xrange(self._firstheaderline, self._firstheaderline+self._headerlines):
1399 for i in xrange(self._firstheaderline, self._firstheaderline+self._headerlines):
1400 lv = self.levels[i]
1400 lv = self.levels[i]
1401 posx = 0
1401 posx = 0
1402 posy = i-self._firstheaderline
1402 posy = i-self._firstheaderline
1403 endx = self.scrsizex
1403 endx = self.scrsizex
1404 if i: # not the first level
1404 if i: # not the first level
1405 msg = " (%d/%d" % (self.levels[i-1].cury, len(self.levels[i-1].items))
1405 msg = " (%d/%d" % (self.levels[i-1].cury, len(self.levels[i-1].items))
1406 if not self.levels[i-1].exhausted:
1406 if not self.levels[i-1].exhausted:
1407 msg += "+"
1407 msg += "+"
1408 msg += ") "
1408 msg += ") "
1409 endx -= len(msg)+1
1409 endx -= len(msg)+1
1410 posx += self.addstr(posy, posx, 0, endx, " ibrowse #%d: " % i, self.style_objheadertext)
1410 posx += self.addstr(posy, posx, 0, endx, " ibrowse #%d: " % i, self.style_objheadertext)
1411 for (style, text) in lv.header:
1411 for (style, text) in lv.header:
1412 posx += self.addstr(posy, posx, 0, endx, text, self.style_objheaderobject)
1412 posx += self.addstr(posy, posx, 0, endx, text, self.style_objheaderobject)
1413 if posx >= endx:
1413 if posx >= endx:
1414 break
1414 break
1415 if i:
1415 if i:
1416 posx += self.addstr(posy, posx, 0, self.scrsizex, msg, self.style_objheadernumber)
1416 posx += self.addstr(posy, posx, 0, self.scrsizex, msg, self.style_objheadernumber)
1417 posx += self.addchr(posy, posx, 0, self.scrsizex, " ", self.scrsizex-posx, self.style_objheadernumber)
1417 posx += self.addchr(posy, posx, 0, self.scrsizex, " ", self.scrsizex-posx, self.style_objheadernumber)
1418
1418
1419 if not level.items:
1419 if not level.items:
1420 self.addchr(self._headerlines, 0, 0, self.scrsizex, " ", self.scrsizex, self.style_colheader)
1420 self.addchr(self._headerlines, 0, 0, self.scrsizex, " ", self.scrsizex, self.style_colheader)
1421 self.addstr(self._headerlines+1, 0, 0, self.scrsizex, " <empty>", astyle.style_error)
1421 self.addstr(self._headerlines+1, 0, 0, self.scrsizex, " <empty>", astyle.style_error)
1422 scr.clrtobot()
1422 scr.clrtobot()
1423 else:
1423 else:
1424 # Paint column headers
1424 # Paint column headers
1425 scr.move(self._headerlines, 0)
1425 scr.move(self._headerlines, 0)
1426 scr.addstr(" %*s " % (level.numbersizex, "#"), self.getstyle(self.style_colheader))
1426 scr.addstr(" %*s " % (level.numbersizex, "#"), self.getstyle(self.style_colheader))
1427 scr.addstr(self.headersepchar, self.getstyle(self.style_colheadersep))
1427 scr.addstr(self.headersepchar, self.getstyle(self.style_colheadersep))
1428 begx = level.numbersizex+3
1428 begx = level.numbersizex+3
1429 posx = begx-level.datastartx
1429 posx = begx-level.datastartx
1430 for attrname in level.displayattrs:
1430 for attrname in level.displayattrs:
1431 strattrname = ipipe._attrname(attrname)
1431 strattrname = ipipe._attrname(attrname)
1432 cwidth = level.colwidths[attrname]
1432 cwidth = level.colwidths[attrname]
1433 header = strattrname.ljust(cwidth)
1433 header = strattrname.ljust(cwidth)
1434 if attrname == level.displayattr[1]:
1434 if attrname == level.displayattr[1]:
1435 style = self.style_colheaderhere
1435 style = self.style_colheaderhere
1436 else:
1436 else:
1437 style = self.style_colheader
1437 style = self.style_colheader
1438 posx += self.addstr(self._headerlines, posx, begx, self.scrsizex, header, style)
1438 posx += self.addstr(self._headerlines, posx, begx, self.scrsizex, header, style)
1439 posx += self.addstr(self._headerlines, posx, begx, self.scrsizex, self.headersepchar, self.style_colheadersep)
1439 posx += self.addstr(self._headerlines, posx, begx, self.scrsizex, self.headersepchar, self.style_colheadersep)
1440 if posx >= self.scrsizex:
1440 if posx >= self.scrsizex:
1441 break
1441 break
1442 else:
1442 else:
1443 scr.addstr(" "*(self.scrsizex-posx), self.getstyle(self.style_colheader))
1443 scr.addstr(" "*(self.scrsizex-posx), self.getstyle(self.style_colheader))
1444
1444
1445 # Paint rows
1445 # Paint rows
1446 posy = self._headerlines+1+level.datastarty
1446 posy = self._headerlines+1+level.datastarty
1447 for i in xrange(level.datastarty, min(level.datastarty+level.mainsizey, len(level.items))):
1447 for i in xrange(level.datastarty, min(level.datastarty+level.mainsizey, len(level.items))):
1448 cache = level.items[i]
1448 cache = level.items[i]
1449 if i == level.cury:
1449 if i == level.cury:
1450 style = self.style_numberhere
1450 style = self.style_numberhere
1451 else:
1451 else:
1452 style = self.style_number
1452 style = self.style_number
1453
1453
1454 posy = self._headerlines+1+i-level.datastarty
1454 posy = self._headerlines+1+i-level.datastarty
1455 posx = begx-level.datastartx
1455 posx = begx-level.datastartx
1456
1456
1457 scr.move(posy, 0)
1457 scr.move(posy, 0)
1458 scr.addstr(" %*d%s" % (level.numbersizex, i, " !"[cache.marked]), self.getstyle(style))
1458 scr.addstr(" %*d%s" % (level.numbersizex, i, " !"[cache.marked]), self.getstyle(style))
1459 scr.addstr(self.headersepchar, self.getstyle(self.style_sep))
1459 scr.addstr(self.headersepchar, self.getstyle(self.style_sep))
1460
1460
1461 for attrname in level.displayattrs:
1461 for attrname in level.displayattrs:
1462 cwidth = level.colwidths[attrname]
1462 cwidth = level.colwidths[attrname]
1463 try:
1463 try:
1464 (align, length, parts) = level.displayrows[i-level.datastarty][attrname]
1464 (align, length, parts) = level.displayrows[i-level.datastarty][attrname]
1465 except KeyError:
1465 except KeyError:
1466 align = 2
1466 align = 2
1467 style = astyle.style_nodata
1467 style = astyle.style_nodata
1468 padstyle = self.style_datapad
1468 padstyle = self.style_datapad
1469 sepstyle = self.style_sep
1469 sepstyle = self.style_sep
1470 if i == level.cury:
1470 if i == level.cury:
1471 padstyle = self.getstylehere(padstyle)
1471 padstyle = self.getstylehere(padstyle)
1472 sepstyle = self.getstylehere(sepstyle)
1472 sepstyle = self.getstylehere(sepstyle)
1473 if align == 2:
1473 if align == 2:
1474 posx += self.addchr(posy, posx, begx, self.scrsizex, self.nodatachar, cwidth, style)
1474 posx += self.addchr(posy, posx, begx, self.scrsizex, self.nodatachar, cwidth, style)
1475 else:
1475 else:
1476 if align == 1:
1476 if align == 1:
1477 posx += self.addchr(posy, posx, begx, self.scrsizex, self.datapadchar, cwidth-length, padstyle)
1477 posx += self.addchr(posy, posx, begx, self.scrsizex, self.datapadchar, cwidth-length, padstyle)
1478 elif align == 0:
1478 elif align == 0:
1479 pad1 = (cwidth-length)//2
1479 pad1 = (cwidth-length)//2
1480 pad2 = cwidth-length-len(pad1)
1480 pad2 = cwidth-length-len(pad1)
1481 posx += self.addchr(posy, posx, begx, self.scrsizex, self.datapadchar, pad1, padstyle)
1481 posx += self.addchr(posy, posx, begx, self.scrsizex, self.datapadchar, pad1, padstyle)
1482 for (style, text) in parts:
1482 for (style, text) in parts:
1483 if i == level.cury:
1483 if i == level.cury:
1484 style = self.getstylehere(style)
1484 style = self.getstylehere(style)
1485 posx += self.addstr(posy, posx, begx, self.scrsizex, text, style)
1485 posx += self.addstr(posy, posx, begx, self.scrsizex, text, style)
1486 if posx >= self.scrsizex:
1486 if posx >= self.scrsizex:
1487 break
1487 break
1488 if align == -1:
1488 if align == -1:
1489 posx += self.addchr(posy, posx, begx, self.scrsizex, self.datapadchar, cwidth-length, padstyle)
1489 posx += self.addchr(posy, posx, begx, self.scrsizex, self.datapadchar, cwidth-length, padstyle)
1490 elif align == 0:
1490 elif align == 0:
1491 posx += self.addchr(posy, posx, begx, self.scrsizex, self.datapadchar, pad2, padstyle)
1491 posx += self.addchr(posy, posx, begx, self.scrsizex, self.datapadchar, pad2, padstyle)
1492 posx += self.addstr(posy, posx, begx, self.scrsizex, self.datasepchar, sepstyle)
1492 posx += self.addstr(posy, posx, begx, self.scrsizex, self.datasepchar, sepstyle)
1493 else:
1493 else:
1494 scr.clrtoeol()
1494 scr.clrtoeol()
1495
1495
1496 # Add blank row headers for the rest of the screen
1496 # Add blank row headers for the rest of the screen
1497 for posy in xrange(posy+1, self.scrsizey-2):
1497 for posy in xrange(posy+1, self.scrsizey-2):
1498 scr.addstr(posy, 0, " " * (level.numbersizex+2), self.getstyle(self.style_colheader))
1498 scr.addstr(posy, 0, " " * (level.numbersizex+2), self.getstyle(self.style_colheader))
1499 scr.clrtoeol()
1499 scr.clrtoeol()
1500
1500
1501 posy = self.scrsizey-footery
1501 posy = self.scrsizey-footery
1502 # Display footer
1502 # Display footer
1503 scr.addstr(posy, 0, " "*self.scrsizex, self.getstyle(self.style_footer))
1503 scr.addstr(posy, 0, " "*self.scrsizex, self.getstyle(self.style_footer))
1504
1504
1505 if level.exhausted:
1505 if level.exhausted:
1506 flag = ""
1506 flag = ""
1507 else:
1507 else:
1508 flag = "+"
1508 flag = "+"
1509
1509
1510 endx = self.scrsizex-len(helpmsg)-1
1510 endx = self.scrsizex-len(helpmsg)-1
1511 scr.addstr(posy, endx, helpmsg, self.getstyle(self.style_footer))
1511 scr.addstr(posy, endx, helpmsg, self.getstyle(self.style_footer))
1512
1512
1513 posx = 0
1513 posx = 0
1514 msg = " %d%s objects (%d marked): " % (len(level.items), flag, level.marked)
1514 msg = " %d%s objects (%d marked): " % (len(level.items), flag, level.marked)
1515 posx += self.addstr(posy, posx, 0, endx, msg, self.style_footer)
1515 posx += self.addstr(posy, posx, 0, endx, msg, self.style_footer)
1516 try:
1516 try:
1517 item = level.items[level.cury].item
1517 item = level.items[level.cury].item
1518 except IndexError: # empty
1518 except IndexError: # empty
1519 pass
1519 pass
1520 else:
1520 else:
1521 for (nostyle, text) in ipipe.xrepr(item, "footer"):
1521 for (nostyle, text) in ipipe.xrepr(item, "footer"):
1522 if not isinstance(nostyle, int):
1522 if not isinstance(nostyle, int):
1523 posx += self.addstr(posy, posx, 0, endx, text, self.style_footer)
1523 posx += self.addstr(posy, posx, 0, endx, text, self.style_footer)
1524 if posx >= endx:
1524 if posx >= endx:
1525 break
1525 break
1526
1526
1527 attrstyle = [(astyle.style_default, "no attribute")]
1527 attrstyle = [(astyle.style_default, "no attribute")]
1528 attrname = level.displayattr[1]
1528 attrname = level.displayattr[1]
1529 if attrname is not ipipe.noitem and attrname is not None:
1529 if attrname is not ipipe.noitem and attrname is not None:
1530 posx += self.addstr(posy, posx, 0, endx, " | ", self.style_footer)
1530 posx += self.addstr(posy, posx, 0, endx, " | ", self.style_footer)
1531 posx += self.addstr(posy, posx, 0, endx, ipipe._attrname(attrname), self.style_footer)
1531 posx += self.addstr(posy, posx, 0, endx, ipipe._attrname(attrname), self.style_footer)
1532 posx += self.addstr(posy, posx, 0, endx, ": ", self.style_footer)
1532 posx += self.addstr(posy, posx, 0, endx, ": ", self.style_footer)
1533 try:
1533 try:
1534 attr = ipipe._getattr(item, attrname)
1534 attr = ipipe._getattr(item, attrname)
1535 except (SystemExit, KeyboardInterrupt):
1535 except (SystemExit, KeyboardInterrupt):
1536 raise
1536 raise
1537 except Exception, exc:
1537 except Exception, exc:
1538 attr = exc
1538 attr = exc
1539 if attr is not ipipe.noitem:
1539 if attr is not ipipe.noitem:
1540 attrstyle = ipipe.xrepr(attr, "footer")
1540 attrstyle = ipipe.xrepr(attr, "footer")
1541 for (nostyle, text) in attrstyle:
1541 for (nostyle, text) in attrstyle:
1542 if not isinstance(nostyle, int):
1542 if not isinstance(nostyle, int):
1543 posx += self.addstr(posy, posx, 0, endx, text, self.style_footer)
1543 posx += self.addstr(posy, posx, 0, endx, text, self.style_footer)
1544 if posx >= endx:
1544 if posx >= endx:
1545 break
1545 break
1546
1546
1547 try:
1547 try:
1548 # Display input prompt
1548 # Display input prompt
1549 if self.mode in self.prompts:
1549 if self.mode in self.prompts:
1550 history = self.prompts[self.mode]
1550 history = self.prompts[self.mode]
1551 posx = 0
1551 posx = 0
1552 posy = self.scrsizey-1
1552 posy = self.scrsizey-1
1553 posx += self.addstr(posy, posx, 0, endx, history.prompt, astyle.style_default)
1553 posx += self.addstr(posy, posx, 0, endx, history.prompt, astyle.style_default)
1554 posx += self.addstr(posy, posx, 0, endx, " [", astyle.style_default)
1554 posx += self.addstr(posy, posx, 0, endx, " [", astyle.style_default)
1555 if history.cury==-1:
1555 if history.cury==-1:
1556 text = "new"
1556 text = "new"
1557 else:
1557 else:
1558 text = str(history.cury+1)
1558 text = str(history.cury+1)
1559 posx += self.addstr(posy, posx, 0, endx, text, astyle.style_type_number)
1559 posx += self.addstr(posy, posx, 0, endx, text, astyle.style_type_number)
1560 if history.history:
1560 if history.history:
1561 posx += self.addstr(posy, posx, 0, endx, "/", astyle.style_default)
1561 posx += self.addstr(posy, posx, 0, endx, "/", astyle.style_default)
1562 posx += self.addstr(posy, posx, 0, endx, str(len(history.history)), astyle.style_type_number)
1562 posx += self.addstr(posy, posx, 0, endx, str(len(history.history)), astyle.style_type_number)
1563 posx += self.addstr(posy, posx, 0, endx, "]: ", astyle.style_default)
1563 posx += self.addstr(posy, posx, 0, endx, "]: ", astyle.style_default)
1564 inputstartx = posx
1564 inputstartx = posx
1565 posx += self.addstr(posy, posx, 0, endx, history.input, astyle.style_default)
1565 posx += self.addstr(posy, posx, 0, endx, history.input, astyle.style_default)
1566 # Display report
1566 # Display report
1567 else:
1567 else:
1568 if self._report is not None:
1568 if self._report is not None:
1569 if isinstance(self._report, Exception):
1569 if isinstance(self._report, Exception):
1570 style = self.getstyle(astyle.style_error)
1570 style = self.getstyle(astyle.style_error)
1571 if self._report.__class__.__module__ == "exceptions":
1571 if self._report.__class__.__module__ == "exceptions":
1572 msg = "%s: %s" % \
1572 msg = "%s: %s" % \
1573 (self._report.__class__.__name__, self._report)
1573 (self._report.__class__.__name__, self._report)
1574 else:
1574 else:
1575 msg = "%s.%s: %s" % \
1575 msg = "%s.%s: %s" % \
1576 (self._report.__class__.__module__,
1576 (self._report.__class__.__module__,
1577 self._report.__class__.__name__, self._report)
1577 self._report.__class__.__name__, self._report)
1578 else:
1578 else:
1579 style = self.getstyle(self.style_report)
1579 style = self.getstyle(self.style_report)
1580 msg = self._report
1580 msg = self._report
1581 scr.addstr(self.scrsizey-1, 0, msg[:self.scrsizex], style)
1581 scr.addstr(self.scrsizey-1, 0, msg[:self.scrsizex], style)
1582 self._report = None
1582 self._report = None
1583 else:
1583 else:
1584 scr.move(self.scrsizey-1, 0)
1584 scr.move(self.scrsizey-1, 0)
1585 except curses.error:
1585 except curses.error:
1586 # Protect against errors from writing to the last line
1586 # Protect against errors from writing to the last line
1587 pass
1587 pass
1588 scr.clrtoeol()
1588 scr.clrtoeol()
1589
1589
1590 # Position cursor
1590 # Position cursor
1591 if self.mode in self.prompts:
1591 if self.mode in self.prompts:
1592 history = self.prompts[self.mode]
1592 history = self.prompts[self.mode]
1593 scr.move(self.scrsizey-1, inputstartx+history.curx)
1593 scr.move(self.scrsizey-1, inputstartx+history.curx)
1594 else:
1594 else:
1595 scr.move(
1595 scr.move(
1596 1+self._headerlines+level.cury-level.datastarty,
1596 1+self._headerlines+level.cury-level.datastarty,
1597 level.numbersizex+3+level.curx-level.datastartx
1597 level.numbersizex+3+level.curx-level.datastartx
1598 )
1598 )
1599 scr.refresh()
1599 scr.refresh()
1600
1600
1601 # Check keyboard
1601 # Check keyboard
1602 while True:
1602 while True:
1603 c = scr.getch()
1603 c = scr.getch()
1604 if self.resized:
1604 if self.resized:
1605 size = fcntl.ioctl(0, tty.TIOCGWINSZ, "12345678")
1605 size = fcntl.ioctl(0, tty.TIOCGWINSZ, "12345678")
1606 size = struct.unpack("4H", size)
1606 size = struct.unpack("4H", size)
1607 oldsize = scr.getmaxyx()
1607 oldsize = scr.getmaxyx()
1608 scr.erase()
1608 scr.erase()
1609 curses.resize_term(size[0], size[1])
1609 curses.resize_term(size[0], size[1])
1610 newsize = scr.getmaxyx()
1610 newsize = scr.getmaxyx()
1611 scr.erase()
1611 scr.erase()
1612 for l in self.levels:
1612 for l in self.levels:
1613 l.mainsizey += newsize[0]-oldsize[0]
1613 l.mainsizey += newsize[0]-oldsize[0]
1614 l.moveto(l.curx, l.cury, refresh=True)
1614 l.moveto(l.curx, l.cury, refresh=True)
1615 scr.refresh()
1615 scr.refresh()
1616 self.resized = False
1616 self.resized = False
1617 break # Redisplay
1617 break # Redisplay
1618 if self.mode in self.prompts:
1618 if self.mode in self.prompts:
1619 if self.prompts[self.mode].handlekey(self, c):
1619 if self.prompts[self.mode].handlekey(self, c):
1620 break # Redisplay
1620 break # Redisplay
1621 else:
1621 else:
1622 # if no key is pressed slow down and beep again
1622 # if no key is pressed slow down and beep again
1623 if c == -1:
1623 if c == -1:
1624 self.stepx = 1.
1624 self.stepx = 1.
1625 self.stepy = 1.
1625 self.stepy = 1.
1626 self._dobeep = True
1626 self._dobeep = True
1627 else:
1627 else:
1628 # if a different key was pressed slow down and beep too
1628 # if a different key was pressed slow down and beep too
1629 if c != lastc:
1629 if c != lastc:
1630 lastc = c
1630 lastc = c
1631 self.stepx = 1.
1631 self.stepx = 1.
1632 self.stepy = 1.
1632 self.stepy = 1.
1633 self._dobeep = True
1633 self._dobeep = True
1634 cmdname = self.keymap.get(c, None)
1634 cmdname = self.keymap.get(c, None)
1635 if cmdname is None:
1635 if cmdname is None:
1636 self.report(
1636 self.report(
1637 UnassignedKeyError("Unassigned key %s" %
1637 UnassignedKeyError("Unassigned key %s" %
1638 self.keylabel(c)))
1638 self.keylabel(c)))
1639 else:
1639 else:
1640 cmdfunc = getattr(self, "cmd_%s" % cmdname, None)
1640 cmdfunc = getattr(self, "cmd_%s" % cmdname, None)
1641 if cmdfunc is None:
1641 if cmdfunc is None:
1642 self.report(
1642 self.report(
1643 UnknownCommandError("Unknown command %r" %
1643 UnknownCommandError("Unknown command %r" %
1644 (cmdname,)))
1644 (cmdname,)))
1645 elif cmdfunc():
1645 elif cmdfunc():
1646 returnvalue = self.returnvalue
1646 returnvalue = self.returnvalue
1647 self.returnvalue = None
1647 self.returnvalue = None
1648 return returnvalue
1648 return returnvalue
1649 self.stepx = self.nextstepx(self.stepx)
1649 self.stepx = self.nextstepx(self.stepx)
1650 self.stepy = self.nextstepy(self.stepy)
1650 self.stepy = self.nextstepy(self.stepy)
1651 curses.flushinp() # get rid of type ahead
1651 curses.flushinp() # get rid of type ahead
1652 break # Redisplay
1652 break # Redisplay
1653 self.scr = None
1653 self.scr = None
1654
1654
1655 def display(self):
1655 def display(self):
1656 if hasattr(curses, "resize_term"):
1656 if hasattr(curses, "resize_term"):
1657 oldhandler = signal.signal(signal.SIGWINCH, self.sigwinchhandler)
1657 oldhandler = signal.signal(signal.SIGWINCH, self.sigwinchhandler)
1658 try:
1658 try:
1659 return curses.wrapper(self._dodisplay)
1659 return curses.wrapper(self._dodisplay)
1660 finally:
1660 finally:
1661 signal.signal(signal.SIGWINCH, oldhandler)
1661 signal.signal(signal.SIGWINCH, oldhandler)
1662 else:
1662 else:
1663 return curses.wrapper(self._dodisplay)
1663 return curses.wrapper(self._dodisplay)
@@ -1,5625 +1,5631 b''
1 2006-06-28 Walter Doerwald <walter@livinglogic.de>
2
3 * IPython/Extensions/ibrowse.py: Give the ibrowse cursor row
4 a blue background. Fix fetching new display rows when the browser
5 scrolls more than a screenful (e.g. by using the goto command).
6
1 2006-06-27 Ville Vainio <vivainio@gmail.com>
7 2006-06-27 Ville Vainio <vivainio@gmail.com>
2
8
3 * Magic.py (_inspect, _ofind) Apply David Huard's
9 * Magic.py (_inspect, _ofind) Apply David Huard's
4 patch for displaying the correct docstring for 'property'
10 patch for displaying the correct docstring for 'property'
5 attributes.
11 attributes.
6
12
7 2006-06-23 Walter Doerwald <walter@livinglogic.de>
13 2006-06-23 Walter Doerwald <walter@livinglogic.de>
8
14
9 * IPython/Extensions/ibrowse.py: Put the documentation of the keyboard
15 * IPython/Extensions/ibrowse.py: Put the documentation of the keyboard
10 commands into the methods implementing them.
16 commands into the methods implementing them.
11
17
12 2006-06-22 Fernando Perez <Fernando.Perez@colorado.edu>
18 2006-06-22 Fernando Perez <Fernando.Perez@colorado.edu>
13
19
14 * ipython.el (ipython-indentation-hook): cleanup patch, submitted
20 * ipython.el (ipython-indentation-hook): cleanup patch, submitted
15 by Kov Chai <tchaikov-AT-gmail.com>. He notes that the original
21 by Kov Chai <tchaikov-AT-gmail.com>. He notes that the original
16 autoindent support was authored by Jin Liu.
22 autoindent support was authored by Jin Liu.
17
23
18 2006-06-22 Walter Doerwald <walter@livinglogic.de>
24 2006-06-22 Walter Doerwald <walter@livinglogic.de>
19
25
20 * IPython/Extensions/ibrowse.py: Replace the plain dictionaries used
26 * IPython/Extensions/ibrowse.py: Replace the plain dictionaries used
21 for keymaps with a custom class that simplifies handling.
27 for keymaps with a custom class that simplifies handling.
22
28
23 2006-06-19 Walter Doerwald <walter@livinglogic.de>
29 2006-06-19 Walter Doerwald <walter@livinglogic.de>
24
30
25 * IPython/Extensions/ibrowse.py: ibrowse now properly handles terminal
31 * IPython/Extensions/ibrowse.py: ibrowse now properly handles terminal
26 resizing. This requires Python 2.5 to work.
32 resizing. This requires Python 2.5 to work.
27
33
28 2006-06-16 Walter Doerwald <walter@livinglogic.de>
34 2006-06-16 Walter Doerwald <walter@livinglogic.de>
29
35
30 * IPython/Extensions/ibrowse.py: Add two new commands to
36 * IPython/Extensions/ibrowse.py: Add two new commands to
31 ibrowse: "hideattr" (mapped to "h") hides the attribute under
37 ibrowse: "hideattr" (mapped to "h") hides the attribute under
32 the cursor. "unhiderattrs" (mapped to "H") reveals all hidden
38 the cursor. "unhiderattrs" (mapped to "H") reveals all hidden
33 attributes again. Remapped the help command to "?". Display
39 attributes again. Remapped the help command to "?". Display
34 keycodes in the range 0x01-0x1F as CTRL-xx. Add CTRL-a and CTRL-e
40 keycodes in the range 0x01-0x1F as CTRL-xx. Add CTRL-a and CTRL-e
35 as keys for the "home" and "end" commands. Add three new commands
41 as keys for the "home" and "end" commands. Add three new commands
36 to the input mode for "find" and friends: "delend" (CTRL-K)
42 to the input mode for "find" and friends: "delend" (CTRL-K)
37 deletes to the end of line. "incsearchup" searches upwards in the
43 deletes to the end of line. "incsearchup" searches upwards in the
38 command history for an input that starts with the text before the cursor.
44 command history for an input that starts with the text before the cursor.
39 "incsearchdown" does the same downwards. Removed a bogus mapping of
45 "incsearchdown" does the same downwards. Removed a bogus mapping of
40 the x key to "delete".
46 the x key to "delete".
41
47
42 2006-06-15 Ville Vainio <vivainio@gmail.com>
48 2006-06-15 Ville Vainio <vivainio@gmail.com>
43
49
44 * iplib.py, hooks.py: Added new generate_prompt hook that can be
50 * iplib.py, hooks.py: Added new generate_prompt hook that can be
45 used to create prompts dynamically, instead of the "old" way of
51 used to create prompts dynamically, instead of the "old" way of
46 assigning "magic" strings to prompt_in1 and prompt_in2. The old
52 assigning "magic" strings to prompt_in1 and prompt_in2. The old
47 way still works (it's invoked by the default hook), of course.
53 way still works (it's invoked by the default hook), of course.
48
54
49 * Prompts.py: added generate_output_prompt hook for altering output
55 * Prompts.py: added generate_output_prompt hook for altering output
50 prompt
56 prompt
51
57
52 * Release.py: Changed version string to 0.7.3.svn.
58 * Release.py: Changed version string to 0.7.3.svn.
53
59
54 2006-06-15 Walter Doerwald <walter@livinglogic.de>
60 2006-06-15 Walter Doerwald <walter@livinglogic.de>
55
61
56 * IPython/Extensions/ibrowse.py: Change _BrowserLevel.moveto() so that
62 * IPython/Extensions/ibrowse.py: Change _BrowserLevel.moveto() so that
57 the call to fetch() always tries to fetch enough data for at least one
63 the call to fetch() always tries to fetch enough data for at least one
58 full screen. This makes it possible to simply call moveto(0,0,True) in
64 full screen. This makes it possible to simply call moveto(0,0,True) in
59 the constructor. Fix typos and removed the obsolete goto attribute.
65 the constructor. Fix typos and removed the obsolete goto attribute.
60
66
61 2006-06-12 Ville Vainio <vivainio@gmail.com>
67 2006-06-12 Ville Vainio <vivainio@gmail.com>
62
68
63 * ipy_profile_sh.py: applied Krisha Mohan Gundu's patch for
69 * ipy_profile_sh.py: applied Krisha Mohan Gundu's patch for
64 allowing $variable interpolation within multiline statements,
70 allowing $variable interpolation within multiline statements,
65 though so far only with "sh" profile for a testing period.
71 though so far only with "sh" profile for a testing period.
66 The patch also enables splitting long commands with \ but it
72 The patch also enables splitting long commands with \ but it
67 doesn't work properly yet.
73 doesn't work properly yet.
68
74
69 2006-06-12 Walter Doerwald <walter@livinglogic.de>
75 2006-06-12 Walter Doerwald <walter@livinglogic.de>
70
76
71 * IPython/Extensions/ibrowse.py (_dodisplay): Display the length of the
77 * IPython/Extensions/ibrowse.py (_dodisplay): Display the length of the
72 input history and the position of the cursor in the input history for
78 input history and the position of the cursor in the input history for
73 the find, findbackwards and goto command.
79 the find, findbackwards and goto command.
74
80
75 2006-06-10 Walter Doerwald <walter@livinglogic.de>
81 2006-06-10 Walter Doerwald <walter@livinglogic.de>
76
82
77 * IPython/Extensions/ibrowse.py: Add a class _CommandInput that
83 * IPython/Extensions/ibrowse.py: Add a class _CommandInput that
78 implements the basic functionality of browser commands that require
84 implements the basic functionality of browser commands that require
79 input. Reimplement the goto, find and findbackwards commands as
85 input. Reimplement the goto, find and findbackwards commands as
80 subclasses of _CommandInput. Add an input history and keymaps to those
86 subclasses of _CommandInput. Add an input history and keymaps to those
81 commands. Add "\r" as a keyboard shortcut for the enterdefault and
87 commands. Add "\r" as a keyboard shortcut for the enterdefault and
82 execute commands.
88 execute commands.
83
89
84 2006-06-07 Ville Vainio <vivainio@gmail.com>
90 2006-06-07 Ville Vainio <vivainio@gmail.com>
85
91
86 * iplib.py: ipython mybatch.ipy exits ipython immediately after
92 * iplib.py: ipython mybatch.ipy exits ipython immediately after
87 running the batch files instead of leaving the session open.
93 running the batch files instead of leaving the session open.
88
94
89 2006-06-07 Fernando Perez <Fernando.Perez@colorado.edu>
95 2006-06-07 Fernando Perez <Fernando.Perez@colorado.edu>
90
96
91 * IPython/iplib.py (InteractiveShell.__init__): update BSD fix, as
97 * IPython/iplib.py (InteractiveShell.__init__): update BSD fix, as
92 the original fix was incomplete. Patch submitted by W. Maier.
98 the original fix was incomplete. Patch submitted by W. Maier.
93
99
94 2006-06-07 Ville Vainio <vivainio@gmail.com>
100 2006-06-07 Ville Vainio <vivainio@gmail.com>
95
101
96 * iplib.py,Magic.py, ipmaker.py (magic_rehashx):
102 * iplib.py,Magic.py, ipmaker.py (magic_rehashx):
97 Confirmation prompts can be supressed by 'quiet' option.
103 Confirmation prompts can be supressed by 'quiet' option.
98 _ip.options.quiet = 1 means "assume yes for all yes/no queries".
104 _ip.options.quiet = 1 means "assume yes for all yes/no queries".
99
105
100 2006-06-06 *** Released version 0.7.2
106 2006-06-06 *** Released version 0.7.2
101
107
102 2006-06-06 Fernando Perez <Fernando.Perez@colorado.edu>
108 2006-06-06 Fernando Perez <Fernando.Perez@colorado.edu>
103
109
104 * IPython/Release.py (version): Made 0.7.2 final for release.
110 * IPython/Release.py (version): Made 0.7.2 final for release.
105 Repo tagged and release cut.
111 Repo tagged and release cut.
106
112
107 2006-06-05 Ville Vainio <vivainio@gmail.com>
113 2006-06-05 Ville Vainio <vivainio@gmail.com>
108
114
109 * Magic.py (magic_rehashx): Honor no_alias list earlier in
115 * Magic.py (magic_rehashx): Honor no_alias list earlier in
110 %rehashx, to avoid clobbering builtins in ipy_profile_sh.py
116 %rehashx, to avoid clobbering builtins in ipy_profile_sh.py
111
117
112 * upgrade_dir.py: try import 'path' module a bit harder
118 * upgrade_dir.py: try import 'path' module a bit harder
113 (for %upgrade)
119 (for %upgrade)
114
120
115 2006-06-03 Fernando Perez <Fernando.Perez@colorado.edu>
121 2006-06-03 Fernando Perez <Fernando.Perez@colorado.edu>
116
122
117 * IPython/genutils.py (ask_yes_no): treat EOF as a default answer
123 * IPython/genutils.py (ask_yes_no): treat EOF as a default answer
118 instead of looping 20 times.
124 instead of looping 20 times.
119
125
120 * IPython/ipmaker.py (make_IPython): honor -ipythondir flag
126 * IPython/ipmaker.py (make_IPython): honor -ipythondir flag
121 correctly at initialization time. Bug reported by Krishna Mohan
127 correctly at initialization time. Bug reported by Krishna Mohan
122 Gundu <gkmohan-AT-gmail.com> on the user list.
128 Gundu <gkmohan-AT-gmail.com> on the user list.
123
129
124 * IPython/Release.py (version): Mark 0.7.2 version to start
130 * IPython/Release.py (version): Mark 0.7.2 version to start
125 testing for release on 06/06.
131 testing for release on 06/06.
126
132
127 2006-05-31 Fernando Perez <Fernando.Perez@colorado.edu>
133 2006-05-31 Fernando Perez <Fernando.Perez@colorado.edu>
128
134
129 * scripts/irunner: thin script interface so users don't have to
135 * scripts/irunner: thin script interface so users don't have to
130 find the module and call it as an executable, since modules rarely
136 find the module and call it as an executable, since modules rarely
131 live in people's PATH.
137 live in people's PATH.
132
138
133 * IPython/irunner.py (InteractiveRunner.__init__): added
139 * IPython/irunner.py (InteractiveRunner.__init__): added
134 delaybeforesend attribute to control delays with newer versions of
140 delaybeforesend attribute to control delays with newer versions of
135 pexpect. Thanks to detailed help from pexpect's author, Noah
141 pexpect. Thanks to detailed help from pexpect's author, Noah
136 Spurrier <noah-AT-noah.org>. Noted how to use the SAGE runner
142 Spurrier <noah-AT-noah.org>. Noted how to use the SAGE runner
137 correctly (it works in NoColor mode).
143 correctly (it works in NoColor mode).
138
144
139 * IPython/iplib.py (handle_normal): fix nasty crash reported on
145 * IPython/iplib.py (handle_normal): fix nasty crash reported on
140 SAGE list, from improper log() calls.
146 SAGE list, from improper log() calls.
141
147
142 2006-05-31 Ville Vainio <vivainio@gmail.com>
148 2006-05-31 Ville Vainio <vivainio@gmail.com>
143
149
144 * upgrade_dir.py, Magic.py (magic_upgrade): call upgrade_dir
150 * upgrade_dir.py, Magic.py (magic_upgrade): call upgrade_dir
145 with args in parens to work correctly with dirs that have spaces.
151 with args in parens to work correctly with dirs that have spaces.
146
152
147 2006-05-30 Fernando Perez <Fernando.Perez@colorado.edu>
153 2006-05-30 Fernando Perez <Fernando.Perez@colorado.edu>
148
154
149 * IPython/Logger.py (Logger.logstart): add option to log raw input
155 * IPython/Logger.py (Logger.logstart): add option to log raw input
150 instead of the processed one. A -r flag was added to the
156 instead of the processed one. A -r flag was added to the
151 %logstart magic used for controlling logging.
157 %logstart magic used for controlling logging.
152
158
153 2006-05-29 Fernando Perez <Fernando.Perez@colorado.edu>
159 2006-05-29 Fernando Perez <Fernando.Perez@colorado.edu>
154
160
155 * IPython/iplib.py (InteractiveShell.__init__): add check for the
161 * IPython/iplib.py (InteractiveShell.__init__): add check for the
156 *BSDs to omit --color from all 'ls' aliases, since *BSD ls doesn't
162 *BSDs to omit --color from all 'ls' aliases, since *BSD ls doesn't
157 recognize the option. After a bug report by Will Maier. This
163 recognize the option. After a bug report by Will Maier. This
158 closes #64 (will do it after confirmation from W. Maier).
164 closes #64 (will do it after confirmation from W. Maier).
159
165
160 * IPython/irunner.py: New module to run scripts as if manually
166 * IPython/irunner.py: New module to run scripts as if manually
161 typed into an interactive environment, based on pexpect. After a
167 typed into an interactive environment, based on pexpect. After a
162 submission by Ken Schutte <kschutte-AT-csail.mit.edu> on the
168 submission by Ken Schutte <kschutte-AT-csail.mit.edu> on the
163 ipython-user list. Simple unittests in the tests/ directory.
169 ipython-user list. Simple unittests in the tests/ directory.
164
170
165 * tools/release: add Will Maier, OpenBSD port maintainer, to
171 * tools/release: add Will Maier, OpenBSD port maintainer, to
166 recepients list. We are now officially part of the OpenBSD ports:
172 recepients list. We are now officially part of the OpenBSD ports:
167 http://www.openbsd.org/ports.html ! Many thanks to Will for the
173 http://www.openbsd.org/ports.html ! Many thanks to Will for the
168 work.
174 work.
169
175
170 2006-05-26 Fernando Perez <Fernando.Perez@colorado.edu>
176 2006-05-26 Fernando Perez <Fernando.Perez@colorado.edu>
171
177
172 * IPython/ipmaker.py (make_IPython): modify sys.argv fix (below)
178 * IPython/ipmaker.py (make_IPython): modify sys.argv fix (below)
173 so that it doesn't break tkinter apps.
179 so that it doesn't break tkinter apps.
174
180
175 * IPython/iplib.py (_prefilter): fix bug where aliases would
181 * IPython/iplib.py (_prefilter): fix bug where aliases would
176 shadow variables when autocall was fully off. Reported by SAGE
182 shadow variables when autocall was fully off. Reported by SAGE
177 author William Stein.
183 author William Stein.
178
184
179 * IPython/OInspect.py (Inspector.__init__): add a flag to control
185 * IPython/OInspect.py (Inspector.__init__): add a flag to control
180 at what detail level strings are computed when foo? is requested.
186 at what detail level strings are computed when foo? is requested.
181 This allows users to ask for example that the string form of an
187 This allows users to ask for example that the string form of an
182 object is only computed when foo?? is called, or even never, by
188 object is only computed when foo?? is called, or even never, by
183 setting the object_info_string_level >= 2 in the configuration
189 setting the object_info_string_level >= 2 in the configuration
184 file. This new option has been added and documented. After a
190 file. This new option has been added and documented. After a
185 request by SAGE to be able to control the printing of very large
191 request by SAGE to be able to control the printing of very large
186 objects more easily.
192 objects more easily.
187
193
188 2006-05-25 Fernando Perez <Fernando.Perez@colorado.edu>
194 2006-05-25 Fernando Perez <Fernando.Perez@colorado.edu>
189
195
190 * IPython/ipmaker.py (make_IPython): remove the ipython call path
196 * IPython/ipmaker.py (make_IPython): remove the ipython call path
191 from sys.argv, to be 100% consistent with how Python itself works
197 from sys.argv, to be 100% consistent with how Python itself works
192 (as seen for example with python -i file.py). After a bug report
198 (as seen for example with python -i file.py). After a bug report
193 by Jeffrey Collins.
199 by Jeffrey Collins.
194
200
195 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix
201 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix
196 nasty bug which was preventing custom namespaces with -pylab,
202 nasty bug which was preventing custom namespaces with -pylab,
197 reported by M. Foord. Minor cleanup, remove old matplotlib.matlab
203 reported by M. Foord. Minor cleanup, remove old matplotlib.matlab
198 compatibility (long gone from mpl).
204 compatibility (long gone from mpl).
199
205
200 * IPython/ipapi.py (make_session): name change: create->make. We
206 * IPython/ipapi.py (make_session): name change: create->make. We
201 use make in other places (ipmaker,...), it's shorter and easier to
207 use make in other places (ipmaker,...), it's shorter and easier to
202 type and say, etc. I'm trying to clean things before 0.7.2 so
208 type and say, etc. I'm trying to clean things before 0.7.2 so
203 that I can keep things stable wrt to ipapi in the chainsaw branch.
209 that I can keep things stable wrt to ipapi in the chainsaw branch.
204
210
205 * ipython.el: fix the py-pdbtrack-input-prompt variable so that
211 * ipython.el: fix the py-pdbtrack-input-prompt variable so that
206 python-mode recognizes our debugger mode. Add support for
212 python-mode recognizes our debugger mode. Add support for
207 autoindent inside (X)emacs. After a patch sent in by Jin Liu
213 autoindent inside (X)emacs. After a patch sent in by Jin Liu
208 <m.liu.jin-AT-gmail.com> originally written by
214 <m.liu.jin-AT-gmail.com> originally written by
209 doxgen-AT-newsmth.net (with minor modifications for xemacs
215 doxgen-AT-newsmth.net (with minor modifications for xemacs
210 compatibility)
216 compatibility)
211
217
212 * IPython/Debugger.py (Pdb.format_stack_entry): fix formatting of
218 * IPython/Debugger.py (Pdb.format_stack_entry): fix formatting of
213 tracebacks when walking the stack so that the stack tracking system
219 tracebacks when walking the stack so that the stack tracking system
214 in emacs' python-mode can identify the frames correctly.
220 in emacs' python-mode can identify the frames correctly.
215
221
216 * IPython/ipmaker.py (make_IPython): make the internal (and
222 * IPython/ipmaker.py (make_IPython): make the internal (and
217 default config) autoedit_syntax value false by default. Too many
223 default config) autoedit_syntax value false by default. Too many
218 users have complained to me (both on and off-list) about problems
224 users have complained to me (both on and off-list) about problems
219 with this option being on by default, so I'm making it default to
225 with this option being on by default, so I'm making it default to
220 off. It can still be enabled by anyone via the usual mechanisms.
226 off. It can still be enabled by anyone via the usual mechanisms.
221
227
222 * IPython/completer.py (Completer.attr_matches): add support for
228 * IPython/completer.py (Completer.attr_matches): add support for
223 PyCrust-style _getAttributeNames magic method. Patch contributed
229 PyCrust-style _getAttributeNames magic method. Patch contributed
224 by <mscott-AT-goldenspud.com>. Closes #50.
230 by <mscott-AT-goldenspud.com>. Closes #50.
225
231
226 * IPython/iplib.py (InteractiveShell.__init__): remove the
232 * IPython/iplib.py (InteractiveShell.__init__): remove the
227 deletion of exit/quit from __builtin__, which can break
233 deletion of exit/quit from __builtin__, which can break
228 third-party tools like the Zope debugging console. The
234 third-party tools like the Zope debugging console. The
229 %exit/%quit magics remain. In general, it's probably a good idea
235 %exit/%quit magics remain. In general, it's probably a good idea
230 not to delete anything from __builtin__, since we never know what
236 not to delete anything from __builtin__, since we never know what
231 that will break. In any case, python now (for 2.5) will support
237 that will break. In any case, python now (for 2.5) will support
232 'real' exit/quit, so this issue is moot. Closes #55.
238 'real' exit/quit, so this issue is moot. Closes #55.
233
239
234 * IPython/genutils.py (with_obj): rename the 'with' function to
240 * IPython/genutils.py (with_obj): rename the 'with' function to
235 'withobj' to avoid incompatibilities with Python 2.5, where 'with'
241 'withobj' to avoid incompatibilities with Python 2.5, where 'with'
236 becomes a language keyword. Closes #53.
242 becomes a language keyword. Closes #53.
237
243
238 * IPython/FakeModule.py (FakeModule.__init__): add a proper
244 * IPython/FakeModule.py (FakeModule.__init__): add a proper
239 __file__ attribute to this so it fools more things into thinking
245 __file__ attribute to this so it fools more things into thinking
240 it is a real module. Closes #59.
246 it is a real module. Closes #59.
241
247
242 * IPython/Magic.py (magic_edit): add -n option to open the editor
248 * IPython/Magic.py (magic_edit): add -n option to open the editor
243 at a specific line number. After a patch by Stefan van der Walt.
249 at a specific line number. After a patch by Stefan van der Walt.
244
250
245 2006-05-23 Fernando Perez <Fernando.Perez@colorado.edu>
251 2006-05-23 Fernando Perez <Fernando.Perez@colorado.edu>
246
252
247 * IPython/iplib.py (edit_syntax_error): fix crash when for some
253 * IPython/iplib.py (edit_syntax_error): fix crash when for some
248 reason the file could not be opened. After automatic crash
254 reason the file could not be opened. After automatic crash
249 reports sent by James Graham <jgraham-AT-ast.cam.ac.uk> and
255 reports sent by James Graham <jgraham-AT-ast.cam.ac.uk> and
250 Charles Dolan <charlespatrickdolan-AT-yahoo.com>.
256 Charles Dolan <charlespatrickdolan-AT-yahoo.com>.
251 (_should_recompile): Don't fire editor if using %bg, since there
257 (_should_recompile): Don't fire editor if using %bg, since there
252 is no file in the first place. From the same report as above.
258 is no file in the first place. From the same report as above.
253 (raw_input): protect against faulty third-party prefilters. After
259 (raw_input): protect against faulty third-party prefilters. After
254 an automatic crash report sent by Dirk Laurie <dirk-AT-sun.ac.za>
260 an automatic crash report sent by Dirk Laurie <dirk-AT-sun.ac.za>
255 while running under SAGE.
261 while running under SAGE.
256
262
257 2006-05-23 Ville Vainio <vivainio@gmail.com>
263 2006-05-23 Ville Vainio <vivainio@gmail.com>
258
264
259 * ipapi.py: Stripped down ip.to_user_ns() to work only as
265 * ipapi.py: Stripped down ip.to_user_ns() to work only as
260 ip.to_user_ns("x1 y1"), which exposes vars x1 and y1. ipapi.get()
266 ip.to_user_ns("x1 y1"), which exposes vars x1 and y1. ipapi.get()
261 now returns None (again), unless dummy is specifically allowed by
267 now returns None (again), unless dummy is specifically allowed by
262 ipapi.get(allow_dummy=True).
268 ipapi.get(allow_dummy=True).
263
269
264 2006-05-18 Fernando Perez <Fernando.Perez@colorado.edu>
270 2006-05-18 Fernando Perez <Fernando.Perez@colorado.edu>
265
271
266 * IPython: remove all 2.2-compatibility objects and hacks from
272 * IPython: remove all 2.2-compatibility objects and hacks from
267 everywhere, since we only support 2.3 at this point. Docs
273 everywhere, since we only support 2.3 at this point. Docs
268 updated.
274 updated.
269
275
270 * IPython/ipapi.py (IPApi.__init__): Cleanup of all getters.
276 * IPython/ipapi.py (IPApi.__init__): Cleanup of all getters.
271 Anything requiring extra validation can be turned into a Python
277 Anything requiring extra validation can be turned into a Python
272 property in the future. I used a property for the db one b/c
278 property in the future. I used a property for the db one b/c
273 there was a nasty circularity problem with the initialization
279 there was a nasty circularity problem with the initialization
274 order, which right now I don't have time to clean up.
280 order, which right now I don't have time to clean up.
275
281
276 * IPython/Shell.py (MTInteractiveShell.runcode): Fix, I think,
282 * IPython/Shell.py (MTInteractiveShell.runcode): Fix, I think,
277 another locking bug reported by Jorgen. I'm not 100% sure though,
283 another locking bug reported by Jorgen. I'm not 100% sure though,
278 so more testing is needed...
284 so more testing is needed...
279
285
280 2006-05-17 Fernando Perez <Fernando.Perez@colorado.edu>
286 2006-05-17 Fernando Perez <Fernando.Perez@colorado.edu>
281
287
282 * IPython/ipapi.py (IPApi.to_user_ns): New function to inject
288 * IPython/ipapi.py (IPApi.to_user_ns): New function to inject
283 local variables from any routine in user code (typically executed
289 local variables from any routine in user code (typically executed
284 with %run) directly into the interactive namespace. Very useful
290 with %run) directly into the interactive namespace. Very useful
285 when doing complex debugging.
291 when doing complex debugging.
286 (IPythonNotRunning): Changed the default None object to a dummy
292 (IPythonNotRunning): Changed the default None object to a dummy
287 whose attributes can be queried as well as called without
293 whose attributes can be queried as well as called without
288 exploding, to ease writing code which works transparently both in
294 exploding, to ease writing code which works transparently both in
289 and out of ipython and uses some of this API.
295 and out of ipython and uses some of this API.
290
296
291 2006-05-16 Fernando Perez <Fernando.Perez@colorado.edu>
297 2006-05-16 Fernando Perez <Fernando.Perez@colorado.edu>
292
298
293 * IPython/hooks.py (result_display): Fix the fact that our display
299 * IPython/hooks.py (result_display): Fix the fact that our display
294 hook was using str() instead of repr(), as the default python
300 hook was using str() instead of repr(), as the default python
295 console does. This had gone unnoticed b/c it only happened if
301 console does. This had gone unnoticed b/c it only happened if
296 %Pprint was off, but the inconsistency was there.
302 %Pprint was off, but the inconsistency was there.
297
303
298 2006-05-15 Ville Vainio <vivainio@gmail.com>
304 2006-05-15 Ville Vainio <vivainio@gmail.com>
299
305
300 * Oinspect.py: Only show docstring for nonexisting/binary files
306 * Oinspect.py: Only show docstring for nonexisting/binary files
301 when doing object??, closing ticket #62
307 when doing object??, closing ticket #62
302
308
303 2006-05-13 Fernando Perez <Fernando.Perez@colorado.edu>
309 2006-05-13 Fernando Perez <Fernando.Perez@colorado.edu>
304
310
305 * IPython/Shell.py (MTInteractiveShell.runsource): Fix threading
311 * IPython/Shell.py (MTInteractiveShell.runsource): Fix threading
306 bug, closes http://www.scipy.net/roundup/ipython/issue55. A lock
312 bug, closes http://www.scipy.net/roundup/ipython/issue55. A lock
307 was being released in a routine which hadn't checked if it had
313 was being released in a routine which hadn't checked if it had
308 been the one to acquire it.
314 been the one to acquire it.
309
315
310 2006-05-07 Fernando Perez <Fernando.Perez@colorado.edu>
316 2006-05-07 Fernando Perez <Fernando.Perez@colorado.edu>
311
317
312 * IPython/Release.py (version): put out 0.7.2.rc1 for testing.
318 * IPython/Release.py (version): put out 0.7.2.rc1 for testing.
313
319
314 2006-04-11 Ville Vainio <vivainio@gmail.com>
320 2006-04-11 Ville Vainio <vivainio@gmail.com>
315
321
316 * iplib.py, ipmaker.py: .ipy extension now means "ipython batch file"
322 * iplib.py, ipmaker.py: .ipy extension now means "ipython batch file"
317 in command line. E.g. "ipython test.ipy" runs test.ipy with ipython
323 in command line. E.g. "ipython test.ipy" runs test.ipy with ipython
318 prefilters, allowing stuff like magics and aliases in the file.
324 prefilters, allowing stuff like magics and aliases in the file.
319
325
320 * Prompts.py, Extensions/clearcmd.py, ipy_system_conf.py: %clear magic
326 * Prompts.py, Extensions/clearcmd.py, ipy_system_conf.py: %clear magic
321 added. Supported now are "%clear in" and "%clear out" (clear input and
327 added. Supported now are "%clear in" and "%clear out" (clear input and
322 output history, respectively). Also fixed CachedOutput.flush to
328 output history, respectively). Also fixed CachedOutput.flush to
323 properly flush the output cache.
329 properly flush the output cache.
324
330
325 * Extensions/pspersistence.py: Fix %store to avoid "%store obj.attr"
331 * Extensions/pspersistence.py: Fix %store to avoid "%store obj.attr"
326 half-success (and fail explicitly).
332 half-success (and fail explicitly).
327
333
328 2006-03-28 Ville Vainio <vivainio@gmail.com>
334 2006-03-28 Ville Vainio <vivainio@gmail.com>
329
335
330 * iplib.py: Fix quoting of aliases so that only argless ones
336 * iplib.py: Fix quoting of aliases so that only argless ones
331 are quoted
337 are quoted
332
338
333 2006-03-28 Ville Vainio <vivainio@gmail.com>
339 2006-03-28 Ville Vainio <vivainio@gmail.com>
334
340
335 * iplib.py: Quote aliases with spaces in the name.
341 * iplib.py: Quote aliases with spaces in the name.
336 "c:\program files\blah\bin" is now legal alias target.
342 "c:\program files\blah\bin" is now legal alias target.
337
343
338 * ext_rehashdir.py: Space no longer allowed as arg
344 * ext_rehashdir.py: Space no longer allowed as arg
339 separator, since space is legal in path names.
345 separator, since space is legal in path names.
340
346
341 2006-03-16 Ville Vainio <vivainio@gmail.com>
347 2006-03-16 Ville Vainio <vivainio@gmail.com>
342
348
343 * upgrade_dir.py: Take path.py from Extensions, correcting
349 * upgrade_dir.py: Take path.py from Extensions, correcting
344 %upgrade magic
350 %upgrade magic
345
351
346 * ipmaker.py: Suggest using %upgrade if ipy_user_conf.py isn't found.
352 * ipmaker.py: Suggest using %upgrade if ipy_user_conf.py isn't found.
347
353
348 * hooks.py: Only enclose editor binary in quotes if legal and
354 * hooks.py: Only enclose editor binary in quotes if legal and
349 necessary (space in the name, and is an existing file). Fixes a bug
355 necessary (space in the name, and is an existing file). Fixes a bug
350 reported by Zachary Pincus.
356 reported by Zachary Pincus.
351
357
352 2006-03-13 Fernando Perez <Fernando.Perez@colorado.edu>
358 2006-03-13 Fernando Perez <Fernando.Perez@colorado.edu>
353
359
354 * Manual: thanks to a tip on proper color handling for Emacs, by
360 * Manual: thanks to a tip on proper color handling for Emacs, by
355 Eric J Haywiser <ejh1-AT-MIT.EDU>.
361 Eric J Haywiser <ejh1-AT-MIT.EDU>.
356
362
357 * ipython.el: close http://www.scipy.net/roundup/ipython/issue57
363 * ipython.el: close http://www.scipy.net/roundup/ipython/issue57
358 by applying the provided patch. Thanks to Liu Jin
364 by applying the provided patch. Thanks to Liu Jin
359 <m.liu.jin-AT-gmail.com> for the contribution. No problems under
365 <m.liu.jin-AT-gmail.com> for the contribution. No problems under
360 XEmacs/Linux, I'm trusting the submitter that it actually helps
366 XEmacs/Linux, I'm trusting the submitter that it actually helps
361 under win32/GNU Emacs. Will revisit if any problems are reported.
367 under win32/GNU Emacs. Will revisit if any problems are reported.
362
368
363 2006-03-12 Fernando Perez <Fernando.Perez@colorado.edu>
369 2006-03-12 Fernando Perez <Fernando.Perez@colorado.edu>
364
370
365 * IPython/Gnuplot2.py (_FileClass): update for current Gnuplot.py
371 * IPython/Gnuplot2.py (_FileClass): update for current Gnuplot.py
366 from SVN, thanks to a patch by Ryan Woodard <rywo@bas.ac.uk>.
372 from SVN, thanks to a patch by Ryan Woodard <rywo@bas.ac.uk>.
367
373
368 2006-03-12 Ville Vainio <vivainio@gmail.com>
374 2006-03-12 Ville Vainio <vivainio@gmail.com>
369
375
370 * Magic.py (magic_timeit): Added %timeit magic, contributed by
376 * Magic.py (magic_timeit): Added %timeit magic, contributed by
371 Torsten Marek.
377 Torsten Marek.
372
378
373 2006-03-12 Fernando Perez <Fernando.Perez@colorado.edu>
379 2006-03-12 Fernando Perez <Fernando.Perez@colorado.edu>
374
380
375 * IPython/Magic.py (magic_macro): fix so that the n1-n2 syntax for
381 * IPython/Magic.py (magic_macro): fix so that the n1-n2 syntax for
376 line ranges works again.
382 line ranges works again.
377
383
378 2006-03-11 Fernando Perez <Fernando.Perez@colorado.edu>
384 2006-03-11 Fernando Perez <Fernando.Perez@colorado.edu>
379
385
380 * IPython/iplib.py (showtraceback): add back sys.last_traceback
386 * IPython/iplib.py (showtraceback): add back sys.last_traceback
381 and friends, after a discussion with Zach Pincus on ipython-user.
387 and friends, after a discussion with Zach Pincus on ipython-user.
382 I'm not 100% sure, but after thinking about it quite a bit, it may
388 I'm not 100% sure, but after thinking about it quite a bit, it may
383 be OK. Testing with the multithreaded shells didn't reveal any
389 be OK. Testing with the multithreaded shells didn't reveal any
384 problems, but let's keep an eye out.
390 problems, but let's keep an eye out.
385
391
386 In the process, I fixed a few things which were calling
392 In the process, I fixed a few things which were calling
387 self.InteractiveTB() directly (like safe_execfile), which is a
393 self.InteractiveTB() directly (like safe_execfile), which is a
388 mistake: ALL exception reporting should be done by calling
394 mistake: ALL exception reporting should be done by calling
389 self.showtraceback(), which handles state and tab-completion and
395 self.showtraceback(), which handles state and tab-completion and
390 more.
396 more.
391
397
392 2006-03-01 Ville Vainio <vivainio@gmail.com>
398 2006-03-01 Ville Vainio <vivainio@gmail.com>
393
399
394 * Extensions/ipipe.py: Added Walter Doerwald's "ipipe" module.
400 * Extensions/ipipe.py: Added Walter Doerwald's "ipipe" module.
395 To use, do "from ipipe import *".
401 To use, do "from ipipe import *".
396
402
397 2006-02-24 Ville Vainio <vivainio@gmail.com>
403 2006-02-24 Ville Vainio <vivainio@gmail.com>
398
404
399 * Magic.py, upgrade_dir.py: %upgrade magic added. Does things more
405 * Magic.py, upgrade_dir.py: %upgrade magic added. Does things more
400 "cleanly" and safely than the older upgrade mechanism.
406 "cleanly" and safely than the older upgrade mechanism.
401
407
402 2006-02-21 Ville Vainio <vivainio@gmail.com>
408 2006-02-21 Ville Vainio <vivainio@gmail.com>
403
409
404 * Magic.py: %save works again.
410 * Magic.py: %save works again.
405
411
406 2006-02-15 Ville Vainio <vivainio@gmail.com>
412 2006-02-15 Ville Vainio <vivainio@gmail.com>
407
413
408 * Magic.py: %Pprint works again
414 * Magic.py: %Pprint works again
409
415
410 * Extensions/ipy_sane_defaults.py: Provide everything provided
416 * Extensions/ipy_sane_defaults.py: Provide everything provided
411 in default ipythonrc, to make it possible to have a completely empty
417 in default ipythonrc, to make it possible to have a completely empty
412 ipythonrc (and thus completely rc-file free configuration)
418 ipythonrc (and thus completely rc-file free configuration)
413
419
414 2006-02-11 Fernando Perez <Fernando.Perez@colorado.edu>
420 2006-02-11 Fernando Perez <Fernando.Perez@colorado.edu>
415
421
416 * IPython/hooks.py (editor): quote the call to the editor command,
422 * IPython/hooks.py (editor): quote the call to the editor command,
417 to allow commands with spaces in them. Problem noted by watching
423 to allow commands with spaces in them. Problem noted by watching
418 Ian Oswald's video about textpad under win32 at
424 Ian Oswald's video about textpad under win32 at
419 http://showmedo.com/videoListPage?listKey=PythonIPythonSeries
425 http://showmedo.com/videoListPage?listKey=PythonIPythonSeries
420
426
421 * IPython/UserConfig/ipythonrc: Replace @ signs with % when
427 * IPython/UserConfig/ipythonrc: Replace @ signs with % when
422 describing magics (we haven't used @ for a loong time).
428 describing magics (we haven't used @ for a loong time).
423
429
424 * IPython/ultraTB.py (VerboseTB.text.text_repr): Added patch
430 * IPython/ultraTB.py (VerboseTB.text.text_repr): Added patch
425 contributed by marienz to close
431 contributed by marienz to close
426 http://www.scipy.net/roundup/ipython/issue53.
432 http://www.scipy.net/roundup/ipython/issue53.
427
433
428 2006-02-10 Ville Vainio <vivainio@gmail.com>
434 2006-02-10 Ville Vainio <vivainio@gmail.com>
429
435
430 * genutils.py: getoutput now works in win32 too
436 * genutils.py: getoutput now works in win32 too
431
437
432 * completer.py: alias and magic completion only invoked
438 * completer.py: alias and magic completion only invoked
433 at the first "item" in the line, to avoid "cd %store"
439 at the first "item" in the line, to avoid "cd %store"
434 nonsense.
440 nonsense.
435
441
436 2006-02-09 Ville Vainio <vivainio@gmail.com>
442 2006-02-09 Ville Vainio <vivainio@gmail.com>
437
443
438 * test/*: Added a unit testing framework (finally).
444 * test/*: Added a unit testing framework (finally).
439 '%run runtests.py' to run test_*.
445 '%run runtests.py' to run test_*.
440
446
441 * ipapi.py: Exposed runlines and set_custom_exc
447 * ipapi.py: Exposed runlines and set_custom_exc
442
448
443 2006-02-07 Ville Vainio <vivainio@gmail.com>
449 2006-02-07 Ville Vainio <vivainio@gmail.com>
444
450
445 * iplib.py: don't split "f 1 2" to "f(1,2)" in autocall,
451 * iplib.py: don't split "f 1 2" to "f(1,2)" in autocall,
446 instead use "f(1 2)" as before.
452 instead use "f(1 2)" as before.
447
453
448 2006-02-05 Fernando Perez <Fernando.Perez@colorado.edu>
454 2006-02-05 Fernando Perez <Fernando.Perez@colorado.edu>
449
455
450 * IPython/demo.py (IPythonDemo): Add new classes to the demo
456 * IPython/demo.py (IPythonDemo): Add new classes to the demo
451 facilities, for demos processed by the IPython input filter
457 facilities, for demos processed by the IPython input filter
452 (IPythonDemo), and for running a script one-line-at-a-time as a
458 (IPythonDemo), and for running a script one-line-at-a-time as a
453 demo, both for pure Python (LineDemo) and for IPython-processed
459 demo, both for pure Python (LineDemo) and for IPython-processed
454 input (IPythonLineDemo). After a request by Dave Kohel, from the
460 input (IPythonLineDemo). After a request by Dave Kohel, from the
455 SAGE team.
461 SAGE team.
456 (Demo.edit): added an edit() method to the demo objects, to edit
462 (Demo.edit): added an edit() method to the demo objects, to edit
457 the in-memory copy of the last executed block.
463 the in-memory copy of the last executed block.
458
464
459 * IPython/Magic.py (magic_edit): add '-r' option for 'raw'
465 * IPython/Magic.py (magic_edit): add '-r' option for 'raw'
460 processing to %edit, %macro and %save. These commands can now be
466 processing to %edit, %macro and %save. These commands can now be
461 invoked on the unprocessed input as it was typed by the user
467 invoked on the unprocessed input as it was typed by the user
462 (without any prefilters applied). After requests by the SAGE team
468 (without any prefilters applied). After requests by the SAGE team
463 at SAGE days 2006: http://modular.ucsd.edu/sage/days1/schedule.html.
469 at SAGE days 2006: http://modular.ucsd.edu/sage/days1/schedule.html.
464
470
465 2006-02-01 Ville Vainio <vivainio@gmail.com>
471 2006-02-01 Ville Vainio <vivainio@gmail.com>
466
472
467 * setup.py, eggsetup.py: easy_install ipython==dev works
473 * setup.py, eggsetup.py: easy_install ipython==dev works
468 correctly now (on Linux)
474 correctly now (on Linux)
469
475
470 * ipy_user_conf,ipmaker: user config changes, removed spurious
476 * ipy_user_conf,ipmaker: user config changes, removed spurious
471 warnings
477 warnings
472
478
473 * iplib: if rc.banner is string, use it as is.
479 * iplib: if rc.banner is string, use it as is.
474
480
475 * Magic: %pycat accepts a string argument and pages it's contents.
481 * Magic: %pycat accepts a string argument and pages it's contents.
476
482
477
483
478 2006-01-30 Ville Vainio <vivainio@gmail.com>
484 2006-01-30 Ville Vainio <vivainio@gmail.com>
479
485
480 * pickleshare,pspersistence,ipapi,Magic: persistence overhaul.
486 * pickleshare,pspersistence,ipapi,Magic: persistence overhaul.
481 Now %store and bookmarks work through PickleShare, meaning that
487 Now %store and bookmarks work through PickleShare, meaning that
482 concurrent access is possible and all ipython sessions see the
488 concurrent access is possible and all ipython sessions see the
483 same database situation all the time, instead of snapshot of
489 same database situation all the time, instead of snapshot of
484 the situation when the session was started. Hence, %bookmark
490 the situation when the session was started. Hence, %bookmark
485 results are immediately accessible from othes sessions. The database
491 results are immediately accessible from othes sessions. The database
486 is also available for use by user extensions. See:
492 is also available for use by user extensions. See:
487 http://www.python.org/pypi/pickleshare
493 http://www.python.org/pypi/pickleshare
488
494
489 * hooks.py: Two new hooks, 'shutdown_hook' and 'late_startup_hook'.
495 * hooks.py: Two new hooks, 'shutdown_hook' and 'late_startup_hook'.
490
496
491 * aliases can now be %store'd
497 * aliases can now be %store'd
492
498
493 * path.py moved to Extensions so that pickleshare does not need
499 * path.py moved to Extensions so that pickleshare does not need
494 IPython-specific import. Extensions added to pythonpath right
500 IPython-specific import. Extensions added to pythonpath right
495 at __init__.
501 at __init__.
496
502
497 * iplib.py: ipalias deprecated/redundant; aliases are converted and
503 * iplib.py: ipalias deprecated/redundant; aliases are converted and
498 called with _ip.system and the pre-transformed command string.
504 called with _ip.system and the pre-transformed command string.
499
505
500 2006-01-29 Fernando Perez <Fernando.Perez@colorado.edu>
506 2006-01-29 Fernando Perez <Fernando.Perez@colorado.edu>
501
507
502 * IPython/iplib.py (interact): Fix that we were not catching
508 * IPython/iplib.py (interact): Fix that we were not catching
503 KeyboardInterrupt exceptions properly. I'm not quite sure why the
509 KeyboardInterrupt exceptions properly. I'm not quite sure why the
504 logic here had to change, but it's fixed now.
510 logic here had to change, but it's fixed now.
505
511
506 2006-01-29 Ville Vainio <vivainio@gmail.com>
512 2006-01-29 Ville Vainio <vivainio@gmail.com>
507
513
508 * iplib.py: Try to import pyreadline on Windows.
514 * iplib.py: Try to import pyreadline on Windows.
509
515
510 2006-01-27 Ville Vainio <vivainio@gmail.com>
516 2006-01-27 Ville Vainio <vivainio@gmail.com>
511
517
512 * iplib.py: Expose ipapi as _ip in builtin namespace.
518 * iplib.py: Expose ipapi as _ip in builtin namespace.
513 Makes ipmagic (-> _ip.magic), ipsystem (-> _ip.system)
519 Makes ipmagic (-> _ip.magic), ipsystem (-> _ip.system)
514 and ip_set_hook (-> _ip.set_hook) redundant. % and !
520 and ip_set_hook (-> _ip.set_hook) redundant. % and !
515 syntax now produce _ip.* variant of the commands.
521 syntax now produce _ip.* variant of the commands.
516
522
517 * "_ip.options().autoedit_syntax = 2" automatically throws
523 * "_ip.options().autoedit_syntax = 2" automatically throws
518 user to editor for syntax error correction without prompting.
524 user to editor for syntax error correction without prompting.
519
525
520 2006-01-27 Ville Vainio <vivainio@gmail.com>
526 2006-01-27 Ville Vainio <vivainio@gmail.com>
521
527
522 * ipmaker.py: Give "realistic" sys.argv for scripts (without
528 * ipmaker.py: Give "realistic" sys.argv for scripts (without
523 'ipython' at argv[0]) executed through command line.
529 'ipython' at argv[0]) executed through command line.
524 NOTE: this DEPRECATES calling ipython with multiple scripts
530 NOTE: this DEPRECATES calling ipython with multiple scripts
525 ("ipython a.py b.py c.py")
531 ("ipython a.py b.py c.py")
526
532
527 * iplib.py, hooks.py: Added configurable input prefilter,
533 * iplib.py, hooks.py: Added configurable input prefilter,
528 named 'input_prefilter'. See ext_rescapture.py for example
534 named 'input_prefilter'. See ext_rescapture.py for example
529 usage.
535 usage.
530
536
531 * ext_rescapture.py, Magic.py: Better system command output capture
537 * ext_rescapture.py, Magic.py: Better system command output capture
532 through 'var = !ls' (deprecates user-visible %sc). Same notation
538 through 'var = !ls' (deprecates user-visible %sc). Same notation
533 applies for magics, 'var = %alias' assigns alias list to var.
539 applies for magics, 'var = %alias' assigns alias list to var.
534
540
535 * ipapi.py: added meta() for accessing extension-usable data store.
541 * ipapi.py: added meta() for accessing extension-usable data store.
536
542
537 * iplib.py: added InteractiveShell.getapi(). New magics should be
543 * iplib.py: added InteractiveShell.getapi(). New magics should be
538 written doing self.getapi() instead of using the shell directly.
544 written doing self.getapi() instead of using the shell directly.
539
545
540 * Magic.py: %store now allows doing %store foo > ~/myfoo.txt and
546 * Magic.py: %store now allows doing %store foo > ~/myfoo.txt and
541 %store foo >> ~/myfoo.txt to store variables to files (in clean
547 %store foo >> ~/myfoo.txt to store variables to files (in clean
542 textual form, not a restorable pickle).
548 textual form, not a restorable pickle).
543
549
544 * ipmaker.py: now import ipy_profile_PROFILENAME automatically
550 * ipmaker.py: now import ipy_profile_PROFILENAME automatically
545
551
546 * usage.py, Magic.py: added %quickref
552 * usage.py, Magic.py: added %quickref
547
553
548 * iplib.py: ESC_PAREN fixes: /f 1 2 -> f(1,2), not f(1 2).
554 * iplib.py: ESC_PAREN fixes: /f 1 2 -> f(1,2), not f(1 2).
549
555
550 * GetoptErrors when invoking magics etc. with wrong args
556 * GetoptErrors when invoking magics etc. with wrong args
551 are now more helpful:
557 are now more helpful:
552 GetoptError: option -l not recognized (allowed: "qb" )
558 GetoptError: option -l not recognized (allowed: "qb" )
553
559
554 2006-01-25 Fernando Perez <Fernando.Perez@colorado.edu>
560 2006-01-25 Fernando Perez <Fernando.Perez@colorado.edu>
555
561
556 * IPython/demo.py (Demo.show): Flush stdout after each block, so
562 * IPython/demo.py (Demo.show): Flush stdout after each block, so
557 computationally intensive blocks don't appear to stall the demo.
563 computationally intensive blocks don't appear to stall the demo.
558
564
559 2006-01-24 Ville Vainio <vivainio@gmail.com>
565 2006-01-24 Ville Vainio <vivainio@gmail.com>
560
566
561 * iplib.py, hooks.py: 'result_display' hook can return a non-None
567 * iplib.py, hooks.py: 'result_display' hook can return a non-None
562 value to manipulate resulting history entry.
568 value to manipulate resulting history entry.
563
569
564 * ipapi.py: Moved TryNext here from hooks.py. Moved functions
570 * ipapi.py: Moved TryNext here from hooks.py. Moved functions
565 to instance methods of IPApi class, to make extending an embedded
571 to instance methods of IPApi class, to make extending an embedded
566 IPython feasible. See ext_rehashdir.py for example usage.
572 IPython feasible. See ext_rehashdir.py for example usage.
567
573
568 * Merged 1071-1076 from branches/0.7.1
574 * Merged 1071-1076 from branches/0.7.1
569
575
570
576
571 2006-01-23 Fernando Perez <Fernando.Perez@colorado.edu>
577 2006-01-23 Fernando Perez <Fernando.Perez@colorado.edu>
572
578
573 * tools/release (daystamp): Fix build tools to use the new
579 * tools/release (daystamp): Fix build tools to use the new
574 eggsetup.py script to build lightweight eggs.
580 eggsetup.py script to build lightweight eggs.
575
581
576 * Applied changesets 1062 and 1064 before 0.7.1 release.
582 * Applied changesets 1062 and 1064 before 0.7.1 release.
577
583
578 * IPython/Magic.py (magic_history): Add '-r' option to %hist, to
584 * IPython/Magic.py (magic_history): Add '-r' option to %hist, to
579 see the raw input history (without conversions like %ls ->
585 see the raw input history (without conversions like %ls ->
580 ipmagic("ls")). After a request from W. Stein, SAGE
586 ipmagic("ls")). After a request from W. Stein, SAGE
581 (http://modular.ucsd.edu/sage) developer. This information is
587 (http://modular.ucsd.edu/sage) developer. This information is
582 stored in the input_hist_raw attribute of the IPython instance, so
588 stored in the input_hist_raw attribute of the IPython instance, so
583 developers can access it if needed (it's an InputList instance).
589 developers can access it if needed (it's an InputList instance).
584
590
585 * Versionstring = 0.7.2.svn
591 * Versionstring = 0.7.2.svn
586
592
587 * eggsetup.py: A separate script for constructing eggs, creates
593 * eggsetup.py: A separate script for constructing eggs, creates
588 proper launch scripts even on Windows (an .exe file in
594 proper launch scripts even on Windows (an .exe file in
589 \python24\scripts).
595 \python24\scripts).
590
596
591 * ipapi.py: launch_new_instance, launch entry point needed for the
597 * ipapi.py: launch_new_instance, launch entry point needed for the
592 egg.
598 egg.
593
599
594 2006-01-23 Ville Vainio <vivainio@gmail.com>
600 2006-01-23 Ville Vainio <vivainio@gmail.com>
595
601
596 * Added %cpaste magic for pasting python code
602 * Added %cpaste magic for pasting python code
597
603
598 2006-01-22 Ville Vainio <vivainio@gmail.com>
604 2006-01-22 Ville Vainio <vivainio@gmail.com>
599
605
600 * Merge from branches/0.7.1 into trunk, revs 1052-1057
606 * Merge from branches/0.7.1 into trunk, revs 1052-1057
601
607
602 * Versionstring = 0.7.2.svn
608 * Versionstring = 0.7.2.svn
603
609
604 * eggsetup.py: A separate script for constructing eggs, creates
610 * eggsetup.py: A separate script for constructing eggs, creates
605 proper launch scripts even on Windows (an .exe file in
611 proper launch scripts even on Windows (an .exe file in
606 \python24\scripts).
612 \python24\scripts).
607
613
608 * ipapi.py: launch_new_instance, launch entry point needed for the
614 * ipapi.py: launch_new_instance, launch entry point needed for the
609 egg.
615 egg.
610
616
611 2006-01-22 Fernando Perez <Fernando.Perez@colorado.edu>
617 2006-01-22 Fernando Perez <Fernando.Perez@colorado.edu>
612
618
613 * IPython/OInspect.py (Inspector.pinfo): fix bug where foo?? or
619 * IPython/OInspect.py (Inspector.pinfo): fix bug where foo?? or
614 %pfile foo would print the file for foo even if it was a binary.
620 %pfile foo would print the file for foo even if it was a binary.
615 Now, extensions '.so' and '.dll' are skipped.
621 Now, extensions '.so' and '.dll' are skipped.
616
622
617 * IPython/Shell.py (MTInteractiveShell.__init__): Fix threading
623 * IPython/Shell.py (MTInteractiveShell.__init__): Fix threading
618 bug, where macros would fail in all threaded modes. I'm not 100%
624 bug, where macros would fail in all threaded modes. I'm not 100%
619 sure, so I'm going to put out an rc instead of making a release
625 sure, so I'm going to put out an rc instead of making a release
620 today, and wait for feedback for at least a few days.
626 today, and wait for feedback for at least a few days.
621
627
622 * IPython/iplib.py (handle_normal): fix (finally? somehow I doubt
628 * IPython/iplib.py (handle_normal): fix (finally? somehow I doubt
623 it...) the handling of pasting external code with autoindent on.
629 it...) the handling of pasting external code with autoindent on.
624 To get out of a multiline input, the rule will appear for most
630 To get out of a multiline input, the rule will appear for most
625 users unchanged: two blank lines or change the indent level
631 users unchanged: two blank lines or change the indent level
626 proposed by IPython. But there is a twist now: you can
632 proposed by IPython. But there is a twist now: you can
627 add/subtract only *one or two spaces*. If you add/subtract three
633 add/subtract only *one or two spaces*. If you add/subtract three
628 or more (unless you completely delete the line), IPython will
634 or more (unless you completely delete the line), IPython will
629 accept that line, and you'll need to enter a second one of pure
635 accept that line, and you'll need to enter a second one of pure
630 whitespace. I know it sounds complicated, but I can't find a
636 whitespace. I know it sounds complicated, but I can't find a
631 different solution that covers all the cases, with the right
637 different solution that covers all the cases, with the right
632 heuristics. Hopefully in actual use, nobody will really notice
638 heuristics. Hopefully in actual use, nobody will really notice
633 all these strange rules and things will 'just work'.
639 all these strange rules and things will 'just work'.
634
640
635 2006-01-21 Fernando Perez <Fernando.Perez@colorado.edu>
641 2006-01-21 Fernando Perez <Fernando.Perez@colorado.edu>
636
642
637 * IPython/iplib.py (interact): catch exceptions which can be
643 * IPython/iplib.py (interact): catch exceptions which can be
638 triggered asynchronously by signal handlers. Thanks to an
644 triggered asynchronously by signal handlers. Thanks to an
639 automatic crash report, submitted by Colin Kingsley
645 automatic crash report, submitted by Colin Kingsley
640 <tercel-AT-gentoo.org>.
646 <tercel-AT-gentoo.org>.
641
647
642 2006-01-20 Ville Vainio <vivainio@gmail.com>
648 2006-01-20 Ville Vainio <vivainio@gmail.com>
643
649
644 * Ipython/Extensions/ext_rehashdir.py: Created a usable example
650 * Ipython/Extensions/ext_rehashdir.py: Created a usable example
645 (%rehashdir, very useful, try it out) of how to extend ipython
651 (%rehashdir, very useful, try it out) of how to extend ipython
646 with new magics. Also added Extensions dir to pythonpath to make
652 with new magics. Also added Extensions dir to pythonpath to make
647 importing extensions easy.
653 importing extensions easy.
648
654
649 * %store now complains when trying to store interactively declared
655 * %store now complains when trying to store interactively declared
650 classes / instances of those classes.
656 classes / instances of those classes.
651
657
652 * Extensions/ipy_system_conf.py, UserConfig/ipy_user_conf.py,
658 * Extensions/ipy_system_conf.py, UserConfig/ipy_user_conf.py,
653 ipmaker.py: Config rehaul. Now ipy_..._conf.py are always imported
659 ipmaker.py: Config rehaul. Now ipy_..._conf.py are always imported
654 if they exist, and ipy_user_conf.py with some defaults is created for
660 if they exist, and ipy_user_conf.py with some defaults is created for
655 the user.
661 the user.
656
662
657 * Startup rehashing done by the config file, not InterpreterExec.
663 * Startup rehashing done by the config file, not InterpreterExec.
658 This means system commands are available even without selecting the
664 This means system commands are available even without selecting the
659 pysh profile. It's the sensible default after all.
665 pysh profile. It's the sensible default after all.
660
666
661 2006-01-20 Fernando Perez <Fernando.Perez@colorado.edu>
667 2006-01-20 Fernando Perez <Fernando.Perez@colorado.edu>
662
668
663 * IPython/iplib.py (raw_input): I _think_ I got the pasting of
669 * IPython/iplib.py (raw_input): I _think_ I got the pasting of
664 multiline code with autoindent on working. But I am really not
670 multiline code with autoindent on working. But I am really not
665 sure, so this needs more testing. Will commit a debug-enabled
671 sure, so this needs more testing. Will commit a debug-enabled
666 version for now, while I test it some more, so that Ville and
672 version for now, while I test it some more, so that Ville and
667 others may also catch any problems. Also made
673 others may also catch any problems. Also made
668 self.indent_current_str() a method, to ensure that there's no
674 self.indent_current_str() a method, to ensure that there's no
669 chance of the indent space count and the corresponding string
675 chance of the indent space count and the corresponding string
670 falling out of sync. All code needing the string should just call
676 falling out of sync. All code needing the string should just call
671 the method.
677 the method.
672
678
673 2006-01-18 Fernando Perez <Fernando.Perez@colorado.edu>
679 2006-01-18 Fernando Perez <Fernando.Perez@colorado.edu>
674
680
675 * IPython/Magic.py (magic_edit): fix check for when users don't
681 * IPython/Magic.py (magic_edit): fix check for when users don't
676 save their output files, the try/except was in the wrong section.
682 save their output files, the try/except was in the wrong section.
677
683
678 2006-01-17 Fernando Perez <Fernando.Perez@colorado.edu>
684 2006-01-17 Fernando Perez <Fernando.Perez@colorado.edu>
679
685
680 * IPython/Magic.py (magic_run): fix __file__ global missing from
686 * IPython/Magic.py (magic_run): fix __file__ global missing from
681 script's namespace when executed via %run. After a report by
687 script's namespace when executed via %run. After a report by
682 Vivian.
688 Vivian.
683
689
684 * IPython/Debugger.py (Pdb.__init__): Fix breakage with '%run -d'
690 * IPython/Debugger.py (Pdb.__init__): Fix breakage with '%run -d'
685 when using python 2.4. The parent constructor changed in 2.4, and
691 when using python 2.4. The parent constructor changed in 2.4, and
686 we need to track it directly (we can't call it, as it messes up
692 we need to track it directly (we can't call it, as it messes up
687 readline and tab-completion inside our pdb would stop working).
693 readline and tab-completion inside our pdb would stop working).
688 After a bug report by R. Bernstein <rocky-AT-panix.com>.
694 After a bug report by R. Bernstein <rocky-AT-panix.com>.
689
695
690 2006-01-16 Ville Vainio <vivainio@gmail.com>
696 2006-01-16 Ville Vainio <vivainio@gmail.com>
691
697
692 * Ipython/magic.py: Reverted back to old %edit functionality
698 * Ipython/magic.py: Reverted back to old %edit functionality
693 that returns file contents on exit.
699 that returns file contents on exit.
694
700
695 * IPython/path.py: Added Jason Orendorff's "path" module to
701 * IPython/path.py: Added Jason Orendorff's "path" module to
696 IPython tree, http://www.jorendorff.com/articles/python/path/.
702 IPython tree, http://www.jorendorff.com/articles/python/path/.
697 You can get path objects conveniently through %sc, and !!, e.g.:
703 You can get path objects conveniently through %sc, and !!, e.g.:
698 sc files=ls
704 sc files=ls
699 for p in files.paths: # or files.p
705 for p in files.paths: # or files.p
700 print p,p.mtime
706 print p,p.mtime
701
707
702 * Ipython/iplib.py:"," and ";" autoquoting-upon-autocall
708 * Ipython/iplib.py:"," and ";" autoquoting-upon-autocall
703 now work again without considering the exclusion regexp -
709 now work again without considering the exclusion regexp -
704 hence, things like ',foo my/path' turn to 'foo("my/path")'
710 hence, things like ',foo my/path' turn to 'foo("my/path")'
705 instead of syntax error.
711 instead of syntax error.
706
712
707
713
708 2006-01-14 Ville Vainio <vivainio@gmail.com>
714 2006-01-14 Ville Vainio <vivainio@gmail.com>
709
715
710 * IPython/ipapi.py (ashook, asmagic, options): Added convenience
716 * IPython/ipapi.py (ashook, asmagic, options): Added convenience
711 ipapi decorators for python 2.4 users, options() provides access to rc
717 ipapi decorators for python 2.4 users, options() provides access to rc
712 data.
718 data.
713
719
714 * IPython/Magic.py (magic_cd): %cd now accepts backslashes
720 * IPython/Magic.py (magic_cd): %cd now accepts backslashes
715 as path separators (even on Linux ;-). Space character after
721 as path separators (even on Linux ;-). Space character after
716 backslash (as yielded by tab completer) is still space;
722 backslash (as yielded by tab completer) is still space;
717 "%cd long\ name" works as expected.
723 "%cd long\ name" works as expected.
718
724
719 * IPython/ipapi.py,hooks.py,iplib.py: Hooks now implemented
725 * IPython/ipapi.py,hooks.py,iplib.py: Hooks now implemented
720 as "chain of command", with priority. API stays the same,
726 as "chain of command", with priority. API stays the same,
721 TryNext exception raised by a hook function signals that
727 TryNext exception raised by a hook function signals that
722 current hook failed and next hook should try handling it, as
728 current hook failed and next hook should try handling it, as
723 suggested by Walter DΓΆrwald <walter@livinglogic.de>. Walter also
729 suggested by Walter DΓΆrwald <walter@livinglogic.de>. Walter also
724 requested configurable display hook, which is now implemented.
730 requested configurable display hook, which is now implemented.
725
731
726 2006-01-13 Ville Vainio <vivainio@gmail.com>
732 2006-01-13 Ville Vainio <vivainio@gmail.com>
727
733
728 * IPython/platutils*.py: platform specific utility functions,
734 * IPython/platutils*.py: platform specific utility functions,
729 so far only set_term_title is implemented (change terminal
735 so far only set_term_title is implemented (change terminal
730 label in windowing systems). %cd now changes the title to
736 label in windowing systems). %cd now changes the title to
731 current dir.
737 current dir.
732
738
733 * IPython/Release.py: Added myself to "authors" list,
739 * IPython/Release.py: Added myself to "authors" list,
734 had to create new files.
740 had to create new files.
735
741
736 * IPython/iplib.py (handle_shell_escape): fixed logical flaw in
742 * IPython/iplib.py (handle_shell_escape): fixed logical flaw in
737 shell escape; not a known bug but had potential to be one in the
743 shell escape; not a known bug but had potential to be one in the
738 future.
744 future.
739
745
740 * IPython/ipapi.py (added),OInspect.py,iplib.py: "Public"
746 * IPython/ipapi.py (added),OInspect.py,iplib.py: "Public"
741 extension API for IPython! See the module for usage example. Fix
747 extension API for IPython! See the module for usage example. Fix
742 OInspect for docstring-less magic functions.
748 OInspect for docstring-less magic functions.
743
749
744
750
745 2006-01-13 Fernando Perez <Fernando.Perez@colorado.edu>
751 2006-01-13 Fernando Perez <Fernando.Perez@colorado.edu>
746
752
747 * IPython/iplib.py (raw_input): temporarily deactivate all
753 * IPython/iplib.py (raw_input): temporarily deactivate all
748 attempts at allowing pasting of code with autoindent on. It
754 attempts at allowing pasting of code with autoindent on. It
749 introduced bugs (reported by Prabhu) and I can't seem to find a
755 introduced bugs (reported by Prabhu) and I can't seem to find a
750 robust combination which works in all cases. Will have to revisit
756 robust combination which works in all cases. Will have to revisit
751 later.
757 later.
752
758
753 * IPython/genutils.py: remove isspace() function. We've dropped
759 * IPython/genutils.py: remove isspace() function. We've dropped
754 2.2 compatibility, so it's OK to use the string method.
760 2.2 compatibility, so it's OK to use the string method.
755
761
756 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
762 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
757
763
758 * IPython/iplib.py (InteractiveShell.__init__): fix regexp
764 * IPython/iplib.py (InteractiveShell.__init__): fix regexp
759 matching what NOT to autocall on, to include all python binary
765 matching what NOT to autocall on, to include all python binary
760 operators (including things like 'and', 'or', 'is' and 'in').
766 operators (including things like 'and', 'or', 'is' and 'in').
761 Prompted by a bug report on 'foo & bar', but I realized we had
767 Prompted by a bug report on 'foo & bar', but I realized we had
762 many more potential bug cases with other operators. The regexp is
768 many more potential bug cases with other operators. The regexp is
763 self.re_exclude_auto, it's fairly commented.
769 self.re_exclude_auto, it's fairly commented.
764
770
765 2006-01-12 Ville Vainio <vivainio@gmail.com>
771 2006-01-12 Ville Vainio <vivainio@gmail.com>
766
772
767 * IPython/iplib.py (make_quoted_expr,handle_shell_escape):
773 * IPython/iplib.py (make_quoted_expr,handle_shell_escape):
768 Prettified and hardened string/backslash quoting with ipsystem(),
774 Prettified and hardened string/backslash quoting with ipsystem(),
769 ipalias() and ipmagic(). Now even \ characters are passed to
775 ipalias() and ipmagic(). Now even \ characters are passed to
770 %magics, !shell escapes and aliases exactly as they are in the
776 %magics, !shell escapes and aliases exactly as they are in the
771 ipython command line. Should improve backslash experience,
777 ipython command line. Should improve backslash experience,
772 particularly in Windows (path delimiter for some commands that
778 particularly in Windows (path delimiter for some commands that
773 won't understand '/'), but Unix benefits as well (regexps). %cd
779 won't understand '/'), but Unix benefits as well (regexps). %cd
774 magic still doesn't support backslash path delimiters, though. Also
780 magic still doesn't support backslash path delimiters, though. Also
775 deleted all pretense of supporting multiline command strings in
781 deleted all pretense of supporting multiline command strings in
776 !system or %magic commands. Thanks to Jerry McRae for suggestions.
782 !system or %magic commands. Thanks to Jerry McRae for suggestions.
777
783
778 * doc/build_doc_instructions.txt added. Documentation on how to
784 * doc/build_doc_instructions.txt added. Documentation on how to
779 use doc/update_manual.py, added yesterday. Both files contributed
785 use doc/update_manual.py, added yesterday. Both files contributed
780 by JΓΆrgen Stenarson <jorgen.stenarson-AT-bostream.nu>. This slates
786 by JΓΆrgen Stenarson <jorgen.stenarson-AT-bostream.nu>. This slates
781 doc/*.sh for deprecation at a later date.
787 doc/*.sh for deprecation at a later date.
782
788
783 * /ipython.py Added ipython.py to root directory for
789 * /ipython.py Added ipython.py to root directory for
784 zero-installation (tar xzvf ipython.tgz; cd ipython; python
790 zero-installation (tar xzvf ipython.tgz; cd ipython; python
785 ipython.py) and development convenience (no need to keep doing
791 ipython.py) and development convenience (no need to keep doing
786 "setup.py install" between changes).
792 "setup.py install" between changes).
787
793
788 * Made ! and !! shell escapes work (again) in multiline expressions:
794 * Made ! and !! shell escapes work (again) in multiline expressions:
789 if 1:
795 if 1:
790 !ls
796 !ls
791 !!ls
797 !!ls
792
798
793 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
799 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
794
800
795 * IPython/ipstruct.py (Struct): Rename IPython.Struct to
801 * IPython/ipstruct.py (Struct): Rename IPython.Struct to
796 IPython.ipstruct, to avoid local shadowing of the stdlib 'struct'
802 IPython.ipstruct, to avoid local shadowing of the stdlib 'struct'
797 module in case-insensitive installation. Was causing crashes
803 module in case-insensitive installation. Was causing crashes
798 under win32. Closes http://www.scipy.net/roundup/ipython/issue49.
804 under win32. Closes http://www.scipy.net/roundup/ipython/issue49.
799
805
800 * IPython/Magic.py (magic_pycat): Fix pycat, patch by Marien Zwart
806 * IPython/Magic.py (magic_pycat): Fix pycat, patch by Marien Zwart
801 <marienz-AT-gentoo.org>, closes
807 <marienz-AT-gentoo.org>, closes
802 http://www.scipy.net/roundup/ipython/issue51.
808 http://www.scipy.net/roundup/ipython/issue51.
803
809
804 2006-01-11 Fernando Perez <Fernando.Perez@colorado.edu>
810 2006-01-11 Fernando Perez <Fernando.Perez@colorado.edu>
805
811
806 * IPython/Shell.py (IPShellGTK.on_timer): Finally fix the
812 * IPython/Shell.py (IPShellGTK.on_timer): Finally fix the
807 problem of excessive CPU usage under *nix and keyboard lag under
813 problem of excessive CPU usage under *nix and keyboard lag under
808 win32.
814 win32.
809
815
810 2006-01-10 *** Released version 0.7.0
816 2006-01-10 *** Released version 0.7.0
811
817
812 2006-01-10 Fernando Perez <Fernando.Perez@colorado.edu>
818 2006-01-10 Fernando Perez <Fernando.Perez@colorado.edu>
813
819
814 * IPython/Release.py (revision): tag version number to 0.7.0,
820 * IPython/Release.py (revision): tag version number to 0.7.0,
815 ready for release.
821 ready for release.
816
822
817 * IPython/Magic.py (magic_edit): Add print statement to %edit so
823 * IPython/Magic.py (magic_edit): Add print statement to %edit so
818 it informs the user of the name of the temp. file used. This can
824 it informs the user of the name of the temp. file used. This can
819 help if you decide later to reuse that same file, so you know
825 help if you decide later to reuse that same file, so you know
820 where to copy the info from.
826 where to copy the info from.
821
827
822 2006-01-09 Fernando Perez <Fernando.Perez@colorado.edu>
828 2006-01-09 Fernando Perez <Fernando.Perez@colorado.edu>
823
829
824 * setup_bdist_egg.py: little script to build an egg. Added
830 * setup_bdist_egg.py: little script to build an egg. Added
825 support in the release tools as well.
831 support in the release tools as well.
826
832
827 2006-01-08 Fernando Perez <Fernando.Perez@colorado.edu>
833 2006-01-08 Fernando Perez <Fernando.Perez@colorado.edu>
828
834
829 * IPython/Shell.py (IPShellWX.__init__): add support for WXPython
835 * IPython/Shell.py (IPShellWX.__init__): add support for WXPython
830 version selection (new -wxversion command line and ipythonrc
836 version selection (new -wxversion command line and ipythonrc
831 parameter). Patch contributed by Arnd Baecker
837 parameter). Patch contributed by Arnd Baecker
832 <arnd.baecker-AT-web.de>.
838 <arnd.baecker-AT-web.de>.
833
839
834 * IPython/iplib.py (embed_mainloop): fix tab-completion in
840 * IPython/iplib.py (embed_mainloop): fix tab-completion in
835 embedded instances, for variables defined at the interactive
841 embedded instances, for variables defined at the interactive
836 prompt of the embedded ipython. Reported by Arnd.
842 prompt of the embedded ipython. Reported by Arnd.
837
843
838 * IPython/Magic.py (magic_autocall): Fix %autocall magic. Now
844 * IPython/Magic.py (magic_autocall): Fix %autocall magic. Now
839 it can be used as a (stateful) toggle, or with a direct parameter.
845 it can be used as a (stateful) toggle, or with a direct parameter.
840
846
841 * IPython/ultraTB.py (_fixed_getinnerframes): remove debug assert which
847 * IPython/ultraTB.py (_fixed_getinnerframes): remove debug assert which
842 could be triggered in certain cases and cause the traceback
848 could be triggered in certain cases and cause the traceback
843 printer not to work.
849 printer not to work.
844
850
845 2006-01-07 Fernando Perez <Fernando.Perez@colorado.edu>
851 2006-01-07 Fernando Perez <Fernando.Perez@colorado.edu>
846
852
847 * IPython/iplib.py (_should_recompile): Small fix, closes
853 * IPython/iplib.py (_should_recompile): Small fix, closes
848 http://www.scipy.net/roundup/ipython/issue48. Patch by Scott.
854 http://www.scipy.net/roundup/ipython/issue48. Patch by Scott.
849
855
850 2006-01-04 Fernando Perez <Fernando.Perez@colorado.edu>
856 2006-01-04 Fernando Perez <Fernando.Perez@colorado.edu>
851
857
852 * IPython/Shell.py (IPShellGTK.mainloop): fix bug in the GTK
858 * IPython/Shell.py (IPShellGTK.mainloop): fix bug in the GTK
853 backend for matplotlib (100% cpu utiliziation). Thanks to Charlie
859 backend for matplotlib (100% cpu utiliziation). Thanks to Charlie
854 Moad for help with tracking it down.
860 Moad for help with tracking it down.
855
861
856 * IPython/iplib.py (handle_auto): fix autocall handling for
862 * IPython/iplib.py (handle_auto): fix autocall handling for
857 objects which support BOTH __getitem__ and __call__ (so that f [x]
863 objects which support BOTH __getitem__ and __call__ (so that f [x]
858 is left alone, instead of becoming f([x]) automatically).
864 is left alone, instead of becoming f([x]) automatically).
859
865
860 * IPython/Magic.py (magic_cd): fix crash when cd -b was used.
866 * IPython/Magic.py (magic_cd): fix crash when cd -b was used.
861 Ville's patch.
867 Ville's patch.
862
868
863 2006-01-03 Fernando Perez <Fernando.Perez@colorado.edu>
869 2006-01-03 Fernando Perez <Fernando.Perez@colorado.edu>
864
870
865 * IPython/iplib.py (handle_auto): changed autocall semantics to
871 * IPython/iplib.py (handle_auto): changed autocall semantics to
866 include 'smart' mode, where the autocall transformation is NOT
872 include 'smart' mode, where the autocall transformation is NOT
867 applied if there are no arguments on the line. This allows you to
873 applied if there are no arguments on the line. This allows you to
868 just type 'foo' if foo is a callable to see its internal form,
874 just type 'foo' if foo is a callable to see its internal form,
869 instead of having it called with no arguments (typically a
875 instead of having it called with no arguments (typically a
870 mistake). The old 'full' autocall still exists: for that, you
876 mistake). The old 'full' autocall still exists: for that, you
871 need to set the 'autocall' parameter to 2 in your ipythonrc file.
877 need to set the 'autocall' parameter to 2 in your ipythonrc file.
872
878
873 * IPython/completer.py (Completer.attr_matches): add
879 * IPython/completer.py (Completer.attr_matches): add
874 tab-completion support for Enthoughts' traits. After a report by
880 tab-completion support for Enthoughts' traits. After a report by
875 Arnd and a patch by Prabhu.
881 Arnd and a patch by Prabhu.
876
882
877 2006-01-02 Fernando Perez <Fernando.Perez@colorado.edu>
883 2006-01-02 Fernando Perez <Fernando.Perez@colorado.edu>
878
884
879 * IPython/ultraTB.py (_fixed_getinnerframes): added Alex
885 * IPython/ultraTB.py (_fixed_getinnerframes): added Alex
880 Schmolck's patch to fix inspect.getinnerframes().
886 Schmolck's patch to fix inspect.getinnerframes().
881
887
882 * IPython/iplib.py (InteractiveShell.__init__): significant fixes
888 * IPython/iplib.py (InteractiveShell.__init__): significant fixes
883 for embedded instances, regarding handling of namespaces and items
889 for embedded instances, regarding handling of namespaces and items
884 added to the __builtin__ one. Multiple embedded instances and
890 added to the __builtin__ one. Multiple embedded instances and
885 recursive embeddings should work better now (though I'm not sure
891 recursive embeddings should work better now (though I'm not sure
886 I've got all the corner cases fixed, that code is a bit of a brain
892 I've got all the corner cases fixed, that code is a bit of a brain
887 twister).
893 twister).
888
894
889 * IPython/Magic.py (magic_edit): added support to edit in-memory
895 * IPython/Magic.py (magic_edit): added support to edit in-memory
890 macros (automatically creates the necessary temp files). %edit
896 macros (automatically creates the necessary temp files). %edit
891 also doesn't return the file contents anymore, it's just noise.
897 also doesn't return the file contents anymore, it's just noise.
892
898
893 * IPython/completer.py (Completer.attr_matches): revert change to
899 * IPython/completer.py (Completer.attr_matches): revert change to
894 complete only on attributes listed in __all__. I realized it
900 complete only on attributes listed in __all__. I realized it
895 cripples the tab-completion system as a tool for exploring the
901 cripples the tab-completion system as a tool for exploring the
896 internals of unknown libraries (it renders any non-__all__
902 internals of unknown libraries (it renders any non-__all__
897 attribute off-limits). I got bit by this when trying to see
903 attribute off-limits). I got bit by this when trying to see
898 something inside the dis module.
904 something inside the dis module.
899
905
900 2005-12-31 Fernando Perez <Fernando.Perez@colorado.edu>
906 2005-12-31 Fernando Perez <Fernando.Perez@colorado.edu>
901
907
902 * IPython/iplib.py (InteractiveShell.__init__): add .meta
908 * IPython/iplib.py (InteractiveShell.__init__): add .meta
903 namespace for users and extension writers to hold data in. This
909 namespace for users and extension writers to hold data in. This
904 follows the discussion in
910 follows the discussion in
905 http://projects.scipy.org/ipython/ipython/wiki/RefactoringIPython.
911 http://projects.scipy.org/ipython/ipython/wiki/RefactoringIPython.
906
912
907 * IPython/completer.py (IPCompleter.complete): small patch to help
913 * IPython/completer.py (IPCompleter.complete): small patch to help
908 tab-completion under Emacs, after a suggestion by John Barnard
914 tab-completion under Emacs, after a suggestion by John Barnard
909 <barnarj-AT-ccf.org>.
915 <barnarj-AT-ccf.org>.
910
916
911 * IPython/Magic.py (Magic.extract_input_slices): added support for
917 * IPython/Magic.py (Magic.extract_input_slices): added support for
912 the slice notation in magics to use N-M to represent numbers N...M
918 the slice notation in magics to use N-M to represent numbers N...M
913 (closed endpoints). This is used by %macro and %save.
919 (closed endpoints). This is used by %macro and %save.
914
920
915 * IPython/completer.py (Completer.attr_matches): for modules which
921 * IPython/completer.py (Completer.attr_matches): for modules which
916 define __all__, complete only on those. After a patch by Jeffrey
922 define __all__, complete only on those. After a patch by Jeffrey
917 Collins <jcollins_boulder-AT-earthlink.net>. Also, clean up and
923 Collins <jcollins_boulder-AT-earthlink.net>. Also, clean up and
918 speed up this routine.
924 speed up this routine.
919
925
920 * IPython/Logger.py (Logger.log): fix a history handling bug. I
926 * IPython/Logger.py (Logger.log): fix a history handling bug. I
921 don't know if this is the end of it, but the behavior now is
927 don't know if this is the end of it, but the behavior now is
922 certainly much more correct. Note that coupled with macros,
928 certainly much more correct. Note that coupled with macros,
923 slightly surprising (at first) behavior may occur: a macro will in
929 slightly surprising (at first) behavior may occur: a macro will in
924 general expand to multiple lines of input, so upon exiting, the
930 general expand to multiple lines of input, so upon exiting, the
925 in/out counters will both be bumped by the corresponding amount
931 in/out counters will both be bumped by the corresponding amount
926 (as if the macro's contents had been typed interactively). Typing
932 (as if the macro's contents had been typed interactively). Typing
927 %hist will reveal the intermediate (silently processed) lines.
933 %hist will reveal the intermediate (silently processed) lines.
928
934
929 * IPython/Magic.py (magic_run): fix a subtle bug which could cause
935 * IPython/Magic.py (magic_run): fix a subtle bug which could cause
930 pickle to fail (%run was overwriting __main__ and not restoring
936 pickle to fail (%run was overwriting __main__ and not restoring
931 it, but pickle relies on __main__ to operate).
937 it, but pickle relies on __main__ to operate).
932
938
933 * IPython/iplib.py (InteractiveShell): fix pdb calling: I'm now
939 * IPython/iplib.py (InteractiveShell): fix pdb calling: I'm now
934 using properties, but forgot to make the main InteractiveShell
940 using properties, but forgot to make the main InteractiveShell
935 class a new-style class. Properties fail silently, and
941 class a new-style class. Properties fail silently, and
936 mysteriously, with old-style class (getters work, but
942 mysteriously, with old-style class (getters work, but
937 setters don't do anything).
943 setters don't do anything).
938
944
939 2005-12-30 Fernando Perez <Fernando.Perez@colorado.edu>
945 2005-12-30 Fernando Perez <Fernando.Perez@colorado.edu>
940
946
941 * IPython/Magic.py (magic_history): fix history reporting bug (I
947 * IPython/Magic.py (magic_history): fix history reporting bug (I
942 know some nasties are still there, I just can't seem to find a
948 know some nasties are still there, I just can't seem to find a
943 reproducible test case to track them down; the input history is
949 reproducible test case to track them down; the input history is
944 falling out of sync...)
950 falling out of sync...)
945
951
946 * IPython/iplib.py (handle_shell_escape): fix bug where both
952 * IPython/iplib.py (handle_shell_escape): fix bug where both
947 aliases and system accesses where broken for indented code (such
953 aliases and system accesses where broken for indented code (such
948 as loops).
954 as loops).
949
955
950 * IPython/genutils.py (shell): fix small but critical bug for
956 * IPython/genutils.py (shell): fix small but critical bug for
951 win32 system access.
957 win32 system access.
952
958
953 2005-12-29 Fernando Perez <Fernando.Perez@colorado.edu>
959 2005-12-29 Fernando Perez <Fernando.Perez@colorado.edu>
954
960
955 * IPython/iplib.py (showtraceback): remove use of the
961 * IPython/iplib.py (showtraceback): remove use of the
956 sys.last_{type/value/traceback} structures, which are non
962 sys.last_{type/value/traceback} structures, which are non
957 thread-safe.
963 thread-safe.
958 (_prefilter): change control flow to ensure that we NEVER
964 (_prefilter): change control flow to ensure that we NEVER
959 introspect objects when autocall is off. This will guarantee that
965 introspect objects when autocall is off. This will guarantee that
960 having an input line of the form 'x.y', where access to attribute
966 having an input line of the form 'x.y', where access to attribute
961 'y' has side effects, doesn't trigger the side effect TWICE. It
967 'y' has side effects, doesn't trigger the side effect TWICE. It
962 is important to note that, with autocall on, these side effects
968 is important to note that, with autocall on, these side effects
963 can still happen.
969 can still happen.
964 (ipsystem): new builtin, to complete the ip{magic/alias/system}
970 (ipsystem): new builtin, to complete the ip{magic/alias/system}
965 trio. IPython offers these three kinds of special calls which are
971 trio. IPython offers these three kinds of special calls which are
966 not python code, and it's a good thing to have their call method
972 not python code, and it's a good thing to have their call method
967 be accessible as pure python functions (not just special syntax at
973 be accessible as pure python functions (not just special syntax at
968 the command line). It gives us a better internal implementation
974 the command line). It gives us a better internal implementation
969 structure, as well as exposing these for user scripting more
975 structure, as well as exposing these for user scripting more
970 cleanly.
976 cleanly.
971
977
972 * IPython/macro.py (Macro.__init__): moved macros to a standalone
978 * IPython/macro.py (Macro.__init__): moved macros to a standalone
973 file. Now that they'll be more likely to be used with the
979 file. Now that they'll be more likely to be used with the
974 persistance system (%store), I want to make sure their module path
980 persistance system (%store), I want to make sure their module path
975 doesn't change in the future, so that we don't break things for
981 doesn't change in the future, so that we don't break things for
976 users' persisted data.
982 users' persisted data.
977
983
978 * IPython/iplib.py (autoindent_update): move indentation
984 * IPython/iplib.py (autoindent_update): move indentation
979 management into the _text_ processing loop, not the keyboard
985 management into the _text_ processing loop, not the keyboard
980 interactive one. This is necessary to correctly process non-typed
986 interactive one. This is necessary to correctly process non-typed
981 multiline input (such as macros).
987 multiline input (such as macros).
982
988
983 * IPython/Magic.py (Magic.format_latex): patch by Stefan van der
989 * IPython/Magic.py (Magic.format_latex): patch by Stefan van der
984 Walt <stefan-AT-sun.ac.za> to fix latex formatting of docstrings,
990 Walt <stefan-AT-sun.ac.za> to fix latex formatting of docstrings,
985 which was producing problems in the resulting manual.
991 which was producing problems in the resulting manual.
986 (magic_whos): improve reporting of instances (show their class,
992 (magic_whos): improve reporting of instances (show their class,
987 instead of simply printing 'instance' which isn't terribly
993 instead of simply printing 'instance' which isn't terribly
988 informative).
994 informative).
989
995
990 * IPython/genutils.py (shell): commit Jorgen Stenarson's patch
996 * IPython/genutils.py (shell): commit Jorgen Stenarson's patch
991 (minor mods) to support network shares under win32.
997 (minor mods) to support network shares under win32.
992
998
993 * IPython/winconsole.py (get_console_size): add new winconsole
999 * IPython/winconsole.py (get_console_size): add new winconsole
994 module and fixes to page_dumb() to improve its behavior under
1000 module and fixes to page_dumb() to improve its behavior under
995 win32. Contributed by Alexander Belchenko <bialix-AT-ukr.net>.
1001 win32. Contributed by Alexander Belchenko <bialix-AT-ukr.net>.
996
1002
997 * IPython/Magic.py (Macro): simplified Macro class to just
1003 * IPython/Magic.py (Macro): simplified Macro class to just
998 subclass list. We've had only 2.2 compatibility for a very long
1004 subclass list. We've had only 2.2 compatibility for a very long
999 time, yet I was still avoiding subclassing the builtin types. No
1005 time, yet I was still avoiding subclassing the builtin types. No
1000 more (I'm also starting to use properties, though I won't shift to
1006 more (I'm also starting to use properties, though I won't shift to
1001 2.3-specific features quite yet).
1007 2.3-specific features quite yet).
1002 (magic_store): added Ville's patch for lightweight variable
1008 (magic_store): added Ville's patch for lightweight variable
1003 persistence, after a request on the user list by Matt Wilkie
1009 persistence, after a request on the user list by Matt Wilkie
1004 <maphew-AT-gmail.com>. The new %store magic's docstring has full
1010 <maphew-AT-gmail.com>. The new %store magic's docstring has full
1005 details.
1011 details.
1006
1012
1007 * IPython/iplib.py (InteractiveShell.post_config_initialization):
1013 * IPython/iplib.py (InteractiveShell.post_config_initialization):
1008 changed the default logfile name from 'ipython.log' to
1014 changed the default logfile name from 'ipython.log' to
1009 'ipython_log.py'. These logs are real python files, and now that
1015 'ipython_log.py'. These logs are real python files, and now that
1010 we have much better multiline support, people are more likely to
1016 we have much better multiline support, people are more likely to
1011 want to use them as such. Might as well name them correctly.
1017 want to use them as such. Might as well name them correctly.
1012
1018
1013 * IPython/Magic.py: substantial cleanup. While we can't stop
1019 * IPython/Magic.py: substantial cleanup. While we can't stop
1014 using magics as mixins, due to the existing customizations 'out
1020 using magics as mixins, due to the existing customizations 'out
1015 there' which rely on the mixin naming conventions, at least I
1021 there' which rely on the mixin naming conventions, at least I
1016 cleaned out all cross-class name usage. So once we are OK with
1022 cleaned out all cross-class name usage. So once we are OK with
1017 breaking compatibility, the two systems can be separated.
1023 breaking compatibility, the two systems can be separated.
1018
1024
1019 * IPython/Logger.py: major cleanup. This one is NOT a mixin
1025 * IPython/Logger.py: major cleanup. This one is NOT a mixin
1020 anymore, and the class is a fair bit less hideous as well. New
1026 anymore, and the class is a fair bit less hideous as well. New
1021 features were also introduced: timestamping of input, and logging
1027 features were also introduced: timestamping of input, and logging
1022 of output results. These are user-visible with the -t and -o
1028 of output results. These are user-visible with the -t and -o
1023 options to %logstart. Closes
1029 options to %logstart. Closes
1024 http://www.scipy.net/roundup/ipython/issue11 and a request by
1030 http://www.scipy.net/roundup/ipython/issue11 and a request by
1025 William Stein (SAGE developer - http://modular.ucsd.edu/sage).
1031 William Stein (SAGE developer - http://modular.ucsd.edu/sage).
1026
1032
1027 2005-12-28 Fernando Perez <Fernando.Perez@colorado.edu>
1033 2005-12-28 Fernando Perez <Fernando.Perez@colorado.edu>
1028
1034
1029 * IPython/iplib.py (handle_shell_escape): add Ville's patch to
1035 * IPython/iplib.py (handle_shell_escape): add Ville's patch to
1030 better handle backslashes in paths. See the thread 'More Windows
1036 better handle backslashes in paths. See the thread 'More Windows
1031 questions part 2 - \/ characters revisited' on the iypthon user
1037 questions part 2 - \/ characters revisited' on the iypthon user
1032 list:
1038 list:
1033 http://scipy.net/pipermail/ipython-user/2005-June/000907.html
1039 http://scipy.net/pipermail/ipython-user/2005-June/000907.html
1034
1040
1035 (InteractiveShell.__init__): fix tab-completion bug in threaded shells.
1041 (InteractiveShell.__init__): fix tab-completion bug in threaded shells.
1036
1042
1037 (InteractiveShell.__init__): change threaded shells to not use the
1043 (InteractiveShell.__init__): change threaded shells to not use the
1038 ipython crash handler. This was causing more problems than not,
1044 ipython crash handler. This was causing more problems than not,
1039 as exceptions in the main thread (GUI code, typically) would
1045 as exceptions in the main thread (GUI code, typically) would
1040 always show up as a 'crash', when they really weren't.
1046 always show up as a 'crash', when they really weren't.
1041
1047
1042 The colors and exception mode commands (%colors/%xmode) have been
1048 The colors and exception mode commands (%colors/%xmode) have been
1043 synchronized to also take this into account, so users can get
1049 synchronized to also take this into account, so users can get
1044 verbose exceptions for their threaded code as well. I also added
1050 verbose exceptions for their threaded code as well. I also added
1045 support for activating pdb inside this exception handler as well,
1051 support for activating pdb inside this exception handler as well,
1046 so now GUI authors can use IPython's enhanced pdb at runtime.
1052 so now GUI authors can use IPython's enhanced pdb at runtime.
1047
1053
1048 * IPython/ipmaker.py (make_IPython): make the autoedit_syntax flag
1054 * IPython/ipmaker.py (make_IPython): make the autoedit_syntax flag
1049 true by default, and add it to the shipped ipythonrc file. Since
1055 true by default, and add it to the shipped ipythonrc file. Since
1050 this asks the user before proceeding, I think it's OK to make it
1056 this asks the user before proceeding, I think it's OK to make it
1051 true by default.
1057 true by default.
1052
1058
1053 * IPython/Magic.py (magic_exit): make new exit/quit magics instead
1059 * IPython/Magic.py (magic_exit): make new exit/quit magics instead
1054 of the previous special-casing of input in the eval loop. I think
1060 of the previous special-casing of input in the eval loop. I think
1055 this is cleaner, as they really are commands and shouldn't have
1061 this is cleaner, as they really are commands and shouldn't have
1056 a special role in the middle of the core code.
1062 a special role in the middle of the core code.
1057
1063
1058 2005-12-27 Fernando Perez <Fernando.Perez@colorado.edu>
1064 2005-12-27 Fernando Perez <Fernando.Perez@colorado.edu>
1059
1065
1060 * IPython/iplib.py (edit_syntax_error): added support for
1066 * IPython/iplib.py (edit_syntax_error): added support for
1061 automatically reopening the editor if the file had a syntax error
1067 automatically reopening the editor if the file had a syntax error
1062 in it. Thanks to scottt who provided the patch at:
1068 in it. Thanks to scottt who provided the patch at:
1063 http://www.scipy.net/roundup/ipython/issue36 (slightly modified
1069 http://www.scipy.net/roundup/ipython/issue36 (slightly modified
1064 version committed).
1070 version committed).
1065
1071
1066 * IPython/iplib.py (handle_normal): add suport for multi-line
1072 * IPython/iplib.py (handle_normal): add suport for multi-line
1067 input with emtpy lines. This fixes
1073 input with emtpy lines. This fixes
1068 http://www.scipy.net/roundup/ipython/issue43 and a similar
1074 http://www.scipy.net/roundup/ipython/issue43 and a similar
1069 discussion on the user list.
1075 discussion on the user list.
1070
1076
1071 WARNING: a behavior change is necessarily introduced to support
1077 WARNING: a behavior change is necessarily introduced to support
1072 blank lines: now a single blank line with whitespace does NOT
1078 blank lines: now a single blank line with whitespace does NOT
1073 break the input loop, which means that when autoindent is on, by
1079 break the input loop, which means that when autoindent is on, by
1074 default hitting return on the next (indented) line does NOT exit.
1080 default hitting return on the next (indented) line does NOT exit.
1075
1081
1076 Instead, to exit a multiline input you can either have:
1082 Instead, to exit a multiline input you can either have:
1077
1083
1078 - TWO whitespace lines (just hit return again), or
1084 - TWO whitespace lines (just hit return again), or
1079 - a single whitespace line of a different length than provided
1085 - a single whitespace line of a different length than provided
1080 by the autoindent (add or remove a space).
1086 by the autoindent (add or remove a space).
1081
1087
1082 * IPython/completer.py (MagicCompleter.__init__): new 'completer'
1088 * IPython/completer.py (MagicCompleter.__init__): new 'completer'
1083 module to better organize all readline-related functionality.
1089 module to better organize all readline-related functionality.
1084 I've deleted FlexCompleter and put all completion clases here.
1090 I've deleted FlexCompleter and put all completion clases here.
1085
1091
1086 * IPython/iplib.py (raw_input): improve indentation management.
1092 * IPython/iplib.py (raw_input): improve indentation management.
1087 It is now possible to paste indented code with autoindent on, and
1093 It is now possible to paste indented code with autoindent on, and
1088 the code is interpreted correctly (though it still looks bad on
1094 the code is interpreted correctly (though it still looks bad on
1089 screen, due to the line-oriented nature of ipython).
1095 screen, due to the line-oriented nature of ipython).
1090 (MagicCompleter.complete): change behavior so that a TAB key on an
1096 (MagicCompleter.complete): change behavior so that a TAB key on an
1091 otherwise empty line actually inserts a tab, instead of completing
1097 otherwise empty line actually inserts a tab, instead of completing
1092 on the entire global namespace. This makes it easier to use the
1098 on the entire global namespace. This makes it easier to use the
1093 TAB key for indentation. After a request by Hans Meine
1099 TAB key for indentation. After a request by Hans Meine
1094 <hans_meine-AT-gmx.net>
1100 <hans_meine-AT-gmx.net>
1095 (_prefilter): add support so that typing plain 'exit' or 'quit'
1101 (_prefilter): add support so that typing plain 'exit' or 'quit'
1096 does a sensible thing. Originally I tried to deviate as little as
1102 does a sensible thing. Originally I tried to deviate as little as
1097 possible from the default python behavior, but even that one may
1103 possible from the default python behavior, but even that one may
1098 change in this direction (thread on python-dev to that effect).
1104 change in this direction (thread on python-dev to that effect).
1099 Regardless, ipython should do the right thing even if CPython's
1105 Regardless, ipython should do the right thing even if CPython's
1100 '>>>' prompt doesn't.
1106 '>>>' prompt doesn't.
1101 (InteractiveShell): removed subclassing code.InteractiveConsole
1107 (InteractiveShell): removed subclassing code.InteractiveConsole
1102 class. By now we'd overridden just about all of its methods: I've
1108 class. By now we'd overridden just about all of its methods: I've
1103 copied the remaining two over, and now ipython is a standalone
1109 copied the remaining two over, and now ipython is a standalone
1104 class. This will provide a clearer picture for the chainsaw
1110 class. This will provide a clearer picture for the chainsaw
1105 branch refactoring.
1111 branch refactoring.
1106
1112
1107 2005-12-26 Fernando Perez <Fernando.Perez@colorado.edu>
1113 2005-12-26 Fernando Perez <Fernando.Perez@colorado.edu>
1108
1114
1109 * IPython/ultraTB.py (VerboseTB.text): harden reporting against
1115 * IPython/ultraTB.py (VerboseTB.text): harden reporting against
1110 failures for objects which break when dir() is called on them.
1116 failures for objects which break when dir() is called on them.
1111
1117
1112 * IPython/FlexCompleter.py (Completer.__init__): Added support for
1118 * IPython/FlexCompleter.py (Completer.__init__): Added support for
1113 distinct local and global namespaces in the completer API. This
1119 distinct local and global namespaces in the completer API. This
1114 change allows us to properly handle completion with distinct
1120 change allows us to properly handle completion with distinct
1115 scopes, including in embedded instances (this had never really
1121 scopes, including in embedded instances (this had never really
1116 worked correctly).
1122 worked correctly).
1117
1123
1118 Note: this introduces a change in the constructor for
1124 Note: this introduces a change in the constructor for
1119 MagicCompleter, as a new global_namespace parameter is now the
1125 MagicCompleter, as a new global_namespace parameter is now the
1120 second argument (the others were bumped one position).
1126 second argument (the others were bumped one position).
1121
1127
1122 2005-12-25 Fernando Perez <Fernando.Perez@colorado.edu>
1128 2005-12-25 Fernando Perez <Fernando.Perez@colorado.edu>
1123
1129
1124 * IPython/iplib.py (embed_mainloop): fix tab-completion in
1130 * IPython/iplib.py (embed_mainloop): fix tab-completion in
1125 embedded instances (which can be done now thanks to Vivian's
1131 embedded instances (which can be done now thanks to Vivian's
1126 frame-handling fixes for pdb).
1132 frame-handling fixes for pdb).
1127 (InteractiveShell.__init__): Fix namespace handling problem in
1133 (InteractiveShell.__init__): Fix namespace handling problem in
1128 embedded instances. We were overwriting __main__ unconditionally,
1134 embedded instances. We were overwriting __main__ unconditionally,
1129 and this should only be done for 'full' (non-embedded) IPython;
1135 and this should only be done for 'full' (non-embedded) IPython;
1130 embedded instances must respect the caller's __main__. Thanks to
1136 embedded instances must respect the caller's __main__. Thanks to
1131 a bug report by Yaroslav Bulatov <yaroslavvb-AT-gmail.com>
1137 a bug report by Yaroslav Bulatov <yaroslavvb-AT-gmail.com>
1132
1138
1133 2005-12-24 Fernando Perez <Fernando.Perez@colorado.edu>
1139 2005-12-24 Fernando Perez <Fernando.Perez@colorado.edu>
1134
1140
1135 * setup.py: added download_url to setup(). This registers the
1141 * setup.py: added download_url to setup(). This registers the
1136 download address at PyPI, which is not only useful to humans
1142 download address at PyPI, which is not only useful to humans
1137 browsing the site, but is also picked up by setuptools (the Eggs
1143 browsing the site, but is also picked up by setuptools (the Eggs
1138 machinery). Thanks to Ville and R. Kern for the info/discussion
1144 machinery). Thanks to Ville and R. Kern for the info/discussion
1139 on this.
1145 on this.
1140
1146
1141 2005-12-23 Fernando Perez <Fernando.Perez@colorado.edu>
1147 2005-12-23 Fernando Perez <Fernando.Perez@colorado.edu>
1142
1148
1143 * IPython/Debugger.py (Pdb.__init__): Major pdb mode enhancements.
1149 * IPython/Debugger.py (Pdb.__init__): Major pdb mode enhancements.
1144 This brings a lot of nice functionality to the pdb mode, which now
1150 This brings a lot of nice functionality to the pdb mode, which now
1145 has tab-completion, syntax highlighting, and better stack handling
1151 has tab-completion, syntax highlighting, and better stack handling
1146 than before. Many thanks to Vivian De Smedt
1152 than before. Many thanks to Vivian De Smedt
1147 <vivian-AT-vdesmedt.com> for the original patches.
1153 <vivian-AT-vdesmedt.com> for the original patches.
1148
1154
1149 2005-12-08 Fernando Perez <Fernando.Perez@colorado.edu>
1155 2005-12-08 Fernando Perez <Fernando.Perez@colorado.edu>
1150
1156
1151 * IPython/Shell.py (IPShellGTK.mainloop): fix mainloop() calling
1157 * IPython/Shell.py (IPShellGTK.mainloop): fix mainloop() calling
1152 sequence to consistently accept the banner argument. The
1158 sequence to consistently accept the banner argument. The
1153 inconsistency was tripping SAGE, thanks to Gary Zablackis
1159 inconsistency was tripping SAGE, thanks to Gary Zablackis
1154 <gzabl-AT-yahoo.com> for the report.
1160 <gzabl-AT-yahoo.com> for the report.
1155
1161
1156 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
1162 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
1157
1163
1158 * IPython/iplib.py (InteractiveShell.post_config_initialization):
1164 * IPython/iplib.py (InteractiveShell.post_config_initialization):
1159 Fix bug where a naked 'alias' call in the ipythonrc file would
1165 Fix bug where a naked 'alias' call in the ipythonrc file would
1160 cause a crash. Bug reported by Jorgen Stenarson.
1166 cause a crash. Bug reported by Jorgen Stenarson.
1161
1167
1162 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
1168 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
1163
1169
1164 * IPython/ipmaker.py (make_IPython): cleanups which should improve
1170 * IPython/ipmaker.py (make_IPython): cleanups which should improve
1165 startup time.
1171 startup time.
1166
1172
1167 * IPython/iplib.py (runcode): my globals 'fix' for embedded
1173 * IPython/iplib.py (runcode): my globals 'fix' for embedded
1168 instances had introduced a bug with globals in normal code. Now
1174 instances had introduced a bug with globals in normal code. Now
1169 it's working in all cases.
1175 it's working in all cases.
1170
1176
1171 * IPython/Magic.py (magic_psearch): Finish wildcard cleanup and
1177 * IPython/Magic.py (magic_psearch): Finish wildcard cleanup and
1172 API changes. A new ipytonrc option, 'wildcards_case_sensitive'
1178 API changes. A new ipytonrc option, 'wildcards_case_sensitive'
1173 has been introduced to set the default case sensitivity of the
1179 has been introduced to set the default case sensitivity of the
1174 searches. Users can still select either mode at runtime on a
1180 searches. Users can still select either mode at runtime on a
1175 per-search basis.
1181 per-search basis.
1176
1182
1177 2005-11-13 Fernando Perez <Fernando.Perez@colorado.edu>
1183 2005-11-13 Fernando Perez <Fernando.Perez@colorado.edu>
1178
1184
1179 * IPython/wildcard.py (NameSpace.__init__): fix resolution of
1185 * IPython/wildcard.py (NameSpace.__init__): fix resolution of
1180 attributes in wildcard searches for subclasses. Modified version
1186 attributes in wildcard searches for subclasses. Modified version
1181 of a patch by Jorgen.
1187 of a patch by Jorgen.
1182
1188
1183 2005-11-12 Fernando Perez <Fernando.Perez@colorado.edu>
1189 2005-11-12 Fernando Perez <Fernando.Perez@colorado.edu>
1184
1190
1185 * IPython/iplib.py (embed_mainloop): Fix handling of globals for
1191 * IPython/iplib.py (embed_mainloop): Fix handling of globals for
1186 embedded instances. I added a user_global_ns attribute to the
1192 embedded instances. I added a user_global_ns attribute to the
1187 InteractiveShell class to handle this.
1193 InteractiveShell class to handle this.
1188
1194
1189 2005-10-31 Fernando Perez <Fernando.Perez@colorado.edu>
1195 2005-10-31 Fernando Perez <Fernando.Perez@colorado.edu>
1190
1196
1191 * IPython/Shell.py (IPShellGTK.mainloop): Change timeout_add to
1197 * IPython/Shell.py (IPShellGTK.mainloop): Change timeout_add to
1192 idle_add, which fixes horrible keyboard lag problems under gtk 2.6
1198 idle_add, which fixes horrible keyboard lag problems under gtk 2.6
1193 (reported under win32, but may happen also in other platforms).
1199 (reported under win32, but may happen also in other platforms).
1194 Bug report and fix courtesy of Sean Moore <smm-AT-logic.bm>
1200 Bug report and fix courtesy of Sean Moore <smm-AT-logic.bm>
1195
1201
1196 2005-10-15 Fernando Perez <Fernando.Perez@colorado.edu>
1202 2005-10-15 Fernando Perez <Fernando.Perez@colorado.edu>
1197
1203
1198 * IPython/Magic.py (magic_psearch): new support for wildcard
1204 * IPython/Magic.py (magic_psearch): new support for wildcard
1199 patterns. Now, typing ?a*b will list all names which begin with a
1205 patterns. Now, typing ?a*b will list all names which begin with a
1200 and end in b, for example. The %psearch magic has full
1206 and end in b, for example. The %psearch magic has full
1201 docstrings. Many thanks to JΓΆrgen Stenarson
1207 docstrings. Many thanks to JΓΆrgen Stenarson
1202 <jorgen.stenarson-AT-bostream.nu>, author of the patches
1208 <jorgen.stenarson-AT-bostream.nu>, author of the patches
1203 implementing this functionality.
1209 implementing this functionality.
1204
1210
1205 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
1211 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
1206
1212
1207 * Manual: fixed long-standing annoyance of double-dashes (as in
1213 * Manual: fixed long-standing annoyance of double-dashes (as in
1208 --prefix=~, for example) being stripped in the HTML version. This
1214 --prefix=~, for example) being stripped in the HTML version. This
1209 is a latex2html bug, but a workaround was provided. Many thanks
1215 is a latex2html bug, but a workaround was provided. Many thanks
1210 to George K. Thiruvathukal <gthiruv-AT-luc.edu> for the detailed
1216 to George K. Thiruvathukal <gthiruv-AT-luc.edu> for the detailed
1211 help, and Michael Tobis <mtobis-AT-gmail.com> for getting the ball
1217 help, and Michael Tobis <mtobis-AT-gmail.com> for getting the ball
1212 rolling. This seemingly small issue had tripped a number of users
1218 rolling. This seemingly small issue had tripped a number of users
1213 when first installing, so I'm glad to see it gone.
1219 when first installing, so I'm glad to see it gone.
1214
1220
1215 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
1221 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
1216
1222
1217 * IPython/Extensions/numeric_formats.py: fix missing import,
1223 * IPython/Extensions/numeric_formats.py: fix missing import,
1218 reported by Stephen Walton.
1224 reported by Stephen Walton.
1219
1225
1220 2005-09-24 Fernando Perez <Fernando.Perez@colorado.edu>
1226 2005-09-24 Fernando Perez <Fernando.Perez@colorado.edu>
1221
1227
1222 * IPython/demo.py: finish demo module, fully documented now.
1228 * IPython/demo.py: finish demo module, fully documented now.
1223
1229
1224 * IPython/genutils.py (file_read): simple little utility to read a
1230 * IPython/genutils.py (file_read): simple little utility to read a
1225 file and ensure it's closed afterwards.
1231 file and ensure it's closed afterwards.
1226
1232
1227 2005-09-23 Fernando Perez <Fernando.Perez@colorado.edu>
1233 2005-09-23 Fernando Perez <Fernando.Perez@colorado.edu>
1228
1234
1229 * IPython/demo.py (Demo.__init__): added support for individually
1235 * IPython/demo.py (Demo.__init__): added support for individually
1230 tagging blocks for automatic execution.
1236 tagging blocks for automatic execution.
1231
1237
1232 * IPython/Magic.py (magic_pycat): new %pycat magic for showing
1238 * IPython/Magic.py (magic_pycat): new %pycat magic for showing
1233 syntax-highlighted python sources, requested by John.
1239 syntax-highlighted python sources, requested by John.
1234
1240
1235 2005-09-22 Fernando Perez <Fernando.Perez@colorado.edu>
1241 2005-09-22 Fernando Perez <Fernando.Perez@colorado.edu>
1236
1242
1237 * IPython/demo.py (Demo.again): fix bug where again() blocks after
1243 * IPython/demo.py (Demo.again): fix bug where again() blocks after
1238 finishing.
1244 finishing.
1239
1245
1240 * IPython/genutils.py (shlex_split): moved from Magic to here,
1246 * IPython/genutils.py (shlex_split): moved from Magic to here,
1241 where all 2.2 compatibility stuff lives. I needed it for demo.py.
1247 where all 2.2 compatibility stuff lives. I needed it for demo.py.
1242
1248
1243 * IPython/demo.py (Demo.__init__): added support for silent
1249 * IPython/demo.py (Demo.__init__): added support for silent
1244 blocks, improved marks as regexps, docstrings written.
1250 blocks, improved marks as regexps, docstrings written.
1245 (Demo.__init__): better docstring, added support for sys.argv.
1251 (Demo.__init__): better docstring, added support for sys.argv.
1246
1252
1247 * IPython/genutils.py (marquee): little utility used by the demo
1253 * IPython/genutils.py (marquee): little utility used by the demo
1248 code, handy in general.
1254 code, handy in general.
1249
1255
1250 * IPython/demo.py (Demo.__init__): new class for interactive
1256 * IPython/demo.py (Demo.__init__): new class for interactive
1251 demos. Not documented yet, I just wrote it in a hurry for
1257 demos. Not documented yet, I just wrote it in a hurry for
1252 scipy'05. Will docstring later.
1258 scipy'05. Will docstring later.
1253
1259
1254 2005-09-20 Fernando Perez <Fernando.Perez@colorado.edu>
1260 2005-09-20 Fernando Perez <Fernando.Perez@colorado.edu>
1255
1261
1256 * IPython/Shell.py (sigint_handler): Drastic simplification which
1262 * IPython/Shell.py (sigint_handler): Drastic simplification which
1257 also seems to make Ctrl-C work correctly across threads! This is
1263 also seems to make Ctrl-C work correctly across threads! This is
1258 so simple, that I can't beleive I'd missed it before. Needs more
1264 so simple, that I can't beleive I'd missed it before. Needs more
1259 testing, though.
1265 testing, though.
1260 (KBINT): Never mind, revert changes. I'm sure I'd tried something
1266 (KBINT): Never mind, revert changes. I'm sure I'd tried something
1261 like this before...
1267 like this before...
1262
1268
1263 * IPython/genutils.py (get_home_dir): add protection against
1269 * IPython/genutils.py (get_home_dir): add protection against
1264 non-dirs in win32 registry.
1270 non-dirs in win32 registry.
1265
1271
1266 * IPython/iplib.py (InteractiveShell.alias_table_validate): fix
1272 * IPython/iplib.py (InteractiveShell.alias_table_validate): fix
1267 bug where dict was mutated while iterating (pysh crash).
1273 bug where dict was mutated while iterating (pysh crash).
1268
1274
1269 2005-09-06 Fernando Perez <Fernando.Perez@colorado.edu>
1275 2005-09-06 Fernando Perez <Fernando.Perez@colorado.edu>
1270
1276
1271 * IPython/iplib.py (handle_auto): Fix inconsistency arising from
1277 * IPython/iplib.py (handle_auto): Fix inconsistency arising from
1272 spurious newlines added by this routine. After a report by
1278 spurious newlines added by this routine. After a report by
1273 F. Mantegazza.
1279 F. Mantegazza.
1274
1280
1275 2005-09-05 Fernando Perez <Fernando.Perez@colorado.edu>
1281 2005-09-05 Fernando Perez <Fernando.Perez@colorado.edu>
1276
1282
1277 * IPython/Shell.py (hijack_gtk): remove pygtk.require("2.0")
1283 * IPython/Shell.py (hijack_gtk): remove pygtk.require("2.0")
1278 calls. These were a leftover from the GTK 1.x days, and can cause
1284 calls. These were a leftover from the GTK 1.x days, and can cause
1279 problems in certain cases (after a report by John Hunter).
1285 problems in certain cases (after a report by John Hunter).
1280
1286
1281 * IPython/iplib.py (InteractiveShell.__init__): Trap exception if
1287 * IPython/iplib.py (InteractiveShell.__init__): Trap exception if
1282 os.getcwd() fails at init time. Thanks to patch from David Remahl
1288 os.getcwd() fails at init time. Thanks to patch from David Remahl
1283 <chmod007-AT-mac.com>.
1289 <chmod007-AT-mac.com>.
1284 (InteractiveShell.__init__): prevent certain special magics from
1290 (InteractiveShell.__init__): prevent certain special magics from
1285 being shadowed by aliases. Closes
1291 being shadowed by aliases. Closes
1286 http://www.scipy.net/roundup/ipython/issue41.
1292 http://www.scipy.net/roundup/ipython/issue41.
1287
1293
1288 2005-08-31 Fernando Perez <Fernando.Perez@colorado.edu>
1294 2005-08-31 Fernando Perez <Fernando.Perez@colorado.edu>
1289
1295
1290 * IPython/iplib.py (InteractiveShell.complete): Added new
1296 * IPython/iplib.py (InteractiveShell.complete): Added new
1291 top-level completion method to expose the completion mechanism
1297 top-level completion method to expose the completion mechanism
1292 beyond readline-based environments.
1298 beyond readline-based environments.
1293
1299
1294 2005-08-19 Fernando Perez <Fernando.Perez@colorado.edu>
1300 2005-08-19 Fernando Perez <Fernando.Perez@colorado.edu>
1295
1301
1296 * tools/ipsvnc (svnversion): fix svnversion capture.
1302 * tools/ipsvnc (svnversion): fix svnversion capture.
1297
1303
1298 * IPython/iplib.py (InteractiveShell.__init__): Add has_readline
1304 * IPython/iplib.py (InteractiveShell.__init__): Add has_readline
1299 attribute to self, which was missing. Before, it was set by a
1305 attribute to self, which was missing. Before, it was set by a
1300 routine which in certain cases wasn't being called, so the
1306 routine which in certain cases wasn't being called, so the
1301 instance could end up missing the attribute. This caused a crash.
1307 instance could end up missing the attribute. This caused a crash.
1302 Closes http://www.scipy.net/roundup/ipython/issue40.
1308 Closes http://www.scipy.net/roundup/ipython/issue40.
1303
1309
1304 2005-08-16 Fernando Perez <fperez@colorado.edu>
1310 2005-08-16 Fernando Perez <fperez@colorado.edu>
1305
1311
1306 * IPython/ultraTB.py (VerboseTB.text): don't crash if object
1312 * IPython/ultraTB.py (VerboseTB.text): don't crash if object
1307 contains non-string attribute. Closes
1313 contains non-string attribute. Closes
1308 http://www.scipy.net/roundup/ipython/issue38.
1314 http://www.scipy.net/roundup/ipython/issue38.
1309
1315
1310 2005-08-14 Fernando Perez <fperez@colorado.edu>
1316 2005-08-14 Fernando Perez <fperez@colorado.edu>
1311
1317
1312 * tools/ipsvnc: Minor improvements, to add changeset info.
1318 * tools/ipsvnc: Minor improvements, to add changeset info.
1313
1319
1314 2005-08-12 Fernando Perez <fperez@colorado.edu>
1320 2005-08-12 Fernando Perez <fperez@colorado.edu>
1315
1321
1316 * IPython/iplib.py (runsource): remove self.code_to_run_src
1322 * IPython/iplib.py (runsource): remove self.code_to_run_src
1317 attribute. I realized this is nothing more than
1323 attribute. I realized this is nothing more than
1318 '\n'.join(self.buffer), and having the same data in two different
1324 '\n'.join(self.buffer), and having the same data in two different
1319 places is just asking for synchronization bugs. This may impact
1325 places is just asking for synchronization bugs. This may impact
1320 people who have custom exception handlers, so I need to warn
1326 people who have custom exception handlers, so I need to warn
1321 ipython-dev about it (F. Mantegazza may use them).
1327 ipython-dev about it (F. Mantegazza may use them).
1322
1328
1323 2005-07-29 Fernando Perez <Fernando.Perez@colorado.edu>
1329 2005-07-29 Fernando Perez <Fernando.Perez@colorado.edu>
1324
1330
1325 * IPython/genutils.py: fix 2.2 compatibility (generators)
1331 * IPython/genutils.py: fix 2.2 compatibility (generators)
1326
1332
1327 2005-07-18 Fernando Perez <fperez@colorado.edu>
1333 2005-07-18 Fernando Perez <fperez@colorado.edu>
1328
1334
1329 * IPython/genutils.py (get_home_dir): fix to help users with
1335 * IPython/genutils.py (get_home_dir): fix to help users with
1330 invalid $HOME under win32.
1336 invalid $HOME under win32.
1331
1337
1332 2005-07-17 Fernando Perez <fperez@colorado.edu>
1338 2005-07-17 Fernando Perez <fperez@colorado.edu>
1333
1339
1334 * IPython/Prompts.py (str_safe): Make unicode-safe. Also remove
1340 * IPython/Prompts.py (str_safe): Make unicode-safe. Also remove
1335 some old hacks and clean up a bit other routines; code should be
1341 some old hacks and clean up a bit other routines; code should be
1336 simpler and a bit faster.
1342 simpler and a bit faster.
1337
1343
1338 * IPython/iplib.py (interact): removed some last-resort attempts
1344 * IPython/iplib.py (interact): removed some last-resort attempts
1339 to survive broken stdout/stderr. That code was only making it
1345 to survive broken stdout/stderr. That code was only making it
1340 harder to abstract out the i/o (necessary for gui integration),
1346 harder to abstract out the i/o (necessary for gui integration),
1341 and the crashes it could prevent were extremely rare in practice
1347 and the crashes it could prevent were extremely rare in practice
1342 (besides being fully user-induced in a pretty violent manner).
1348 (besides being fully user-induced in a pretty violent manner).
1343
1349
1344 * IPython/genutils.py (IOStream.__init__): Simplify the i/o stuff.
1350 * IPython/genutils.py (IOStream.__init__): Simplify the i/o stuff.
1345 Nothing major yet, but the code is simpler to read; this should
1351 Nothing major yet, but the code is simpler to read; this should
1346 make it easier to do more serious modifications in the future.
1352 make it easier to do more serious modifications in the future.
1347
1353
1348 * IPython/Extensions/InterpreterExec.py: Fix auto-quoting in pysh,
1354 * IPython/Extensions/InterpreterExec.py: Fix auto-quoting in pysh,
1349 which broke in .15 (thanks to a report by Ville).
1355 which broke in .15 (thanks to a report by Ville).
1350
1356
1351 * IPython/Itpl.py (Itpl.__init__): add unicode support (it may not
1357 * IPython/Itpl.py (Itpl.__init__): add unicode support (it may not
1352 be quite correct, I know next to nothing about unicode). This
1358 be quite correct, I know next to nothing about unicode). This
1353 will allow unicode strings to be used in prompts, amongst other
1359 will allow unicode strings to be used in prompts, amongst other
1354 cases. It also will prevent ipython from crashing when unicode
1360 cases. It also will prevent ipython from crashing when unicode
1355 shows up unexpectedly in many places. If ascii encoding fails, we
1361 shows up unexpectedly in many places. If ascii encoding fails, we
1356 assume utf_8. Currently the encoding is not a user-visible
1362 assume utf_8. Currently the encoding is not a user-visible
1357 setting, though it could be made so if there is demand for it.
1363 setting, though it could be made so if there is demand for it.
1358
1364
1359 * IPython/ipmaker.py (make_IPython): remove old 2.1-specific hack.
1365 * IPython/ipmaker.py (make_IPython): remove old 2.1-specific hack.
1360
1366
1361 * IPython/Struct.py (Struct.merge): switch keys() to iterator.
1367 * IPython/Struct.py (Struct.merge): switch keys() to iterator.
1362
1368
1363 * IPython/background_jobs.py: moved 2.2 compatibility to genutils.
1369 * IPython/background_jobs.py: moved 2.2 compatibility to genutils.
1364
1370
1365 * IPython/genutils.py: Add 2.2 compatibility here, so all other
1371 * IPython/genutils.py: Add 2.2 compatibility here, so all other
1366 code can work transparently for 2.2/2.3.
1372 code can work transparently for 2.2/2.3.
1367
1373
1368 2005-07-16 Fernando Perez <fperez@colorado.edu>
1374 2005-07-16 Fernando Perez <fperez@colorado.edu>
1369
1375
1370 * IPython/ultraTB.py (ExceptionColors): Make a global variable
1376 * IPython/ultraTB.py (ExceptionColors): Make a global variable
1371 out of the color scheme table used for coloring exception
1377 out of the color scheme table used for coloring exception
1372 tracebacks. This allows user code to add new schemes at runtime.
1378 tracebacks. This allows user code to add new schemes at runtime.
1373 This is a minimally modified version of the patch at
1379 This is a minimally modified version of the patch at
1374 http://www.scipy.net/roundup/ipython/issue35, many thanks to pabw
1380 http://www.scipy.net/roundup/ipython/issue35, many thanks to pabw
1375 for the contribution.
1381 for the contribution.
1376
1382
1377 * IPython/FlexCompleter.py (Completer.attr_matches): Add a
1383 * IPython/FlexCompleter.py (Completer.attr_matches): Add a
1378 slightly modified version of the patch in
1384 slightly modified version of the patch in
1379 http://www.scipy.net/roundup/ipython/issue34, which also allows me
1385 http://www.scipy.net/roundup/ipython/issue34, which also allows me
1380 to remove the previous try/except solution (which was costlier).
1386 to remove the previous try/except solution (which was costlier).
1381 Thanks to Gaetan Lehmann <gaetan.lehmann-AT-jouy.inra.fr> for the fix.
1387 Thanks to Gaetan Lehmann <gaetan.lehmann-AT-jouy.inra.fr> for the fix.
1382
1388
1383 2005-06-08 Fernando Perez <fperez@colorado.edu>
1389 2005-06-08 Fernando Perez <fperez@colorado.edu>
1384
1390
1385 * IPython/iplib.py (write/write_err): Add methods to abstract all
1391 * IPython/iplib.py (write/write_err): Add methods to abstract all
1386 I/O a bit more.
1392 I/O a bit more.
1387
1393
1388 * IPython/Shell.py (IPShellGTK.mainloop): Fix GTK deprecation
1394 * IPython/Shell.py (IPShellGTK.mainloop): Fix GTK deprecation
1389 warning, reported by Aric Hagberg, fix by JD Hunter.
1395 warning, reported by Aric Hagberg, fix by JD Hunter.
1390
1396
1391 2005-06-02 *** Released version 0.6.15
1397 2005-06-02 *** Released version 0.6.15
1392
1398
1393 2005-06-01 Fernando Perez <fperez@colorado.edu>
1399 2005-06-01 Fernando Perez <fperez@colorado.edu>
1394
1400
1395 * IPython/iplib.py (MagicCompleter.file_matches): Fix
1401 * IPython/iplib.py (MagicCompleter.file_matches): Fix
1396 tab-completion of filenames within open-quoted strings. Note that
1402 tab-completion of filenames within open-quoted strings. Note that
1397 this requires that in ~/.ipython/ipythonrc, users change the
1403 this requires that in ~/.ipython/ipythonrc, users change the
1398 readline delimiters configuration to read:
1404 readline delimiters configuration to read:
1399
1405
1400 readline_remove_delims -/~
1406 readline_remove_delims -/~
1401
1407
1402
1408
1403 2005-05-31 *** Released version 0.6.14
1409 2005-05-31 *** Released version 0.6.14
1404
1410
1405 2005-05-29 Fernando Perez <fperez@colorado.edu>
1411 2005-05-29 Fernando Perez <fperez@colorado.edu>
1406
1412
1407 * IPython/ultraTB.py (VerboseTB.text): Fix crash for tracebacks
1413 * IPython/ultraTB.py (VerboseTB.text): Fix crash for tracebacks
1408 with files not on the filesystem. Reported by Eliyahu Sandler
1414 with files not on the filesystem. Reported by Eliyahu Sandler
1409 <eli@gondolin.net>
1415 <eli@gondolin.net>
1410
1416
1411 2005-05-22 Fernando Perez <fperez@colorado.edu>
1417 2005-05-22 Fernando Perez <fperez@colorado.edu>
1412
1418
1413 * IPython/iplib.py: Fix a few crashes in the --upgrade option.
1419 * IPython/iplib.py: Fix a few crashes in the --upgrade option.
1414 After an initial report by LUK ShunTim <shuntim.luk@polyu.edu.hk>.
1420 After an initial report by LUK ShunTim <shuntim.luk@polyu.edu.hk>.
1415
1421
1416 2005-05-19 Fernando Perez <fperez@colorado.edu>
1422 2005-05-19 Fernando Perez <fperez@colorado.edu>
1417
1423
1418 * IPython/iplib.py (safe_execfile): close a file which could be
1424 * IPython/iplib.py (safe_execfile): close a file which could be
1419 left open (causing problems in win32, which locks open files).
1425 left open (causing problems in win32, which locks open files).
1420 Thanks to a bug report by D Brown <dbrown2@yahoo.com>.
1426 Thanks to a bug report by D Brown <dbrown2@yahoo.com>.
1421
1427
1422 2005-05-18 Fernando Perez <fperez@colorado.edu>
1428 2005-05-18 Fernando Perez <fperez@colorado.edu>
1423
1429
1424 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): pass all
1430 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): pass all
1425 keyword arguments correctly to safe_execfile().
1431 keyword arguments correctly to safe_execfile().
1426
1432
1427 2005-05-13 Fernando Perez <fperez@colorado.edu>
1433 2005-05-13 Fernando Perez <fperez@colorado.edu>
1428
1434
1429 * ipython.1: Added info about Qt to manpage, and threads warning
1435 * ipython.1: Added info about Qt to manpage, and threads warning
1430 to usage page (invoked with --help).
1436 to usage page (invoked with --help).
1431
1437
1432 * IPython/iplib.py (MagicCompleter.python_func_kw_matches): Added
1438 * IPython/iplib.py (MagicCompleter.python_func_kw_matches): Added
1433 new matcher (it goes at the end of the priority list) to do
1439 new matcher (it goes at the end of the priority list) to do
1434 tab-completion on named function arguments. Submitted by George
1440 tab-completion on named function arguments. Submitted by George
1435 Sakkis <gsakkis-AT-eden.rutgers.edu>. See the thread at
1441 Sakkis <gsakkis-AT-eden.rutgers.edu>. See the thread at
1436 http://www.scipy.net/pipermail/ipython-dev/2005-April/000436.html
1442 http://www.scipy.net/pipermail/ipython-dev/2005-April/000436.html
1437 for more details.
1443 for more details.
1438
1444
1439 * IPython/Magic.py (magic_run): Added new -e flag to ignore
1445 * IPython/Magic.py (magic_run): Added new -e flag to ignore
1440 SystemExit exceptions in the script being run. Thanks to a report
1446 SystemExit exceptions in the script being run. Thanks to a report
1441 by danny shevitz <danny_shevitz-AT-yahoo.com>, about this
1447 by danny shevitz <danny_shevitz-AT-yahoo.com>, about this
1442 producing very annoying behavior when running unit tests.
1448 producing very annoying behavior when running unit tests.
1443
1449
1444 2005-05-12 Fernando Perez <fperez@colorado.edu>
1450 2005-05-12 Fernando Perez <fperez@colorado.edu>
1445
1451
1446 * IPython/iplib.py (handle_auto): fixed auto-quoting and parens,
1452 * IPython/iplib.py (handle_auto): fixed auto-quoting and parens,
1447 which I'd broken (again) due to a changed regexp. In the process,
1453 which I'd broken (again) due to a changed regexp. In the process,
1448 added ';' as an escape to auto-quote the whole line without
1454 added ';' as an escape to auto-quote the whole line without
1449 splitting its arguments. Thanks to a report by Jerry McRae
1455 splitting its arguments. Thanks to a report by Jerry McRae
1450 <qrs0xyc02-AT-sneakemail.com>.
1456 <qrs0xyc02-AT-sneakemail.com>.
1451
1457
1452 * IPython/ultraTB.py (VerboseTB.text): protect against rare but
1458 * IPython/ultraTB.py (VerboseTB.text): protect against rare but
1453 possible crashes caused by a TokenError. Reported by Ed Schofield
1459 possible crashes caused by a TokenError. Reported by Ed Schofield
1454 <schofield-AT-ftw.at>.
1460 <schofield-AT-ftw.at>.
1455
1461
1456 2005-05-06 Fernando Perez <fperez@colorado.edu>
1462 2005-05-06 Fernando Perez <fperez@colorado.edu>
1457
1463
1458 * IPython/Shell.py (hijack_wx): Fix to work with WX v.2.6.
1464 * IPython/Shell.py (hijack_wx): Fix to work with WX v.2.6.
1459
1465
1460 2005-04-29 Fernando Perez <fperez@colorado.edu>
1466 2005-04-29 Fernando Perez <fperez@colorado.edu>
1461
1467
1462 * IPython/Shell.py (IPShellQt): Thanks to Denis Rivière
1468 * IPython/Shell.py (IPShellQt): Thanks to Denis Rivière
1463 <nudz-AT-free.fr>, Yann Cointepas <yann-AT-sapetnioc.org> and Benjamin
1469 <nudz-AT-free.fr>, Yann Cointepas <yann-AT-sapetnioc.org> and Benjamin
1464 Thyreau <Benji2-AT-decideur.info>, we now have a -qthread option
1470 Thyreau <Benji2-AT-decideur.info>, we now have a -qthread option
1465 which provides support for Qt interactive usage (similar to the
1471 which provides support for Qt interactive usage (similar to the
1466 existing one for WX and GTK). This had been often requested.
1472 existing one for WX and GTK). This had been often requested.
1467
1473
1468 2005-04-14 *** Released version 0.6.13
1474 2005-04-14 *** Released version 0.6.13
1469
1475
1470 2005-04-08 Fernando Perez <fperez@colorado.edu>
1476 2005-04-08 Fernando Perez <fperez@colorado.edu>
1471
1477
1472 * IPython/Magic.py (Magic._ofind): remove docstring evaluation
1478 * IPython/Magic.py (Magic._ofind): remove docstring evaluation
1473 from _ofind, which gets called on almost every input line. Now,
1479 from _ofind, which gets called on almost every input line. Now,
1474 we only try to get docstrings if they are actually going to be
1480 we only try to get docstrings if they are actually going to be
1475 used (the overhead of fetching unnecessary docstrings can be
1481 used (the overhead of fetching unnecessary docstrings can be
1476 noticeable for certain objects, such as Pyro proxies).
1482 noticeable for certain objects, such as Pyro proxies).
1477
1483
1478 * IPython/iplib.py (MagicCompleter.python_matches): Change the API
1484 * IPython/iplib.py (MagicCompleter.python_matches): Change the API
1479 for completers. For some reason I had been passing them the state
1485 for completers. For some reason I had been passing them the state
1480 variable, which completers never actually need, and was in
1486 variable, which completers never actually need, and was in
1481 conflict with the rlcompleter API. Custom completers ONLY need to
1487 conflict with the rlcompleter API. Custom completers ONLY need to
1482 take the text parameter.
1488 take the text parameter.
1483
1489
1484 * IPython/Extensions/InterpreterExec.py: Fix regexp so that magics
1490 * IPython/Extensions/InterpreterExec.py: Fix regexp so that magics
1485 work correctly in pysh. I've also moved all the logic which used
1491 work correctly in pysh. I've also moved all the logic which used
1486 to be in pysh.py here, which will prevent problems with future
1492 to be in pysh.py here, which will prevent problems with future
1487 upgrades. However, this time I must warn users to update their
1493 upgrades. However, this time I must warn users to update their
1488 pysh profile to include the line
1494 pysh profile to include the line
1489
1495
1490 import_all IPython.Extensions.InterpreterExec
1496 import_all IPython.Extensions.InterpreterExec
1491
1497
1492 because otherwise things won't work for them. They MUST also
1498 because otherwise things won't work for them. They MUST also
1493 delete pysh.py and the line
1499 delete pysh.py and the line
1494
1500
1495 execfile pysh.py
1501 execfile pysh.py
1496
1502
1497 from their ipythonrc-pysh.
1503 from their ipythonrc-pysh.
1498
1504
1499 * IPython/FlexCompleter.py (Completer.attr_matches): Make more
1505 * IPython/FlexCompleter.py (Completer.attr_matches): Make more
1500 robust in the face of objects whose dir() returns non-strings
1506 robust in the face of objects whose dir() returns non-strings
1501 (which it shouldn't, but some broken libs like ITK do). Thanks to
1507 (which it shouldn't, but some broken libs like ITK do). Thanks to
1502 a patch by John Hunter (implemented differently, though). Also
1508 a patch by John Hunter (implemented differently, though). Also
1503 minor improvements by using .extend instead of + on lists.
1509 minor improvements by using .extend instead of + on lists.
1504
1510
1505 * pysh.py:
1511 * pysh.py:
1506
1512
1507 2005-04-06 Fernando Perez <fperez@colorado.edu>
1513 2005-04-06 Fernando Perez <fperez@colorado.edu>
1508
1514
1509 * IPython/ipmaker.py (make_IPython): Make multi_line_specials on
1515 * IPython/ipmaker.py (make_IPython): Make multi_line_specials on
1510 by default, so that all users benefit from it. Those who don't
1516 by default, so that all users benefit from it. Those who don't
1511 want it can still turn it off.
1517 want it can still turn it off.
1512
1518
1513 * IPython/UserConfig/ipythonrc: Add multi_line_specials to the
1519 * IPython/UserConfig/ipythonrc: Add multi_line_specials to the
1514 config file, I'd forgotten about this, so users were getting it
1520 config file, I'd forgotten about this, so users were getting it
1515 off by default.
1521 off by default.
1516
1522
1517 * IPython/iplib.py (ipmagic): big overhaul of the magic system for
1523 * IPython/iplib.py (ipmagic): big overhaul of the magic system for
1518 consistency. Now magics can be called in multiline statements,
1524 consistency. Now magics can be called in multiline statements,
1519 and python variables can be expanded in magic calls via $var.
1525 and python variables can be expanded in magic calls via $var.
1520 This makes the magic system behave just like aliases or !system
1526 This makes the magic system behave just like aliases or !system
1521 calls.
1527 calls.
1522
1528
1523 2005-03-28 Fernando Perez <fperez@colorado.edu>
1529 2005-03-28 Fernando Perez <fperez@colorado.edu>
1524
1530
1525 * IPython/iplib.py (handle_auto): cleanup to use %s instead of
1531 * IPython/iplib.py (handle_auto): cleanup to use %s instead of
1526 expensive string additions for building command. Add support for
1532 expensive string additions for building command. Add support for
1527 trailing ';' when autocall is used.
1533 trailing ';' when autocall is used.
1528
1534
1529 2005-03-26 Fernando Perez <fperez@colorado.edu>
1535 2005-03-26 Fernando Perez <fperez@colorado.edu>
1530
1536
1531 * ipython.el: Fix http://www.scipy.net/roundup/ipython/issue31.
1537 * ipython.el: Fix http://www.scipy.net/roundup/ipython/issue31.
1532 Bugfix by A. Schmolck, the ipython.el maintainer. Also make
1538 Bugfix by A. Schmolck, the ipython.el maintainer. Also make
1533 ipython.el robust against prompts with any number of spaces
1539 ipython.el robust against prompts with any number of spaces
1534 (including 0) after the ':' character.
1540 (including 0) after the ':' character.
1535
1541
1536 * IPython/Prompts.py (Prompt2.set_p_str): Fix spurious space in
1542 * IPython/Prompts.py (Prompt2.set_p_str): Fix spurious space in
1537 continuation prompt, which misled users to think the line was
1543 continuation prompt, which misled users to think the line was
1538 already indented. Closes debian Bug#300847, reported to me by
1544 already indented. Closes debian Bug#300847, reported to me by
1539 Norbert Tretkowski <tretkowski-AT-inittab.de>.
1545 Norbert Tretkowski <tretkowski-AT-inittab.de>.
1540
1546
1541 2005-03-23 Fernando Perez <fperez@colorado.edu>
1547 2005-03-23 Fernando Perez <fperez@colorado.edu>
1542
1548
1543 * IPython/Prompts.py (Prompt1.__str__): Make sure that prompts are
1549 * IPython/Prompts.py (Prompt1.__str__): Make sure that prompts are
1544 properly aligned if they have embedded newlines.
1550 properly aligned if they have embedded newlines.
1545
1551
1546 * IPython/iplib.py (runlines): Add a public method to expose
1552 * IPython/iplib.py (runlines): Add a public method to expose
1547 IPython's code execution machinery, so that users can run strings
1553 IPython's code execution machinery, so that users can run strings
1548 as if they had been typed at the prompt interactively.
1554 as if they had been typed at the prompt interactively.
1549 (InteractiveShell.__init__): Added getoutput() to the __IPYTHON__
1555 (InteractiveShell.__init__): Added getoutput() to the __IPYTHON__
1550 methods which can call the system shell, but with python variable
1556 methods which can call the system shell, but with python variable
1551 expansion. The three such methods are: __IPYTHON__.system,
1557 expansion. The three such methods are: __IPYTHON__.system,
1552 .getoutput and .getoutputerror. These need to be documented in a
1558 .getoutput and .getoutputerror. These need to be documented in a
1553 'public API' section (to be written) of the manual.
1559 'public API' section (to be written) of the manual.
1554
1560
1555 2005-03-20 Fernando Perez <fperez@colorado.edu>
1561 2005-03-20 Fernando Perez <fperez@colorado.edu>
1556
1562
1557 * IPython/iplib.py (InteractiveShell.set_custom_exc): new system
1563 * IPython/iplib.py (InteractiveShell.set_custom_exc): new system
1558 for custom exception handling. This is quite powerful, and it
1564 for custom exception handling. This is quite powerful, and it
1559 allows for user-installable exception handlers which can trap
1565 allows for user-installable exception handlers which can trap
1560 custom exceptions at runtime and treat them separately from
1566 custom exceptions at runtime and treat them separately from
1561 IPython's default mechanisms. At the request of FrΓ©dΓ©ric
1567 IPython's default mechanisms. At the request of FrΓ©dΓ©ric
1562 Mantegazza <mantegazza-AT-ill.fr>.
1568 Mantegazza <mantegazza-AT-ill.fr>.
1563 (InteractiveShell.set_custom_completer): public API function to
1569 (InteractiveShell.set_custom_completer): public API function to
1564 add new completers at runtime.
1570 add new completers at runtime.
1565
1571
1566 2005-03-19 Fernando Perez <fperez@colorado.edu>
1572 2005-03-19 Fernando Perez <fperez@colorado.edu>
1567
1573
1568 * IPython/OInspect.py (getdoc): Add a call to obj.getdoc(), to
1574 * IPython/OInspect.py (getdoc): Add a call to obj.getdoc(), to
1569 allow objects which provide their docstrings via non-standard
1575 allow objects which provide their docstrings via non-standard
1570 mechanisms (like Pyro proxies) to still be inspected by ipython's
1576 mechanisms (like Pyro proxies) to still be inspected by ipython's
1571 ? system.
1577 ? system.
1572
1578
1573 * IPython/iplib.py (InteractiveShell.__init__): back off the _o/_e
1579 * IPython/iplib.py (InteractiveShell.__init__): back off the _o/_e
1574 automatic capture system. I tried quite hard to make it work
1580 automatic capture system. I tried quite hard to make it work
1575 reliably, and simply failed. I tried many combinations with the
1581 reliably, and simply failed. I tried many combinations with the
1576 subprocess module, but eventually nothing worked in all needed
1582 subprocess module, but eventually nothing worked in all needed
1577 cases (not blocking stdin for the child, duplicating stdout
1583 cases (not blocking stdin for the child, duplicating stdout
1578 without blocking, etc). The new %sc/%sx still do capture to these
1584 without blocking, etc). The new %sc/%sx still do capture to these
1579 magical list/string objects which make shell use much more
1585 magical list/string objects which make shell use much more
1580 conveninent, so not all is lost.
1586 conveninent, so not all is lost.
1581
1587
1582 XXX - FIX MANUAL for the change above!
1588 XXX - FIX MANUAL for the change above!
1583
1589
1584 (runsource): I copied code.py's runsource() into ipython to modify
1590 (runsource): I copied code.py's runsource() into ipython to modify
1585 it a bit. Now the code object and source to be executed are
1591 it a bit. Now the code object and source to be executed are
1586 stored in ipython. This makes this info accessible to third-party
1592 stored in ipython. This makes this info accessible to third-party
1587 tools, like custom exception handlers. After a request by FrΓ©dΓ©ric
1593 tools, like custom exception handlers. After a request by FrΓ©dΓ©ric
1588 Mantegazza <mantegazza-AT-ill.fr>.
1594 Mantegazza <mantegazza-AT-ill.fr>.
1589
1595
1590 * IPython/UserConfig/ipythonrc: Add up/down arrow keys to
1596 * IPython/UserConfig/ipythonrc: Add up/down arrow keys to
1591 history-search via readline (like C-p/C-n). I'd wanted this for a
1597 history-search via readline (like C-p/C-n). I'd wanted this for a
1592 long time, but only recently found out how to do it. For users
1598 long time, but only recently found out how to do it. For users
1593 who already have their ipythonrc files made and want this, just
1599 who already have their ipythonrc files made and want this, just
1594 add:
1600 add:
1595
1601
1596 readline_parse_and_bind "\e[A": history-search-backward
1602 readline_parse_and_bind "\e[A": history-search-backward
1597 readline_parse_and_bind "\e[B": history-search-forward
1603 readline_parse_and_bind "\e[B": history-search-forward
1598
1604
1599 2005-03-18 Fernando Perez <fperez@colorado.edu>
1605 2005-03-18 Fernando Perez <fperez@colorado.edu>
1600
1606
1601 * IPython/Magic.py (magic_sc): %sc and %sx now use the fancy
1607 * IPython/Magic.py (magic_sc): %sc and %sx now use the fancy
1602 LSString and SList classes which allow transparent conversions
1608 LSString and SList classes which allow transparent conversions
1603 between list mode and whitespace-separated string.
1609 between list mode and whitespace-separated string.
1604 (magic_r): Fix recursion problem in %r.
1610 (magic_r): Fix recursion problem in %r.
1605
1611
1606 * IPython/genutils.py (LSString): New class to be used for
1612 * IPython/genutils.py (LSString): New class to be used for
1607 automatic storage of the results of all alias/system calls in _o
1613 automatic storage of the results of all alias/system calls in _o
1608 and _e (stdout/err). These provide a .l/.list attribute which
1614 and _e (stdout/err). These provide a .l/.list attribute which
1609 does automatic splitting on newlines. This means that for most
1615 does automatic splitting on newlines. This means that for most
1610 uses, you'll never need to do capturing of output with %sc/%sx
1616 uses, you'll never need to do capturing of output with %sc/%sx
1611 anymore, since ipython keeps this always done for you. Note that
1617 anymore, since ipython keeps this always done for you. Note that
1612 only the LAST results are stored, the _o/e variables are
1618 only the LAST results are stored, the _o/e variables are
1613 overwritten on each call. If you need to save their contents
1619 overwritten on each call. If you need to save their contents
1614 further, simply bind them to any other name.
1620 further, simply bind them to any other name.
1615
1621
1616 2005-03-17 Fernando Perez <fperez@colorado.edu>
1622 2005-03-17 Fernando Perez <fperez@colorado.edu>
1617
1623
1618 * IPython/Prompts.py (BasePrompt.cwd_filt): a few more fixes for
1624 * IPython/Prompts.py (BasePrompt.cwd_filt): a few more fixes for
1619 prompt namespace handling.
1625 prompt namespace handling.
1620
1626
1621 2005-03-16 Fernando Perez <fperez@colorado.edu>
1627 2005-03-16 Fernando Perez <fperez@colorado.edu>
1622
1628
1623 * IPython/Prompts.py (CachedOutput.__init__): Fix default and
1629 * IPython/Prompts.py (CachedOutput.__init__): Fix default and
1624 classic prompts to be '>>> ' (final space was missing, and it
1630 classic prompts to be '>>> ' (final space was missing, and it
1625 trips the emacs python mode).
1631 trips the emacs python mode).
1626 (BasePrompt.__str__): Added safe support for dynamic prompt
1632 (BasePrompt.__str__): Added safe support for dynamic prompt
1627 strings. Now you can set your prompt string to be '$x', and the
1633 strings. Now you can set your prompt string to be '$x', and the
1628 value of x will be printed from your interactive namespace. The
1634 value of x will be printed from your interactive namespace. The
1629 interpolation syntax includes the full Itpl support, so
1635 interpolation syntax includes the full Itpl support, so
1630 ${foo()+x+bar()} is a valid prompt string now, and the function
1636 ${foo()+x+bar()} is a valid prompt string now, and the function
1631 calls will be made at runtime.
1637 calls will be made at runtime.
1632
1638
1633 2005-03-15 Fernando Perez <fperez@colorado.edu>
1639 2005-03-15 Fernando Perez <fperez@colorado.edu>
1634
1640
1635 * IPython/Magic.py (magic_history): renamed %hist to %history, to
1641 * IPython/Magic.py (magic_history): renamed %hist to %history, to
1636 avoid name clashes in pylab. %hist still works, it just forwards
1642 avoid name clashes in pylab. %hist still works, it just forwards
1637 the call to %history.
1643 the call to %history.
1638
1644
1639 2005-03-02 *** Released version 0.6.12
1645 2005-03-02 *** Released version 0.6.12
1640
1646
1641 2005-03-02 Fernando Perez <fperez@colorado.edu>
1647 2005-03-02 Fernando Perez <fperez@colorado.edu>
1642
1648
1643 * IPython/iplib.py (handle_magic): log magic calls properly as
1649 * IPython/iplib.py (handle_magic): log magic calls properly as
1644 ipmagic() function calls.
1650 ipmagic() function calls.
1645
1651
1646 * IPython/Magic.py (magic_time): Improved %time to support
1652 * IPython/Magic.py (magic_time): Improved %time to support
1647 statements and provide wall-clock as well as CPU time.
1653 statements and provide wall-clock as well as CPU time.
1648
1654
1649 2005-02-27 Fernando Perez <fperez@colorado.edu>
1655 2005-02-27 Fernando Perez <fperez@colorado.edu>
1650
1656
1651 * IPython/hooks.py: New hooks module, to expose user-modifiable
1657 * IPython/hooks.py: New hooks module, to expose user-modifiable
1652 IPython functionality in a clean manner. For now only the editor
1658 IPython functionality in a clean manner. For now only the editor
1653 hook is actually written, and other thigns which I intend to turn
1659 hook is actually written, and other thigns which I intend to turn
1654 into proper hooks aren't yet there. The display and prefilter
1660 into proper hooks aren't yet there. The display and prefilter
1655 stuff, for example, should be hooks. But at least now the
1661 stuff, for example, should be hooks. But at least now the
1656 framework is in place, and the rest can be moved here with more
1662 framework is in place, and the rest can be moved here with more
1657 time later. IPython had had a .hooks variable for a long time for
1663 time later. IPython had had a .hooks variable for a long time for
1658 this purpose, but I'd never actually used it for anything.
1664 this purpose, but I'd never actually used it for anything.
1659
1665
1660 2005-02-26 Fernando Perez <fperez@colorado.edu>
1666 2005-02-26 Fernando Perez <fperez@colorado.edu>
1661
1667
1662 * IPython/ipmaker.py (make_IPython): make the default ipython
1668 * IPython/ipmaker.py (make_IPython): make the default ipython
1663 directory be called _ipython under win32, to follow more the
1669 directory be called _ipython under win32, to follow more the
1664 naming peculiarities of that platform (where buggy software like
1670 naming peculiarities of that platform (where buggy software like
1665 Visual Sourcesafe breaks with .named directories). Reported by
1671 Visual Sourcesafe breaks with .named directories). Reported by
1666 Ville Vainio.
1672 Ville Vainio.
1667
1673
1668 2005-02-23 Fernando Perez <fperez@colorado.edu>
1674 2005-02-23 Fernando Perez <fperez@colorado.edu>
1669
1675
1670 * IPython/iplib.py (InteractiveShell.__init__): removed a few
1676 * IPython/iplib.py (InteractiveShell.__init__): removed a few
1671 auto_aliases for win32 which were causing problems. Users can
1677 auto_aliases for win32 which were causing problems. Users can
1672 define the ones they personally like.
1678 define the ones they personally like.
1673
1679
1674 2005-02-21 Fernando Perez <fperez@colorado.edu>
1680 2005-02-21 Fernando Perez <fperez@colorado.edu>
1675
1681
1676 * IPython/Magic.py (magic_time): new magic to time execution of
1682 * IPython/Magic.py (magic_time): new magic to time execution of
1677 expressions. After a request by Charles Moad <cmoad-AT-indiana.edu>.
1683 expressions. After a request by Charles Moad <cmoad-AT-indiana.edu>.
1678
1684
1679 2005-02-19 Fernando Perez <fperez@colorado.edu>
1685 2005-02-19 Fernando Perez <fperez@colorado.edu>
1680
1686
1681 * IPython/ConfigLoader.py (ConfigLoader.load): Allow empty strings
1687 * IPython/ConfigLoader.py (ConfigLoader.load): Allow empty strings
1682 into keys (for prompts, for example).
1688 into keys (for prompts, for example).
1683
1689
1684 * IPython/Prompts.py (BasePrompt.set_p_str): Fix to allow empty
1690 * IPython/Prompts.py (BasePrompt.set_p_str): Fix to allow empty
1685 prompts in case users want them. This introduces a small behavior
1691 prompts in case users want them. This introduces a small behavior
1686 change: ipython does not automatically add a space to all prompts
1692 change: ipython does not automatically add a space to all prompts
1687 anymore. To get the old prompts with a space, users should add it
1693 anymore. To get the old prompts with a space, users should add it
1688 manually to their ipythonrc file, so for example prompt_in1 should
1694 manually to their ipythonrc file, so for example prompt_in1 should
1689 now read 'In [\#]: ' instead of 'In [\#]:'.
1695 now read 'In [\#]: ' instead of 'In [\#]:'.
1690 (BasePrompt.__init__): New option prompts_pad_left (only in rc
1696 (BasePrompt.__init__): New option prompts_pad_left (only in rc
1691 file) to control left-padding of secondary prompts.
1697 file) to control left-padding of secondary prompts.
1692
1698
1693 * IPython/Magic.py (Magic.profile_missing_notice): Don't crash if
1699 * IPython/Magic.py (Magic.profile_missing_notice): Don't crash if
1694 the profiler can't be imported. Fix for Debian, which removed
1700 the profiler can't be imported. Fix for Debian, which removed
1695 profile.py because of License issues. I applied a slightly
1701 profile.py because of License issues. I applied a slightly
1696 modified version of the original Debian patch at
1702 modified version of the original Debian patch at
1697 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=294500.
1703 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=294500.
1698
1704
1699 2005-02-17 Fernando Perez <fperez@colorado.edu>
1705 2005-02-17 Fernando Perez <fperez@colorado.edu>
1700
1706
1701 * IPython/genutils.py (native_line_ends): Fix bug which would
1707 * IPython/genutils.py (native_line_ends): Fix bug which would
1702 cause improper line-ends under win32 b/c I was not opening files
1708 cause improper line-ends under win32 b/c I was not opening files
1703 in binary mode. Bug report and fix thanks to Ville.
1709 in binary mode. Bug report and fix thanks to Ville.
1704
1710
1705 * IPython/iplib.py (handle_auto): Fix bug which I introduced when
1711 * IPython/iplib.py (handle_auto): Fix bug which I introduced when
1706 trying to catch spurious foo[1] autocalls. My fix actually broke
1712 trying to catch spurious foo[1] autocalls. My fix actually broke
1707 ',/' autoquote/call with explicit escape (bad regexp).
1713 ',/' autoquote/call with explicit escape (bad regexp).
1708
1714
1709 2005-02-15 *** Released version 0.6.11
1715 2005-02-15 *** Released version 0.6.11
1710
1716
1711 2005-02-14 Fernando Perez <fperez@colorado.edu>
1717 2005-02-14 Fernando Perez <fperez@colorado.edu>
1712
1718
1713 * IPython/background_jobs.py: New background job management
1719 * IPython/background_jobs.py: New background job management
1714 subsystem. This is implemented via a new set of classes, and
1720 subsystem. This is implemented via a new set of classes, and
1715 IPython now provides a builtin 'jobs' object for background job
1721 IPython now provides a builtin 'jobs' object for background job
1716 execution. A convenience %bg magic serves as a lightweight
1722 execution. A convenience %bg magic serves as a lightweight
1717 frontend for starting the more common type of calls. This was
1723 frontend for starting the more common type of calls. This was
1718 inspired by discussions with B. Granger and the BackgroundCommand
1724 inspired by discussions with B. Granger and the BackgroundCommand
1719 class described in the book Python Scripting for Computational
1725 class described in the book Python Scripting for Computational
1720 Science, by H. P. Langtangen: http://folk.uio.no/hpl/scripting
1726 Science, by H. P. Langtangen: http://folk.uio.no/hpl/scripting
1721 (although ultimately no code from this text was used, as IPython's
1727 (although ultimately no code from this text was used, as IPython's
1722 system is a separate implementation).
1728 system is a separate implementation).
1723
1729
1724 * IPython/iplib.py (MagicCompleter.python_matches): add new option
1730 * IPython/iplib.py (MagicCompleter.python_matches): add new option
1725 to control the completion of single/double underscore names
1731 to control the completion of single/double underscore names
1726 separately. As documented in the example ipytonrc file, the
1732 separately. As documented in the example ipytonrc file, the
1727 readline_omit__names variable can now be set to 2, to omit even
1733 readline_omit__names variable can now be set to 2, to omit even
1728 single underscore names. Thanks to a patch by Brian Wong
1734 single underscore names. Thanks to a patch by Brian Wong
1729 <BrianWong-AT-AirgoNetworks.Com>.
1735 <BrianWong-AT-AirgoNetworks.Com>.
1730 (InteractiveShell.__init__): Fix bug which would cause foo[1] to
1736 (InteractiveShell.__init__): Fix bug which would cause foo[1] to
1731 be autocalled as foo([1]) if foo were callable. A problem for
1737 be autocalled as foo([1]) if foo were callable. A problem for
1732 things which are both callable and implement __getitem__.
1738 things which are both callable and implement __getitem__.
1733 (init_readline): Fix autoindentation for win32. Thanks to a patch
1739 (init_readline): Fix autoindentation for win32. Thanks to a patch
1734 by Vivian De Smedt <vivian-AT-vdesmedt.com>.
1740 by Vivian De Smedt <vivian-AT-vdesmedt.com>.
1735
1741
1736 2005-02-12 Fernando Perez <fperez@colorado.edu>
1742 2005-02-12 Fernando Perez <fperez@colorado.edu>
1737
1743
1738 * IPython/ipmaker.py (make_IPython): Disabled the stout traps
1744 * IPython/ipmaker.py (make_IPython): Disabled the stout traps
1739 which I had written long ago to sort out user error messages which
1745 which I had written long ago to sort out user error messages which
1740 may occur during startup. This seemed like a good idea initially,
1746 may occur during startup. This seemed like a good idea initially,
1741 but it has proven a disaster in retrospect. I don't want to
1747 but it has proven a disaster in retrospect. I don't want to
1742 change much code for now, so my fix is to set the internal 'debug'
1748 change much code for now, so my fix is to set the internal 'debug'
1743 flag to true everywhere, whose only job was precisely to control
1749 flag to true everywhere, whose only job was precisely to control
1744 this subsystem. This closes issue 28 (as well as avoiding all
1750 this subsystem. This closes issue 28 (as well as avoiding all
1745 sorts of strange hangups which occur from time to time).
1751 sorts of strange hangups which occur from time to time).
1746
1752
1747 2005-02-07 Fernando Perez <fperez@colorado.edu>
1753 2005-02-07 Fernando Perez <fperez@colorado.edu>
1748
1754
1749 * IPython/Magic.py (magic_edit): Fix 'ed -p' not working when the
1755 * IPython/Magic.py (magic_edit): Fix 'ed -p' not working when the
1750 previous call produced a syntax error.
1756 previous call produced a syntax error.
1751
1757
1752 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1758 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1753 classes without constructor.
1759 classes without constructor.
1754
1760
1755 2005-02-06 Fernando Perez <fperez@colorado.edu>
1761 2005-02-06 Fernando Perez <fperez@colorado.edu>
1756
1762
1757 * IPython/iplib.py (MagicCompleter.complete): Extend the list of
1763 * IPython/iplib.py (MagicCompleter.complete): Extend the list of
1758 completions with the results of each matcher, so we return results
1764 completions with the results of each matcher, so we return results
1759 to the user from all namespaces. This breaks with ipython
1765 to the user from all namespaces. This breaks with ipython
1760 tradition, but I think it's a nicer behavior. Now you get all
1766 tradition, but I think it's a nicer behavior. Now you get all
1761 possible completions listed, from all possible namespaces (python,
1767 possible completions listed, from all possible namespaces (python,
1762 filesystem, magics...) After a request by John Hunter
1768 filesystem, magics...) After a request by John Hunter
1763 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1769 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1764
1770
1765 2005-02-05 Fernando Perez <fperez@colorado.edu>
1771 2005-02-05 Fernando Perez <fperez@colorado.edu>
1766
1772
1767 * IPython/Magic.py (magic_prun): Fix bug where prun would fail if
1773 * IPython/Magic.py (magic_prun): Fix bug where prun would fail if
1768 the call had quote characters in it (the quotes were stripped).
1774 the call had quote characters in it (the quotes were stripped).
1769
1775
1770 2005-01-31 Fernando Perez <fperez@colorado.edu>
1776 2005-01-31 Fernando Perez <fperez@colorado.edu>
1771
1777
1772 * IPython/iplib.py (InteractiveShell.__init__): reduce reliance on
1778 * IPython/iplib.py (InteractiveShell.__init__): reduce reliance on
1773 Itpl.itpl() to make the code more robust against psyco
1779 Itpl.itpl() to make the code more robust against psyco
1774 optimizations.
1780 optimizations.
1775
1781
1776 * IPython/Itpl.py (Itpl.__str__): Use a _getframe() call instead
1782 * IPython/Itpl.py (Itpl.__str__): Use a _getframe() call instead
1777 of causing an exception. Quicker, cleaner.
1783 of causing an exception. Quicker, cleaner.
1778
1784
1779 2005-01-28 Fernando Perez <fperez@colorado.edu>
1785 2005-01-28 Fernando Perez <fperez@colorado.edu>
1780
1786
1781 * scripts/ipython_win_post_install.py (install): hardcode
1787 * scripts/ipython_win_post_install.py (install): hardcode
1782 sys.prefix+'python.exe' as the executable path. It turns out that
1788 sys.prefix+'python.exe' as the executable path. It turns out that
1783 during the post-installation run, sys.executable resolves to the
1789 during the post-installation run, sys.executable resolves to the
1784 name of the binary installer! I should report this as a distutils
1790 name of the binary installer! I should report this as a distutils
1785 bug, I think. I updated the .10 release with this tiny fix, to
1791 bug, I think. I updated the .10 release with this tiny fix, to
1786 avoid annoying the lists further.
1792 avoid annoying the lists further.
1787
1793
1788 2005-01-27 *** Released version 0.6.10
1794 2005-01-27 *** Released version 0.6.10
1789
1795
1790 2005-01-27 Fernando Perez <fperez@colorado.edu>
1796 2005-01-27 Fernando Perez <fperez@colorado.edu>
1791
1797
1792 * IPython/numutils.py (norm): Added 'inf' as optional name for
1798 * IPython/numutils.py (norm): Added 'inf' as optional name for
1793 L-infinity norm, included references to mathworld.com for vector
1799 L-infinity norm, included references to mathworld.com for vector
1794 norm definitions.
1800 norm definitions.
1795 (amin/amax): added amin/amax for array min/max. Similar to what
1801 (amin/amax): added amin/amax for array min/max. Similar to what
1796 pylab ships with after the recent reorganization of names.
1802 pylab ships with after the recent reorganization of names.
1797 (spike/spike_odd): removed deprecated spike/spike_odd functions.
1803 (spike/spike_odd): removed deprecated spike/spike_odd functions.
1798
1804
1799 * ipython.el: committed Alex's recent fixes and improvements.
1805 * ipython.el: committed Alex's recent fixes and improvements.
1800 Tested with python-mode from CVS, and it looks excellent. Since
1806 Tested with python-mode from CVS, and it looks excellent. Since
1801 python-mode hasn't released anything in a while, I'm temporarily
1807 python-mode hasn't released anything in a while, I'm temporarily
1802 putting a copy of today's CVS (v 4.70) of python-mode in:
1808 putting a copy of today's CVS (v 4.70) of python-mode in:
1803 http://ipython.scipy.org/tmp/python-mode.el
1809 http://ipython.scipy.org/tmp/python-mode.el
1804
1810
1805 * scripts/ipython_win_post_install.py (install): Win32 fix to use
1811 * scripts/ipython_win_post_install.py (install): Win32 fix to use
1806 sys.executable for the executable name, instead of assuming it's
1812 sys.executable for the executable name, instead of assuming it's
1807 called 'python.exe' (the post-installer would have produced broken
1813 called 'python.exe' (the post-installer would have produced broken
1808 setups on systems with a differently named python binary).
1814 setups on systems with a differently named python binary).
1809
1815
1810 * IPython/PyColorize.py (Parser.__call__): change explicit '\n'
1816 * IPython/PyColorize.py (Parser.__call__): change explicit '\n'
1811 references to os.linesep, to make the code more
1817 references to os.linesep, to make the code more
1812 platform-independent. This is also part of the win32 coloring
1818 platform-independent. This is also part of the win32 coloring
1813 fixes.
1819 fixes.
1814
1820
1815 * IPython/genutils.py (page_dumb): Remove attempts to chop long
1821 * IPython/genutils.py (page_dumb): Remove attempts to chop long
1816 lines, which actually cause coloring bugs because the length of
1822 lines, which actually cause coloring bugs because the length of
1817 the line is very difficult to correctly compute with embedded
1823 the line is very difficult to correctly compute with embedded
1818 escapes. This was the source of all the coloring problems under
1824 escapes. This was the source of all the coloring problems under
1819 Win32. I think that _finally_, Win32 users have a properly
1825 Win32. I think that _finally_, Win32 users have a properly
1820 working ipython in all respects. This would never have happened
1826 working ipython in all respects. This would never have happened
1821 if not for Gary Bishop and Viktor Ransmayr's great help and work.
1827 if not for Gary Bishop and Viktor Ransmayr's great help and work.
1822
1828
1823 2005-01-26 *** Released version 0.6.9
1829 2005-01-26 *** Released version 0.6.9
1824
1830
1825 2005-01-25 Fernando Perez <fperez@colorado.edu>
1831 2005-01-25 Fernando Perez <fperez@colorado.edu>
1826
1832
1827 * setup.py: finally, we have a true Windows installer, thanks to
1833 * setup.py: finally, we have a true Windows installer, thanks to
1828 the excellent work of Viktor Ransmayr
1834 the excellent work of Viktor Ransmayr
1829 <viktor.ransmayr-AT-t-online.de>. The docs have been updated for
1835 <viktor.ransmayr-AT-t-online.de>. The docs have been updated for
1830 Windows users. The setup routine is quite a bit cleaner thanks to
1836 Windows users. The setup routine is quite a bit cleaner thanks to
1831 this, and the post-install script uses the proper functions to
1837 this, and the post-install script uses the proper functions to
1832 allow a clean de-installation using the standard Windows Control
1838 allow a clean de-installation using the standard Windows Control
1833 Panel.
1839 Panel.
1834
1840
1835 * IPython/genutils.py (get_home_dir): changed to use the $HOME
1841 * IPython/genutils.py (get_home_dir): changed to use the $HOME
1836 environment variable under all OSes (including win32) if
1842 environment variable under all OSes (including win32) if
1837 available. This will give consistency to win32 users who have set
1843 available. This will give consistency to win32 users who have set
1838 this variable for any reason. If os.environ['HOME'] fails, the
1844 this variable for any reason. If os.environ['HOME'] fails, the
1839 previous policy of using HOMEDRIVE\HOMEPATH kicks in.
1845 previous policy of using HOMEDRIVE\HOMEPATH kicks in.
1840
1846
1841 2005-01-24 Fernando Perez <fperez@colorado.edu>
1847 2005-01-24 Fernando Perez <fperez@colorado.edu>
1842
1848
1843 * IPython/numutils.py (empty_like): add empty_like(), similar to
1849 * IPython/numutils.py (empty_like): add empty_like(), similar to
1844 zeros_like() but taking advantage of the new empty() Numeric routine.
1850 zeros_like() but taking advantage of the new empty() Numeric routine.
1845
1851
1846 2005-01-23 *** Released version 0.6.8
1852 2005-01-23 *** Released version 0.6.8
1847
1853
1848 2005-01-22 Fernando Perez <fperez@colorado.edu>
1854 2005-01-22 Fernando Perez <fperez@colorado.edu>
1849
1855
1850 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): I removed the
1856 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): I removed the
1851 automatic show() calls. After discussing things with JDH, it
1857 automatic show() calls. After discussing things with JDH, it
1852 turns out there are too many corner cases where this can go wrong.
1858 turns out there are too many corner cases where this can go wrong.
1853 It's best not to try to be 'too smart', and simply have ipython
1859 It's best not to try to be 'too smart', and simply have ipython
1854 reproduce as much as possible the default behavior of a normal
1860 reproduce as much as possible the default behavior of a normal
1855 python shell.
1861 python shell.
1856
1862
1857 * IPython/iplib.py (InteractiveShell.__init__): Modified the
1863 * IPython/iplib.py (InteractiveShell.__init__): Modified the
1858 line-splitting regexp and _prefilter() to avoid calling getattr()
1864 line-splitting regexp and _prefilter() to avoid calling getattr()
1859 on assignments. This closes
1865 on assignments. This closes
1860 http://www.scipy.net/roundup/ipython/issue24. Note that Python's
1866 http://www.scipy.net/roundup/ipython/issue24. Note that Python's
1861 readline uses getattr(), so a simple <TAB> keypress is still
1867 readline uses getattr(), so a simple <TAB> keypress is still
1862 enough to trigger getattr() calls on an object.
1868 enough to trigger getattr() calls on an object.
1863
1869
1864 2005-01-21 Fernando Perez <fperez@colorado.edu>
1870 2005-01-21 Fernando Perez <fperez@colorado.edu>
1865
1871
1866 * IPython/Shell.py (MatplotlibShellBase.magic_run): Fix the %run
1872 * IPython/Shell.py (MatplotlibShellBase.magic_run): Fix the %run
1867 docstring under pylab so it doesn't mask the original.
1873 docstring under pylab so it doesn't mask the original.
1868
1874
1869 2005-01-21 *** Released version 0.6.7
1875 2005-01-21 *** Released version 0.6.7
1870
1876
1871 2005-01-21 Fernando Perez <fperez@colorado.edu>
1877 2005-01-21 Fernando Perez <fperez@colorado.edu>
1872
1878
1873 * IPython/Shell.py (MTInteractiveShell.runcode): Trap a crash with
1879 * IPython/Shell.py (MTInteractiveShell.runcode): Trap a crash with
1874 signal handling for win32 users in multithreaded mode.
1880 signal handling for win32 users in multithreaded mode.
1875
1881
1876 2005-01-17 Fernando Perez <fperez@colorado.edu>
1882 2005-01-17 Fernando Perez <fperez@colorado.edu>
1877
1883
1878 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1884 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1879 instances with no __init__. After a crash report by Norbert Nemec
1885 instances with no __init__. After a crash report by Norbert Nemec
1880 <Norbert-AT-nemec-online.de>.
1886 <Norbert-AT-nemec-online.de>.
1881
1887
1882 2005-01-14 Fernando Perez <fperez@colorado.edu>
1888 2005-01-14 Fernando Perez <fperez@colorado.edu>
1883
1889
1884 * IPython/ultraTB.py (VerboseTB.text): Fix bug in reporting of
1890 * IPython/ultraTB.py (VerboseTB.text): Fix bug in reporting of
1885 names for verbose exceptions, when multiple dotted names and the
1891 names for verbose exceptions, when multiple dotted names and the
1886 'parent' object were present on the same line.
1892 'parent' object were present on the same line.
1887
1893
1888 2005-01-11 Fernando Perez <fperez@colorado.edu>
1894 2005-01-11 Fernando Perez <fperez@colorado.edu>
1889
1895
1890 * IPython/genutils.py (flag_calls): new utility to trap and flag
1896 * IPython/genutils.py (flag_calls): new utility to trap and flag
1891 calls in functions. I need it to clean up matplotlib support.
1897 calls in functions. I need it to clean up matplotlib support.
1892 Also removed some deprecated code in genutils.
1898 Also removed some deprecated code in genutils.
1893
1899
1894 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): small fix so
1900 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): small fix so
1895 that matplotlib scripts called with %run, which don't call show()
1901 that matplotlib scripts called with %run, which don't call show()
1896 themselves, still have their plotting windows open.
1902 themselves, still have their plotting windows open.
1897
1903
1898 2005-01-05 Fernando Perez <fperez@colorado.edu>
1904 2005-01-05 Fernando Perez <fperez@colorado.edu>
1899
1905
1900 * IPython/Shell.py (IPShellGTK.__init__): Patch by Andrew Straw
1906 * IPython/Shell.py (IPShellGTK.__init__): Patch by Andrew Straw
1901 <astraw-AT-caltech.edu>, to fix gtk deprecation warnings.
1907 <astraw-AT-caltech.edu>, to fix gtk deprecation warnings.
1902
1908
1903 2004-12-19 Fernando Perez <fperez@colorado.edu>
1909 2004-12-19 Fernando Perez <fperez@colorado.edu>
1904
1910
1905 * IPython/Shell.py (MTInteractiveShell.runcode): Get rid of
1911 * IPython/Shell.py (MTInteractiveShell.runcode): Get rid of
1906 parent_runcode, which was an eyesore. The same result can be
1912 parent_runcode, which was an eyesore. The same result can be
1907 obtained with Python's regular superclass mechanisms.
1913 obtained with Python's regular superclass mechanisms.
1908
1914
1909 2004-12-17 Fernando Perez <fperez@colorado.edu>
1915 2004-12-17 Fernando Perez <fperez@colorado.edu>
1910
1916
1911 * IPython/Magic.py (Magic.magic_sc): Fix quote stripping problem
1917 * IPython/Magic.py (Magic.magic_sc): Fix quote stripping problem
1912 reported by Prabhu.
1918 reported by Prabhu.
1913 (Magic.magic_sx): direct all errors to Term.cerr (defaults to
1919 (Magic.magic_sx): direct all errors to Term.cerr (defaults to
1914 sys.stderr) instead of explicitly calling sys.stderr. This helps
1920 sys.stderr) instead of explicitly calling sys.stderr. This helps
1915 maintain our I/O abstractions clean, for future GUI embeddings.
1921 maintain our I/O abstractions clean, for future GUI embeddings.
1916
1922
1917 * IPython/genutils.py (info): added new utility for sys.stderr
1923 * IPython/genutils.py (info): added new utility for sys.stderr
1918 unified info message handling (thin wrapper around warn()).
1924 unified info message handling (thin wrapper around warn()).
1919
1925
1920 * IPython/ultraTB.py (VerboseTB.text): Fix misreported global
1926 * IPython/ultraTB.py (VerboseTB.text): Fix misreported global
1921 composite (dotted) names on verbose exceptions.
1927 composite (dotted) names on verbose exceptions.
1922 (VerboseTB.nullrepr): harden against another kind of errors which
1928 (VerboseTB.nullrepr): harden against another kind of errors which
1923 Python's inspect module can trigger, and which were crashing
1929 Python's inspect module can trigger, and which were crashing
1924 IPython. Thanks to a report by Marco Lombardi
1930 IPython. Thanks to a report by Marco Lombardi
1925 <mlombard-AT-ma010192.hq.eso.org>.
1931 <mlombard-AT-ma010192.hq.eso.org>.
1926
1932
1927 2004-12-13 *** Released version 0.6.6
1933 2004-12-13 *** Released version 0.6.6
1928
1934
1929 2004-12-12 Fernando Perez <fperez@colorado.edu>
1935 2004-12-12 Fernando Perez <fperez@colorado.edu>
1930
1936
1931 * IPython/Shell.py (IPShellGTK.mainloop): catch RuntimeErrors
1937 * IPython/Shell.py (IPShellGTK.mainloop): catch RuntimeErrors
1932 generated by pygtk upon initialization if it was built without
1938 generated by pygtk upon initialization if it was built without
1933 threads (for matplotlib users). After a crash reported by
1939 threads (for matplotlib users). After a crash reported by
1934 Leguijt, Jaap J SIEP-EPT-RES <Jaap.Leguijt-AT-shell.com>.
1940 Leguijt, Jaap J SIEP-EPT-RES <Jaap.Leguijt-AT-shell.com>.
1935
1941
1936 * IPython/ipmaker.py (make_IPython): fix small bug in the
1942 * IPython/ipmaker.py (make_IPython): fix small bug in the
1937 import_some parameter for multiple imports.
1943 import_some parameter for multiple imports.
1938
1944
1939 * IPython/iplib.py (ipmagic): simplified the interface of
1945 * IPython/iplib.py (ipmagic): simplified the interface of
1940 ipmagic() to take a single string argument, just as it would be
1946 ipmagic() to take a single string argument, just as it would be
1941 typed at the IPython cmd line.
1947 typed at the IPython cmd line.
1942 (ipalias): Added new ipalias() with an interface identical to
1948 (ipalias): Added new ipalias() with an interface identical to
1943 ipmagic(). This completes exposing a pure python interface to the
1949 ipmagic(). This completes exposing a pure python interface to the
1944 alias and magic system, which can be used in loops or more complex
1950 alias and magic system, which can be used in loops or more complex
1945 code where IPython's automatic line mangling is not active.
1951 code where IPython's automatic line mangling is not active.
1946
1952
1947 * IPython/genutils.py (timing): changed interface of timing to
1953 * IPython/genutils.py (timing): changed interface of timing to
1948 simply run code once, which is the most common case. timings()
1954 simply run code once, which is the most common case. timings()
1949 remains unchanged, for the cases where you want multiple runs.
1955 remains unchanged, for the cases where you want multiple runs.
1950
1956
1951 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix a
1957 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix a
1952 bug where Python2.2 crashes with exec'ing code which does not end
1958 bug where Python2.2 crashes with exec'ing code which does not end
1953 in a single newline. Python 2.3 is OK, so I hadn't noticed this
1959 in a single newline. Python 2.3 is OK, so I hadn't noticed this
1954 before.
1960 before.
1955
1961
1956 2004-12-10 Fernando Perez <fperez@colorado.edu>
1962 2004-12-10 Fernando Perez <fperez@colorado.edu>
1957
1963
1958 * IPython/Magic.py (Magic.magic_prun): changed name of option from
1964 * IPython/Magic.py (Magic.magic_prun): changed name of option from
1959 -t to -T, to accomodate the new -t flag in %run (the %run and
1965 -t to -T, to accomodate the new -t flag in %run (the %run and
1960 %prun options are kind of intermixed, and it's not easy to change
1966 %prun options are kind of intermixed, and it's not easy to change
1961 this with the limitations of python's getopt).
1967 this with the limitations of python's getopt).
1962
1968
1963 * IPython/Magic.py (Magic.magic_run): Added new -t option to time
1969 * IPython/Magic.py (Magic.magic_run): Added new -t option to time
1964 the execution of scripts. It's not as fine-tuned as timeit.py,
1970 the execution of scripts. It's not as fine-tuned as timeit.py,
1965 but it works from inside ipython (and under 2.2, which lacks
1971 but it works from inside ipython (and under 2.2, which lacks
1966 timeit.py). Optionally a number of runs > 1 can be given for
1972 timeit.py). Optionally a number of runs > 1 can be given for
1967 timing very short-running code.
1973 timing very short-running code.
1968
1974
1969 * IPython/genutils.py (uniq_stable): new routine which returns a
1975 * IPython/genutils.py (uniq_stable): new routine which returns a
1970 list of unique elements in any iterable, but in stable order of
1976 list of unique elements in any iterable, but in stable order of
1971 appearance. I needed this for the ultraTB fixes, and it's a handy
1977 appearance. I needed this for the ultraTB fixes, and it's a handy
1972 utility.
1978 utility.
1973
1979
1974 * IPython/ultraTB.py (VerboseTB.text): Fix proper reporting of
1980 * IPython/ultraTB.py (VerboseTB.text): Fix proper reporting of
1975 dotted names in Verbose exceptions. This had been broken since
1981 dotted names in Verbose exceptions. This had been broken since
1976 the very start, now x.y will properly be printed in a Verbose
1982 the very start, now x.y will properly be printed in a Verbose
1977 traceback, instead of x being shown and y appearing always as an
1983 traceback, instead of x being shown and y appearing always as an
1978 'undefined global'. Getting this to work was a bit tricky,
1984 'undefined global'. Getting this to work was a bit tricky,
1979 because by default python tokenizers are stateless. Saved by
1985 because by default python tokenizers are stateless. Saved by
1980 python's ability to easily add a bit of state to an arbitrary
1986 python's ability to easily add a bit of state to an arbitrary
1981 function (without needing to build a full-blown callable object).
1987 function (without needing to build a full-blown callable object).
1982
1988
1983 Also big cleanup of this code, which had horrendous runtime
1989 Also big cleanup of this code, which had horrendous runtime
1984 lookups of zillions of attributes for colorization. Moved all
1990 lookups of zillions of attributes for colorization. Moved all
1985 this code into a few templates, which make it cleaner and quicker.
1991 this code into a few templates, which make it cleaner and quicker.
1986
1992
1987 Printout quality was also improved for Verbose exceptions: one
1993 Printout quality was also improved for Verbose exceptions: one
1988 variable per line, and memory addresses are printed (this can be
1994 variable per line, and memory addresses are printed (this can be
1989 quite handy in nasty debugging situations, which is what Verbose
1995 quite handy in nasty debugging situations, which is what Verbose
1990 is for).
1996 is for).
1991
1997
1992 * IPython/ipmaker.py (make_IPython): Do NOT execute files named in
1998 * IPython/ipmaker.py (make_IPython): Do NOT execute files named in
1993 the command line as scripts to be loaded by embedded instances.
1999 the command line as scripts to be loaded by embedded instances.
1994 Doing so has the potential for an infinite recursion if there are
2000 Doing so has the potential for an infinite recursion if there are
1995 exceptions thrown in the process. This fixes a strange crash
2001 exceptions thrown in the process. This fixes a strange crash
1996 reported by Philippe MULLER <muller-AT-irit.fr>.
2002 reported by Philippe MULLER <muller-AT-irit.fr>.
1997
2003
1998 2004-12-09 Fernando Perez <fperez@colorado.edu>
2004 2004-12-09 Fernando Perez <fperez@colorado.edu>
1999
2005
2000 * IPython/Shell.py (MatplotlibShellBase.use): Change pylab support
2006 * IPython/Shell.py (MatplotlibShellBase.use): Change pylab support
2001 to reflect new names in matplotlib, which now expose the
2007 to reflect new names in matplotlib, which now expose the
2002 matlab-compatible interface via a pylab module instead of the
2008 matlab-compatible interface via a pylab module instead of the
2003 'matlab' name. The new code is backwards compatible, so users of
2009 'matlab' name. The new code is backwards compatible, so users of
2004 all matplotlib versions are OK. Patch by J. Hunter.
2010 all matplotlib versions are OK. Patch by J. Hunter.
2005
2011
2006 * IPython/OInspect.py (Inspector.pinfo): Add to object? printing
2012 * IPython/OInspect.py (Inspector.pinfo): Add to object? printing
2007 of __init__ docstrings for instances (class docstrings are already
2013 of __init__ docstrings for instances (class docstrings are already
2008 automatically printed). Instances with customized docstrings
2014 automatically printed). Instances with customized docstrings
2009 (indep. of the class) are also recognized and all 3 separate
2015 (indep. of the class) are also recognized and all 3 separate
2010 docstrings are printed (instance, class, constructor). After some
2016 docstrings are printed (instance, class, constructor). After some
2011 comments/suggestions by J. Hunter.
2017 comments/suggestions by J. Hunter.
2012
2018
2013 2004-12-05 Fernando Perez <fperez@colorado.edu>
2019 2004-12-05 Fernando Perez <fperez@colorado.edu>
2014
2020
2015 * IPython/iplib.py (MagicCompleter.complete): Remove annoying
2021 * IPython/iplib.py (MagicCompleter.complete): Remove annoying
2016 warnings when tab-completion fails and triggers an exception.
2022 warnings when tab-completion fails and triggers an exception.
2017
2023
2018 2004-12-03 Fernando Perez <fperez@colorado.edu>
2024 2004-12-03 Fernando Perez <fperez@colorado.edu>
2019
2025
2020 * IPython/Magic.py (magic_prun): Fix bug where an exception would
2026 * IPython/Magic.py (magic_prun): Fix bug where an exception would
2021 be triggered when using 'run -p'. An incorrect option flag was
2027 be triggered when using 'run -p'. An incorrect option flag was
2022 being set ('d' instead of 'D').
2028 being set ('d' instead of 'D').
2023 (manpage): fix missing escaped \- sign.
2029 (manpage): fix missing escaped \- sign.
2024
2030
2025 2004-11-30 *** Released version 0.6.5
2031 2004-11-30 *** Released version 0.6.5
2026
2032
2027 2004-11-30 Fernando Perez <fperez@colorado.edu>
2033 2004-11-30 Fernando Perez <fperez@colorado.edu>
2028
2034
2029 * IPython/Magic.py (Magic.magic_run): Fix bug in breakpoint
2035 * IPython/Magic.py (Magic.magic_run): Fix bug in breakpoint
2030 setting with -d option.
2036 setting with -d option.
2031
2037
2032 * setup.py (docfiles): Fix problem where the doc glob I was using
2038 * setup.py (docfiles): Fix problem where the doc glob I was using
2033 was COMPLETELY BROKEN. It was giving the right files by pure
2039 was COMPLETELY BROKEN. It was giving the right files by pure
2034 accident, but failed once I tried to include ipython.el. Note:
2040 accident, but failed once I tried to include ipython.el. Note:
2035 glob() does NOT allow you to do exclusion on multiple endings!
2041 glob() does NOT allow you to do exclusion on multiple endings!
2036
2042
2037 2004-11-29 Fernando Perez <fperez@colorado.edu>
2043 2004-11-29 Fernando Perez <fperez@colorado.edu>
2038
2044
2039 * IPython/usage.py (__doc__): cleaned up usage docstring, by using
2045 * IPython/usage.py (__doc__): cleaned up usage docstring, by using
2040 the manpage as the source. Better formatting & consistency.
2046 the manpage as the source. Better formatting & consistency.
2041
2047
2042 * IPython/Magic.py (magic_run): Added new -d option, to run
2048 * IPython/Magic.py (magic_run): Added new -d option, to run
2043 scripts under the control of the python pdb debugger. Note that
2049 scripts under the control of the python pdb debugger. Note that
2044 this required changing the %prun option -d to -D, to avoid a clash
2050 this required changing the %prun option -d to -D, to avoid a clash
2045 (since %run must pass options to %prun, and getopt is too dumb to
2051 (since %run must pass options to %prun, and getopt is too dumb to
2046 handle options with string values with embedded spaces). Thanks
2052 handle options with string values with embedded spaces). Thanks
2047 to a suggestion by Matthew Arnison <maffew-AT-cat.org.au>.
2053 to a suggestion by Matthew Arnison <maffew-AT-cat.org.au>.
2048 (magic_who_ls): added type matching to %who and %whos, so that one
2054 (magic_who_ls): added type matching to %who and %whos, so that one
2049 can filter their output to only include variables of certain
2055 can filter their output to only include variables of certain
2050 types. Another suggestion by Matthew.
2056 types. Another suggestion by Matthew.
2051 (magic_whos): Added memory summaries in kb and Mb for arrays.
2057 (magic_whos): Added memory summaries in kb and Mb for arrays.
2052 (magic_who): Improve formatting (break lines every 9 vars).
2058 (magic_who): Improve formatting (break lines every 9 vars).
2053
2059
2054 2004-11-28 Fernando Perez <fperez@colorado.edu>
2060 2004-11-28 Fernando Perez <fperez@colorado.edu>
2055
2061
2056 * IPython/Logger.py (Logger.log): Fix bug in syncing the input
2062 * IPython/Logger.py (Logger.log): Fix bug in syncing the input
2057 cache when empty lines were present.
2063 cache when empty lines were present.
2058
2064
2059 2004-11-24 Fernando Perez <fperez@colorado.edu>
2065 2004-11-24 Fernando Perez <fperez@colorado.edu>
2060
2066
2061 * IPython/usage.py (__doc__): document the re-activated threading
2067 * IPython/usage.py (__doc__): document the re-activated threading
2062 options for WX and GTK.
2068 options for WX and GTK.
2063
2069
2064 2004-11-23 Fernando Perez <fperez@colorado.edu>
2070 2004-11-23 Fernando Perez <fperez@colorado.edu>
2065
2071
2066 * IPython/Shell.py (start): Added Prabhu's big patch to reactivate
2072 * IPython/Shell.py (start): Added Prabhu's big patch to reactivate
2067 the -wthread and -gthread options, along with a new -tk one to try
2073 the -wthread and -gthread options, along with a new -tk one to try
2068 and coordinate Tk threading with wx/gtk. The tk support is very
2074 and coordinate Tk threading with wx/gtk. The tk support is very
2069 platform dependent, since it seems to require Tcl and Tk to be
2075 platform dependent, since it seems to require Tcl and Tk to be
2070 built with threads (Fedora1/2 appears NOT to have it, but in
2076 built with threads (Fedora1/2 appears NOT to have it, but in
2071 Prabhu's Debian boxes it works OK). But even with some Tk
2077 Prabhu's Debian boxes it works OK). But even with some Tk
2072 limitations, this is a great improvement.
2078 limitations, this is a great improvement.
2073
2079
2074 * IPython/Prompts.py (prompt_specials_color): Added \t for time
2080 * IPython/Prompts.py (prompt_specials_color): Added \t for time
2075 info in user prompts. Patch by Prabhu.
2081 info in user prompts. Patch by Prabhu.
2076
2082
2077 2004-11-18 Fernando Perez <fperez@colorado.edu>
2083 2004-11-18 Fernando Perez <fperez@colorado.edu>
2078
2084
2079 * IPython/genutils.py (ask_yes_no): Add check for a max of 20
2085 * IPython/genutils.py (ask_yes_no): Add check for a max of 20
2080 EOFErrors and bail, to avoid infinite loops if a non-terminating
2086 EOFErrors and bail, to avoid infinite loops if a non-terminating
2081 file is fed into ipython. Patch submitted in issue 19 by user,
2087 file is fed into ipython. Patch submitted in issue 19 by user,
2082 many thanks.
2088 many thanks.
2083
2089
2084 * IPython/iplib.py (InteractiveShell.handle_auto): do NOT trigger
2090 * IPython/iplib.py (InteractiveShell.handle_auto): do NOT trigger
2085 autoquote/parens in continuation prompts, which can cause lots of
2091 autoquote/parens in continuation prompts, which can cause lots of
2086 problems. Closes roundup issue 20.
2092 problems. Closes roundup issue 20.
2087
2093
2088 2004-11-17 Fernando Perez <fperez@colorado.edu>
2094 2004-11-17 Fernando Perez <fperez@colorado.edu>
2089
2095
2090 * debian/control (Build-Depends-Indep): Fix dpatch dependency,
2096 * debian/control (Build-Depends-Indep): Fix dpatch dependency,
2091 reported as debian bug #280505. I'm not sure my local changelog
2097 reported as debian bug #280505. I'm not sure my local changelog
2092 entry has the proper debian format (Jack?).
2098 entry has the proper debian format (Jack?).
2093
2099
2094 2004-11-08 *** Released version 0.6.4
2100 2004-11-08 *** Released version 0.6.4
2095
2101
2096 2004-11-08 Fernando Perez <fperez@colorado.edu>
2102 2004-11-08 Fernando Perez <fperez@colorado.edu>
2097
2103
2098 * IPython/iplib.py (init_readline): Fix exit message for Windows
2104 * IPython/iplib.py (init_readline): Fix exit message for Windows
2099 when readline is active. Thanks to a report by Eric Jones
2105 when readline is active. Thanks to a report by Eric Jones
2100 <eric-AT-enthought.com>.
2106 <eric-AT-enthought.com>.
2101
2107
2102 2004-11-07 Fernando Perez <fperez@colorado.edu>
2108 2004-11-07 Fernando Perez <fperez@colorado.edu>
2103
2109
2104 * IPython/genutils.py (page): Add a trap for OSError exceptions,
2110 * IPython/genutils.py (page): Add a trap for OSError exceptions,
2105 sometimes seen by win2k/cygwin users.
2111 sometimes seen by win2k/cygwin users.
2106
2112
2107 2004-11-06 Fernando Perez <fperez@colorado.edu>
2113 2004-11-06 Fernando Perez <fperez@colorado.edu>
2108
2114
2109 * IPython/iplib.py (interact): Change the handling of %Exit from
2115 * IPython/iplib.py (interact): Change the handling of %Exit from
2110 trying to propagate a SystemExit to an internal ipython flag.
2116 trying to propagate a SystemExit to an internal ipython flag.
2111 This is less elegant than using Python's exception mechanism, but
2117 This is less elegant than using Python's exception mechanism, but
2112 I can't get that to work reliably with threads, so under -pylab
2118 I can't get that to work reliably with threads, so under -pylab
2113 %Exit was hanging IPython. Cross-thread exception handling is
2119 %Exit was hanging IPython. Cross-thread exception handling is
2114 really a bitch. Thaks to a bug report by Stephen Walton
2120 really a bitch. Thaks to a bug report by Stephen Walton
2115 <stephen.walton-AT-csun.edu>.
2121 <stephen.walton-AT-csun.edu>.
2116
2122
2117 2004-11-04 Fernando Perez <fperez@colorado.edu>
2123 2004-11-04 Fernando Perez <fperez@colorado.edu>
2118
2124
2119 * IPython/iplib.py (raw_input_original): store a pointer to the
2125 * IPython/iplib.py (raw_input_original): store a pointer to the
2120 true raw_input to harden against code which can modify it
2126 true raw_input to harden against code which can modify it
2121 (wx.py.PyShell does this and would otherwise crash ipython).
2127 (wx.py.PyShell does this and would otherwise crash ipython).
2122 Thanks to a bug report by Jim Flowers <james.flowers-AT-lgx.com>.
2128 Thanks to a bug report by Jim Flowers <james.flowers-AT-lgx.com>.
2123
2129
2124 * IPython/Shell.py (MTInteractiveShell.runsource): Cleaner fix for
2130 * IPython/Shell.py (MTInteractiveShell.runsource): Cleaner fix for
2125 Ctrl-C problem, which does not mess up the input line.
2131 Ctrl-C problem, which does not mess up the input line.
2126
2132
2127 2004-11-03 Fernando Perez <fperez@colorado.edu>
2133 2004-11-03 Fernando Perez <fperez@colorado.edu>
2128
2134
2129 * IPython/Release.py: Changed licensing to BSD, in all files.
2135 * IPython/Release.py: Changed licensing to BSD, in all files.
2130 (name): lowercase name for tarball/RPM release.
2136 (name): lowercase name for tarball/RPM release.
2131
2137
2132 * IPython/OInspect.py (getdoc): wrap inspect.getdoc() safely for
2138 * IPython/OInspect.py (getdoc): wrap inspect.getdoc() safely for
2133 use throughout ipython.
2139 use throughout ipython.
2134
2140
2135 * IPython/Magic.py (Magic._ofind): Switch to using the new
2141 * IPython/Magic.py (Magic._ofind): Switch to using the new
2136 OInspect.getdoc() function.
2142 OInspect.getdoc() function.
2137
2143
2138 * IPython/Shell.py (sigint_handler): Hack to ignore the execution
2144 * IPython/Shell.py (sigint_handler): Hack to ignore the execution
2139 of the line currently being canceled via Ctrl-C. It's extremely
2145 of the line currently being canceled via Ctrl-C. It's extremely
2140 ugly, but I don't know how to do it better (the problem is one of
2146 ugly, but I don't know how to do it better (the problem is one of
2141 handling cross-thread exceptions).
2147 handling cross-thread exceptions).
2142
2148
2143 2004-10-28 Fernando Perez <fperez@colorado.edu>
2149 2004-10-28 Fernando Perez <fperez@colorado.edu>
2144
2150
2145 * IPython/Shell.py (signal_handler): add signal handlers to trap
2151 * IPython/Shell.py (signal_handler): add signal handlers to trap
2146 SIGINT and SIGSEGV in threaded code properly. Thanks to a bug
2152 SIGINT and SIGSEGV in threaded code properly. Thanks to a bug
2147 report by Francesc Alted.
2153 report by Francesc Alted.
2148
2154
2149 2004-10-21 Fernando Perez <fperez@colorado.edu>
2155 2004-10-21 Fernando Perez <fperez@colorado.edu>
2150
2156
2151 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Fix @
2157 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Fix @
2152 to % for pysh syntax extensions.
2158 to % for pysh syntax extensions.
2153
2159
2154 2004-10-09 Fernando Perez <fperez@colorado.edu>
2160 2004-10-09 Fernando Perez <fperez@colorado.edu>
2155
2161
2156 * IPython/Magic.py (Magic.magic_whos): modify output of Numeric
2162 * IPython/Magic.py (Magic.magic_whos): modify output of Numeric
2157 arrays to print a more useful summary, without calling str(arr).
2163 arrays to print a more useful summary, without calling str(arr).
2158 This avoids the problem of extremely lengthy computations which
2164 This avoids the problem of extremely lengthy computations which
2159 occur if arr is large, and appear to the user as a system lockup
2165 occur if arr is large, and appear to the user as a system lockup
2160 with 100% cpu activity. After a suggestion by Kristian Sandberg
2166 with 100% cpu activity. After a suggestion by Kristian Sandberg
2161 <Kristian.Sandberg@colorado.edu>.
2167 <Kristian.Sandberg@colorado.edu>.
2162 (Magic.__init__): fix bug in global magic escapes not being
2168 (Magic.__init__): fix bug in global magic escapes not being
2163 correctly set.
2169 correctly set.
2164
2170
2165 2004-10-08 Fernando Perez <fperez@colorado.edu>
2171 2004-10-08 Fernando Perez <fperez@colorado.edu>
2166
2172
2167 * IPython/Magic.py (__license__): change to absolute imports of
2173 * IPython/Magic.py (__license__): change to absolute imports of
2168 ipython's own internal packages, to start adapting to the absolute
2174 ipython's own internal packages, to start adapting to the absolute
2169 import requirement of PEP-328.
2175 import requirement of PEP-328.
2170
2176
2171 * IPython/genutils.py (__author__): Fix coding to utf-8 on all
2177 * IPython/genutils.py (__author__): Fix coding to utf-8 on all
2172 files, and standardize author/license marks through the Release
2178 files, and standardize author/license marks through the Release
2173 module instead of having per/file stuff (except for files with
2179 module instead of having per/file stuff (except for files with
2174 particular licenses, like the MIT/PSF-licensed codes).
2180 particular licenses, like the MIT/PSF-licensed codes).
2175
2181
2176 * IPython/Debugger.py: remove dead code for python 2.1
2182 * IPython/Debugger.py: remove dead code for python 2.1
2177
2183
2178 2004-10-04 Fernando Perez <fperez@colorado.edu>
2184 2004-10-04 Fernando Perez <fperez@colorado.edu>
2179
2185
2180 * IPython/iplib.py (ipmagic): New function for accessing magics
2186 * IPython/iplib.py (ipmagic): New function for accessing magics
2181 via a normal python function call.
2187 via a normal python function call.
2182
2188
2183 * IPython/Magic.py (Magic.magic_magic): Change the magic escape
2189 * IPython/Magic.py (Magic.magic_magic): Change the magic escape
2184 from '@' to '%', to accomodate the new @decorator syntax of python
2190 from '@' to '%', to accomodate the new @decorator syntax of python
2185 2.4.
2191 2.4.
2186
2192
2187 2004-09-29 Fernando Perez <fperez@colorado.edu>
2193 2004-09-29 Fernando Perez <fperez@colorado.edu>
2188
2194
2189 * IPython/Shell.py (MatplotlibShellBase.use): Added a wrapper to
2195 * IPython/Shell.py (MatplotlibShellBase.use): Added a wrapper to
2190 matplotlib.use to prevent running scripts which try to switch
2196 matplotlib.use to prevent running scripts which try to switch
2191 interactive backends from within ipython. This will just crash
2197 interactive backends from within ipython. This will just crash
2192 the python interpreter, so we can't allow it (but a detailed error
2198 the python interpreter, so we can't allow it (but a detailed error
2193 is given to the user).
2199 is given to the user).
2194
2200
2195 2004-09-28 Fernando Perez <fperez@colorado.edu>
2201 2004-09-28 Fernando Perez <fperez@colorado.edu>
2196
2202
2197 * IPython/Shell.py (MatplotlibShellBase.mplot_exec):
2203 * IPython/Shell.py (MatplotlibShellBase.mplot_exec):
2198 matplotlib-related fixes so that using @run with non-matplotlib
2204 matplotlib-related fixes so that using @run with non-matplotlib
2199 scripts doesn't pop up spurious plot windows. This requires
2205 scripts doesn't pop up spurious plot windows. This requires
2200 matplotlib >= 0.63, where I had to make some changes as well.
2206 matplotlib >= 0.63, where I had to make some changes as well.
2201
2207
2202 * IPython/ipmaker.py (make_IPython): update version requirement to
2208 * IPython/ipmaker.py (make_IPython): update version requirement to
2203 python 2.2.
2209 python 2.2.
2204
2210
2205 * IPython/iplib.py (InteractiveShell.mainloop): Add an optional
2211 * IPython/iplib.py (InteractiveShell.mainloop): Add an optional
2206 banner arg for embedded customization.
2212 banner arg for embedded customization.
2207
2213
2208 * IPython/Magic.py (Magic.__init__): big cleanup to remove all
2214 * IPython/Magic.py (Magic.__init__): big cleanup to remove all
2209 explicit uses of __IP as the IPython's instance name. Now things
2215 explicit uses of __IP as the IPython's instance name. Now things
2210 are properly handled via the shell.name value. The actual code
2216 are properly handled via the shell.name value. The actual code
2211 is a bit ugly b/c I'm doing it via a global in Magic.py, but this
2217 is a bit ugly b/c I'm doing it via a global in Magic.py, but this
2212 is much better than before. I'll clean things completely when the
2218 is much better than before. I'll clean things completely when the
2213 magic stuff gets a real overhaul.
2219 magic stuff gets a real overhaul.
2214
2220
2215 * ipython.1: small fixes, sent in by Jack Moffit. He also sent in
2221 * ipython.1: small fixes, sent in by Jack Moffit. He also sent in
2216 minor changes to debian dir.
2222 minor changes to debian dir.
2217
2223
2218 * IPython/iplib.py (InteractiveShell.__init__): Fix adding a
2224 * IPython/iplib.py (InteractiveShell.__init__): Fix adding a
2219 pointer to the shell itself in the interactive namespace even when
2225 pointer to the shell itself in the interactive namespace even when
2220 a user-supplied dict is provided. This is needed for embedding
2226 a user-supplied dict is provided. This is needed for embedding
2221 purposes (found by tests with Michel Sanner).
2227 purposes (found by tests with Michel Sanner).
2222
2228
2223 2004-09-27 Fernando Perez <fperez@colorado.edu>
2229 2004-09-27 Fernando Perez <fperez@colorado.edu>
2224
2230
2225 * IPython/UserConfig/ipythonrc: remove []{} from
2231 * IPython/UserConfig/ipythonrc: remove []{} from
2226 readline_remove_delims, so that things like [modname.<TAB> do
2232 readline_remove_delims, so that things like [modname.<TAB> do
2227 proper completion. This disables [].TAB, but that's a less common
2233 proper completion. This disables [].TAB, but that's a less common
2228 case than module names in list comprehensions, for example.
2234 case than module names in list comprehensions, for example.
2229 Thanks to a report by Andrea Riciputi.
2235 Thanks to a report by Andrea Riciputi.
2230
2236
2231 2004-09-09 Fernando Perez <fperez@colorado.edu>
2237 2004-09-09 Fernando Perez <fperez@colorado.edu>
2232
2238
2233 * IPython/Shell.py (IPShellGTK.mainloop): reorder to avoid
2239 * IPython/Shell.py (IPShellGTK.mainloop): reorder to avoid
2234 blocking problems in win32 and osx. Fix by John.
2240 blocking problems in win32 and osx. Fix by John.
2235
2241
2236 2004-09-08 Fernando Perez <fperez@colorado.edu>
2242 2004-09-08 Fernando Perez <fperez@colorado.edu>
2237
2243
2238 * IPython/Shell.py (IPShellWX.OnInit): Fix output redirection bug
2244 * IPython/Shell.py (IPShellWX.OnInit): Fix output redirection bug
2239 for Win32 and OSX. Fix by John Hunter.
2245 for Win32 and OSX. Fix by John Hunter.
2240
2246
2241 2004-08-30 *** Released version 0.6.3
2247 2004-08-30 *** Released version 0.6.3
2242
2248
2243 2004-08-30 Fernando Perez <fperez@colorado.edu>
2249 2004-08-30 Fernando Perez <fperez@colorado.edu>
2244
2250
2245 * setup.py (isfile): Add manpages to list of dependent files to be
2251 * setup.py (isfile): Add manpages to list of dependent files to be
2246 updated.
2252 updated.
2247
2253
2248 2004-08-27 Fernando Perez <fperez@colorado.edu>
2254 2004-08-27 Fernando Perez <fperez@colorado.edu>
2249
2255
2250 * IPython/Shell.py (start): I've disabled -wthread and -gthread
2256 * IPython/Shell.py (start): I've disabled -wthread and -gthread
2251 for now. They don't really work with standalone WX/GTK code
2257 for now. They don't really work with standalone WX/GTK code
2252 (though matplotlib IS working fine with both of those backends).
2258 (though matplotlib IS working fine with both of those backends).
2253 This will neeed much more testing. I disabled most things with
2259 This will neeed much more testing. I disabled most things with
2254 comments, so turning it back on later should be pretty easy.
2260 comments, so turning it back on later should be pretty easy.
2255
2261
2256 * IPython/iplib.py (InteractiveShell.__init__): Fix accidental
2262 * IPython/iplib.py (InteractiveShell.__init__): Fix accidental
2257 autocalling of expressions like r'foo', by modifying the line
2263 autocalling of expressions like r'foo', by modifying the line
2258 split regexp. Closes
2264 split regexp. Closes
2259 http://www.scipy.net/roundup/ipython/issue18, reported by Nicholas
2265 http://www.scipy.net/roundup/ipython/issue18, reported by Nicholas
2260 Riley <ipythonbugs-AT-sabi.net>.
2266 Riley <ipythonbugs-AT-sabi.net>.
2261 (InteractiveShell.mainloop): honor --nobanner with banner
2267 (InteractiveShell.mainloop): honor --nobanner with banner
2262 extensions.
2268 extensions.
2263
2269
2264 * IPython/Shell.py: Significant refactoring of all classes, so
2270 * IPython/Shell.py: Significant refactoring of all classes, so
2265 that we can really support ALL matplotlib backends and threading
2271 that we can really support ALL matplotlib backends and threading
2266 models (John spotted a bug with Tk which required this). Now we
2272 models (John spotted a bug with Tk which required this). Now we
2267 should support single-threaded, WX-threads and GTK-threads, both
2273 should support single-threaded, WX-threads and GTK-threads, both
2268 for generic code and for matplotlib.
2274 for generic code and for matplotlib.
2269
2275
2270 * IPython/ipmaker.py (__call__): Changed -mpthread option to
2276 * IPython/ipmaker.py (__call__): Changed -mpthread option to
2271 -pylab, to simplify things for users. Will also remove the pylab
2277 -pylab, to simplify things for users. Will also remove the pylab
2272 profile, since now all of matplotlib configuration is directly
2278 profile, since now all of matplotlib configuration is directly
2273 handled here. This also reduces startup time.
2279 handled here. This also reduces startup time.
2274
2280
2275 * IPython/Shell.py (IPShellGTK.run): Fixed bug where mainloop() of
2281 * IPython/Shell.py (IPShellGTK.run): Fixed bug where mainloop() of
2276 shell wasn't being correctly called. Also in IPShellWX.
2282 shell wasn't being correctly called. Also in IPShellWX.
2277
2283
2278 * IPython/iplib.py (InteractiveShell.__init__): Added option to
2284 * IPython/iplib.py (InteractiveShell.__init__): Added option to
2279 fine-tune banner.
2285 fine-tune banner.
2280
2286
2281 * IPython/numutils.py (spike): Deprecate these spike functions,
2287 * IPython/numutils.py (spike): Deprecate these spike functions,
2282 delete (long deprecated) gnuplot_exec handler.
2288 delete (long deprecated) gnuplot_exec handler.
2283
2289
2284 2004-08-26 Fernando Perez <fperez@colorado.edu>
2290 2004-08-26 Fernando Perez <fperez@colorado.edu>
2285
2291
2286 * ipython.1: Update for threading options, plus some others which
2292 * ipython.1: Update for threading options, plus some others which
2287 were missing.
2293 were missing.
2288
2294
2289 * IPython/ipmaker.py (__call__): Added -wthread option for
2295 * IPython/ipmaker.py (__call__): Added -wthread option for
2290 wxpython thread handling. Make sure threading options are only
2296 wxpython thread handling. Make sure threading options are only
2291 valid at the command line.
2297 valid at the command line.
2292
2298
2293 * scripts/ipython: moved shell selection into a factory function
2299 * scripts/ipython: moved shell selection into a factory function
2294 in Shell.py, to keep the starter script to a minimum.
2300 in Shell.py, to keep the starter script to a minimum.
2295
2301
2296 2004-08-25 Fernando Perez <fperez@colorado.edu>
2302 2004-08-25 Fernando Perez <fperez@colorado.edu>
2297
2303
2298 * IPython/Shell.py (IPShellWX.wxexit): fixes to WX threading, by
2304 * IPython/Shell.py (IPShellWX.wxexit): fixes to WX threading, by
2299 John. Along with some recent changes he made to matplotlib, the
2305 John. Along with some recent changes he made to matplotlib, the
2300 next versions of both systems should work very well together.
2306 next versions of both systems should work very well together.
2301
2307
2302 2004-08-24 Fernando Perez <fperez@colorado.edu>
2308 2004-08-24 Fernando Perez <fperez@colorado.edu>
2303
2309
2304 * IPython/Magic.py (Magic.magic_prun): cleanup some dead code. I
2310 * IPython/Magic.py (Magic.magic_prun): cleanup some dead code. I
2305 tried to switch the profiling to using hotshot, but I'm getting
2311 tried to switch the profiling to using hotshot, but I'm getting
2306 strange errors from prof.runctx() there. I may be misreading the
2312 strange errors from prof.runctx() there. I may be misreading the
2307 docs, but it looks weird. For now the profiling code will
2313 docs, but it looks weird. For now the profiling code will
2308 continue to use the standard profiler.
2314 continue to use the standard profiler.
2309
2315
2310 2004-08-23 Fernando Perez <fperez@colorado.edu>
2316 2004-08-23 Fernando Perez <fperez@colorado.edu>
2311
2317
2312 * IPython/Shell.py (IPShellWX.__init__): Improvements to the WX
2318 * IPython/Shell.py (IPShellWX.__init__): Improvements to the WX
2313 threaded shell, by John Hunter. It's not quite ready yet, but
2319 threaded shell, by John Hunter. It's not quite ready yet, but
2314 close.
2320 close.
2315
2321
2316 2004-08-22 Fernando Perez <fperez@colorado.edu>
2322 2004-08-22 Fernando Perez <fperez@colorado.edu>
2317
2323
2318 * IPython/iplib.py (InteractiveShell.interact): tab cleanups, also
2324 * IPython/iplib.py (InteractiveShell.interact): tab cleanups, also
2319 in Magic and ultraTB.
2325 in Magic and ultraTB.
2320
2326
2321 * ipython.1: document threading options in manpage.
2327 * ipython.1: document threading options in manpage.
2322
2328
2323 * scripts/ipython: Changed name of -thread option to -gthread,
2329 * scripts/ipython: Changed name of -thread option to -gthread,
2324 since this is GTK specific. I want to leave the door open for a
2330 since this is GTK specific. I want to leave the door open for a
2325 -wthread option for WX, which will most likely be necessary. This
2331 -wthread option for WX, which will most likely be necessary. This
2326 change affects usage and ipmaker as well.
2332 change affects usage and ipmaker as well.
2327
2333
2328 * IPython/Shell.py (matplotlib_shell): Add a factory function to
2334 * IPython/Shell.py (matplotlib_shell): Add a factory function to
2329 handle the matplotlib shell issues. Code by John Hunter
2335 handle the matplotlib shell issues. Code by John Hunter
2330 <jdhunter-AT-nitace.bsd.uchicago.edu>.
2336 <jdhunter-AT-nitace.bsd.uchicago.edu>.
2331 (IPShellMatplotlibWX.__init__): Rudimentary WX support. It's
2337 (IPShellMatplotlibWX.__init__): Rudimentary WX support. It's
2332 broken (and disabled for end users) for now, but it puts the
2338 broken (and disabled for end users) for now, but it puts the
2333 infrastructure in place.
2339 infrastructure in place.
2334
2340
2335 2004-08-21 Fernando Perez <fperez@colorado.edu>
2341 2004-08-21 Fernando Perez <fperez@colorado.edu>
2336
2342
2337 * ipythonrc-pylab: Add matplotlib support.
2343 * ipythonrc-pylab: Add matplotlib support.
2338
2344
2339 * matplotlib_config.py: new files for matplotlib support, part of
2345 * matplotlib_config.py: new files for matplotlib support, part of
2340 the pylab profile.
2346 the pylab profile.
2341
2347
2342 * IPython/usage.py (__doc__): documented the threading options.
2348 * IPython/usage.py (__doc__): documented the threading options.
2343
2349
2344 2004-08-20 Fernando Perez <fperez@colorado.edu>
2350 2004-08-20 Fernando Perez <fperez@colorado.edu>
2345
2351
2346 * ipython: Modified the main calling routine to handle the -thread
2352 * ipython: Modified the main calling routine to handle the -thread
2347 and -mpthread options. This needs to be done as a top-level hack,
2353 and -mpthread options. This needs to be done as a top-level hack,
2348 because it determines which class to instantiate for IPython
2354 because it determines which class to instantiate for IPython
2349 itself.
2355 itself.
2350
2356
2351 * IPython/Shell.py (MTInteractiveShell.__init__): New set of
2357 * IPython/Shell.py (MTInteractiveShell.__init__): New set of
2352 classes to support multithreaded GTK operation without blocking,
2358 classes to support multithreaded GTK operation without blocking,
2353 and matplotlib with all backends. This is a lot of still very
2359 and matplotlib with all backends. This is a lot of still very
2354 experimental code, and threads are tricky. So it may still have a
2360 experimental code, and threads are tricky. So it may still have a
2355 few rough edges... This code owes a lot to
2361 few rough edges... This code owes a lot to
2356 http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/65109, by
2362 http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/65109, by
2357 Brian # McErlean and John Finlay, to Antoon Pardon for fixes, and
2363 Brian # McErlean and John Finlay, to Antoon Pardon for fixes, and
2358 to John Hunter for all the matplotlib work.
2364 to John Hunter for all the matplotlib work.
2359
2365
2360 * IPython/ipmaker.py (__call__): Added -thread and -mpthread
2366 * IPython/ipmaker.py (__call__): Added -thread and -mpthread
2361 options for gtk thread and matplotlib support.
2367 options for gtk thread and matplotlib support.
2362
2368
2363 2004-08-16 Fernando Perez <fperez@colorado.edu>
2369 2004-08-16 Fernando Perez <fperez@colorado.edu>
2364
2370
2365 * IPython/iplib.py (InteractiveShell.__init__): don't trigger
2371 * IPython/iplib.py (InteractiveShell.__init__): don't trigger
2366 autocall for things like p*q,p/q,p+q,p-q, when p is callable. Bug
2372 autocall for things like p*q,p/q,p+q,p-q, when p is callable. Bug
2367 reported by Stephen Walton <stephen.walton-AT-csun.edu>.
2373 reported by Stephen Walton <stephen.walton-AT-csun.edu>.
2368
2374
2369 2004-08-11 Fernando Perez <fperez@colorado.edu>
2375 2004-08-11 Fernando Perez <fperez@colorado.edu>
2370
2376
2371 * setup.py (isfile): Fix build so documentation gets updated for
2377 * setup.py (isfile): Fix build so documentation gets updated for
2372 rpms (it was only done for .tgz builds).
2378 rpms (it was only done for .tgz builds).
2373
2379
2374 2004-08-10 Fernando Perez <fperez@colorado.edu>
2380 2004-08-10 Fernando Perez <fperez@colorado.edu>
2375
2381
2376 * genutils.py (Term): Fix misspell of stdin stream (sin->cin).
2382 * genutils.py (Term): Fix misspell of stdin stream (sin->cin).
2377
2383
2378 * iplib.py : Silence syntax error exceptions in tab-completion.
2384 * iplib.py : Silence syntax error exceptions in tab-completion.
2379
2385
2380 2004-08-05 Fernando Perez <fperez@colorado.edu>
2386 2004-08-05 Fernando Perez <fperez@colorado.edu>
2381
2387
2382 * IPython/Prompts.py (Prompt2.set_colors): Fix incorrectly set
2388 * IPython/Prompts.py (Prompt2.set_colors): Fix incorrectly set
2383 'color off' mark for continuation prompts. This was causing long
2389 'color off' mark for continuation prompts. This was causing long
2384 continuation lines to mis-wrap.
2390 continuation lines to mis-wrap.
2385
2391
2386 2004-08-01 Fernando Perez <fperez@colorado.edu>
2392 2004-08-01 Fernando Perez <fperez@colorado.edu>
2387
2393
2388 * IPython/ipmaker.py (make_IPython): Allow the shell class used
2394 * IPython/ipmaker.py (make_IPython): Allow the shell class used
2389 for building ipython to be a parameter. All this is necessary
2395 for building ipython to be a parameter. All this is necessary
2390 right now to have a multithreaded version, but this insane
2396 right now to have a multithreaded version, but this insane
2391 non-design will be cleaned up soon. For now, it's a hack that
2397 non-design will be cleaned up soon. For now, it's a hack that
2392 works.
2398 works.
2393
2399
2394 * IPython/Shell.py (IPShell.__init__): Stop using mutable default
2400 * IPython/Shell.py (IPShell.__init__): Stop using mutable default
2395 args in various places. No bugs so far, but it's a dangerous
2401 args in various places. No bugs so far, but it's a dangerous
2396 practice.
2402 practice.
2397
2403
2398 2004-07-31 Fernando Perez <fperez@colorado.edu>
2404 2004-07-31 Fernando Perez <fperez@colorado.edu>
2399
2405
2400 * IPython/iplib.py (complete): ignore SyntaxError exceptions to
2406 * IPython/iplib.py (complete): ignore SyntaxError exceptions to
2401 fix completion of files with dots in their names under most
2407 fix completion of files with dots in their names under most
2402 profiles (pysh was OK because the completion order is different).
2408 profiles (pysh was OK because the completion order is different).
2403
2409
2404 2004-07-27 Fernando Perez <fperez@colorado.edu>
2410 2004-07-27 Fernando Perez <fperez@colorado.edu>
2405
2411
2406 * IPython/iplib.py (InteractiveShell.__init__): build dict of
2412 * IPython/iplib.py (InteractiveShell.__init__): build dict of
2407 keywords manually, b/c the one in keyword.py was removed in python
2413 keywords manually, b/c the one in keyword.py was removed in python
2408 2.4. Patch by Anakim Border <aborder-AT-users.sourceforge.net>.
2414 2.4. Patch by Anakim Border <aborder-AT-users.sourceforge.net>.
2409 This is NOT a bug under python 2.3 and earlier.
2415 This is NOT a bug under python 2.3 and earlier.
2410
2416
2411 2004-07-26 Fernando Perez <fperez@colorado.edu>
2417 2004-07-26 Fernando Perez <fperez@colorado.edu>
2412
2418
2413 * IPython/ultraTB.py (VerboseTB.text): Add another
2419 * IPython/ultraTB.py (VerboseTB.text): Add another
2414 linecache.checkcache() call to try to prevent inspect.py from
2420 linecache.checkcache() call to try to prevent inspect.py from
2415 crashing under python 2.3. I think this fixes
2421 crashing under python 2.3. I think this fixes
2416 http://www.scipy.net/roundup/ipython/issue17.
2422 http://www.scipy.net/roundup/ipython/issue17.
2417
2423
2418 2004-07-26 *** Released version 0.6.2
2424 2004-07-26 *** Released version 0.6.2
2419
2425
2420 2004-07-26 Fernando Perez <fperez@colorado.edu>
2426 2004-07-26 Fernando Perez <fperez@colorado.edu>
2421
2427
2422 * IPython/Magic.py (Magic.magic_cd): Fix bug where 'cd -N' would
2428 * IPython/Magic.py (Magic.magic_cd): Fix bug where 'cd -N' would
2423 fail for any number.
2429 fail for any number.
2424 (Magic.magic_bookmark): Fix bug where 'bookmark -l' would fail for
2430 (Magic.magic_bookmark): Fix bug where 'bookmark -l' would fail for
2425 empty bookmarks.
2431 empty bookmarks.
2426
2432
2427 2004-07-26 *** Released version 0.6.1
2433 2004-07-26 *** Released version 0.6.1
2428
2434
2429 2004-07-26 Fernando Perez <fperez@colorado.edu>
2435 2004-07-26 Fernando Perez <fperez@colorado.edu>
2430
2436
2431 * ipython_win_post_install.py (run): Added pysh shortcut for Windows.
2437 * ipython_win_post_install.py (run): Added pysh shortcut for Windows.
2432
2438
2433 * IPython/iplib.py (protect_filename): Applied Ville's patch for
2439 * IPython/iplib.py (protect_filename): Applied Ville's patch for
2434 escaping '()[]{}' in filenames.
2440 escaping '()[]{}' in filenames.
2435
2441
2436 * IPython/Magic.py (shlex_split): Fix handling of '*' and '?' for
2442 * IPython/Magic.py (shlex_split): Fix handling of '*' and '?' for
2437 Python 2.2 users who lack a proper shlex.split.
2443 Python 2.2 users who lack a proper shlex.split.
2438
2444
2439 2004-07-19 Fernando Perez <fperez@colorado.edu>
2445 2004-07-19 Fernando Perez <fperez@colorado.edu>
2440
2446
2441 * IPython/iplib.py (InteractiveShell.init_readline): Add support
2447 * IPython/iplib.py (InteractiveShell.init_readline): Add support
2442 for reading readline's init file. I follow the normal chain:
2448 for reading readline's init file. I follow the normal chain:
2443 $INPUTRC is honored, otherwise ~/.inputrc is used. Thanks to a
2449 $INPUTRC is honored, otherwise ~/.inputrc is used. Thanks to a
2444 report by Mike Heeter. This closes
2450 report by Mike Heeter. This closes
2445 http://www.scipy.net/roundup/ipython/issue16.
2451 http://www.scipy.net/roundup/ipython/issue16.
2446
2452
2447 2004-07-18 Fernando Perez <fperez@colorado.edu>
2453 2004-07-18 Fernando Perez <fperez@colorado.edu>
2448
2454
2449 * IPython/iplib.py (__init__): Add better handling of '\' under
2455 * IPython/iplib.py (__init__): Add better handling of '\' under
2450 Win32 for filenames. After a patch by Ville.
2456 Win32 for filenames. After a patch by Ville.
2451
2457
2452 2004-07-17 Fernando Perez <fperez@colorado.edu>
2458 2004-07-17 Fernando Perez <fperez@colorado.edu>
2453
2459
2454 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
2460 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
2455 autocalling would be triggered for 'foo is bar' if foo is
2461 autocalling would be triggered for 'foo is bar' if foo is
2456 callable. I also cleaned up the autocall detection code to use a
2462 callable. I also cleaned up the autocall detection code to use a
2457 regexp, which is faster. Bug reported by Alexander Schmolck.
2463 regexp, which is faster. Bug reported by Alexander Schmolck.
2458
2464
2459 * IPython/Magic.py (Magic.magic_pinfo): Fix bug where strings with
2465 * IPython/Magic.py (Magic.magic_pinfo): Fix bug where strings with
2460 '?' in them would confuse the help system. Reported by Alex
2466 '?' in them would confuse the help system. Reported by Alex
2461 Schmolck.
2467 Schmolck.
2462
2468
2463 2004-07-16 Fernando Perez <fperez@colorado.edu>
2469 2004-07-16 Fernando Perez <fperez@colorado.edu>
2464
2470
2465 * IPython/GnuplotInteractive.py (__all__): added plot2.
2471 * IPython/GnuplotInteractive.py (__all__): added plot2.
2466
2472
2467 * IPython/Gnuplot2.py (Gnuplot.plot2): added new function for
2473 * IPython/Gnuplot2.py (Gnuplot.plot2): added new function for
2468 plotting dictionaries, lists or tuples of 1d arrays.
2474 plotting dictionaries, lists or tuples of 1d arrays.
2469
2475
2470 * IPython/Magic.py (Magic.magic_hist): small clenaups and
2476 * IPython/Magic.py (Magic.magic_hist): small clenaups and
2471 optimizations.
2477 optimizations.
2472
2478
2473 * IPython/iplib.py:Remove old Changelog info for cleanup. This is
2479 * IPython/iplib.py:Remove old Changelog info for cleanup. This is
2474 the information which was there from Janko's original IPP code:
2480 the information which was there from Janko's original IPP code:
2475
2481
2476 03.05.99 20:53 porto.ifm.uni-kiel.de
2482 03.05.99 20:53 porto.ifm.uni-kiel.de
2477 --Started changelog.
2483 --Started changelog.
2478 --make clear do what it say it does
2484 --make clear do what it say it does
2479 --added pretty output of lines from inputcache
2485 --added pretty output of lines from inputcache
2480 --Made Logger a mixin class, simplifies handling of switches
2486 --Made Logger a mixin class, simplifies handling of switches
2481 --Added own completer class. .string<TAB> expands to last history
2487 --Added own completer class. .string<TAB> expands to last history
2482 line which starts with string. The new expansion is also present
2488 line which starts with string. The new expansion is also present
2483 with Ctrl-r from the readline library. But this shows, who this
2489 with Ctrl-r from the readline library. But this shows, who this
2484 can be done for other cases.
2490 can be done for other cases.
2485 --Added convention that all shell functions should accept a
2491 --Added convention that all shell functions should accept a
2486 parameter_string This opens the door for different behaviour for
2492 parameter_string This opens the door for different behaviour for
2487 each function. @cd is a good example of this.
2493 each function. @cd is a good example of this.
2488
2494
2489 04.05.99 12:12 porto.ifm.uni-kiel.de
2495 04.05.99 12:12 porto.ifm.uni-kiel.de
2490 --added logfile rotation
2496 --added logfile rotation
2491 --added new mainloop method which freezes first the namespace
2497 --added new mainloop method which freezes first the namespace
2492
2498
2493 07.05.99 21:24 porto.ifm.uni-kiel.de
2499 07.05.99 21:24 porto.ifm.uni-kiel.de
2494 --added the docreader classes. Now there is a help system.
2500 --added the docreader classes. Now there is a help system.
2495 -This is only a first try. Currently it's not easy to put new
2501 -This is only a first try. Currently it's not easy to put new
2496 stuff in the indices. But this is the way to go. Info would be
2502 stuff in the indices. But this is the way to go. Info would be
2497 better, but HTML is every where and not everybody has an info
2503 better, but HTML is every where and not everybody has an info
2498 system installed and it's not so easy to change html-docs to info.
2504 system installed and it's not so easy to change html-docs to info.
2499 --added global logfile option
2505 --added global logfile option
2500 --there is now a hook for object inspection method pinfo needs to
2506 --there is now a hook for object inspection method pinfo needs to
2501 be provided for this. Can be reached by two '??'.
2507 be provided for this. Can be reached by two '??'.
2502
2508
2503 08.05.99 20:51 porto.ifm.uni-kiel.de
2509 08.05.99 20:51 porto.ifm.uni-kiel.de
2504 --added a README
2510 --added a README
2505 --bug in rc file. Something has changed so functions in the rc
2511 --bug in rc file. Something has changed so functions in the rc
2506 file need to reference the shell and not self. Not clear if it's a
2512 file need to reference the shell and not self. Not clear if it's a
2507 bug or feature.
2513 bug or feature.
2508 --changed rc file for new behavior
2514 --changed rc file for new behavior
2509
2515
2510 2004-07-15 Fernando Perez <fperez@colorado.edu>
2516 2004-07-15 Fernando Perez <fperez@colorado.edu>
2511
2517
2512 * IPython/Logger.py (Logger.log): fixed recent bug where the input
2518 * IPython/Logger.py (Logger.log): fixed recent bug where the input
2513 cache was falling out of sync in bizarre manners when multi-line
2519 cache was falling out of sync in bizarre manners when multi-line
2514 input was present. Minor optimizations and cleanup.
2520 input was present. Minor optimizations and cleanup.
2515
2521
2516 (Logger): Remove old Changelog info for cleanup. This is the
2522 (Logger): Remove old Changelog info for cleanup. This is the
2517 information which was there from Janko's original code:
2523 information which was there from Janko's original code:
2518
2524
2519 Changes to Logger: - made the default log filename a parameter
2525 Changes to Logger: - made the default log filename a parameter
2520
2526
2521 - put a check for lines beginning with !@? in log(). Needed
2527 - put a check for lines beginning with !@? in log(). Needed
2522 (even if the handlers properly log their lines) for mid-session
2528 (even if the handlers properly log their lines) for mid-session
2523 logging activation to work properly. Without this, lines logged
2529 logging activation to work properly. Without this, lines logged
2524 in mid session, which get read from the cache, would end up
2530 in mid session, which get read from the cache, would end up
2525 'bare' (with !@? in the open) in the log. Now they are caught
2531 'bare' (with !@? in the open) in the log. Now they are caught
2526 and prepended with a #.
2532 and prepended with a #.
2527
2533
2528 * IPython/iplib.py (InteractiveShell.init_readline): added check
2534 * IPython/iplib.py (InteractiveShell.init_readline): added check
2529 in case MagicCompleter fails to be defined, so we don't crash.
2535 in case MagicCompleter fails to be defined, so we don't crash.
2530
2536
2531 2004-07-13 Fernando Perez <fperez@colorado.edu>
2537 2004-07-13 Fernando Perez <fperez@colorado.edu>
2532
2538
2533 * IPython/Gnuplot2.py (Gnuplot.hardcopy): add automatic generation
2539 * IPython/Gnuplot2.py (Gnuplot.hardcopy): add automatic generation
2534 of EPS if the requested filename ends in '.eps'.
2540 of EPS if the requested filename ends in '.eps'.
2535
2541
2536 2004-07-04 Fernando Perez <fperez@colorado.edu>
2542 2004-07-04 Fernando Perez <fperez@colorado.edu>
2537
2543
2538 * IPython/iplib.py (InteractiveShell.handle_shell_escape): Fix
2544 * IPython/iplib.py (InteractiveShell.handle_shell_escape): Fix
2539 escaping of quotes when calling the shell.
2545 escaping of quotes when calling the shell.
2540
2546
2541 2004-07-02 Fernando Perez <fperez@colorado.edu>
2547 2004-07-02 Fernando Perez <fperez@colorado.edu>
2542
2548
2543 * IPython/Prompts.py (CachedOutput.update): Fix problem with
2549 * IPython/Prompts.py (CachedOutput.update): Fix problem with
2544 gettext not working because we were clobbering '_'. Fixes
2550 gettext not working because we were clobbering '_'. Fixes
2545 http://www.scipy.net/roundup/ipython/issue6.
2551 http://www.scipy.net/roundup/ipython/issue6.
2546
2552
2547 2004-07-01 Fernando Perez <fperez@colorado.edu>
2553 2004-07-01 Fernando Perez <fperez@colorado.edu>
2548
2554
2549 * IPython/Magic.py (Magic.magic_cd): integrated bookmark handling
2555 * IPython/Magic.py (Magic.magic_cd): integrated bookmark handling
2550 into @cd. Patch by Ville.
2556 into @cd. Patch by Ville.
2551
2557
2552 * IPython/iplib.py (InteractiveShell.post_config_initialization):
2558 * IPython/iplib.py (InteractiveShell.post_config_initialization):
2553 new function to store things after ipmaker runs. Patch by Ville.
2559 new function to store things after ipmaker runs. Patch by Ville.
2554 Eventually this will go away once ipmaker is removed and the class
2560 Eventually this will go away once ipmaker is removed and the class
2555 gets cleaned up, but for now it's ok. Key functionality here is
2561 gets cleaned up, but for now it's ok. Key functionality here is
2556 the addition of the persistent storage mechanism, a dict for
2562 the addition of the persistent storage mechanism, a dict for
2557 keeping data across sessions (for now just bookmarks, but more can
2563 keeping data across sessions (for now just bookmarks, but more can
2558 be implemented later).
2564 be implemented later).
2559
2565
2560 * IPython/Magic.py (Magic.magic_bookmark): New bookmark system,
2566 * IPython/Magic.py (Magic.magic_bookmark): New bookmark system,
2561 persistent across sections. Patch by Ville, I modified it
2567 persistent across sections. Patch by Ville, I modified it
2562 soemwhat to allow bookmarking arbitrary dirs other than CWD. Also
2568 soemwhat to allow bookmarking arbitrary dirs other than CWD. Also
2563 added a '-l' option to list all bookmarks.
2569 added a '-l' option to list all bookmarks.
2564
2570
2565 * IPython/iplib.py (InteractiveShell.atexit_operations): new
2571 * IPython/iplib.py (InteractiveShell.atexit_operations): new
2566 center for cleanup. Registered with atexit.register(). I moved
2572 center for cleanup. Registered with atexit.register(). I moved
2567 here the old exit_cleanup(). After a patch by Ville.
2573 here the old exit_cleanup(). After a patch by Ville.
2568
2574
2569 * IPython/Magic.py (get_py_filename): added '~' to the accepted
2575 * IPython/Magic.py (get_py_filename): added '~' to the accepted
2570 characters in the hacked shlex_split for python 2.2.
2576 characters in the hacked shlex_split for python 2.2.
2571
2577
2572 * IPython/iplib.py (file_matches): more fixes to filenames with
2578 * IPython/iplib.py (file_matches): more fixes to filenames with
2573 whitespace in them. It's not perfect, but limitations in python's
2579 whitespace in them. It's not perfect, but limitations in python's
2574 readline make it impossible to go further.
2580 readline make it impossible to go further.
2575
2581
2576 2004-06-29 Fernando Perez <fperez@colorado.edu>
2582 2004-06-29 Fernando Perez <fperez@colorado.edu>
2577
2583
2578 * IPython/iplib.py (file_matches): escape whitespace correctly in
2584 * IPython/iplib.py (file_matches): escape whitespace correctly in
2579 filename completions. Bug reported by Ville.
2585 filename completions. Bug reported by Ville.
2580
2586
2581 2004-06-28 Fernando Perez <fperez@colorado.edu>
2587 2004-06-28 Fernando Perez <fperez@colorado.edu>
2582
2588
2583 * IPython/ipmaker.py (__call__): Added per-profile histories. Now
2589 * IPython/ipmaker.py (__call__): Added per-profile histories. Now
2584 the history file will be called 'history-PROFNAME' (or just
2590 the history file will be called 'history-PROFNAME' (or just
2585 'history' if no profile is loaded). I was getting annoyed at
2591 'history' if no profile is loaded). I was getting annoyed at
2586 getting my Numerical work history clobbered by pysh sessions.
2592 getting my Numerical work history clobbered by pysh sessions.
2587
2593
2588 * IPython/iplib.py (InteractiveShell.__init__): Internal
2594 * IPython/iplib.py (InteractiveShell.__init__): Internal
2589 getoutputerror() function so that we can honor the system_verbose
2595 getoutputerror() function so that we can honor the system_verbose
2590 flag for _all_ system calls. I also added escaping of #
2596 flag for _all_ system calls. I also added escaping of #
2591 characters here to avoid confusing Itpl.
2597 characters here to avoid confusing Itpl.
2592
2598
2593 * IPython/Magic.py (shlex_split): removed call to shell in
2599 * IPython/Magic.py (shlex_split): removed call to shell in
2594 parse_options and replaced it with shlex.split(). The annoying
2600 parse_options and replaced it with shlex.split(). The annoying
2595 part was that in Python 2.2, shlex.split() doesn't exist, so I had
2601 part was that in Python 2.2, shlex.split() doesn't exist, so I had
2596 to backport it from 2.3, with several frail hacks (the shlex
2602 to backport it from 2.3, with several frail hacks (the shlex
2597 module is rather limited in 2.2). Thanks to a suggestion by Ville
2603 module is rather limited in 2.2). Thanks to a suggestion by Ville
2598 Vainio <vivainio@kolumbus.fi>. For Python 2.3 there should be no
2604 Vainio <vivainio@kolumbus.fi>. For Python 2.3 there should be no
2599 problem.
2605 problem.
2600
2606
2601 (Magic.magic_system_verbose): new toggle to print the actual
2607 (Magic.magic_system_verbose): new toggle to print the actual
2602 system calls made by ipython. Mainly for debugging purposes.
2608 system calls made by ipython. Mainly for debugging purposes.
2603
2609
2604 * IPython/GnuplotRuntime.py (gnu_out): fix bug for cygwin, which
2610 * IPython/GnuplotRuntime.py (gnu_out): fix bug for cygwin, which
2605 doesn't support persistence. Reported (and fix suggested) by
2611 doesn't support persistence. Reported (and fix suggested) by
2606 Travis Caldwell <travis_caldwell2000@yahoo.com>.
2612 Travis Caldwell <travis_caldwell2000@yahoo.com>.
2607
2613
2608 2004-06-26 Fernando Perez <fperez@colorado.edu>
2614 2004-06-26 Fernando Perez <fperez@colorado.edu>
2609
2615
2610 * IPython/Logger.py (Logger.log): fix to handle correctly empty
2616 * IPython/Logger.py (Logger.log): fix to handle correctly empty
2611 continue prompts.
2617 continue prompts.
2612
2618
2613 * IPython/Extensions/InterpreterExec.py (pysh): moved the pysh()
2619 * IPython/Extensions/InterpreterExec.py (pysh): moved the pysh()
2614 function (basically a big docstring) and a few more things here to
2620 function (basically a big docstring) and a few more things here to
2615 speedup startup. pysh.py is now very lightweight. We want because
2621 speedup startup. pysh.py is now very lightweight. We want because
2616 it gets execfile'd, while InterpreterExec gets imported, so
2622 it gets execfile'd, while InterpreterExec gets imported, so
2617 byte-compilation saves time.
2623 byte-compilation saves time.
2618
2624
2619 2004-06-25 Fernando Perez <fperez@colorado.edu>
2625 2004-06-25 Fernando Perez <fperez@colorado.edu>
2620
2626
2621 * IPython/Magic.py (Magic.magic_cd): Fixed to restore usage of 'cd
2627 * IPython/Magic.py (Magic.magic_cd): Fixed to restore usage of 'cd
2622 -NUM', which was recently broken.
2628 -NUM', which was recently broken.
2623
2629
2624 * IPython/iplib.py (InteractiveShell.handle_shell_escape): allow !
2630 * IPython/iplib.py (InteractiveShell.handle_shell_escape): allow !
2625 in multi-line input (but not !!, which doesn't make sense there).
2631 in multi-line input (but not !!, which doesn't make sense there).
2626
2632
2627 * IPython/UserConfig/ipythonrc: made autoindent on by default.
2633 * IPython/UserConfig/ipythonrc: made autoindent on by default.
2628 It's just too useful, and people can turn it off in the less
2634 It's just too useful, and people can turn it off in the less
2629 common cases where it's a problem.
2635 common cases where it's a problem.
2630
2636
2631 2004-06-24 Fernando Perez <fperez@colorado.edu>
2637 2004-06-24 Fernando Perez <fperez@colorado.edu>
2632
2638
2633 * IPython/iplib.py (InteractiveShell._prefilter): big change -
2639 * IPython/iplib.py (InteractiveShell._prefilter): big change -
2634 special syntaxes (like alias calling) is now allied in multi-line
2640 special syntaxes (like alias calling) is now allied in multi-line
2635 input. This is still _very_ experimental, but it's necessary for
2641 input. This is still _very_ experimental, but it's necessary for
2636 efficient shell usage combining python looping syntax with system
2642 efficient shell usage combining python looping syntax with system
2637 calls. For now it's restricted to aliases, I don't think it
2643 calls. For now it's restricted to aliases, I don't think it
2638 really even makes sense to have this for magics.
2644 really even makes sense to have this for magics.
2639
2645
2640 2004-06-23 Fernando Perez <fperez@colorado.edu>
2646 2004-06-23 Fernando Perez <fperez@colorado.edu>
2641
2647
2642 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Added
2648 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Added
2643 $var=cmd <=> @sc var=cmd and $$var=cmd <=> @sc -l var=cmd.
2649 $var=cmd <=> @sc var=cmd and $$var=cmd <=> @sc -l var=cmd.
2644
2650
2645 * IPython/Magic.py (Magic.magic_rehashx): modified to handle
2651 * IPython/Magic.py (Magic.magic_rehashx): modified to handle
2646 extensions under Windows (after code sent by Gary Bishop). The
2652 extensions under Windows (after code sent by Gary Bishop). The
2647 extensions considered 'executable' are stored in IPython's rc
2653 extensions considered 'executable' are stored in IPython's rc
2648 structure as win_exec_ext.
2654 structure as win_exec_ext.
2649
2655
2650 * IPython/genutils.py (shell): new function, like system() but
2656 * IPython/genutils.py (shell): new function, like system() but
2651 without return value. Very useful for interactive shell work.
2657 without return value. Very useful for interactive shell work.
2652
2658
2653 * IPython/Magic.py (Magic.magic_unalias): New @unalias function to
2659 * IPython/Magic.py (Magic.magic_unalias): New @unalias function to
2654 delete aliases.
2660 delete aliases.
2655
2661
2656 * IPython/iplib.py (InteractiveShell.alias_table_update): make
2662 * IPython/iplib.py (InteractiveShell.alias_table_update): make
2657 sure that the alias table doesn't contain python keywords.
2663 sure that the alias table doesn't contain python keywords.
2658
2664
2659 2004-06-21 Fernando Perez <fperez@colorado.edu>
2665 2004-06-21 Fernando Perez <fperez@colorado.edu>
2660
2666
2661 * IPython/Magic.py (Magic.magic_rehash): Fix crash when
2667 * IPython/Magic.py (Magic.magic_rehash): Fix crash when
2662 non-existent items are found in $PATH. Reported by Thorsten.
2668 non-existent items are found in $PATH. Reported by Thorsten.
2663
2669
2664 2004-06-20 Fernando Perez <fperez@colorado.edu>
2670 2004-06-20 Fernando Perez <fperez@colorado.edu>
2665
2671
2666 * IPython/iplib.py (complete): modified the completer so that the
2672 * IPython/iplib.py (complete): modified the completer so that the
2667 order of priorities can be easily changed at runtime.
2673 order of priorities can be easily changed at runtime.
2668
2674
2669 * IPython/Extensions/InterpreterExec.py (prefilter_shell):
2675 * IPython/Extensions/InterpreterExec.py (prefilter_shell):
2670 Modified to auto-execute all lines beginning with '~', '/' or '.'.
2676 Modified to auto-execute all lines beginning with '~', '/' or '.'.
2671
2677
2672 * IPython/Magic.py (Magic.magic_sx): modified @sc and @sx to
2678 * IPython/Magic.py (Magic.magic_sx): modified @sc and @sx to
2673 expand Python variables prepended with $ in all system calls. The
2679 expand Python variables prepended with $ in all system calls. The
2674 same was done to InteractiveShell.handle_shell_escape. Now all
2680 same was done to InteractiveShell.handle_shell_escape. Now all
2675 system access mechanisms (!, !!, @sc, @sx and aliases) allow the
2681 system access mechanisms (!, !!, @sc, @sx and aliases) allow the
2676 expansion of python variables and expressions according to the
2682 expansion of python variables and expressions according to the
2677 syntax of PEP-215 - http://www.python.org/peps/pep-0215.html.
2683 syntax of PEP-215 - http://www.python.org/peps/pep-0215.html.
2678
2684
2679 Though PEP-215 has been rejected, a similar (but simpler) one
2685 Though PEP-215 has been rejected, a similar (but simpler) one
2680 seems like it will go into Python 2.4, PEP-292 -
2686 seems like it will go into Python 2.4, PEP-292 -
2681 http://www.python.org/peps/pep-0292.html.
2687 http://www.python.org/peps/pep-0292.html.
2682
2688
2683 I'll keep the full syntax of PEP-215, since IPython has since the
2689 I'll keep the full syntax of PEP-215, since IPython has since the
2684 start used Ka-Ping Yee's reference implementation discussed there
2690 start used Ka-Ping Yee's reference implementation discussed there
2685 (Itpl), and I actually like the powerful semantics it offers.
2691 (Itpl), and I actually like the powerful semantics it offers.
2686
2692
2687 In order to access normal shell variables, the $ has to be escaped
2693 In order to access normal shell variables, the $ has to be escaped
2688 via an extra $. For example:
2694 via an extra $. For example:
2689
2695
2690 In [7]: PATH='a python variable'
2696 In [7]: PATH='a python variable'
2691
2697
2692 In [8]: !echo $PATH
2698 In [8]: !echo $PATH
2693 a python variable
2699 a python variable
2694
2700
2695 In [9]: !echo $$PATH
2701 In [9]: !echo $$PATH
2696 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2702 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2697
2703
2698 (Magic.parse_options): escape $ so the shell doesn't evaluate
2704 (Magic.parse_options): escape $ so the shell doesn't evaluate
2699 things prematurely.
2705 things prematurely.
2700
2706
2701 * IPython/iplib.py (InteractiveShell.call_alias): added the
2707 * IPython/iplib.py (InteractiveShell.call_alias): added the
2702 ability for aliases to expand python variables via $.
2708 ability for aliases to expand python variables via $.
2703
2709
2704 * IPython/Magic.py (Magic.magic_rehash): based on the new alias
2710 * IPython/Magic.py (Magic.magic_rehash): based on the new alias
2705 system, now there's a @rehash/@rehashx pair of magics. These work
2711 system, now there's a @rehash/@rehashx pair of magics. These work
2706 like the csh rehash command, and can be invoked at any time. They
2712 like the csh rehash command, and can be invoked at any time. They
2707 build a table of aliases to everything in the user's $PATH
2713 build a table of aliases to everything in the user's $PATH
2708 (@rehash uses everything, @rehashx is slower but only adds
2714 (@rehash uses everything, @rehashx is slower but only adds
2709 executable files). With this, the pysh.py-based shell profile can
2715 executable files). With this, the pysh.py-based shell profile can
2710 now simply call rehash upon startup, and full access to all
2716 now simply call rehash upon startup, and full access to all
2711 programs in the user's path is obtained.
2717 programs in the user's path is obtained.
2712
2718
2713 * IPython/iplib.py (InteractiveShell.call_alias): The new alias
2719 * IPython/iplib.py (InteractiveShell.call_alias): The new alias
2714 functionality is now fully in place. I removed the old dynamic
2720 functionality is now fully in place. I removed the old dynamic
2715 code generation based approach, in favor of a much lighter one
2721 code generation based approach, in favor of a much lighter one
2716 based on a simple dict. The advantage is that this allows me to
2722 based on a simple dict. The advantage is that this allows me to
2717 now have thousands of aliases with negligible cost (unthinkable
2723 now have thousands of aliases with negligible cost (unthinkable
2718 with the old system).
2724 with the old system).
2719
2725
2720 2004-06-19 Fernando Perez <fperez@colorado.edu>
2726 2004-06-19 Fernando Perez <fperez@colorado.edu>
2721
2727
2722 * IPython/iplib.py (__init__): extended MagicCompleter class to
2728 * IPython/iplib.py (__init__): extended MagicCompleter class to
2723 also complete (last in priority) on user aliases.
2729 also complete (last in priority) on user aliases.
2724
2730
2725 * IPython/Itpl.py (Itpl.__str__): fixed order of globals/locals in
2731 * IPython/Itpl.py (Itpl.__str__): fixed order of globals/locals in
2726 call to eval.
2732 call to eval.
2727 (ItplNS.__init__): Added a new class which functions like Itpl,
2733 (ItplNS.__init__): Added a new class which functions like Itpl,
2728 but allows configuring the namespace for the evaluation to occur
2734 but allows configuring the namespace for the evaluation to occur
2729 in.
2735 in.
2730
2736
2731 2004-06-18 Fernando Perez <fperez@colorado.edu>
2737 2004-06-18 Fernando Perez <fperez@colorado.edu>
2732
2738
2733 * IPython/iplib.py (InteractiveShell.runcode): modify to print a
2739 * IPython/iplib.py (InteractiveShell.runcode): modify to print a
2734 better message when 'exit' or 'quit' are typed (a common newbie
2740 better message when 'exit' or 'quit' are typed (a common newbie
2735 confusion).
2741 confusion).
2736
2742
2737 * IPython/Magic.py (Magic.magic_colors): Added the runtime color
2743 * IPython/Magic.py (Magic.magic_colors): Added the runtime color
2738 check for Windows users.
2744 check for Windows users.
2739
2745
2740 * IPython/iplib.py (InteractiveShell.user_setup): removed
2746 * IPython/iplib.py (InteractiveShell.user_setup): removed
2741 disabling of colors for Windows. I'll test at runtime and issue a
2747 disabling of colors for Windows. I'll test at runtime and issue a
2742 warning if Gary's readline isn't found, as to nudge users to
2748 warning if Gary's readline isn't found, as to nudge users to
2743 download it.
2749 download it.
2744
2750
2745 2004-06-16 Fernando Perez <fperez@colorado.edu>
2751 2004-06-16 Fernando Perez <fperez@colorado.edu>
2746
2752
2747 * IPython/genutils.py (Stream.__init__): changed to print errors
2753 * IPython/genutils.py (Stream.__init__): changed to print errors
2748 to sys.stderr. I had a circular dependency here. Now it's
2754 to sys.stderr. I had a circular dependency here. Now it's
2749 possible to run ipython as IDLE's shell (consider this pre-alpha,
2755 possible to run ipython as IDLE's shell (consider this pre-alpha,
2750 since true stdout things end up in the starting terminal instead
2756 since true stdout things end up in the starting terminal instead
2751 of IDLE's out).
2757 of IDLE's out).
2752
2758
2753 * IPython/Prompts.py (Prompt2.set_colors): prevent crashes for
2759 * IPython/Prompts.py (Prompt2.set_colors): prevent crashes for
2754 users who haven't # updated their prompt_in2 definitions. Remove
2760 users who haven't # updated their prompt_in2 definitions. Remove
2755 eventually.
2761 eventually.
2756 (multiple_replace): added credit to original ASPN recipe.
2762 (multiple_replace): added credit to original ASPN recipe.
2757
2763
2758 2004-06-15 Fernando Perez <fperez@colorado.edu>
2764 2004-06-15 Fernando Perez <fperez@colorado.edu>
2759
2765
2760 * IPython/iplib.py (InteractiveShell.__init__): add 'cp' to the
2766 * IPython/iplib.py (InteractiveShell.__init__): add 'cp' to the
2761 list of auto-defined aliases.
2767 list of auto-defined aliases.
2762
2768
2763 2004-06-13 Fernando Perez <fperez@colorado.edu>
2769 2004-06-13 Fernando Perez <fperez@colorado.edu>
2764
2770
2765 * setup.py (scriptfiles): Don't trigger win_post_install unless an
2771 * setup.py (scriptfiles): Don't trigger win_post_install unless an
2766 install was really requested (so setup.py can be used for other
2772 install was really requested (so setup.py can be used for other
2767 things under Windows).
2773 things under Windows).
2768
2774
2769 2004-06-10 Fernando Perez <fperez@colorado.edu>
2775 2004-06-10 Fernando Perez <fperez@colorado.edu>
2770
2776
2771 * IPython/Logger.py (Logger.create_log): Manually remove any old
2777 * IPython/Logger.py (Logger.create_log): Manually remove any old
2772 backup, since os.remove may fail under Windows. Fixes bug
2778 backup, since os.remove may fail under Windows. Fixes bug
2773 reported by Thorsten.
2779 reported by Thorsten.
2774
2780
2775 2004-06-09 Fernando Perez <fperez@colorado.edu>
2781 2004-06-09 Fernando Perez <fperez@colorado.edu>
2776
2782
2777 * examples/example-embed.py: fixed all references to %n (replaced
2783 * examples/example-embed.py: fixed all references to %n (replaced
2778 with \\# for ps1/out prompts and with \\D for ps2 prompts). Done
2784 with \\# for ps1/out prompts and with \\D for ps2 prompts). Done
2779 for all examples and the manual as well.
2785 for all examples and the manual as well.
2780
2786
2781 2004-06-08 Fernando Perez <fperez@colorado.edu>
2787 2004-06-08 Fernando Perez <fperez@colorado.edu>
2782
2788
2783 * IPython/Prompts.py (Prompt2.set_p_str): fixed all prompt
2789 * IPython/Prompts.py (Prompt2.set_p_str): fixed all prompt
2784 alignment and color management. All 3 prompt subsystems now
2790 alignment and color management. All 3 prompt subsystems now
2785 inherit from BasePrompt.
2791 inherit from BasePrompt.
2786
2792
2787 * tools/release: updates for windows installer build and tag rpms
2793 * tools/release: updates for windows installer build and tag rpms
2788 with python version (since paths are fixed).
2794 with python version (since paths are fixed).
2789
2795
2790 * IPython/UserConfig/ipythonrc: modified to use \# instead of %n,
2796 * IPython/UserConfig/ipythonrc: modified to use \# instead of %n,
2791 which will become eventually obsolete. Also fixed the default
2797 which will become eventually obsolete. Also fixed the default
2792 prompt_in2 to use \D, so at least new users start with the correct
2798 prompt_in2 to use \D, so at least new users start with the correct
2793 defaults.
2799 defaults.
2794 WARNING: Users with existing ipythonrc files will need to apply
2800 WARNING: Users with existing ipythonrc files will need to apply
2795 this fix manually!
2801 this fix manually!
2796
2802
2797 * setup.py: make windows installer (.exe). This is finally the
2803 * setup.py: make windows installer (.exe). This is finally the
2798 integration of an old patch by Cory Dodt <dodt-AT-fcoe.k12.ca.us>,
2804 integration of an old patch by Cory Dodt <dodt-AT-fcoe.k12.ca.us>,
2799 which I hadn't included because it required Python 2.3 (or recent
2805 which I hadn't included because it required Python 2.3 (or recent
2800 distutils).
2806 distutils).
2801
2807
2802 * IPython/usage.py (__doc__): update docs (and manpage) to reflect
2808 * IPython/usage.py (__doc__): update docs (and manpage) to reflect
2803 usage of new '\D' escape.
2809 usage of new '\D' escape.
2804
2810
2805 * IPython/Prompts.py (ROOT_SYMBOL): Small fix for Windows (which
2811 * IPython/Prompts.py (ROOT_SYMBOL): Small fix for Windows (which
2806 lacks os.getuid())
2812 lacks os.getuid())
2807 (CachedOutput.set_colors): Added the ability to turn coloring
2813 (CachedOutput.set_colors): Added the ability to turn coloring
2808 on/off with @colors even for manually defined prompt colors. It
2814 on/off with @colors even for manually defined prompt colors. It
2809 uses a nasty global, but it works safely and via the generic color
2815 uses a nasty global, but it works safely and via the generic color
2810 handling mechanism.
2816 handling mechanism.
2811 (Prompt2.__init__): Introduced new escape '\D' for continuation
2817 (Prompt2.__init__): Introduced new escape '\D' for continuation
2812 prompts. It represents the counter ('\#') as dots.
2818 prompts. It represents the counter ('\#') as dots.
2813 *** NOTE *** THIS IS A BACKWARDS-INCOMPATIBLE CHANGE. Users will
2819 *** NOTE *** THIS IS A BACKWARDS-INCOMPATIBLE CHANGE. Users will
2814 need to update their ipythonrc files and replace '%n' with '\D' in
2820 need to update their ipythonrc files and replace '%n' with '\D' in
2815 their prompt_in2 settings everywhere. Sorry, but there's
2821 their prompt_in2 settings everywhere. Sorry, but there's
2816 otherwise no clean way to get all prompts to properly align. The
2822 otherwise no clean way to get all prompts to properly align. The
2817 ipythonrc shipped with IPython has been updated.
2823 ipythonrc shipped with IPython has been updated.
2818
2824
2819 2004-06-07 Fernando Perez <fperez@colorado.edu>
2825 2004-06-07 Fernando Perez <fperez@colorado.edu>
2820
2826
2821 * setup.py (isfile): Pass local_icons option to latex2html, so the
2827 * setup.py (isfile): Pass local_icons option to latex2html, so the
2822 resulting HTML file is self-contained. Thanks to
2828 resulting HTML file is self-contained. Thanks to
2823 dryice-AT-liu.com.cn for the tip.
2829 dryice-AT-liu.com.cn for the tip.
2824
2830
2825 * pysh.py: I created a new profile 'shell', which implements a
2831 * pysh.py: I created a new profile 'shell', which implements a
2826 _rudimentary_ IPython-based shell. This is in NO WAY a realy
2832 _rudimentary_ IPython-based shell. This is in NO WAY a realy
2827 system shell, nor will it become one anytime soon. It's mainly
2833 system shell, nor will it become one anytime soon. It's mainly
2828 meant to illustrate the use of the new flexible bash-like prompts.
2834 meant to illustrate the use of the new flexible bash-like prompts.
2829 I guess it could be used by hardy souls for true shell management,
2835 I guess it could be used by hardy souls for true shell management,
2830 but it's no tcsh/bash... pysh.py is loaded by the 'shell'
2836 but it's no tcsh/bash... pysh.py is loaded by the 'shell'
2831 profile. This uses the InterpreterExec extension provided by
2837 profile. This uses the InterpreterExec extension provided by
2832 W.J. van der Laan <gnufnork-AT-hetdigitalegat.nl>
2838 W.J. van der Laan <gnufnork-AT-hetdigitalegat.nl>
2833
2839
2834 * IPython/Prompts.py (PromptOut.__str__): now it will correctly
2840 * IPython/Prompts.py (PromptOut.__str__): now it will correctly
2835 auto-align itself with the length of the previous input prompt
2841 auto-align itself with the length of the previous input prompt
2836 (taking into account the invisible color escapes).
2842 (taking into account the invisible color escapes).
2837 (CachedOutput.__init__): Large restructuring of this class. Now
2843 (CachedOutput.__init__): Large restructuring of this class. Now
2838 all three prompts (primary1, primary2, output) are proper objects,
2844 all three prompts (primary1, primary2, output) are proper objects,
2839 managed by the 'parent' CachedOutput class. The code is still a
2845 managed by the 'parent' CachedOutput class. The code is still a
2840 bit hackish (all prompts share state via a pointer to the cache),
2846 bit hackish (all prompts share state via a pointer to the cache),
2841 but it's overall far cleaner than before.
2847 but it's overall far cleaner than before.
2842
2848
2843 * IPython/genutils.py (getoutputerror): modified to add verbose,
2849 * IPython/genutils.py (getoutputerror): modified to add verbose,
2844 debug and header options. This makes the interface of all getout*
2850 debug and header options. This makes the interface of all getout*
2845 functions uniform.
2851 functions uniform.
2846 (SystemExec.getoutputerror): added getoutputerror to SystemExec.
2852 (SystemExec.getoutputerror): added getoutputerror to SystemExec.
2847
2853
2848 * IPython/Magic.py (Magic.default_option): added a function to
2854 * IPython/Magic.py (Magic.default_option): added a function to
2849 allow registering default options for any magic command. This
2855 allow registering default options for any magic command. This
2850 makes it easy to have profiles which customize the magics globally
2856 makes it easy to have profiles which customize the magics globally
2851 for a certain use. The values set through this function are
2857 for a certain use. The values set through this function are
2852 picked up by the parse_options() method, which all magics should
2858 picked up by the parse_options() method, which all magics should
2853 use to parse their options.
2859 use to parse their options.
2854
2860
2855 * IPython/genutils.py (warn): modified the warnings framework to
2861 * IPython/genutils.py (warn): modified the warnings framework to
2856 use the Term I/O class. I'm trying to slowly unify all of
2862 use the Term I/O class. I'm trying to slowly unify all of
2857 IPython's I/O operations to pass through Term.
2863 IPython's I/O operations to pass through Term.
2858
2864
2859 * IPython/Prompts.py (Prompt2._str_other): Added functionality in
2865 * IPython/Prompts.py (Prompt2._str_other): Added functionality in
2860 the secondary prompt to correctly match the length of the primary
2866 the secondary prompt to correctly match the length of the primary
2861 one for any prompt. Now multi-line code will properly line up
2867 one for any prompt. Now multi-line code will properly line up
2862 even for path dependent prompts, such as the new ones available
2868 even for path dependent prompts, such as the new ones available
2863 via the prompt_specials.
2869 via the prompt_specials.
2864
2870
2865 2004-06-06 Fernando Perez <fperez@colorado.edu>
2871 2004-06-06 Fernando Perez <fperez@colorado.edu>
2866
2872
2867 * IPython/Prompts.py (prompt_specials): Added the ability to have
2873 * IPython/Prompts.py (prompt_specials): Added the ability to have
2868 bash-like special sequences in the prompts, which get
2874 bash-like special sequences in the prompts, which get
2869 automatically expanded. Things like hostname, current working
2875 automatically expanded. Things like hostname, current working
2870 directory and username are implemented already, but it's easy to
2876 directory and username are implemented already, but it's easy to
2871 add more in the future. Thanks to a patch by W.J. van der Laan
2877 add more in the future. Thanks to a patch by W.J. van der Laan
2872 <gnufnork-AT-hetdigitalegat.nl>
2878 <gnufnork-AT-hetdigitalegat.nl>
2873 (prompt_specials): Added color support for prompt strings, so
2879 (prompt_specials): Added color support for prompt strings, so
2874 users can define arbitrary color setups for their prompts.
2880 users can define arbitrary color setups for their prompts.
2875
2881
2876 2004-06-05 Fernando Perez <fperez@colorado.edu>
2882 2004-06-05 Fernando Perez <fperez@colorado.edu>
2877
2883
2878 * IPython/genutils.py (Term.reopen_all): Added Windows-specific
2884 * IPython/genutils.py (Term.reopen_all): Added Windows-specific
2879 code to load Gary Bishop's readline and configure it
2885 code to load Gary Bishop's readline and configure it
2880 automatically. Thanks to Gary for help on this.
2886 automatically. Thanks to Gary for help on this.
2881
2887
2882 2004-06-01 Fernando Perez <fperez@colorado.edu>
2888 2004-06-01 Fernando Perez <fperez@colorado.edu>
2883
2889
2884 * IPython/Logger.py (Logger.create_log): fix bug for logging
2890 * IPython/Logger.py (Logger.create_log): fix bug for logging
2885 with no filename (previous fix was incomplete).
2891 with no filename (previous fix was incomplete).
2886
2892
2887 2004-05-25 Fernando Perez <fperez@colorado.edu>
2893 2004-05-25 Fernando Perez <fperez@colorado.edu>
2888
2894
2889 * IPython/Magic.py (Magic.parse_options): fix bug where naked
2895 * IPython/Magic.py (Magic.parse_options): fix bug where naked
2890 parens would get passed to the shell.
2896 parens would get passed to the shell.
2891
2897
2892 2004-05-20 Fernando Perez <fperez@colorado.edu>
2898 2004-05-20 Fernando Perez <fperez@colorado.edu>
2893
2899
2894 * IPython/Magic.py (Magic.magic_prun): changed default profile
2900 * IPython/Magic.py (Magic.magic_prun): changed default profile
2895 sort order to 'time' (the more common profiling need).
2901 sort order to 'time' (the more common profiling need).
2896
2902
2897 * IPython/OInspect.py (Inspector.pinfo): flush the inspect cache
2903 * IPython/OInspect.py (Inspector.pinfo): flush the inspect cache
2898 so that source code shown is guaranteed in sync with the file on
2904 so that source code shown is guaranteed in sync with the file on
2899 disk (also changed in psource). Similar fix to the one for
2905 disk (also changed in psource). Similar fix to the one for
2900 ultraTB on 2004-05-06. Thanks to a bug report by Yann Le Du
2906 ultraTB on 2004-05-06. Thanks to a bug report by Yann Le Du
2901 <yann.ledu-AT-noos.fr>.
2907 <yann.ledu-AT-noos.fr>.
2902
2908
2903 * IPython/Magic.py (Magic.parse_options): Fixed bug where commands
2909 * IPython/Magic.py (Magic.parse_options): Fixed bug where commands
2904 with a single option would not be correctly parsed. Closes
2910 with a single option would not be correctly parsed. Closes
2905 http://www.scipy.net/roundup/ipython/issue14. This bug had been
2911 http://www.scipy.net/roundup/ipython/issue14. This bug had been
2906 introduced in 0.6.0 (on 2004-05-06).
2912 introduced in 0.6.0 (on 2004-05-06).
2907
2913
2908 2004-05-13 *** Released version 0.6.0
2914 2004-05-13 *** Released version 0.6.0
2909
2915
2910 2004-05-13 Fernando Perez <fperez@colorado.edu>
2916 2004-05-13 Fernando Perez <fperez@colorado.edu>
2911
2917
2912 * debian/: Added debian/ directory to CVS, so that debian support
2918 * debian/: Added debian/ directory to CVS, so that debian support
2913 is publicly accessible. The debian package is maintained by Jack
2919 is publicly accessible. The debian package is maintained by Jack
2914 Moffit <jack-AT-xiph.org>.
2920 Moffit <jack-AT-xiph.org>.
2915
2921
2916 * Documentation: included the notes about an ipython-based system
2922 * Documentation: included the notes about an ipython-based system
2917 shell (the hypothetical 'pysh') into the new_design.pdf document,
2923 shell (the hypothetical 'pysh') into the new_design.pdf document,
2918 so that these ideas get distributed to users along with the
2924 so that these ideas get distributed to users along with the
2919 official documentation.
2925 official documentation.
2920
2926
2921 2004-05-10 Fernando Perez <fperez@colorado.edu>
2927 2004-05-10 Fernando Perez <fperez@colorado.edu>
2922
2928
2923 * IPython/Logger.py (Logger.create_log): fix recently introduced
2929 * IPython/Logger.py (Logger.create_log): fix recently introduced
2924 bug (misindented line) where logstart would fail when not given an
2930 bug (misindented line) where logstart would fail when not given an
2925 explicit filename.
2931 explicit filename.
2926
2932
2927 2004-05-09 Fernando Perez <fperez@colorado.edu>
2933 2004-05-09 Fernando Perez <fperez@colorado.edu>
2928
2934
2929 * IPython/Magic.py (Magic.parse_options): skip system call when
2935 * IPython/Magic.py (Magic.parse_options): skip system call when
2930 there are no options to look for. Faster, cleaner for the common
2936 there are no options to look for. Faster, cleaner for the common
2931 case.
2937 case.
2932
2938
2933 * Documentation: many updates to the manual: describing Windows
2939 * Documentation: many updates to the manual: describing Windows
2934 support better, Gnuplot updates, credits, misc small stuff. Also
2940 support better, Gnuplot updates, credits, misc small stuff. Also
2935 updated the new_design doc a bit.
2941 updated the new_design doc a bit.
2936
2942
2937 2004-05-06 *** Released version 0.6.0.rc1
2943 2004-05-06 *** Released version 0.6.0.rc1
2938
2944
2939 2004-05-06 Fernando Perez <fperez@colorado.edu>
2945 2004-05-06 Fernando Perez <fperez@colorado.edu>
2940
2946
2941 * IPython/ultraTB.py (ListTB.text): modified a ton of string +=
2947 * IPython/ultraTB.py (ListTB.text): modified a ton of string +=
2942 operations to use the vastly more efficient list/''.join() method.
2948 operations to use the vastly more efficient list/''.join() method.
2943 (FormattedTB.text): Fix
2949 (FormattedTB.text): Fix
2944 http://www.scipy.net/roundup/ipython/issue12 - exception source
2950 http://www.scipy.net/roundup/ipython/issue12 - exception source
2945 extract not updated after reload. Thanks to Mike Salib
2951 extract not updated after reload. Thanks to Mike Salib
2946 <msalib-AT-mit.edu> for pinning the source of the problem.
2952 <msalib-AT-mit.edu> for pinning the source of the problem.
2947 Fortunately, the solution works inside ipython and doesn't require
2953 Fortunately, the solution works inside ipython and doesn't require
2948 any changes to python proper.
2954 any changes to python proper.
2949
2955
2950 * IPython/Magic.py (Magic.parse_options): Improved to process the
2956 * IPython/Magic.py (Magic.parse_options): Improved to process the
2951 argument list as a true shell would (by actually using the
2957 argument list as a true shell would (by actually using the
2952 underlying system shell). This way, all @magics automatically get
2958 underlying system shell). This way, all @magics automatically get
2953 shell expansion for variables. Thanks to a comment by Alex
2959 shell expansion for variables. Thanks to a comment by Alex
2954 Schmolck.
2960 Schmolck.
2955
2961
2956 2004-04-04 Fernando Perez <fperez@colorado.edu>
2962 2004-04-04 Fernando Perez <fperez@colorado.edu>
2957
2963
2958 * IPython/iplib.py (InteractiveShell.interact): Added a special
2964 * IPython/iplib.py (InteractiveShell.interact): Added a special
2959 trap for a debugger quit exception, which is basically impossible
2965 trap for a debugger quit exception, which is basically impossible
2960 to handle by normal mechanisms, given what pdb does to the stack.
2966 to handle by normal mechanisms, given what pdb does to the stack.
2961 This fixes a crash reported by <fgibbons-AT-llama.med.harvard.edu>.
2967 This fixes a crash reported by <fgibbons-AT-llama.med.harvard.edu>.
2962
2968
2963 2004-04-03 Fernando Perez <fperez@colorado.edu>
2969 2004-04-03 Fernando Perez <fperez@colorado.edu>
2964
2970
2965 * IPython/genutils.py (Term): Standardized the names of the Term
2971 * IPython/genutils.py (Term): Standardized the names of the Term
2966 class streams to cin/cout/cerr, following C++ naming conventions
2972 class streams to cin/cout/cerr, following C++ naming conventions
2967 (I can't use in/out/err because 'in' is not a valid attribute
2973 (I can't use in/out/err because 'in' is not a valid attribute
2968 name).
2974 name).
2969
2975
2970 * IPython/iplib.py (InteractiveShell.interact): don't increment
2976 * IPython/iplib.py (InteractiveShell.interact): don't increment
2971 the prompt if there's no user input. By Daniel 'Dang' Griffith
2977 the prompt if there's no user input. By Daniel 'Dang' Griffith
2972 <pythondev-dang-AT-lazytwinacres.net>, after a suggestion from
2978 <pythondev-dang-AT-lazytwinacres.net>, after a suggestion from
2973 Francois Pinard.
2979 Francois Pinard.
2974
2980
2975 2004-04-02 Fernando Perez <fperez@colorado.edu>
2981 2004-04-02 Fernando Perez <fperez@colorado.edu>
2976
2982
2977 * IPython/genutils.py (Stream.__init__): Modified to survive at
2983 * IPython/genutils.py (Stream.__init__): Modified to survive at
2978 least importing in contexts where stdin/out/err aren't true file
2984 least importing in contexts where stdin/out/err aren't true file
2979 objects, such as PyCrust (they lack fileno() and mode). However,
2985 objects, such as PyCrust (they lack fileno() and mode). However,
2980 the recovery facilities which rely on these things existing will
2986 the recovery facilities which rely on these things existing will
2981 not work.
2987 not work.
2982
2988
2983 2004-04-01 Fernando Perez <fperez@colorado.edu>
2989 2004-04-01 Fernando Perez <fperez@colorado.edu>
2984
2990
2985 * IPython/Magic.py (Magic.magic_sx): modified (as well as @sc) to
2991 * IPython/Magic.py (Magic.magic_sx): modified (as well as @sc) to
2986 use the new getoutputerror() function, so it properly
2992 use the new getoutputerror() function, so it properly
2987 distinguishes stdout/err.
2993 distinguishes stdout/err.
2988
2994
2989 * IPython/genutils.py (getoutputerror): added a function to
2995 * IPython/genutils.py (getoutputerror): added a function to
2990 capture separately the standard output and error of a command.
2996 capture separately the standard output and error of a command.
2991 After a comment from dang on the mailing lists. This code is
2997 After a comment from dang on the mailing lists. This code is
2992 basically a modified version of commands.getstatusoutput(), from
2998 basically a modified version of commands.getstatusoutput(), from
2993 the standard library.
2999 the standard library.
2994
3000
2995 * IPython/iplib.py (InteractiveShell.handle_shell_escape): added
3001 * IPython/iplib.py (InteractiveShell.handle_shell_escape): added
2996 '!!' as a special syntax (shorthand) to access @sx.
3002 '!!' as a special syntax (shorthand) to access @sx.
2997
3003
2998 * IPython/Magic.py (Magic.magic_sx): new magic, to execute a shell
3004 * IPython/Magic.py (Magic.magic_sx): new magic, to execute a shell
2999 command and return its output as a list split on '\n'.
3005 command and return its output as a list split on '\n'.
3000
3006
3001 2004-03-31 Fernando Perez <fperez@colorado.edu>
3007 2004-03-31 Fernando Perez <fperez@colorado.edu>
3002
3008
3003 * IPython/FakeModule.py (FakeModule.__init__): added __nonzero__
3009 * IPython/FakeModule.py (FakeModule.__init__): added __nonzero__
3004 method to dictionaries used as FakeModule instances if they lack
3010 method to dictionaries used as FakeModule instances if they lack
3005 it. At least pydoc in python2.3 breaks for runtime-defined
3011 it. At least pydoc in python2.3 breaks for runtime-defined
3006 functions without this hack. At some point I need to _really_
3012 functions without this hack. At some point I need to _really_
3007 understand what FakeModule is doing, because it's a gross hack.
3013 understand what FakeModule is doing, because it's a gross hack.
3008 But it solves Arnd's problem for now...
3014 But it solves Arnd's problem for now...
3009
3015
3010 2004-02-27 Fernando Perez <fperez@colorado.edu>
3016 2004-02-27 Fernando Perez <fperez@colorado.edu>
3011
3017
3012 * IPython/Logger.py (Logger.create_log): Fix bug where 'rotate'
3018 * IPython/Logger.py (Logger.create_log): Fix bug where 'rotate'
3013 mode would behave erratically. Also increased the number of
3019 mode would behave erratically. Also increased the number of
3014 possible logs in rotate mod to 999. Thanks to Rod Holland
3020 possible logs in rotate mod to 999. Thanks to Rod Holland
3015 <rhh@StructureLABS.com> for the report and fixes.
3021 <rhh@StructureLABS.com> for the report and fixes.
3016
3022
3017 2004-02-26 Fernando Perez <fperez@colorado.edu>
3023 2004-02-26 Fernando Perez <fperez@colorado.edu>
3018
3024
3019 * IPython/genutils.py (page): Check that the curses module really
3025 * IPython/genutils.py (page): Check that the curses module really
3020 has the initscr attribute before trying to use it. For some
3026 has the initscr attribute before trying to use it. For some
3021 reason, the Solaris curses module is missing this. I think this
3027 reason, the Solaris curses module is missing this. I think this
3022 should be considered a Solaris python bug, but I'm not sure.
3028 should be considered a Solaris python bug, but I'm not sure.
3023
3029
3024 2004-01-17 Fernando Perez <fperez@colorado.edu>
3030 2004-01-17 Fernando Perez <fperez@colorado.edu>
3025
3031
3026 * IPython/genutils.py (Stream.__init__): Changes to try to make
3032 * IPython/genutils.py (Stream.__init__): Changes to try to make
3027 ipython robust against stdin/out/err being closed by the user.
3033 ipython robust against stdin/out/err being closed by the user.
3028 This is 'user error' (and blocks a normal python session, at least
3034 This is 'user error' (and blocks a normal python session, at least
3029 the stdout case). However, Ipython should be able to survive such
3035 the stdout case). However, Ipython should be able to survive such
3030 instances of abuse as gracefully as possible. To simplify the
3036 instances of abuse as gracefully as possible. To simplify the
3031 coding and maintain compatibility with Gary Bishop's Term
3037 coding and maintain compatibility with Gary Bishop's Term
3032 contributions, I've made use of classmethods for this. I think
3038 contributions, I've made use of classmethods for this. I think
3033 this introduces a dependency on python 2.2.
3039 this introduces a dependency on python 2.2.
3034
3040
3035 2004-01-13 Fernando Perez <fperez@colorado.edu>
3041 2004-01-13 Fernando Perez <fperez@colorado.edu>
3036
3042
3037 * IPython/numutils.py (exp_safe): simplified the code a bit and
3043 * IPython/numutils.py (exp_safe): simplified the code a bit and
3038 removed the need for importing the kinds module altogether.
3044 removed the need for importing the kinds module altogether.
3039
3045
3040 2004-01-06 Fernando Perez <fperez@colorado.edu>
3046 2004-01-06 Fernando Perez <fperez@colorado.edu>
3041
3047
3042 * IPython/Magic.py (Magic.magic_sc): Made the shell capture system
3048 * IPython/Magic.py (Magic.magic_sc): Made the shell capture system
3043 a magic function instead, after some community feedback. No
3049 a magic function instead, after some community feedback. No
3044 special syntax will exist for it, but its name is deliberately
3050 special syntax will exist for it, but its name is deliberately
3045 very short.
3051 very short.
3046
3052
3047 2003-12-20 Fernando Perez <fperez@colorado.edu>
3053 2003-12-20 Fernando Perez <fperez@colorado.edu>
3048
3054
3049 * IPython/iplib.py (InteractiveShell.handle_shell_assign): Added
3055 * IPython/iplib.py (InteractiveShell.handle_shell_assign): Added
3050 new functionality, to automagically assign the result of a shell
3056 new functionality, to automagically assign the result of a shell
3051 command to a variable. I'll solicit some community feedback on
3057 command to a variable. I'll solicit some community feedback on
3052 this before making it permanent.
3058 this before making it permanent.
3053
3059
3054 * IPython/OInspect.py (Inspector.pinfo): Fix crash when info was
3060 * IPython/OInspect.py (Inspector.pinfo): Fix crash when info was
3055 requested about callables for which inspect couldn't obtain a
3061 requested about callables for which inspect couldn't obtain a
3056 proper argspec. Thanks to a crash report sent by Etienne
3062 proper argspec. Thanks to a crash report sent by Etienne
3057 Posthumus <etienne-AT-apple01.cs.vu.nl>.
3063 Posthumus <etienne-AT-apple01.cs.vu.nl>.
3058
3064
3059 2003-12-09 Fernando Perez <fperez@colorado.edu>
3065 2003-12-09 Fernando Perez <fperez@colorado.edu>
3060
3066
3061 * IPython/genutils.py (page): patch for the pager to work across
3067 * IPython/genutils.py (page): patch for the pager to work across
3062 various versions of Windows. By Gary Bishop.
3068 various versions of Windows. By Gary Bishop.
3063
3069
3064 2003-12-04 Fernando Perez <fperez@colorado.edu>
3070 2003-12-04 Fernando Perez <fperez@colorado.edu>
3065
3071
3066 * IPython/Gnuplot2.py (PlotItems): Fixes for working with
3072 * IPython/Gnuplot2.py (PlotItems): Fixes for working with
3067 Gnuplot.py version 1.7, whose internal names changed quite a bit.
3073 Gnuplot.py version 1.7, whose internal names changed quite a bit.
3068 While I tested this and it looks ok, there may still be corner
3074 While I tested this and it looks ok, there may still be corner
3069 cases I've missed.
3075 cases I've missed.
3070
3076
3071 2003-12-01 Fernando Perez <fperez@colorado.edu>
3077 2003-12-01 Fernando Perez <fperez@colorado.edu>
3072
3078
3073 * IPython/iplib.py (InteractiveShell._prefilter): Fixed a bug
3079 * IPython/iplib.py (InteractiveShell._prefilter): Fixed a bug
3074 where a line like 'p,q=1,2' would fail because the automagic
3080 where a line like 'p,q=1,2' would fail because the automagic
3075 system would be triggered for @p.
3081 system would be triggered for @p.
3076
3082
3077 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): Tab-related
3083 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): Tab-related
3078 cleanups, code unmodified.
3084 cleanups, code unmodified.
3079
3085
3080 * IPython/genutils.py (Term): added a class for IPython to handle
3086 * IPython/genutils.py (Term): added a class for IPython to handle
3081 output. In most cases it will just be a proxy for stdout/err, but
3087 output. In most cases it will just be a proxy for stdout/err, but
3082 having this allows modifications to be made for some platforms,
3088 having this allows modifications to be made for some platforms,
3083 such as handling color escapes under Windows. All of this code
3089 such as handling color escapes under Windows. All of this code
3084 was contributed by Gary Bishop, with minor modifications by me.
3090 was contributed by Gary Bishop, with minor modifications by me.
3085 The actual changes affect many files.
3091 The actual changes affect many files.
3086
3092
3087 2003-11-30 Fernando Perez <fperez@colorado.edu>
3093 2003-11-30 Fernando Perez <fperez@colorado.edu>
3088
3094
3089 * IPython/iplib.py (file_matches): new completion code, courtesy
3095 * IPython/iplib.py (file_matches): new completion code, courtesy
3090 of Jeff Collins. This enables filename completion again under
3096 of Jeff Collins. This enables filename completion again under
3091 python 2.3, which disabled it at the C level.
3097 python 2.3, which disabled it at the C level.
3092
3098
3093 2003-11-11 Fernando Perez <fperez@colorado.edu>
3099 2003-11-11 Fernando Perez <fperez@colorado.edu>
3094
3100
3095 * IPython/numutils.py (amap): Added amap() fn. Simple shorthand
3101 * IPython/numutils.py (amap): Added amap() fn. Simple shorthand
3096 for Numeric.array(map(...)), but often convenient.
3102 for Numeric.array(map(...)), but often convenient.
3097
3103
3098 2003-11-05 Fernando Perez <fperez@colorado.edu>
3104 2003-11-05 Fernando Perez <fperez@colorado.edu>
3099
3105
3100 * IPython/numutils.py (frange): Changed a call from int() to
3106 * IPython/numutils.py (frange): Changed a call from int() to
3101 int(round()) to prevent a problem reported with arange() in the
3107 int(round()) to prevent a problem reported with arange() in the
3102 numpy list.
3108 numpy list.
3103
3109
3104 2003-10-06 Fernando Perez <fperez@colorado.edu>
3110 2003-10-06 Fernando Perez <fperez@colorado.edu>
3105
3111
3106 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): changed to
3112 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): changed to
3107 prevent crashes if sys lacks an argv attribute (it happens with
3113 prevent crashes if sys lacks an argv attribute (it happens with
3108 embedded interpreters which build a bare-bones sys module).
3114 embedded interpreters which build a bare-bones sys module).
3109 Thanks to a report/bugfix by Adam Hupp <hupp-AT-cs.wisc.edu>.
3115 Thanks to a report/bugfix by Adam Hupp <hupp-AT-cs.wisc.edu>.
3110
3116
3111 2003-09-24 Fernando Perez <fperez@colorado.edu>
3117 2003-09-24 Fernando Perez <fperez@colorado.edu>
3112
3118
3113 * IPython/Magic.py (Magic._ofind): blanket except around getattr()
3119 * IPython/Magic.py (Magic._ofind): blanket except around getattr()
3114 to protect against poorly written user objects where __getattr__
3120 to protect against poorly written user objects where __getattr__
3115 raises exceptions other than AttributeError. Thanks to a bug
3121 raises exceptions other than AttributeError. Thanks to a bug
3116 report by Oliver Sander <osander-AT-gmx.de>.
3122 report by Oliver Sander <osander-AT-gmx.de>.
3117
3123
3118 * IPython/FakeModule.py (FakeModule.__repr__): this method was
3124 * IPython/FakeModule.py (FakeModule.__repr__): this method was
3119 missing. Thanks to bug report by Ralf Schmitt <ralf-AT-brainbot.com>.
3125 missing. Thanks to bug report by Ralf Schmitt <ralf-AT-brainbot.com>.
3120
3126
3121 2003-09-09 Fernando Perez <fperez@colorado.edu>
3127 2003-09-09 Fernando Perez <fperez@colorado.edu>
3122
3128
3123 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
3129 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
3124 unpacking a list whith a callable as first element would
3130 unpacking a list whith a callable as first element would
3125 mistakenly trigger autocalling. Thanks to a bug report by Jeffery
3131 mistakenly trigger autocalling. Thanks to a bug report by Jeffery
3126 Collins.
3132 Collins.
3127
3133
3128 2003-08-25 *** Released version 0.5.0
3134 2003-08-25 *** Released version 0.5.0
3129
3135
3130 2003-08-22 Fernando Perez <fperez@colorado.edu>
3136 2003-08-22 Fernando Perez <fperez@colorado.edu>
3131
3137
3132 * IPython/ultraTB.py (VerboseTB.linereader): Improved handling of
3138 * IPython/ultraTB.py (VerboseTB.linereader): Improved handling of
3133 improperly defined user exceptions. Thanks to feedback from Mark
3139 improperly defined user exceptions. Thanks to feedback from Mark
3134 Russell <mrussell-AT-verio.net>.
3140 Russell <mrussell-AT-verio.net>.
3135
3141
3136 2003-08-20 Fernando Perez <fperez@colorado.edu>
3142 2003-08-20 Fernando Perez <fperez@colorado.edu>
3137
3143
3138 * IPython/OInspect.py (Inspector.pinfo): changed String Form
3144 * IPython/OInspect.py (Inspector.pinfo): changed String Form
3139 printing so that it would print multi-line string forms starting
3145 printing so that it would print multi-line string forms starting
3140 with a new line. This way the formatting is better respected for
3146 with a new line. This way the formatting is better respected for
3141 objects which work hard to make nice string forms.
3147 objects which work hard to make nice string forms.
3142
3148
3143 * IPython/iplib.py (InteractiveShell.handle_auto): Fix bug where
3149 * IPython/iplib.py (InteractiveShell.handle_auto): Fix bug where
3144 autocall would overtake data access for objects with both
3150 autocall would overtake data access for objects with both
3145 __getitem__ and __call__.
3151 __getitem__ and __call__.
3146
3152
3147 2003-08-19 *** Released version 0.5.0-rc1
3153 2003-08-19 *** Released version 0.5.0-rc1
3148
3154
3149 2003-08-19 Fernando Perez <fperez@colorado.edu>
3155 2003-08-19 Fernando Perez <fperez@colorado.edu>
3150
3156
3151 * IPython/deep_reload.py (load_tail): single tiny change here
3157 * IPython/deep_reload.py (load_tail): single tiny change here
3152 seems to fix the long-standing bug of dreload() failing to work
3158 seems to fix the long-standing bug of dreload() failing to work
3153 for dotted names. But this module is pretty tricky, so I may have
3159 for dotted names. But this module is pretty tricky, so I may have
3154 missed some subtlety. Needs more testing!.
3160 missed some subtlety. Needs more testing!.
3155
3161
3156 * IPython/ultraTB.py (VerboseTB.linereader): harden against user
3162 * IPython/ultraTB.py (VerboseTB.linereader): harden against user
3157 exceptions which have badly implemented __str__ methods.
3163 exceptions which have badly implemented __str__ methods.
3158 (VerboseTB.text): harden against inspect.getinnerframes crashing,
3164 (VerboseTB.text): harden against inspect.getinnerframes crashing,
3159 which I've been getting reports about from Python 2.3 users. I
3165 which I've been getting reports about from Python 2.3 users. I
3160 wish I had a simple test case to reproduce the problem, so I could
3166 wish I had a simple test case to reproduce the problem, so I could
3161 either write a cleaner workaround or file a bug report if
3167 either write a cleaner workaround or file a bug report if
3162 necessary.
3168 necessary.
3163
3169
3164 * IPython/Magic.py (Magic.magic_edit): fixed bug where after
3170 * IPython/Magic.py (Magic.magic_edit): fixed bug where after
3165 making a class 'foo', file 'foo.py' couldn't be edited. Thanks to
3171 making a class 'foo', file 'foo.py' couldn't be edited. Thanks to
3166 a bug report by Tjabo Kloppenburg.
3172 a bug report by Tjabo Kloppenburg.
3167
3173
3168 * IPython/ultraTB.py (VerboseTB.debugger): hardened against pdb
3174 * IPython/ultraTB.py (VerboseTB.debugger): hardened against pdb
3169 crashes. Wrapped the pdb call in a blanket try/except, since pdb
3175 crashes. Wrapped the pdb call in a blanket try/except, since pdb
3170 seems rather unstable. Thanks to a bug report by Tjabo
3176 seems rather unstable. Thanks to a bug report by Tjabo
3171 Kloppenburg <tjabo.kloppenburg-AT-unix-ag.uni-siegen.de>.
3177 Kloppenburg <tjabo.kloppenburg-AT-unix-ag.uni-siegen.de>.
3172
3178
3173 * IPython/Release.py (version): release 0.5.0-rc1. I want to put
3179 * IPython/Release.py (version): release 0.5.0-rc1. I want to put
3174 this out soon because of the critical fixes in the inner loop for
3180 this out soon because of the critical fixes in the inner loop for
3175 generators.
3181 generators.
3176
3182
3177 * IPython/Magic.py (Magic.getargspec): removed. This (and
3183 * IPython/Magic.py (Magic.getargspec): removed. This (and
3178 _get_def) have been obsoleted by OInspect for a long time, I
3184 _get_def) have been obsoleted by OInspect for a long time, I
3179 hadn't noticed that they were dead code.
3185 hadn't noticed that they were dead code.
3180 (Magic._ofind): restored _ofind functionality for a few literals
3186 (Magic._ofind): restored _ofind functionality for a few literals
3181 (those in ["''",'""','[]','{}','()']). But it won't work anymore
3187 (those in ["''",'""','[]','{}','()']). But it won't work anymore
3182 for things like "hello".capitalize?, since that would require a
3188 for things like "hello".capitalize?, since that would require a
3183 potentially dangerous eval() again.
3189 potentially dangerous eval() again.
3184
3190
3185 * IPython/iplib.py (InteractiveShell._prefilter): reorganized the
3191 * IPython/iplib.py (InteractiveShell._prefilter): reorganized the
3186 logic a bit more to clean up the escapes handling and minimize the
3192 logic a bit more to clean up the escapes handling and minimize the
3187 use of _ofind to only necessary cases. The interactive 'feel' of
3193 use of _ofind to only necessary cases. The interactive 'feel' of
3188 IPython should have improved quite a bit with the changes in
3194 IPython should have improved quite a bit with the changes in
3189 _prefilter and _ofind (besides being far safer than before).
3195 _prefilter and _ofind (besides being far safer than before).
3190
3196
3191 * IPython/Magic.py (Magic.magic_edit): Fixed old bug (but rather
3197 * IPython/Magic.py (Magic.magic_edit): Fixed old bug (but rather
3192 obscure, never reported). Edit would fail to find the object to
3198 obscure, never reported). Edit would fail to find the object to
3193 edit under some circumstances.
3199 edit under some circumstances.
3194 (Magic._ofind): CRITICAL FIX. Finally removed the eval() calls
3200 (Magic._ofind): CRITICAL FIX. Finally removed the eval() calls
3195 which were causing double-calling of generators. Those eval calls
3201 which were causing double-calling of generators. Those eval calls
3196 were _very_ dangerous, since code with side effects could be
3202 were _very_ dangerous, since code with side effects could be
3197 triggered. As they say, 'eval is evil'... These were the
3203 triggered. As they say, 'eval is evil'... These were the
3198 nastiest evals in IPython. Besides, _ofind is now far simpler,
3204 nastiest evals in IPython. Besides, _ofind is now far simpler,
3199 and it should also be quite a bit faster. Its use of inspect is
3205 and it should also be quite a bit faster. Its use of inspect is
3200 also safer, so perhaps some of the inspect-related crashes I've
3206 also safer, so perhaps some of the inspect-related crashes I've
3201 seen lately with Python 2.3 might be taken care of. That will
3207 seen lately with Python 2.3 might be taken care of. That will
3202 need more testing.
3208 need more testing.
3203
3209
3204 2003-08-17 Fernando Perez <fperez@colorado.edu>
3210 2003-08-17 Fernando Perez <fperez@colorado.edu>
3205
3211
3206 * IPython/iplib.py (InteractiveShell._prefilter): significant
3212 * IPython/iplib.py (InteractiveShell._prefilter): significant
3207 simplifications to the logic for handling user escapes. Faster
3213 simplifications to the logic for handling user escapes. Faster
3208 and simpler code.
3214 and simpler code.
3209
3215
3210 2003-08-14 Fernando Perez <fperez@colorado.edu>
3216 2003-08-14 Fernando Perez <fperez@colorado.edu>
3211
3217
3212 * IPython/numutils.py (sum_flat): rewrote to be non-recursive.
3218 * IPython/numutils.py (sum_flat): rewrote to be non-recursive.
3213 Now it requires O(N) storage (N=size(a)) for non-contiguous input,
3219 Now it requires O(N) storage (N=size(a)) for non-contiguous input,
3214 but it should be quite a bit faster. And the recursive version
3220 but it should be quite a bit faster. And the recursive version
3215 generated O(log N) intermediate storage for all rank>1 arrays,
3221 generated O(log N) intermediate storage for all rank>1 arrays,
3216 even if they were contiguous.
3222 even if they were contiguous.
3217 (l1norm): Added this function.
3223 (l1norm): Added this function.
3218 (norm): Added this function for arbitrary norms (including
3224 (norm): Added this function for arbitrary norms (including
3219 l-infinity). l1 and l2 are still special cases for convenience
3225 l-infinity). l1 and l2 are still special cases for convenience
3220 and speed.
3226 and speed.
3221
3227
3222 2003-08-03 Fernando Perez <fperez@colorado.edu>
3228 2003-08-03 Fernando Perez <fperez@colorado.edu>
3223
3229
3224 * IPython/Magic.py (Magic.magic_edit): Removed all remaining string
3230 * IPython/Magic.py (Magic.magic_edit): Removed all remaining string
3225 exceptions, which now raise PendingDeprecationWarnings in Python
3231 exceptions, which now raise PendingDeprecationWarnings in Python
3226 2.3. There were some in Magic and some in Gnuplot2.
3232 2.3. There were some in Magic and some in Gnuplot2.
3227
3233
3228 2003-06-30 Fernando Perez <fperez@colorado.edu>
3234 2003-06-30 Fernando Perez <fperez@colorado.edu>
3229
3235
3230 * IPython/genutils.py (page): modified to call curses only for
3236 * IPython/genutils.py (page): modified to call curses only for
3231 terminals where TERM=='xterm'. After problems under many other
3237 terminals where TERM=='xterm'. After problems under many other
3232 terminals were reported by Keith Beattie <KSBeattie-AT-lbl.gov>.
3238 terminals were reported by Keith Beattie <KSBeattie-AT-lbl.gov>.
3233
3239
3234 * IPython/iplib.py (complete): removed spurious 'print "IE"' which
3240 * IPython/iplib.py (complete): removed spurious 'print "IE"' which
3235 would be triggered when readline was absent. This was just an old
3241 would be triggered when readline was absent. This was just an old
3236 debugging statement I'd forgotten to take out.
3242 debugging statement I'd forgotten to take out.
3237
3243
3238 2003-06-20 Fernando Perez <fperez@colorado.edu>
3244 2003-06-20 Fernando Perez <fperez@colorado.edu>
3239
3245
3240 * IPython/genutils.py (clock): modified to return only user time
3246 * IPython/genutils.py (clock): modified to return only user time
3241 (not counting system time), after a discussion on scipy. While
3247 (not counting system time), after a discussion on scipy. While
3242 system time may be a useful quantity occasionally, it may much
3248 system time may be a useful quantity occasionally, it may much
3243 more easily be skewed by occasional swapping or other similar
3249 more easily be skewed by occasional swapping or other similar
3244 activity.
3250 activity.
3245
3251
3246 2003-06-05 Fernando Perez <fperez@colorado.edu>
3252 2003-06-05 Fernando Perez <fperez@colorado.edu>
3247
3253
3248 * IPython/numutils.py (identity): new function, for building
3254 * IPython/numutils.py (identity): new function, for building
3249 arbitrary rank Kronecker deltas (mostly backwards compatible with
3255 arbitrary rank Kronecker deltas (mostly backwards compatible with
3250 Numeric.identity)
3256 Numeric.identity)
3251
3257
3252 2003-06-03 Fernando Perez <fperez@colorado.edu>
3258 2003-06-03 Fernando Perez <fperez@colorado.edu>
3253
3259
3254 * IPython/iplib.py (InteractiveShell.handle_magic): protect
3260 * IPython/iplib.py (InteractiveShell.handle_magic): protect
3255 arguments passed to magics with spaces, to allow trailing '\' to
3261 arguments passed to magics with spaces, to allow trailing '\' to
3256 work normally (mainly for Windows users).
3262 work normally (mainly for Windows users).
3257
3263
3258 2003-05-29 Fernando Perez <fperez@colorado.edu>
3264 2003-05-29 Fernando Perez <fperez@colorado.edu>
3259
3265
3260 * IPython/ipmaker.py (make_IPython): Load site._Helper() as help
3266 * IPython/ipmaker.py (make_IPython): Load site._Helper() as help
3261 instead of pydoc.help. This fixes a bizarre behavior where
3267 instead of pydoc.help. This fixes a bizarre behavior where
3262 printing '%s' % locals() would trigger the help system. Now
3268 printing '%s' % locals() would trigger the help system. Now
3263 ipython behaves like normal python does.
3269 ipython behaves like normal python does.
3264
3270
3265 Note that if one does 'from pydoc import help', the bizarre
3271 Note that if one does 'from pydoc import help', the bizarre
3266 behavior returns, but this will also happen in normal python, so
3272 behavior returns, but this will also happen in normal python, so
3267 it's not an ipython bug anymore (it has to do with how pydoc.help
3273 it's not an ipython bug anymore (it has to do with how pydoc.help
3268 is implemented).
3274 is implemented).
3269
3275
3270 2003-05-22 Fernando Perez <fperez@colorado.edu>
3276 2003-05-22 Fernando Perez <fperez@colorado.edu>
3271
3277
3272 * IPython/FlexCompleter.py (Completer.attr_matches): fixed to
3278 * IPython/FlexCompleter.py (Completer.attr_matches): fixed to
3273 return [] instead of None when nothing matches, also match to end
3279 return [] instead of None when nothing matches, also match to end
3274 of line. Patch by Gary Bishop.
3280 of line. Patch by Gary Bishop.
3275
3281
3276 * IPython/ipmaker.py (make_IPython): Added same sys.excepthook
3282 * IPython/ipmaker.py (make_IPython): Added same sys.excepthook
3277 protection as before, for files passed on the command line. This
3283 protection as before, for files passed on the command line. This
3278 prevents the CrashHandler from kicking in if user files call into
3284 prevents the CrashHandler from kicking in if user files call into
3279 sys.excepthook (such as PyQt and WxWindows have a nasty habit of
3285 sys.excepthook (such as PyQt and WxWindows have a nasty habit of
3280 doing). After a report by Kasper Souren <Kasper.Souren-AT-ircam.fr>
3286 doing). After a report by Kasper Souren <Kasper.Souren-AT-ircam.fr>
3281
3287
3282 2003-05-20 *** Released version 0.4.0
3288 2003-05-20 *** Released version 0.4.0
3283
3289
3284 2003-05-20 Fernando Perez <fperez@colorado.edu>
3290 2003-05-20 Fernando Perez <fperez@colorado.edu>
3285
3291
3286 * setup.py: added support for manpages. It's a bit hackish b/c of
3292 * setup.py: added support for manpages. It's a bit hackish b/c of
3287 a bug in the way the bdist_rpm distutils target handles gzipped
3293 a bug in the way the bdist_rpm distutils target handles gzipped
3288 manpages, but it works. After a patch by Jack.
3294 manpages, but it works. After a patch by Jack.
3289
3295
3290 2003-05-19 Fernando Perez <fperez@colorado.edu>
3296 2003-05-19 Fernando Perez <fperez@colorado.edu>
3291
3297
3292 * IPython/numutils.py: added a mockup of the kinds module, since
3298 * IPython/numutils.py: added a mockup of the kinds module, since
3293 it was recently removed from Numeric. This way, numutils will
3299 it was recently removed from Numeric. This way, numutils will
3294 work for all users even if they are missing kinds.
3300 work for all users even if they are missing kinds.
3295
3301
3296 * IPython/Magic.py (Magic._ofind): Harden against an inspect
3302 * IPython/Magic.py (Magic._ofind): Harden against an inspect
3297 failure, which can occur with SWIG-wrapped extensions. After a
3303 failure, which can occur with SWIG-wrapped extensions. After a
3298 crash report from Prabhu.
3304 crash report from Prabhu.
3299
3305
3300 2003-05-16 Fernando Perez <fperez@colorado.edu>
3306 2003-05-16 Fernando Perez <fperez@colorado.edu>
3301
3307
3302 * IPython/iplib.py (InteractiveShell.excepthook): New method to
3308 * IPython/iplib.py (InteractiveShell.excepthook): New method to
3303 protect ipython from user code which may call directly
3309 protect ipython from user code which may call directly
3304 sys.excepthook (this looks like an ipython crash to the user, even
3310 sys.excepthook (this looks like an ipython crash to the user, even
3305 when it isn't). After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
3311 when it isn't). After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
3306 This is especially important to help users of WxWindows, but may
3312 This is especially important to help users of WxWindows, but may
3307 also be useful in other cases.
3313 also be useful in other cases.
3308
3314
3309 * IPython/ultraTB.py (AutoFormattedTB.__call__): Changed to allow
3315 * IPython/ultraTB.py (AutoFormattedTB.__call__): Changed to allow
3310 an optional tb_offset to be specified, and to preserve exception
3316 an optional tb_offset to be specified, and to preserve exception
3311 info if given. After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
3317 info if given. After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
3312
3318
3313 * ipython.1 (Default): Thanks to Jack's work, we now have manpages!
3319 * ipython.1 (Default): Thanks to Jack's work, we now have manpages!
3314
3320
3315 2003-05-15 Fernando Perez <fperez@colorado.edu>
3321 2003-05-15 Fernando Perez <fperez@colorado.edu>
3316
3322
3317 * IPython/iplib.py (InteractiveShell.user_setup): Fix crash when
3323 * IPython/iplib.py (InteractiveShell.user_setup): Fix crash when
3318 installing for a new user under Windows.
3324 installing for a new user under Windows.
3319
3325
3320 2003-05-12 Fernando Perez <fperez@colorado.edu>
3326 2003-05-12 Fernando Perez <fperez@colorado.edu>
3321
3327
3322 * IPython/iplib.py (InteractiveShell.handle_emacs): New line
3328 * IPython/iplib.py (InteractiveShell.handle_emacs): New line
3323 handler for Emacs comint-based lines. Currently it doesn't do
3329 handler for Emacs comint-based lines. Currently it doesn't do
3324 much (but importantly, it doesn't update the history cache). In
3330 much (but importantly, it doesn't update the history cache). In
3325 the future it may be expanded if Alex needs more functionality
3331 the future it may be expanded if Alex needs more functionality
3326 there.
3332 there.
3327
3333
3328 * IPython/CrashHandler.py (CrashHandler.__call__): Added platform
3334 * IPython/CrashHandler.py (CrashHandler.__call__): Added platform
3329 info to crash reports.
3335 info to crash reports.
3330
3336
3331 * IPython/iplib.py (InteractiveShell.mainloop): Added -c option,
3337 * IPython/iplib.py (InteractiveShell.mainloop): Added -c option,
3332 just like Python's -c. Also fixed crash with invalid -color
3338 just like Python's -c. Also fixed crash with invalid -color
3333 option value at startup. Thanks to Will French
3339 option value at startup. Thanks to Will French
3334 <wfrench-AT-bestweb.net> for the bug report.
3340 <wfrench-AT-bestweb.net> for the bug report.
3335
3341
3336 2003-05-09 Fernando Perez <fperez@colorado.edu>
3342 2003-05-09 Fernando Perez <fperez@colorado.edu>
3337
3343
3338 * IPython/genutils.py (EvalDict.__getitem__): Renamed EvalString
3344 * IPython/genutils.py (EvalDict.__getitem__): Renamed EvalString
3339 to EvalDict (it's a mapping, after all) and simplified its code
3345 to EvalDict (it's a mapping, after all) and simplified its code
3340 quite a bit, after a nice discussion on c.l.py where Gustavo
3346 quite a bit, after a nice discussion on c.l.py where Gustavo
3341 CΓ³rdova <gcordova-AT-sismex.com> suggested the new version.
3347 CΓ³rdova <gcordova-AT-sismex.com> suggested the new version.
3342
3348
3343 2003-04-30 Fernando Perez <fperez@colorado.edu>
3349 2003-04-30 Fernando Perez <fperez@colorado.edu>
3344
3350
3345 * IPython/genutils.py (timings_out): modified it to reduce its
3351 * IPython/genutils.py (timings_out): modified it to reduce its
3346 overhead in the common reps==1 case.
3352 overhead in the common reps==1 case.
3347
3353
3348 2003-04-29 Fernando Perez <fperez@colorado.edu>
3354 2003-04-29 Fernando Perez <fperez@colorado.edu>
3349
3355
3350 * IPython/genutils.py (timings_out): Modified to use the resource
3356 * IPython/genutils.py (timings_out): Modified to use the resource
3351 module, which avoids the wraparound problems of time.clock().
3357 module, which avoids the wraparound problems of time.clock().
3352
3358
3353 2003-04-17 *** Released version 0.2.15pre4
3359 2003-04-17 *** Released version 0.2.15pre4
3354
3360
3355 2003-04-17 Fernando Perez <fperez@colorado.edu>
3361 2003-04-17 Fernando Perez <fperez@colorado.edu>
3356
3362
3357 * setup.py (scriptfiles): Split windows-specific stuff over to a
3363 * setup.py (scriptfiles): Split windows-specific stuff over to a
3358 separate file, in an attempt to have a Windows GUI installer.
3364 separate file, in an attempt to have a Windows GUI installer.
3359 That didn't work, but part of the groundwork is done.
3365 That didn't work, but part of the groundwork is done.
3360
3366
3361 * IPython/UserConfig/ipythonrc: Added M-i, M-o and M-I for
3367 * IPython/UserConfig/ipythonrc: Added M-i, M-o and M-I for
3362 indent/unindent with 4 spaces. Particularly useful in combination
3368 indent/unindent with 4 spaces. Particularly useful in combination
3363 with the new auto-indent option.
3369 with the new auto-indent option.
3364
3370
3365 2003-04-16 Fernando Perez <fperez@colorado.edu>
3371 2003-04-16 Fernando Perez <fperez@colorado.edu>
3366
3372
3367 * IPython/Magic.py: various replacements of self.rc for
3373 * IPython/Magic.py: various replacements of self.rc for
3368 self.shell.rc. A lot more remains to be done to fully disentangle
3374 self.shell.rc. A lot more remains to be done to fully disentangle
3369 this class from the main Shell class.
3375 this class from the main Shell class.
3370
3376
3371 * IPython/GnuplotRuntime.py: added checks for mouse support so
3377 * IPython/GnuplotRuntime.py: added checks for mouse support so
3372 that we don't try to enable it if the current gnuplot doesn't
3378 that we don't try to enable it if the current gnuplot doesn't
3373 really support it. Also added checks so that we don't try to
3379 really support it. Also added checks so that we don't try to
3374 enable persist under Windows (where Gnuplot doesn't recognize the
3380 enable persist under Windows (where Gnuplot doesn't recognize the
3375 option).
3381 option).
3376
3382
3377 * IPython/iplib.py (InteractiveShell.interact): Added optional
3383 * IPython/iplib.py (InteractiveShell.interact): Added optional
3378 auto-indenting code, after a patch by King C. Shu
3384 auto-indenting code, after a patch by King C. Shu
3379 <kingshu-AT-myrealbox.com>. It's off by default because it doesn't
3385 <kingshu-AT-myrealbox.com>. It's off by default because it doesn't
3380 get along well with pasting indented code. If I ever figure out
3386 get along well with pasting indented code. If I ever figure out
3381 how to make that part go well, it will become on by default.
3387 how to make that part go well, it will become on by default.
3382
3388
3383 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixed bug which would
3389 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixed bug which would
3384 crash ipython if there was an unmatched '%' in the user's prompt
3390 crash ipython if there was an unmatched '%' in the user's prompt
3385 string. Reported by Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
3391 string. Reported by Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
3386
3392
3387 * IPython/iplib.py (InteractiveShell.interact): removed the
3393 * IPython/iplib.py (InteractiveShell.interact): removed the
3388 ability to ask the user whether he wants to crash or not at the
3394 ability to ask the user whether he wants to crash or not at the
3389 'last line' exception handler. Calling functions at that point
3395 'last line' exception handler. Calling functions at that point
3390 changes the stack, and the error reports would have incorrect
3396 changes the stack, and the error reports would have incorrect
3391 tracebacks.
3397 tracebacks.
3392
3398
3393 * IPython/Magic.py (Magic.magic_page): Added new @page magic, to
3399 * IPython/Magic.py (Magic.magic_page): Added new @page magic, to
3394 pass through a peger a pretty-printed form of any object. After a
3400 pass through a peger a pretty-printed form of any object. After a
3395 contribution by Olivier Aubert <oaubert-AT-bat710.univ-lyon1.fr>
3401 contribution by Olivier Aubert <oaubert-AT-bat710.univ-lyon1.fr>
3396
3402
3397 2003-04-14 Fernando Perez <fperez@colorado.edu>
3403 2003-04-14 Fernando Perez <fperez@colorado.edu>
3398
3404
3399 * IPython/iplib.py (InteractiveShell.user_setup): Fixed bug where
3405 * IPython/iplib.py (InteractiveShell.user_setup): Fixed bug where
3400 all files in ~ would be modified at first install (instead of
3406 all files in ~ would be modified at first install (instead of
3401 ~/.ipython). This could be potentially disastrous, as the
3407 ~/.ipython). This could be potentially disastrous, as the
3402 modification (make line-endings native) could damage binary files.
3408 modification (make line-endings native) could damage binary files.
3403
3409
3404 2003-04-10 Fernando Perez <fperez@colorado.edu>
3410 2003-04-10 Fernando Perez <fperez@colorado.edu>
3405
3411
3406 * IPython/iplib.py (InteractiveShell.handle_help): Modified to
3412 * IPython/iplib.py (InteractiveShell.handle_help): Modified to
3407 handle only lines which are invalid python. This now means that
3413 handle only lines which are invalid python. This now means that
3408 lines like 'x=1 #?' execute properly. Thanks to Jeffery Collins
3414 lines like 'x=1 #?' execute properly. Thanks to Jeffery Collins
3409 for the bug report.
3415 for the bug report.
3410
3416
3411 2003-04-01 Fernando Perez <fperez@colorado.edu>
3417 2003-04-01 Fernando Perez <fperez@colorado.edu>
3412
3418
3413 * IPython/iplib.py (InteractiveShell.showtraceback): Fixed bug
3419 * IPython/iplib.py (InteractiveShell.showtraceback): Fixed bug
3414 where failing to set sys.last_traceback would crash pdb.pm().
3420 where failing to set sys.last_traceback would crash pdb.pm().
3415 Thanks to Jeffery D. Collins <Jeff.Collins-AT-vexcel.com> for the bug
3421 Thanks to Jeffery D. Collins <Jeff.Collins-AT-vexcel.com> for the bug
3416 report.
3422 report.
3417
3423
3418 2003-03-25 Fernando Perez <fperez@colorado.edu>
3424 2003-03-25 Fernando Perez <fperez@colorado.edu>
3419
3425
3420 * IPython/Magic.py (Magic.magic_prun): rstrip() output of profiler
3426 * IPython/Magic.py (Magic.magic_prun): rstrip() output of profiler
3421 before printing it (it had a lot of spurious blank lines at the
3427 before printing it (it had a lot of spurious blank lines at the
3422 end).
3428 end).
3423
3429
3424 * IPython/Gnuplot2.py (Gnuplot.hardcopy): fixed bug where lpr
3430 * IPython/Gnuplot2.py (Gnuplot.hardcopy): fixed bug where lpr
3425 output would be sent 21 times! Obviously people don't use this
3431 output would be sent 21 times! Obviously people don't use this
3426 too often, or I would have heard about it.
3432 too often, or I would have heard about it.
3427
3433
3428 2003-03-24 Fernando Perez <fperez@colorado.edu>
3434 2003-03-24 Fernando Perez <fperez@colorado.edu>
3429
3435
3430 * setup.py (scriptfiles): renamed the data_files parameter from
3436 * setup.py (scriptfiles): renamed the data_files parameter from
3431 'base' to 'data' to fix rpm build issues. Thanks to Ralf Ahlbrink
3437 'base' to 'data' to fix rpm build issues. Thanks to Ralf Ahlbrink
3432 for the patch.
3438 for the patch.
3433
3439
3434 2003-03-20 Fernando Perez <fperez@colorado.edu>
3440 2003-03-20 Fernando Perez <fperez@colorado.edu>
3435
3441
3436 * IPython/genutils.py (error): added error() and fatal()
3442 * IPython/genutils.py (error): added error() and fatal()
3437 functions.
3443 functions.
3438
3444
3439 2003-03-18 *** Released version 0.2.15pre3
3445 2003-03-18 *** Released version 0.2.15pre3
3440
3446
3441 2003-03-18 Fernando Perez <fperez@colorado.edu>
3447 2003-03-18 Fernando Perez <fperez@colorado.edu>
3442
3448
3443 * setupext/install_data_ext.py
3449 * setupext/install_data_ext.py
3444 (install_data_ext.initialize_options): Class contributed by Jack
3450 (install_data_ext.initialize_options): Class contributed by Jack
3445 Moffit for fixing the old distutils hack. He is sending this to
3451 Moffit for fixing the old distutils hack. He is sending this to
3446 the distutils folks so in the future we may not need it as a
3452 the distutils folks so in the future we may not need it as a
3447 private fix.
3453 private fix.
3448
3454
3449 * MANIFEST.in: Extensive reorganization, based on Jack Moffit's
3455 * MANIFEST.in: Extensive reorganization, based on Jack Moffit's
3450 changes for Debian packaging. See his patch for full details.
3456 changes for Debian packaging. See his patch for full details.
3451 The old distutils hack of making the ipythonrc* files carry a
3457 The old distutils hack of making the ipythonrc* files carry a
3452 bogus .py extension is gone, at last. Examples were moved to a
3458 bogus .py extension is gone, at last. Examples were moved to a
3453 separate subdir under doc/, and the separate executable scripts
3459 separate subdir under doc/, and the separate executable scripts
3454 now live in their own directory. Overall a great cleanup. The
3460 now live in their own directory. Overall a great cleanup. The
3455 manual was updated to use the new files, and setup.py has been
3461 manual was updated to use the new files, and setup.py has been
3456 fixed for this setup.
3462 fixed for this setup.
3457
3463
3458 * IPython/PyColorize.py (Parser.usage): made non-executable and
3464 * IPython/PyColorize.py (Parser.usage): made non-executable and
3459 created a pycolor wrapper around it to be included as a script.
3465 created a pycolor wrapper around it to be included as a script.
3460
3466
3461 2003-03-12 *** Released version 0.2.15pre2
3467 2003-03-12 *** Released version 0.2.15pre2
3462
3468
3463 2003-03-12 Fernando Perez <fperez@colorado.edu>
3469 2003-03-12 Fernando Perez <fperez@colorado.edu>
3464
3470
3465 * IPython/ColorANSI.py (make_color_table): Finally fixed the
3471 * IPython/ColorANSI.py (make_color_table): Finally fixed the
3466 long-standing problem with garbage characters in some terminals.
3472 long-standing problem with garbage characters in some terminals.
3467 The issue was really that the \001 and \002 escapes must _only_ be
3473 The issue was really that the \001 and \002 escapes must _only_ be
3468 passed to input prompts (which call readline), but _never_ to
3474 passed to input prompts (which call readline), but _never_ to
3469 normal text to be printed on screen. I changed ColorANSI to have
3475 normal text to be printed on screen. I changed ColorANSI to have
3470 two classes: TermColors and InputTermColors, each with the
3476 two classes: TermColors and InputTermColors, each with the
3471 appropriate escapes for input prompts or normal text. The code in
3477 appropriate escapes for input prompts or normal text. The code in
3472 Prompts.py got slightly more complicated, but this very old and
3478 Prompts.py got slightly more complicated, but this very old and
3473 annoying bug is finally fixed.
3479 annoying bug is finally fixed.
3474
3480
3475 All the credit for nailing down the real origin of this problem
3481 All the credit for nailing down the real origin of this problem
3476 and the correct solution goes to Jack Moffit <jack-AT-xiph.org>.
3482 and the correct solution goes to Jack Moffit <jack-AT-xiph.org>.
3477 *Many* thanks to him for spending quite a bit of effort on this.
3483 *Many* thanks to him for spending quite a bit of effort on this.
3478
3484
3479 2003-03-05 *** Released version 0.2.15pre1
3485 2003-03-05 *** Released version 0.2.15pre1
3480
3486
3481 2003-03-03 Fernando Perez <fperez@colorado.edu>
3487 2003-03-03 Fernando Perez <fperez@colorado.edu>
3482
3488
3483 * IPython/FakeModule.py: Moved the former _FakeModule to a
3489 * IPython/FakeModule.py: Moved the former _FakeModule to a
3484 separate file, because it's also needed by Magic (to fix a similar
3490 separate file, because it's also needed by Magic (to fix a similar
3485 pickle-related issue in @run).
3491 pickle-related issue in @run).
3486
3492
3487 2003-03-02 Fernando Perez <fperez@colorado.edu>
3493 2003-03-02 Fernando Perez <fperez@colorado.edu>
3488
3494
3489 * IPython/Magic.py (Magic.magic_autocall): new magic to control
3495 * IPython/Magic.py (Magic.magic_autocall): new magic to control
3490 the autocall option at runtime.
3496 the autocall option at runtime.
3491 (Magic.magic_dhist): changed self.user_ns to self.shell.user_ns
3497 (Magic.magic_dhist): changed self.user_ns to self.shell.user_ns
3492 across Magic.py to start separating Magic from InteractiveShell.
3498 across Magic.py to start separating Magic from InteractiveShell.
3493 (Magic._ofind): Fixed to return proper namespace for dotted
3499 (Magic._ofind): Fixed to return proper namespace for dotted
3494 names. Before, a dotted name would always return 'not currently
3500 names. Before, a dotted name would always return 'not currently
3495 defined', because it would find the 'parent'. s.x would be found,
3501 defined', because it would find the 'parent'. s.x would be found,
3496 but since 'x' isn't defined by itself, it would get confused.
3502 but since 'x' isn't defined by itself, it would get confused.
3497 (Magic.magic_run): Fixed pickling problems reported by Ralf
3503 (Magic.magic_run): Fixed pickling problems reported by Ralf
3498 Ahlbrink <RAhlbrink-AT-RosenInspection.net>. The fix was similar to
3504 Ahlbrink <RAhlbrink-AT-RosenInspection.net>. The fix was similar to
3499 that I'd used when Mike Heeter reported similar issues at the
3505 that I'd used when Mike Heeter reported similar issues at the
3500 top-level, but now for @run. It boils down to injecting the
3506 top-level, but now for @run. It boils down to injecting the
3501 namespace where code is being executed with something that looks
3507 namespace where code is being executed with something that looks
3502 enough like a module to fool pickle.dump(). Since a pickle stores
3508 enough like a module to fool pickle.dump(). Since a pickle stores
3503 a named reference to the importing module, we need this for
3509 a named reference to the importing module, we need this for
3504 pickles to save something sensible.
3510 pickles to save something sensible.
3505
3511
3506 * IPython/ipmaker.py (make_IPython): added an autocall option.
3512 * IPython/ipmaker.py (make_IPython): added an autocall option.
3507
3513
3508 * IPython/iplib.py (InteractiveShell._prefilter): reordered all of
3514 * IPython/iplib.py (InteractiveShell._prefilter): reordered all of
3509 the auto-eval code. Now autocalling is an option, and the code is
3515 the auto-eval code. Now autocalling is an option, and the code is
3510 also vastly safer. There is no more eval() involved at all.
3516 also vastly safer. There is no more eval() involved at all.
3511
3517
3512 2003-03-01 Fernando Perez <fperez@colorado.edu>
3518 2003-03-01 Fernando Perez <fperez@colorado.edu>
3513
3519
3514 * IPython/Magic.py (Magic._ofind): Changed interface to return a
3520 * IPython/Magic.py (Magic._ofind): Changed interface to return a
3515 dict with named keys instead of a tuple.
3521 dict with named keys instead of a tuple.
3516
3522
3517 * IPython: Started using CVS for IPython as of 0.2.15pre1.
3523 * IPython: Started using CVS for IPython as of 0.2.15pre1.
3518
3524
3519 * setup.py (make_shortcut): Fixed message about directories
3525 * setup.py (make_shortcut): Fixed message about directories
3520 created during Windows installation (the directories were ok, just
3526 created during Windows installation (the directories were ok, just
3521 the printed message was misleading). Thanks to Chris Liechti
3527 the printed message was misleading). Thanks to Chris Liechti
3522 <cliechti-AT-gmx.net> for the heads up.
3528 <cliechti-AT-gmx.net> for the heads up.
3523
3529
3524 2003-02-21 Fernando Perez <fperez@colorado.edu>
3530 2003-02-21 Fernando Perez <fperez@colorado.edu>
3525
3531
3526 * IPython/iplib.py (InteractiveShell._prefilter): Fixed catching
3532 * IPython/iplib.py (InteractiveShell._prefilter): Fixed catching
3527 of ValueError exception when checking for auto-execution. This
3533 of ValueError exception when checking for auto-execution. This
3528 one is raised by things like Numeric arrays arr.flat when the
3534 one is raised by things like Numeric arrays arr.flat when the
3529 array is non-contiguous.
3535 array is non-contiguous.
3530
3536
3531 2003-01-31 Fernando Perez <fperez@colorado.edu>
3537 2003-01-31 Fernando Perez <fperez@colorado.edu>
3532
3538
3533 * IPython/genutils.py (SystemExec.bq): Fixed bug where bq would
3539 * IPython/genutils.py (SystemExec.bq): Fixed bug where bq would
3534 not return any value at all (even though the command would get
3540 not return any value at all (even though the command would get
3535 executed).
3541 executed).
3536 (xsys): Flush stdout right after printing the command to ensure
3542 (xsys): Flush stdout right after printing the command to ensure
3537 proper ordering of commands and command output in the total
3543 proper ordering of commands and command output in the total
3538 output.
3544 output.
3539 (SystemExec/xsys/bq): Switched the names of xsys/bq and
3545 (SystemExec/xsys/bq): Switched the names of xsys/bq and
3540 system/getoutput as defaults. The old ones are kept for
3546 system/getoutput as defaults. The old ones are kept for
3541 compatibility reasons, so no code which uses this library needs
3547 compatibility reasons, so no code which uses this library needs
3542 changing.
3548 changing.
3543
3549
3544 2003-01-27 *** Released version 0.2.14
3550 2003-01-27 *** Released version 0.2.14
3545
3551
3546 2003-01-25 Fernando Perez <fperez@colorado.edu>
3552 2003-01-25 Fernando Perez <fperez@colorado.edu>
3547
3553
3548 * IPython/Magic.py (Magic.magic_edit): Fixed problem where
3554 * IPython/Magic.py (Magic.magic_edit): Fixed problem where
3549 functions defined in previous edit sessions could not be re-edited
3555 functions defined in previous edit sessions could not be re-edited
3550 (because the temp files were immediately removed). Now temp files
3556 (because the temp files were immediately removed). Now temp files
3551 are removed only at IPython's exit.
3557 are removed only at IPython's exit.
3552 (Magic.magic_run): Improved @run to perform shell-like expansions
3558 (Magic.magic_run): Improved @run to perform shell-like expansions
3553 on its arguments (~users and $VARS). With this, @run becomes more
3559 on its arguments (~users and $VARS). With this, @run becomes more
3554 like a normal command-line.
3560 like a normal command-line.
3555
3561
3556 * IPython/Shell.py (IPShellEmbed.__call__): Fixed a bunch of small
3562 * IPython/Shell.py (IPShellEmbed.__call__): Fixed a bunch of small
3557 bugs related to embedding and cleaned up that code. A fairly
3563 bugs related to embedding and cleaned up that code. A fairly
3558 important one was the impossibility to access the global namespace
3564 important one was the impossibility to access the global namespace
3559 through the embedded IPython (only local variables were visible).
3565 through the embedded IPython (only local variables were visible).
3560
3566
3561 2003-01-14 Fernando Perez <fperez@colorado.edu>
3567 2003-01-14 Fernando Perez <fperez@colorado.edu>
3562
3568
3563 * IPython/iplib.py (InteractiveShell._prefilter): Fixed
3569 * IPython/iplib.py (InteractiveShell._prefilter): Fixed
3564 auto-calling to be a bit more conservative. Now it doesn't get
3570 auto-calling to be a bit more conservative. Now it doesn't get
3565 triggered if any of '!=()<>' are in the rest of the input line, to
3571 triggered if any of '!=()<>' are in the rest of the input line, to
3566 allow comparing callables. Thanks to Alex for the heads up.
3572 allow comparing callables. Thanks to Alex for the heads up.
3567
3573
3568 2003-01-07 Fernando Perez <fperez@colorado.edu>
3574 2003-01-07 Fernando Perez <fperez@colorado.edu>
3569
3575
3570 * IPython/genutils.py (page): fixed estimation of the number of
3576 * IPython/genutils.py (page): fixed estimation of the number of
3571 lines in a string to be paged to simply count newlines. This
3577 lines in a string to be paged to simply count newlines. This
3572 prevents over-guessing due to embedded escape sequences. A better
3578 prevents over-guessing due to embedded escape sequences. A better
3573 long-term solution would involve stripping out the control chars
3579 long-term solution would involve stripping out the control chars
3574 for the count, but it's potentially so expensive I just don't
3580 for the count, but it's potentially so expensive I just don't
3575 think it's worth doing.
3581 think it's worth doing.
3576
3582
3577 2002-12-19 *** Released version 0.2.14pre50
3583 2002-12-19 *** Released version 0.2.14pre50
3578
3584
3579 2002-12-19 Fernando Perez <fperez@colorado.edu>
3585 2002-12-19 Fernando Perez <fperez@colorado.edu>
3580
3586
3581 * tools/release (version): Changed release scripts to inform
3587 * tools/release (version): Changed release scripts to inform
3582 Andrea and build a NEWS file with a list of recent changes.
3588 Andrea and build a NEWS file with a list of recent changes.
3583
3589
3584 * IPython/ColorANSI.py (__all__): changed terminal detection
3590 * IPython/ColorANSI.py (__all__): changed terminal detection
3585 code. Seems to work better for xterms without breaking
3591 code. Seems to work better for xterms without breaking
3586 konsole. Will need more testing to determine if WinXP and Mac OSX
3592 konsole. Will need more testing to determine if WinXP and Mac OSX
3587 also work ok.
3593 also work ok.
3588
3594
3589 2002-12-18 *** Released version 0.2.14pre49
3595 2002-12-18 *** Released version 0.2.14pre49
3590
3596
3591 2002-12-18 Fernando Perez <fperez@colorado.edu>
3597 2002-12-18 Fernando Perez <fperez@colorado.edu>
3592
3598
3593 * Docs: added new info about Mac OSX, from Andrea.
3599 * Docs: added new info about Mac OSX, from Andrea.
3594
3600
3595 * IPython/Gnuplot2.py (String): Added a String PlotItem class to
3601 * IPython/Gnuplot2.py (String): Added a String PlotItem class to
3596 allow direct plotting of python strings whose format is the same
3602 allow direct plotting of python strings whose format is the same
3597 of gnuplot data files.
3603 of gnuplot data files.
3598
3604
3599 2002-12-16 Fernando Perez <fperez@colorado.edu>
3605 2002-12-16 Fernando Perez <fperez@colorado.edu>
3600
3606
3601 * IPython/iplib.py (InteractiveShell.interact): fixed default (y)
3607 * IPython/iplib.py (InteractiveShell.interact): fixed default (y)
3602 value of exit question to be acknowledged.
3608 value of exit question to be acknowledged.
3603
3609
3604 2002-12-03 Fernando Perez <fperez@colorado.edu>
3610 2002-12-03 Fernando Perez <fperez@colorado.edu>
3605
3611
3606 * IPython/ipmaker.py: removed generators, which had been added
3612 * IPython/ipmaker.py: removed generators, which had been added
3607 by mistake in an earlier debugging run. This was causing trouble
3613 by mistake in an earlier debugging run. This was causing trouble
3608 to users of python 2.1.x. Thanks to Abel Daniel <abli-AT-freemail.hu>
3614 to users of python 2.1.x. Thanks to Abel Daniel <abli-AT-freemail.hu>
3609 for pointing this out.
3615 for pointing this out.
3610
3616
3611 2002-11-17 Fernando Perez <fperez@colorado.edu>
3617 2002-11-17 Fernando Perez <fperez@colorado.edu>
3612
3618
3613 * Manual: updated the Gnuplot section.
3619 * Manual: updated the Gnuplot section.
3614
3620
3615 * IPython/GnuplotRuntime.py: refactored a lot all this code, with
3621 * IPython/GnuplotRuntime.py: refactored a lot all this code, with
3616 a much better split of what goes in Runtime and what goes in
3622 a much better split of what goes in Runtime and what goes in
3617 Interactive.
3623 Interactive.
3618
3624
3619 * IPython/ipmaker.py: fixed bug where import_fail_info wasn't
3625 * IPython/ipmaker.py: fixed bug where import_fail_info wasn't
3620 being imported from iplib.
3626 being imported from iplib.
3621
3627
3622 * IPython/GnuplotInteractive.py (magic_gpc): renamed @gp to @gpc
3628 * IPython/GnuplotInteractive.py (magic_gpc): renamed @gp to @gpc
3623 for command-passing. Now the global Gnuplot instance is called
3629 for command-passing. Now the global Gnuplot instance is called
3624 'gp' instead of 'g', which was really a far too fragile and
3630 'gp' instead of 'g', which was really a far too fragile and
3625 common name.
3631 common name.
3626
3632
3627 * IPython/Gnuplot2.py (eps_fix_bbox): added this to fix broken
3633 * IPython/Gnuplot2.py (eps_fix_bbox): added this to fix broken
3628 bounding boxes generated by Gnuplot for square plots.
3634 bounding boxes generated by Gnuplot for square plots.
3629
3635
3630 * IPython/genutils.py (popkey): new function added. I should
3636 * IPython/genutils.py (popkey): new function added. I should
3631 suggest this on c.l.py as a dict method, it seems useful.
3637 suggest this on c.l.py as a dict method, it seems useful.
3632
3638
3633 * IPython/Gnuplot2.py (Gnuplot.plot): Overhauled plot and replot
3639 * IPython/Gnuplot2.py (Gnuplot.plot): Overhauled plot and replot
3634 to transparently handle PostScript generation. MUCH better than
3640 to transparently handle PostScript generation. MUCH better than
3635 the previous plot_eps/replot_eps (which I removed now). The code
3641 the previous plot_eps/replot_eps (which I removed now). The code
3636 is also fairly clean and well documented now (including
3642 is also fairly clean and well documented now (including
3637 docstrings).
3643 docstrings).
3638
3644
3639 2002-11-13 Fernando Perez <fperez@colorado.edu>
3645 2002-11-13 Fernando Perez <fperez@colorado.edu>
3640
3646
3641 * IPython/Magic.py (Magic.magic_edit): fixed docstring
3647 * IPython/Magic.py (Magic.magic_edit): fixed docstring
3642 (inconsistent with options).
3648 (inconsistent with options).
3643
3649
3644 * IPython/Gnuplot2.py (Gnuplot.hardcopy): hardcopy had been
3650 * IPython/Gnuplot2.py (Gnuplot.hardcopy): hardcopy had been
3645 manually disabled, I don't know why. Fixed it.
3651 manually disabled, I don't know why. Fixed it.
3646 (Gnuplot._plot_eps): added new plot_eps/replot_eps to get directly
3652 (Gnuplot._plot_eps): added new plot_eps/replot_eps to get directly
3647 eps output.
3653 eps output.
3648
3654
3649 2002-11-12 Fernando Perez <fperez@colorado.edu>
3655 2002-11-12 Fernando Perez <fperez@colorado.edu>
3650
3656
3651 * IPython/genutils.py (ask_yes_no): trap EOF and ^C so that they
3657 * IPython/genutils.py (ask_yes_no): trap EOF and ^C so that they
3652 don't propagate up to caller. Fixes crash reported by François
3658 don't propagate up to caller. Fixes crash reported by François
3653 Pinard.
3659 Pinard.
3654
3660
3655 2002-11-09 Fernando Perez <fperez@colorado.edu>
3661 2002-11-09 Fernando Perez <fperez@colorado.edu>
3656
3662
3657 * IPython/ipmaker.py (make_IPython): fixed problem with writing
3663 * IPython/ipmaker.py (make_IPython): fixed problem with writing
3658 history file for new users.
3664 history file for new users.
3659 (make_IPython): fixed bug where initial install would leave the
3665 (make_IPython): fixed bug where initial install would leave the
3660 user running in the .ipython dir.
3666 user running in the .ipython dir.
3661 (make_IPython): fixed bug where config dir .ipython would be
3667 (make_IPython): fixed bug where config dir .ipython would be
3662 created regardless of the given -ipythondir option. Thanks to Cory
3668 created regardless of the given -ipythondir option. Thanks to Cory
3663 Dodt <cdodt-AT-fcoe.k12.ca.us> for the bug report.
3669 Dodt <cdodt-AT-fcoe.k12.ca.us> for the bug report.
3664
3670
3665 * IPython/genutils.py (ask_yes_no): new function for asking yes/no
3671 * IPython/genutils.py (ask_yes_no): new function for asking yes/no
3666 type confirmations. Will need to use it in all of IPython's code
3672 type confirmations. Will need to use it in all of IPython's code
3667 consistently.
3673 consistently.
3668
3674
3669 * IPython/CrashHandler.py (CrashHandler.__call__): changed the
3675 * IPython/CrashHandler.py (CrashHandler.__call__): changed the
3670 context to print 31 lines instead of the default 5. This will make
3676 context to print 31 lines instead of the default 5. This will make
3671 the crash reports extremely detailed in case the problem is in
3677 the crash reports extremely detailed in case the problem is in
3672 libraries I don't have access to.
3678 libraries I don't have access to.
3673
3679
3674 * IPython/iplib.py (InteractiveShell.interact): changed the 'last
3680 * IPython/iplib.py (InteractiveShell.interact): changed the 'last
3675 line of defense' code to still crash, but giving users fair
3681 line of defense' code to still crash, but giving users fair
3676 warning. I don't want internal errors to go unreported: if there's
3682 warning. I don't want internal errors to go unreported: if there's
3677 an internal problem, IPython should crash and generate a full
3683 an internal problem, IPython should crash and generate a full
3678 report.
3684 report.
3679
3685
3680 2002-11-08 Fernando Perez <fperez@colorado.edu>
3686 2002-11-08 Fernando Perez <fperez@colorado.edu>
3681
3687
3682 * IPython/iplib.py (InteractiveShell.interact): added code to trap
3688 * IPython/iplib.py (InteractiveShell.interact): added code to trap
3683 otherwise uncaught exceptions which can appear if people set
3689 otherwise uncaught exceptions which can appear if people set
3684 sys.stdout to something badly broken. Thanks to a crash report
3690 sys.stdout to something badly broken. Thanks to a crash report
3685 from henni-AT-mail.brainbot.com.
3691 from henni-AT-mail.brainbot.com.
3686
3692
3687 2002-11-04 Fernando Perez <fperez@colorado.edu>
3693 2002-11-04 Fernando Perez <fperez@colorado.edu>
3688
3694
3689 * IPython/iplib.py (InteractiveShell.interact): added
3695 * IPython/iplib.py (InteractiveShell.interact): added
3690 __IPYTHON__active to the builtins. It's a flag which goes on when
3696 __IPYTHON__active to the builtins. It's a flag which goes on when
3691 the interaction starts and goes off again when it stops. This
3697 the interaction starts and goes off again when it stops. This
3692 allows embedding code to detect being inside IPython. Before this
3698 allows embedding code to detect being inside IPython. Before this
3693 was done via __IPYTHON__, but that only shows that an IPython
3699 was done via __IPYTHON__, but that only shows that an IPython
3694 instance has been created.
3700 instance has been created.
3695
3701
3696 * IPython/Magic.py (Magic.magic_env): I realized that in a
3702 * IPython/Magic.py (Magic.magic_env): I realized that in a
3697 UserDict, instance.data holds the data as a normal dict. So I
3703 UserDict, instance.data holds the data as a normal dict. So I
3698 modified @env to return os.environ.data instead of rebuilding a
3704 modified @env to return os.environ.data instead of rebuilding a
3699 dict by hand.
3705 dict by hand.
3700
3706
3701 2002-11-02 Fernando Perez <fperez@colorado.edu>
3707 2002-11-02 Fernando Perez <fperez@colorado.edu>
3702
3708
3703 * IPython/genutils.py (warn): changed so that level 1 prints no
3709 * IPython/genutils.py (warn): changed so that level 1 prints no
3704 header. Level 2 is now the default (with 'WARNING' header, as
3710 header. Level 2 is now the default (with 'WARNING' header, as
3705 before). I think I tracked all places where changes were needed in
3711 before). I think I tracked all places where changes were needed in
3706 IPython, but outside code using the old level numbering may have
3712 IPython, but outside code using the old level numbering may have
3707 broken.
3713 broken.
3708
3714
3709 * IPython/iplib.py (InteractiveShell.runcode): added this to
3715 * IPython/iplib.py (InteractiveShell.runcode): added this to
3710 handle the tracebacks in SystemExit traps correctly. The previous
3716 handle the tracebacks in SystemExit traps correctly. The previous
3711 code (through interact) was printing more of the stack than
3717 code (through interact) was printing more of the stack than
3712 necessary, showing IPython internal code to the user.
3718 necessary, showing IPython internal code to the user.
3713
3719
3714 * IPython/UserConfig/ipythonrc.py: Made confirm_exit 1 by
3720 * IPython/UserConfig/ipythonrc.py: Made confirm_exit 1 by
3715 default. Now that the default at the confirmation prompt is yes,
3721 default. Now that the default at the confirmation prompt is yes,
3716 it's not so intrusive. François' argument that ipython sessions
3722 it's not so intrusive. François' argument that ipython sessions
3717 tend to be complex enough not to lose them from an accidental C-d,
3723 tend to be complex enough not to lose them from an accidental C-d,
3718 is a valid one.
3724 is a valid one.
3719
3725
3720 * IPython/iplib.py (InteractiveShell.interact): added a
3726 * IPython/iplib.py (InteractiveShell.interact): added a
3721 showtraceback() call to the SystemExit trap, and modified the exit
3727 showtraceback() call to the SystemExit trap, and modified the exit
3722 confirmation to have yes as the default.
3728 confirmation to have yes as the default.
3723
3729
3724 * IPython/UserConfig/ipythonrc.py: removed 'session' option from
3730 * IPython/UserConfig/ipythonrc.py: removed 'session' option from
3725 this file. It's been gone from the code for a long time, this was
3731 this file. It's been gone from the code for a long time, this was
3726 simply leftover junk.
3732 simply leftover junk.
3727
3733
3728 2002-11-01 Fernando Perez <fperez@colorado.edu>
3734 2002-11-01 Fernando Perez <fperez@colorado.edu>
3729
3735
3730 * IPython/UserConfig/ipythonrc.py: new confirm_exit option
3736 * IPython/UserConfig/ipythonrc.py: new confirm_exit option
3731 added. If set, IPython now traps EOF and asks for
3737 added. If set, IPython now traps EOF and asks for
3732 confirmation. After a request by François Pinard.
3738 confirmation. After a request by François Pinard.
3733
3739
3734 * IPython/Magic.py (Magic.magic_Exit): New @Exit and @Quit instead
3740 * IPython/Magic.py (Magic.magic_Exit): New @Exit and @Quit instead
3735 of @abort, and with a new (better) mechanism for handling the
3741 of @abort, and with a new (better) mechanism for handling the
3736 exceptions.
3742 exceptions.
3737
3743
3738 2002-10-27 Fernando Perez <fperez@colorado.edu>
3744 2002-10-27 Fernando Perez <fperez@colorado.edu>
3739
3745
3740 * IPython/usage.py (__doc__): updated the --help information and
3746 * IPython/usage.py (__doc__): updated the --help information and
3741 the ipythonrc file to indicate that -log generates
3747 the ipythonrc file to indicate that -log generates
3742 ./ipython.log. Also fixed the corresponding info in @logstart.
3748 ./ipython.log. Also fixed the corresponding info in @logstart.
3743 This and several other fixes in the manuals thanks to reports by
3749 This and several other fixes in the manuals thanks to reports by
3744 François Pinard <pinard-AT-iro.umontreal.ca>.
3750 François Pinard <pinard-AT-iro.umontreal.ca>.
3745
3751
3746 * IPython/Logger.py (Logger.switch_log): Fixed error message to
3752 * IPython/Logger.py (Logger.switch_log): Fixed error message to
3747 refer to @logstart (instead of @log, which doesn't exist).
3753 refer to @logstart (instead of @log, which doesn't exist).
3748
3754
3749 * IPython/iplib.py (InteractiveShell._prefilter): fixed
3755 * IPython/iplib.py (InteractiveShell._prefilter): fixed
3750 AttributeError crash. Thanks to Christopher Armstrong
3756 AttributeError crash. Thanks to Christopher Armstrong
3751 <radix-AT-twistedmatrix.com> for the report/fix. This bug had been
3757 <radix-AT-twistedmatrix.com> for the report/fix. This bug had been
3752 introduced recently (in 0.2.14pre37) with the fix to the eval
3758 introduced recently (in 0.2.14pre37) with the fix to the eval
3753 problem mentioned below.
3759 problem mentioned below.
3754
3760
3755 2002-10-17 Fernando Perez <fperez@colorado.edu>
3761 2002-10-17 Fernando Perez <fperez@colorado.edu>
3756
3762
3757 * IPython/ConfigLoader.py (ConfigLoader.load): Fixes for Windows
3763 * IPython/ConfigLoader.py (ConfigLoader.load): Fixes for Windows
3758 installation. Thanks to Leonardo Santagada <retype-AT-terra.com.br>.
3764 installation. Thanks to Leonardo Santagada <retype-AT-terra.com.br>.
3759
3765
3760 * IPython/iplib.py (InteractiveShell._prefilter): Many changes to
3766 * IPython/iplib.py (InteractiveShell._prefilter): Many changes to
3761 this function to fix a problem reported by Alex Schmolck. He saw
3767 this function to fix a problem reported by Alex Schmolck. He saw
3762 it with list comprehensions and generators, which were getting
3768 it with list comprehensions and generators, which were getting
3763 called twice. The real problem was an 'eval' call in testing for
3769 called twice. The real problem was an 'eval' call in testing for
3764 automagic which was evaluating the input line silently.
3770 automagic which was evaluating the input line silently.
3765
3771
3766 This is a potentially very nasty bug, if the input has side
3772 This is a potentially very nasty bug, if the input has side
3767 effects which must not be repeated. The code is much cleaner now,
3773 effects which must not be repeated. The code is much cleaner now,
3768 without any blanket 'except' left and with a regexp test for
3774 without any blanket 'except' left and with a regexp test for
3769 actual function names.
3775 actual function names.
3770
3776
3771 But an eval remains, which I'm not fully comfortable with. I just
3777 But an eval remains, which I'm not fully comfortable with. I just
3772 don't know how to find out if an expression could be a callable in
3778 don't know how to find out if an expression could be a callable in
3773 the user's namespace without doing an eval on the string. However
3779 the user's namespace without doing an eval on the string. However
3774 that string is now much more strictly checked so that no code
3780 that string is now much more strictly checked so that no code
3775 slips by, so the eval should only happen for things that can
3781 slips by, so the eval should only happen for things that can
3776 really be only function/method names.
3782 really be only function/method names.
3777
3783
3778 2002-10-15 Fernando Perez <fperez@colorado.edu>
3784 2002-10-15 Fernando Perez <fperez@colorado.edu>
3779
3785
3780 * Updated LyX to 1.2.1 so I can work on the docs again. Added Mac
3786 * Updated LyX to 1.2.1 so I can work on the docs again. Added Mac
3781 OSX information to main manual, removed README_Mac_OSX file from
3787 OSX information to main manual, removed README_Mac_OSX file from
3782 distribution. Also updated credits for recent additions.
3788 distribution. Also updated credits for recent additions.
3783
3789
3784 2002-10-10 Fernando Perez <fperez@colorado.edu>
3790 2002-10-10 Fernando Perez <fperez@colorado.edu>
3785
3791
3786 * README_Mac_OSX: Added a README for Mac OSX users for fixing
3792 * README_Mac_OSX: Added a README for Mac OSX users for fixing
3787 terminal-related issues. Many thanks to Andrea Riciputi
3793 terminal-related issues. Many thanks to Andrea Riciputi
3788 <andrea.riciputi-AT-libero.it> for writing it.
3794 <andrea.riciputi-AT-libero.it> for writing it.
3789
3795
3790 * IPython/UserConfig/ipythonrc.py: Fixes to various small issues,
3796 * IPython/UserConfig/ipythonrc.py: Fixes to various small issues,
3791 thanks to Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
3797 thanks to Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
3792
3798
3793 * setup.py (make_shortcut): Fixes for Windows installation. Thanks
3799 * setup.py (make_shortcut): Fixes for Windows installation. Thanks
3794 to Fredrik Kant <fredrik.kant-AT-front.com> and Syver Enstad
3800 to Fredrik Kant <fredrik.kant-AT-front.com> and Syver Enstad
3795 <syver-en-AT-online.no> who both submitted patches for this problem.
3801 <syver-en-AT-online.no> who both submitted patches for this problem.
3796
3802
3797 * IPython/iplib.py (InteractiveShell.embed_mainloop): Patch for
3803 * IPython/iplib.py (InteractiveShell.embed_mainloop): Patch for
3798 global embedding to make sure that things don't overwrite user
3804 global embedding to make sure that things don't overwrite user
3799 globals accidentally. Thanks to Richard <rxe-AT-renre-europe.com>
3805 globals accidentally. Thanks to Richard <rxe-AT-renre-europe.com>
3800
3806
3801 * IPython/Gnuplot2.py (gp): Patch for Gnuplot.py 1.6
3807 * IPython/Gnuplot2.py (gp): Patch for Gnuplot.py 1.6
3802 compatibility. Thanks to Hayden Callow
3808 compatibility. Thanks to Hayden Callow
3803 <h.callow-AT-elec.canterbury.ac.nz>
3809 <h.callow-AT-elec.canterbury.ac.nz>
3804
3810
3805 2002-10-04 Fernando Perez <fperez@colorado.edu>
3811 2002-10-04 Fernando Perez <fperez@colorado.edu>
3806
3812
3807 * IPython/Gnuplot2.py (PlotItem): Added 'index' option for
3813 * IPython/Gnuplot2.py (PlotItem): Added 'index' option for
3808 Gnuplot.File objects.
3814 Gnuplot.File objects.
3809
3815
3810 2002-07-23 Fernando Perez <fperez@colorado.edu>
3816 2002-07-23 Fernando Perez <fperez@colorado.edu>
3811
3817
3812 * IPython/genutils.py (timing): Added timings() and timing() for
3818 * IPython/genutils.py (timing): Added timings() and timing() for
3813 quick access to the most commonly needed data, the execution
3819 quick access to the most commonly needed data, the execution
3814 times. Old timing() renamed to timings_out().
3820 times. Old timing() renamed to timings_out().
3815
3821
3816 2002-07-18 Fernando Perez <fperez@colorado.edu>
3822 2002-07-18 Fernando Perez <fperez@colorado.edu>
3817
3823
3818 * IPython/Shell.py (IPShellEmbed.restore_system_completer): fixed
3824 * IPython/Shell.py (IPShellEmbed.restore_system_completer): fixed
3819 bug with nested instances disrupting the parent's tab completion.
3825 bug with nested instances disrupting the parent's tab completion.
3820
3826
3821 * IPython/iplib.py (all_completions): Added Alex Schmolck's
3827 * IPython/iplib.py (all_completions): Added Alex Schmolck's
3822 all_completions code to begin the emacs integration.
3828 all_completions code to begin the emacs integration.
3823
3829
3824 * IPython/Gnuplot2.py (zip_items): Added optional 'titles'
3830 * IPython/Gnuplot2.py (zip_items): Added optional 'titles'
3825 argument to allow titling individual arrays when plotting.
3831 argument to allow titling individual arrays when plotting.
3826
3832
3827 2002-07-15 Fernando Perez <fperez@colorado.edu>
3833 2002-07-15 Fernando Perez <fperez@colorado.edu>
3828
3834
3829 * setup.py (make_shortcut): changed to retrieve the value of
3835 * setup.py (make_shortcut): changed to retrieve the value of
3830 'Program Files' directory from the registry (this value changes in
3836 'Program Files' directory from the registry (this value changes in
3831 non-english versions of Windows). Thanks to Thomas Fanslau
3837 non-english versions of Windows). Thanks to Thomas Fanslau
3832 <tfanslau-AT-gmx.de> for the report.
3838 <tfanslau-AT-gmx.de> for the report.
3833
3839
3834 2002-07-10 Fernando Perez <fperez@colorado.edu>
3840 2002-07-10 Fernando Perez <fperez@colorado.edu>
3835
3841
3836 * IPython/ultraTB.py (VerboseTB.debugger): enabled workaround for
3842 * IPython/ultraTB.py (VerboseTB.debugger): enabled workaround for
3837 a bug in pdb, which crashes if a line with only whitespace is
3843 a bug in pdb, which crashes if a line with only whitespace is
3838 entered. Bug report submitted to sourceforge.
3844 entered. Bug report submitted to sourceforge.
3839
3845
3840 2002-07-09 Fernando Perez <fperez@colorado.edu>
3846 2002-07-09 Fernando Perez <fperez@colorado.edu>
3841
3847
3842 * IPython/ultraTB.py (VerboseTB.nullrepr): fixed rare crash when
3848 * IPython/ultraTB.py (VerboseTB.nullrepr): fixed rare crash when
3843 reporting exceptions (it's a bug in inspect.py, I just set a
3849 reporting exceptions (it's a bug in inspect.py, I just set a
3844 workaround).
3850 workaround).
3845
3851
3846 2002-07-08 Fernando Perez <fperez@colorado.edu>
3852 2002-07-08 Fernando Perez <fperez@colorado.edu>
3847
3853
3848 * IPython/iplib.py (InteractiveShell.__init__): fixed reference to
3854 * IPython/iplib.py (InteractiveShell.__init__): fixed reference to
3849 __IPYTHON__ in __builtins__ to show up in user_ns.
3855 __IPYTHON__ in __builtins__ to show up in user_ns.
3850
3856
3851 2002-07-03 Fernando Perez <fperez@colorado.edu>
3857 2002-07-03 Fernando Perez <fperez@colorado.edu>
3852
3858
3853 * IPython/GnuplotInteractive.py (magic_gp_set_default): changed
3859 * IPython/GnuplotInteractive.py (magic_gp_set_default): changed
3854 name from @gp_set_instance to @gp_set_default.
3860 name from @gp_set_instance to @gp_set_default.
3855
3861
3856 * IPython/ipmaker.py (make_IPython): default editor value set to
3862 * IPython/ipmaker.py (make_IPython): default editor value set to
3857 '0' (a string), to match the rc file. Otherwise will crash when
3863 '0' (a string), to match the rc file. Otherwise will crash when
3858 .strip() is called on it.
3864 .strip() is called on it.
3859
3865
3860
3866
3861 2002-06-28 Fernando Perez <fperez@colorado.edu>
3867 2002-06-28 Fernando Perez <fperez@colorado.edu>
3862
3868
3863 * IPython/iplib.py (InteractiveShell.safe_execfile): fix importing
3869 * IPython/iplib.py (InteractiveShell.safe_execfile): fix importing
3864 of files in current directory when a file is executed via
3870 of files in current directory when a file is executed via
3865 @run. Patch also by RA <ralf_ahlbrink-AT-web.de>.
3871 @run. Patch also by RA <ralf_ahlbrink-AT-web.de>.
3866
3872
3867 * setup.py (manfiles): fix for rpm builds, submitted by RA
3873 * setup.py (manfiles): fix for rpm builds, submitted by RA
3868 <ralf_ahlbrink-AT-web.de>. Now we have RPMs!
3874 <ralf_ahlbrink-AT-web.de>. Now we have RPMs!
3869
3875
3870 * IPython/ipmaker.py (make_IPython): fixed lookup of default
3876 * IPython/ipmaker.py (make_IPython): fixed lookup of default
3871 editor when set to '0'. Problem was, '0' evaluates to True (it's a
3877 editor when set to '0'. Problem was, '0' evaluates to True (it's a
3872 string!). A. Schmolck caught this one.
3878 string!). A. Schmolck caught this one.
3873
3879
3874 2002-06-27 Fernando Perez <fperez@colorado.edu>
3880 2002-06-27 Fernando Perez <fperez@colorado.edu>
3875
3881
3876 * IPython/ipmaker.py (make_IPython): fixed bug when running user
3882 * IPython/ipmaker.py (make_IPython): fixed bug when running user
3877 defined files at the cmd line. __name__ wasn't being set to
3883 defined files at the cmd line. __name__ wasn't being set to
3878 __main__.
3884 __main__.
3879
3885
3880 * IPython/Gnuplot2.py (zip_items): improved it so it can plot also
3886 * IPython/Gnuplot2.py (zip_items): improved it so it can plot also
3881 regular lists and tuples besides Numeric arrays.
3887 regular lists and tuples besides Numeric arrays.
3882
3888
3883 * IPython/Prompts.py (CachedOutput.__call__): Added output
3889 * IPython/Prompts.py (CachedOutput.__call__): Added output
3884 supression for input ending with ';'. Similar to Mathematica and
3890 supression for input ending with ';'. Similar to Mathematica and
3885 Matlab. The _* vars and Out[] list are still updated, just like
3891 Matlab. The _* vars and Out[] list are still updated, just like
3886 Mathematica behaves.
3892 Mathematica behaves.
3887
3893
3888 2002-06-25 Fernando Perez <fperez@colorado.edu>
3894 2002-06-25 Fernando Perez <fperez@colorado.edu>
3889
3895
3890 * IPython/ConfigLoader.py (ConfigLoader.load): fixed checking of
3896 * IPython/ConfigLoader.py (ConfigLoader.load): fixed checking of
3891 .ini extensions for profiels under Windows.
3897 .ini extensions for profiels under Windows.
3892
3898
3893 * IPython/OInspect.py (Inspector.pinfo): improved alignment of
3899 * IPython/OInspect.py (Inspector.pinfo): improved alignment of
3894 string form. Fix contributed by Alexander Schmolck
3900 string form. Fix contributed by Alexander Schmolck
3895 <a.schmolck-AT-gmx.net>
3901 <a.schmolck-AT-gmx.net>
3896
3902
3897 * IPython/GnuplotRuntime.py (gp_new): new function. Returns a
3903 * IPython/GnuplotRuntime.py (gp_new): new function. Returns a
3898 pre-configured Gnuplot instance.
3904 pre-configured Gnuplot instance.
3899
3905
3900 2002-06-21 Fernando Perez <fperez@colorado.edu>
3906 2002-06-21 Fernando Perez <fperez@colorado.edu>
3901
3907
3902 * IPython/numutils.py (exp_safe): new function, works around the
3908 * IPython/numutils.py (exp_safe): new function, works around the
3903 underflow problems in Numeric.
3909 underflow problems in Numeric.
3904 (log2): New fn. Safe log in base 2: returns exact integer answer
3910 (log2): New fn. Safe log in base 2: returns exact integer answer
3905 for exact integer powers of 2.
3911 for exact integer powers of 2.
3906
3912
3907 * IPython/Magic.py (get_py_filename): fixed it not expanding '~'
3913 * IPython/Magic.py (get_py_filename): fixed it not expanding '~'
3908 properly.
3914 properly.
3909
3915
3910 2002-06-20 Fernando Perez <fperez@colorado.edu>
3916 2002-06-20 Fernando Perez <fperez@colorado.edu>
3911
3917
3912 * IPython/genutils.py (timing): new function like
3918 * IPython/genutils.py (timing): new function like
3913 Mathematica's. Similar to time_test, but returns more info.
3919 Mathematica's. Similar to time_test, but returns more info.
3914
3920
3915 2002-06-18 Fernando Perez <fperez@colorado.edu>
3921 2002-06-18 Fernando Perez <fperez@colorado.edu>
3916
3922
3917 * IPython/Magic.py (Magic.magic_save): modified @save and @r
3923 * IPython/Magic.py (Magic.magic_save): modified @save and @r
3918 according to Mike Heeter's suggestions.
3924 according to Mike Heeter's suggestions.
3919
3925
3920 2002-06-16 Fernando Perez <fperez@colorado.edu>
3926 2002-06-16 Fernando Perez <fperez@colorado.edu>
3921
3927
3922 * IPython/GnuplotRuntime.py: Massive overhaul to the Gnuplot
3928 * IPython/GnuplotRuntime.py: Massive overhaul to the Gnuplot
3923 system. GnuplotMagic is gone as a user-directory option. New files
3929 system. GnuplotMagic is gone as a user-directory option. New files
3924 make it easier to use all the gnuplot stuff both from external
3930 make it easier to use all the gnuplot stuff both from external
3925 programs as well as from IPython. Had to rewrite part of
3931 programs as well as from IPython. Had to rewrite part of
3926 hardcopy() b/c of a strange bug: often the ps files simply don't
3932 hardcopy() b/c of a strange bug: often the ps files simply don't
3927 get created, and require a repeat of the command (often several
3933 get created, and require a repeat of the command (often several
3928 times).
3934 times).
3929
3935
3930 * IPython/ultraTB.py (AutoFormattedTB.__call__): changed to
3936 * IPython/ultraTB.py (AutoFormattedTB.__call__): changed to
3931 resolve output channel at call time, so that if sys.stderr has
3937 resolve output channel at call time, so that if sys.stderr has
3932 been redirected by user this gets honored.
3938 been redirected by user this gets honored.
3933
3939
3934 2002-06-13 Fernando Perez <fperez@colorado.edu>
3940 2002-06-13 Fernando Perez <fperez@colorado.edu>
3935
3941
3936 * IPython/Shell.py (IPShell.__init__): Changed IPythonShell to
3942 * IPython/Shell.py (IPShell.__init__): Changed IPythonShell to
3937 IPShell. Kept a copy with the old names to avoid breaking people's
3943 IPShell. Kept a copy with the old names to avoid breaking people's
3938 embedded code.
3944 embedded code.
3939
3945
3940 * IPython/ipython: simplified it to the bare minimum after
3946 * IPython/ipython: simplified it to the bare minimum after
3941 Holger's suggestions. Added info about how to use it in
3947 Holger's suggestions. Added info about how to use it in
3942 PYTHONSTARTUP.
3948 PYTHONSTARTUP.
3943
3949
3944 * IPython/Shell.py (IPythonShell): changed the options passing
3950 * IPython/Shell.py (IPythonShell): changed the options passing
3945 from a string with funky %s replacements to a straight list. Maybe
3951 from a string with funky %s replacements to a straight list. Maybe
3946 a bit more typing, but it follows sys.argv conventions, so there's
3952 a bit more typing, but it follows sys.argv conventions, so there's
3947 less special-casing to remember.
3953 less special-casing to remember.
3948
3954
3949 2002-06-12 Fernando Perez <fperez@colorado.edu>
3955 2002-06-12 Fernando Perez <fperez@colorado.edu>
3950
3956
3951 * IPython/Magic.py (Magic.magic_r): new magic auto-repeat
3957 * IPython/Magic.py (Magic.magic_r): new magic auto-repeat
3952 command. Thanks to a suggestion by Mike Heeter.
3958 command. Thanks to a suggestion by Mike Heeter.
3953 (Magic.magic_pfile): added behavior to look at filenames if given
3959 (Magic.magic_pfile): added behavior to look at filenames if given
3954 arg is not a defined object.
3960 arg is not a defined object.
3955 (Magic.magic_save): New @save function to save code snippets. Also
3961 (Magic.magic_save): New @save function to save code snippets. Also
3956 a Mike Heeter idea.
3962 a Mike Heeter idea.
3957
3963
3958 * IPython/UserConfig/GnuplotMagic.py (plot): Improvements to
3964 * IPython/UserConfig/GnuplotMagic.py (plot): Improvements to
3959 plot() and replot(). Much more convenient now, especially for
3965 plot() and replot(). Much more convenient now, especially for
3960 interactive use.
3966 interactive use.
3961
3967
3962 * IPython/Magic.py (Magic.magic_run): Added .py automatically to
3968 * IPython/Magic.py (Magic.magic_run): Added .py automatically to
3963 filenames.
3969 filenames.
3964
3970
3965 2002-06-02 Fernando Perez <fperez@colorado.edu>
3971 2002-06-02 Fernando Perez <fperez@colorado.edu>
3966
3972
3967 * IPython/Struct.py (Struct.__init__): modified to admit
3973 * IPython/Struct.py (Struct.__init__): modified to admit
3968 initialization via another struct.
3974 initialization via another struct.
3969
3975
3970 * IPython/genutils.py (SystemExec.__init__): New stateful
3976 * IPython/genutils.py (SystemExec.__init__): New stateful
3971 interface to xsys and bq. Useful for writing system scripts.
3977 interface to xsys and bq. Useful for writing system scripts.
3972
3978
3973 2002-05-30 Fernando Perez <fperez@colorado.edu>
3979 2002-05-30 Fernando Perez <fperez@colorado.edu>
3974
3980
3975 * MANIFEST.in: Changed docfile selection to exclude all the lyx
3981 * MANIFEST.in: Changed docfile selection to exclude all the lyx
3976 documents. This will make the user download smaller (it's getting
3982 documents. This will make the user download smaller (it's getting
3977 too big).
3983 too big).
3978
3984
3979 2002-05-29 Fernando Perez <fperez@colorado.edu>
3985 2002-05-29 Fernando Perez <fperez@colorado.edu>
3980
3986
3981 * IPython/iplib.py (_FakeModule.__init__): New class introduced to
3987 * IPython/iplib.py (_FakeModule.__init__): New class introduced to
3982 fix problems with shelve and pickle. Seems to work, but I don't
3988 fix problems with shelve and pickle. Seems to work, but I don't
3983 know if corner cases break it. Thanks to Mike Heeter
3989 know if corner cases break it. Thanks to Mike Heeter
3984 <korora-AT-SDF.LONESTAR.ORG> for the bug reports and test cases.
3990 <korora-AT-SDF.LONESTAR.ORG> for the bug reports and test cases.
3985
3991
3986 2002-05-24 Fernando Perez <fperez@colorado.edu>
3992 2002-05-24 Fernando Perez <fperez@colorado.edu>
3987
3993
3988 * IPython/Magic.py (Macro.__init__): fixed magics embedded in
3994 * IPython/Magic.py (Macro.__init__): fixed magics embedded in
3989 macros having broken.
3995 macros having broken.
3990
3996
3991 2002-05-21 Fernando Perez <fperez@colorado.edu>
3997 2002-05-21 Fernando Perez <fperez@colorado.edu>
3992
3998
3993 * IPython/Magic.py (Magic.magic_logstart): fixed recently
3999 * IPython/Magic.py (Magic.magic_logstart): fixed recently
3994 introduced logging bug: all history before logging started was
4000 introduced logging bug: all history before logging started was
3995 being written one character per line! This came from the redesign
4001 being written one character per line! This came from the redesign
3996 of the input history as a special list which slices to strings,
4002 of the input history as a special list which slices to strings,
3997 not to lists.
4003 not to lists.
3998
4004
3999 2002-05-20 Fernando Perez <fperez@colorado.edu>
4005 2002-05-20 Fernando Perez <fperez@colorado.edu>
4000
4006
4001 * IPython/Prompts.py (CachedOutput.__init__): made the color table
4007 * IPython/Prompts.py (CachedOutput.__init__): made the color table
4002 be an attribute of all classes in this module. The design of these
4008 be an attribute of all classes in this module. The design of these
4003 classes needs some serious overhauling.
4009 classes needs some serious overhauling.
4004
4010
4005 * IPython/DPyGetOpt.py (DPyGetOpt.setPosixCompliance): fixed bug
4011 * IPython/DPyGetOpt.py (DPyGetOpt.setPosixCompliance): fixed bug
4006 which was ignoring '_' in option names.
4012 which was ignoring '_' in option names.
4007
4013
4008 * IPython/ultraTB.py (FormattedTB.__init__): Changed
4014 * IPython/ultraTB.py (FormattedTB.__init__): Changed
4009 'Verbose_novars' to 'Context' and made it the new default. It's a
4015 'Verbose_novars' to 'Context' and made it the new default. It's a
4010 bit more readable and also safer than verbose.
4016 bit more readable and also safer than verbose.
4011
4017
4012 * IPython/PyColorize.py (Parser.__call__): Fixed coloring of
4018 * IPython/PyColorize.py (Parser.__call__): Fixed coloring of
4013 triple-quoted strings.
4019 triple-quoted strings.
4014
4020
4015 * IPython/OInspect.py (__all__): new module exposing the object
4021 * IPython/OInspect.py (__all__): new module exposing the object
4016 introspection facilities. Now the corresponding magics are dummy
4022 introspection facilities. Now the corresponding magics are dummy
4017 wrappers around this. Having this module will make it much easier
4023 wrappers around this. Having this module will make it much easier
4018 to put these functions into our modified pdb.
4024 to put these functions into our modified pdb.
4019 This new object inspector system uses the new colorizing module,
4025 This new object inspector system uses the new colorizing module,
4020 so source code and other things are nicely syntax highlighted.
4026 so source code and other things are nicely syntax highlighted.
4021
4027
4022 2002-05-18 Fernando Perez <fperez@colorado.edu>
4028 2002-05-18 Fernando Perez <fperez@colorado.edu>
4023
4029
4024 * IPython/ColorANSI.py: Split the coloring tools into a separate
4030 * IPython/ColorANSI.py: Split the coloring tools into a separate
4025 module so I can use them in other code easier (they were part of
4031 module so I can use them in other code easier (they were part of
4026 ultraTB).
4032 ultraTB).
4027
4033
4028 2002-05-17 Fernando Perez <fperez@colorado.edu>
4034 2002-05-17 Fernando Perez <fperez@colorado.edu>
4029
4035
4030 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
4036 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
4031 fixed it to set the global 'g' also to the called instance, as
4037 fixed it to set the global 'g' also to the called instance, as
4032 long as 'g' was still a gnuplot instance (so it doesn't overwrite
4038 long as 'g' was still a gnuplot instance (so it doesn't overwrite
4033 user's 'g' variables).
4039 user's 'g' variables).
4034
4040
4035 * IPython/iplib.py (InteractiveShell.__init__): Added In/Out
4041 * IPython/iplib.py (InteractiveShell.__init__): Added In/Out
4036 global variables (aliases to _ih,_oh) so that users which expect
4042 global variables (aliases to _ih,_oh) so that users which expect
4037 In[5] or Out[7] to work aren't unpleasantly surprised.
4043 In[5] or Out[7] to work aren't unpleasantly surprised.
4038 (InputList.__getslice__): new class to allow executing slices of
4044 (InputList.__getslice__): new class to allow executing slices of
4039 input history directly. Very simple class, complements the use of
4045 input history directly. Very simple class, complements the use of
4040 macros.
4046 macros.
4041
4047
4042 2002-05-16 Fernando Perez <fperez@colorado.edu>
4048 2002-05-16 Fernando Perez <fperez@colorado.edu>
4043
4049
4044 * setup.py (docdirbase): make doc directory be just doc/IPython
4050 * setup.py (docdirbase): make doc directory be just doc/IPython
4045 without version numbers, it will reduce clutter for users.
4051 without version numbers, it will reduce clutter for users.
4046
4052
4047 * IPython/Magic.py (Magic.magic_run): Add explicit local dict to
4053 * IPython/Magic.py (Magic.magic_run): Add explicit local dict to
4048 execfile call to prevent possible memory leak. See for details:
4054 execfile call to prevent possible memory leak. See for details:
4049 http://mail.python.org/pipermail/python-list/2002-February/088476.html
4055 http://mail.python.org/pipermail/python-list/2002-February/088476.html
4050
4056
4051 2002-05-15 Fernando Perez <fperez@colorado.edu>
4057 2002-05-15 Fernando Perez <fperez@colorado.edu>
4052
4058
4053 * IPython/Magic.py (Magic.magic_psource): made the object
4059 * IPython/Magic.py (Magic.magic_psource): made the object
4054 introspection names be more standard: pdoc, pdef, pfile and
4060 introspection names be more standard: pdoc, pdef, pfile and
4055 psource. They all print/page their output, and it makes
4061 psource. They all print/page their output, and it makes
4056 remembering them easier. Kept old names for compatibility as
4062 remembering them easier. Kept old names for compatibility as
4057 aliases.
4063 aliases.
4058
4064
4059 2002-05-14 Fernando Perez <fperez@colorado.edu>
4065 2002-05-14 Fernando Perez <fperez@colorado.edu>
4060
4066
4061 * IPython/UserConfig/GnuplotMagic.py: I think I finally understood
4067 * IPython/UserConfig/GnuplotMagic.py: I think I finally understood
4062 what the mouse problem was. The trick is to use gnuplot with temp
4068 what the mouse problem was. The trick is to use gnuplot with temp
4063 files and NOT with pipes (for data communication), because having
4069 files and NOT with pipes (for data communication), because having
4064 both pipes and the mouse on is bad news.
4070 both pipes and the mouse on is bad news.
4065
4071
4066 2002-05-13 Fernando Perez <fperez@colorado.edu>
4072 2002-05-13 Fernando Perez <fperez@colorado.edu>
4067
4073
4068 * IPython/Magic.py (Magic._ofind): fixed namespace order search
4074 * IPython/Magic.py (Magic._ofind): fixed namespace order search
4069 bug. Information would be reported about builtins even when
4075 bug. Information would be reported about builtins even when
4070 user-defined functions overrode them.
4076 user-defined functions overrode them.
4071
4077
4072 2002-05-11 Fernando Perez <fperez@colorado.edu>
4078 2002-05-11 Fernando Perez <fperez@colorado.edu>
4073
4079
4074 * IPython/__init__.py (__all__): removed FlexCompleter from
4080 * IPython/__init__.py (__all__): removed FlexCompleter from
4075 __all__ so that things don't fail in platforms without readline.
4081 __all__ so that things don't fail in platforms without readline.
4076
4082
4077 2002-05-10 Fernando Perez <fperez@colorado.edu>
4083 2002-05-10 Fernando Perez <fperez@colorado.edu>
4078
4084
4079 * IPython/__init__.py (__all__): removed numutils from __all__ b/c
4085 * IPython/__init__.py (__all__): removed numutils from __all__ b/c
4080 it requires Numeric, effectively making Numeric a dependency for
4086 it requires Numeric, effectively making Numeric a dependency for
4081 IPython.
4087 IPython.
4082
4088
4083 * Released 0.2.13
4089 * Released 0.2.13
4084
4090
4085 * IPython/Magic.py (Magic.magic_prun): big overhaul to the
4091 * IPython/Magic.py (Magic.magic_prun): big overhaul to the
4086 profiler interface. Now all the major options from the profiler
4092 profiler interface. Now all the major options from the profiler
4087 module are directly supported in IPython, both for single
4093 module are directly supported in IPython, both for single
4088 expressions (@prun) and for full programs (@run -p).
4094 expressions (@prun) and for full programs (@run -p).
4089
4095
4090 2002-05-09 Fernando Perez <fperez@colorado.edu>
4096 2002-05-09 Fernando Perez <fperez@colorado.edu>
4091
4097
4092 * IPython/Magic.py (Magic.magic_doc): fixed to show docstrings of
4098 * IPython/Magic.py (Magic.magic_doc): fixed to show docstrings of
4093 magic properly formatted for screen.
4099 magic properly formatted for screen.
4094
4100
4095 * setup.py (make_shortcut): Changed things to put pdf version in
4101 * setup.py (make_shortcut): Changed things to put pdf version in
4096 doc/ instead of doc/manual (had to change lyxport a bit).
4102 doc/ instead of doc/manual (had to change lyxport a bit).
4097
4103
4098 * IPython/Magic.py (Profile.string_stats): made profile runs go
4104 * IPython/Magic.py (Profile.string_stats): made profile runs go
4099 through pager (they are long and a pager allows searching, saving,
4105 through pager (they are long and a pager allows searching, saving,
4100 etc.)
4106 etc.)
4101
4107
4102 2002-05-08 Fernando Perez <fperez@colorado.edu>
4108 2002-05-08 Fernando Perez <fperez@colorado.edu>
4103
4109
4104 * Released 0.2.12
4110 * Released 0.2.12
4105
4111
4106 2002-05-06 Fernando Perez <fperez@colorado.edu>
4112 2002-05-06 Fernando Perez <fperez@colorado.edu>
4107
4113
4108 * IPython/Magic.py (Magic.magic_hist): small bug fixed (recently
4114 * IPython/Magic.py (Magic.magic_hist): small bug fixed (recently
4109 introduced); 'hist n1 n2' was broken.
4115 introduced); 'hist n1 n2' was broken.
4110 (Magic.magic_pdb): added optional on/off arguments to @pdb
4116 (Magic.magic_pdb): added optional on/off arguments to @pdb
4111 (Magic.magic_run): added option -i to @run, which executes code in
4117 (Magic.magic_run): added option -i to @run, which executes code in
4112 the IPython namespace instead of a clean one. Also added @irun as
4118 the IPython namespace instead of a clean one. Also added @irun as
4113 an alias to @run -i.
4119 an alias to @run -i.
4114
4120
4115 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
4121 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
4116 fixed (it didn't really do anything, the namespaces were wrong).
4122 fixed (it didn't really do anything, the namespaces were wrong).
4117
4123
4118 * IPython/Debugger.py (__init__): Added workaround for python 2.1
4124 * IPython/Debugger.py (__init__): Added workaround for python 2.1
4119
4125
4120 * IPython/__init__.py (__all__): Fixed package namespace, now
4126 * IPython/__init__.py (__all__): Fixed package namespace, now
4121 'import IPython' does give access to IPython.<all> as
4127 'import IPython' does give access to IPython.<all> as
4122 expected. Also renamed __release__ to Release.
4128 expected. Also renamed __release__ to Release.
4123
4129
4124 * IPython/Debugger.py (__license__): created new Pdb class which
4130 * IPython/Debugger.py (__license__): created new Pdb class which
4125 functions like a drop-in for the normal pdb.Pdb but does NOT
4131 functions like a drop-in for the normal pdb.Pdb but does NOT
4126 import readline by default. This way it doesn't muck up IPython's
4132 import readline by default. This way it doesn't muck up IPython's
4127 readline handling, and now tab-completion finally works in the
4133 readline handling, and now tab-completion finally works in the
4128 debugger -- sort of. It completes things globally visible, but the
4134 debugger -- sort of. It completes things globally visible, but the
4129 completer doesn't track the stack as pdb walks it. That's a bit
4135 completer doesn't track the stack as pdb walks it. That's a bit
4130 tricky, and I'll have to implement it later.
4136 tricky, and I'll have to implement it later.
4131
4137
4132 2002-05-05 Fernando Perez <fperez@colorado.edu>
4138 2002-05-05 Fernando Perez <fperez@colorado.edu>
4133
4139
4134 * IPython/Magic.py (Magic.magic_oinfo): fixed formatting bug for
4140 * IPython/Magic.py (Magic.magic_oinfo): fixed formatting bug for
4135 magic docstrings when printed via ? (explicit \'s were being
4141 magic docstrings when printed via ? (explicit \'s were being
4136 printed).
4142 printed).
4137
4143
4138 * IPython/ipmaker.py (make_IPython): fixed namespace
4144 * IPython/ipmaker.py (make_IPython): fixed namespace
4139 identification bug. Now variables loaded via logs or command-line
4145 identification bug. Now variables loaded via logs or command-line
4140 files are recognized in the interactive namespace by @who.
4146 files are recognized in the interactive namespace by @who.
4141
4147
4142 * IPython/iplib.py (InteractiveShell.safe_execfile): Fixed bug in
4148 * IPython/iplib.py (InteractiveShell.safe_execfile): Fixed bug in
4143 log replay system stemming from the string form of Structs.
4149 log replay system stemming from the string form of Structs.
4144
4150
4145 * IPython/Magic.py (Macro.__init__): improved macros to properly
4151 * IPython/Magic.py (Macro.__init__): improved macros to properly
4146 handle magic commands in them.
4152 handle magic commands in them.
4147 (Magic.magic_logstart): usernames are now expanded so 'logstart
4153 (Magic.magic_logstart): usernames are now expanded so 'logstart
4148 ~/mylog' now works.
4154 ~/mylog' now works.
4149
4155
4150 * IPython/iplib.py (complete): fixed bug where paths starting with
4156 * IPython/iplib.py (complete): fixed bug where paths starting with
4151 '/' would be completed as magic names.
4157 '/' would be completed as magic names.
4152
4158
4153 2002-05-04 Fernando Perez <fperez@colorado.edu>
4159 2002-05-04 Fernando Perez <fperez@colorado.edu>
4154
4160
4155 * IPython/Magic.py (Magic.magic_run): added options -p and -f to
4161 * IPython/Magic.py (Magic.magic_run): added options -p and -f to
4156 allow running full programs under the profiler's control.
4162 allow running full programs under the profiler's control.
4157
4163
4158 * IPython/ultraTB.py (FormattedTB.__init__): Added Verbose_novars
4164 * IPython/ultraTB.py (FormattedTB.__init__): Added Verbose_novars
4159 mode to report exceptions verbosely but without formatting
4165 mode to report exceptions verbosely but without formatting
4160 variables. This addresses the issue of ipython 'freezing' (it's
4166 variables. This addresses the issue of ipython 'freezing' (it's
4161 not frozen, but caught in an expensive formatting loop) when huge
4167 not frozen, but caught in an expensive formatting loop) when huge
4162 variables are in the context of an exception.
4168 variables are in the context of an exception.
4163 (VerboseTB.text): Added '--->' markers at line where exception was
4169 (VerboseTB.text): Added '--->' markers at line where exception was
4164 triggered. Much clearer to read, especially in NoColor modes.
4170 triggered. Much clearer to read, especially in NoColor modes.
4165
4171
4166 * IPython/Magic.py (Magic.magic_run): bugfix: -n option had been
4172 * IPython/Magic.py (Magic.magic_run): bugfix: -n option had been
4167 implemented in reverse when changing to the new parse_options().
4173 implemented in reverse when changing to the new parse_options().
4168
4174
4169 2002-05-03 Fernando Perez <fperez@colorado.edu>
4175 2002-05-03 Fernando Perez <fperez@colorado.edu>
4170
4176
4171 * IPython/Magic.py (Magic.parse_options): new function so that
4177 * IPython/Magic.py (Magic.parse_options): new function so that
4172 magics can parse options easier.
4178 magics can parse options easier.
4173 (Magic.magic_prun): new function similar to profile.run(),
4179 (Magic.magic_prun): new function similar to profile.run(),
4174 suggested by Chris Hart.
4180 suggested by Chris Hart.
4175 (Magic.magic_cd): fixed behavior so that it only changes if
4181 (Magic.magic_cd): fixed behavior so that it only changes if
4176 directory actually is in history.
4182 directory actually is in history.
4177
4183
4178 * IPython/usage.py (__doc__): added information about potential
4184 * IPython/usage.py (__doc__): added information about potential
4179 slowness of Verbose exception mode when there are huge data
4185 slowness of Verbose exception mode when there are huge data
4180 structures to be formatted (thanks to Archie Paulson).
4186 structures to be formatted (thanks to Archie Paulson).
4181
4187
4182 * IPython/ipmaker.py (make_IPython): Changed default logging
4188 * IPython/ipmaker.py (make_IPython): Changed default logging
4183 (when simply called with -log) to use curr_dir/ipython.log in
4189 (when simply called with -log) to use curr_dir/ipython.log in
4184 rotate mode. Fixed crash which was occuring with -log before
4190 rotate mode. Fixed crash which was occuring with -log before
4185 (thanks to Jim Boyle).
4191 (thanks to Jim Boyle).
4186
4192
4187 2002-05-01 Fernando Perez <fperez@colorado.edu>
4193 2002-05-01 Fernando Perez <fperez@colorado.edu>
4188
4194
4189 * Released 0.2.11 for these fixes (mainly the ultraTB one which
4195 * Released 0.2.11 for these fixes (mainly the ultraTB one which
4190 was nasty -- though somewhat of a corner case).
4196 was nasty -- though somewhat of a corner case).
4191
4197
4192 * IPython/ultraTB.py (AutoFormattedTB.text): renamed __text to
4198 * IPython/ultraTB.py (AutoFormattedTB.text): renamed __text to
4193 text (was a bug).
4199 text (was a bug).
4194
4200
4195 2002-04-30 Fernando Perez <fperez@colorado.edu>
4201 2002-04-30 Fernando Perez <fperez@colorado.edu>
4196
4202
4197 * IPython/UserConfig/GnuplotMagic.py (magic_gp): Minor fix to add
4203 * IPython/UserConfig/GnuplotMagic.py (magic_gp): Minor fix to add
4198 a print after ^D or ^C from the user so that the In[] prompt
4204 a print after ^D or ^C from the user so that the In[] prompt
4199 doesn't over-run the gnuplot one.
4205 doesn't over-run the gnuplot one.
4200
4206
4201 2002-04-29 Fernando Perez <fperez@colorado.edu>
4207 2002-04-29 Fernando Perez <fperez@colorado.edu>
4202
4208
4203 * Released 0.2.10
4209 * Released 0.2.10
4204
4210
4205 * IPython/__release__.py (version): get date dynamically.
4211 * IPython/__release__.py (version): get date dynamically.
4206
4212
4207 * Misc. documentation updates thanks to Arnd's comments. Also ran
4213 * Misc. documentation updates thanks to Arnd's comments. Also ran
4208 a full spellcheck on the manual (hadn't been done in a while).
4214 a full spellcheck on the manual (hadn't been done in a while).
4209
4215
4210 2002-04-27 Fernando Perez <fperez@colorado.edu>
4216 2002-04-27 Fernando Perez <fperez@colorado.edu>
4211
4217
4212 * IPython/Magic.py (Magic.magic_logstart): Fixed bug where
4218 * IPython/Magic.py (Magic.magic_logstart): Fixed bug where
4213 starting a log in mid-session would reset the input history list.
4219 starting a log in mid-session would reset the input history list.
4214
4220
4215 2002-04-26 Fernando Perez <fperez@colorado.edu>
4221 2002-04-26 Fernando Perez <fperez@colorado.edu>
4216
4222
4217 * IPython/iplib.py (InteractiveShell.wait): Fixed bug where not
4223 * IPython/iplib.py (InteractiveShell.wait): Fixed bug where not
4218 all files were being included in an update. Now anything in
4224 all files were being included in an update. Now anything in
4219 UserConfig that matches [A-Za-z]*.py will go (this excludes
4225 UserConfig that matches [A-Za-z]*.py will go (this excludes
4220 __init__.py)
4226 __init__.py)
4221
4227
4222 2002-04-25 Fernando Perez <fperez@colorado.edu>
4228 2002-04-25 Fernando Perez <fperez@colorado.edu>
4223
4229
4224 * IPython/iplib.py (InteractiveShell.__init__): Added __IPYTHON__
4230 * IPython/iplib.py (InteractiveShell.__init__): Added __IPYTHON__
4225 to __builtins__ so that any form of embedded or imported code can
4231 to __builtins__ so that any form of embedded or imported code can
4226 test for being inside IPython.
4232 test for being inside IPython.
4227
4233
4228 * IPython/UserConfig/GnuplotMagic.py: (magic_gp_set_instance):
4234 * IPython/UserConfig/GnuplotMagic.py: (magic_gp_set_instance):
4229 changed to GnuplotMagic because it's now an importable module,
4235 changed to GnuplotMagic because it's now an importable module,
4230 this makes the name follow that of the standard Gnuplot module.
4236 this makes the name follow that of the standard Gnuplot module.
4231 GnuplotMagic can now be loaded at any time in mid-session.
4237 GnuplotMagic can now be loaded at any time in mid-session.
4232
4238
4233 2002-04-24 Fernando Perez <fperez@colorado.edu>
4239 2002-04-24 Fernando Perez <fperez@colorado.edu>
4234
4240
4235 * IPython/numutils.py: removed SIUnits. It doesn't properly set
4241 * IPython/numutils.py: removed SIUnits. It doesn't properly set
4236 the globals (IPython has its own namespace) and the
4242 the globals (IPython has its own namespace) and the
4237 PhysicalQuantity stuff is much better anyway.
4243 PhysicalQuantity stuff is much better anyway.
4238
4244
4239 * IPython/UserConfig/example-gnuplot.py (g2): Added gnuplot
4245 * IPython/UserConfig/example-gnuplot.py (g2): Added gnuplot
4240 embedding example to standard user directory for
4246 embedding example to standard user directory for
4241 distribution. Also put it in the manual.
4247 distribution. Also put it in the manual.
4242
4248
4243 * IPython/numutils.py (gnuplot_exec): Changed to take a gnuplot
4249 * IPython/numutils.py (gnuplot_exec): Changed to take a gnuplot
4244 instance as first argument (so it doesn't rely on some obscure
4250 instance as first argument (so it doesn't rely on some obscure
4245 hidden global).
4251 hidden global).
4246
4252
4247 * IPython/UserConfig/ipythonrc.py: put () back in accepted
4253 * IPython/UserConfig/ipythonrc.py: put () back in accepted
4248 delimiters. While it prevents ().TAB from working, it allows
4254 delimiters. While it prevents ().TAB from working, it allows
4249 completions in open (... expressions. This is by far a more common
4255 completions in open (... expressions. This is by far a more common
4250 case.
4256 case.
4251
4257
4252 2002-04-23 Fernando Perez <fperez@colorado.edu>
4258 2002-04-23 Fernando Perez <fperez@colorado.edu>
4253
4259
4254 * IPython/Extensions/InterpreterPasteInput.py: new
4260 * IPython/Extensions/InterpreterPasteInput.py: new
4255 syntax-processing module for pasting lines with >>> or ... at the
4261 syntax-processing module for pasting lines with >>> or ... at the
4256 start.
4262 start.
4257
4263
4258 * IPython/Extensions/PhysicalQ_Interactive.py
4264 * IPython/Extensions/PhysicalQ_Interactive.py
4259 (PhysicalQuantityInteractive.__int__): fixed to work with either
4265 (PhysicalQuantityInteractive.__int__): fixed to work with either
4260 Numeric or math.
4266 Numeric or math.
4261
4267
4262 * IPython/UserConfig/ipythonrc-numeric.py: reorganized the
4268 * IPython/UserConfig/ipythonrc-numeric.py: reorganized the
4263 provided profiles. Now we have:
4269 provided profiles. Now we have:
4264 -math -> math module as * and cmath with its own namespace.
4270 -math -> math module as * and cmath with its own namespace.
4265 -numeric -> Numeric as *, plus gnuplot & grace
4271 -numeric -> Numeric as *, plus gnuplot & grace
4266 -physics -> same as before
4272 -physics -> same as before
4267
4273
4268 * IPython/Magic.py (Magic.magic_magic): Fixed bug where
4274 * IPython/Magic.py (Magic.magic_magic): Fixed bug where
4269 user-defined magics wouldn't be found by @magic if they were
4275 user-defined magics wouldn't be found by @magic if they were
4270 defined as class methods. Also cleaned up the namespace search
4276 defined as class methods. Also cleaned up the namespace search
4271 logic and the string building (to use %s instead of many repeated
4277 logic and the string building (to use %s instead of many repeated
4272 string adds).
4278 string adds).
4273
4279
4274 * IPython/UserConfig/example-magic.py (magic_foo): updated example
4280 * IPython/UserConfig/example-magic.py (magic_foo): updated example
4275 of user-defined magics to operate with class methods (cleaner, in
4281 of user-defined magics to operate with class methods (cleaner, in
4276 line with the gnuplot code).
4282 line with the gnuplot code).
4277
4283
4278 2002-04-22 Fernando Perez <fperez@colorado.edu>
4284 2002-04-22 Fernando Perez <fperez@colorado.edu>
4279
4285
4280 * setup.py: updated dependency list so that manual is updated when
4286 * setup.py: updated dependency list so that manual is updated when
4281 all included files change.
4287 all included files change.
4282
4288
4283 * IPython/ipmaker.py (make_IPython): Fixed bug which was ignoring
4289 * IPython/ipmaker.py (make_IPython): Fixed bug which was ignoring
4284 the delimiter removal option (the fix is ugly right now).
4290 the delimiter removal option (the fix is ugly right now).
4285
4291
4286 * IPython/UserConfig/ipythonrc-physics.py: simplified not to load
4292 * IPython/UserConfig/ipythonrc-physics.py: simplified not to load
4287 all of the math profile (quicker loading, no conflict between
4293 all of the math profile (quicker loading, no conflict between
4288 g-9.8 and g-gnuplot).
4294 g-9.8 and g-gnuplot).
4289
4295
4290 * IPython/CrashHandler.py (CrashHandler.__call__): changed default
4296 * IPython/CrashHandler.py (CrashHandler.__call__): changed default
4291 name of post-mortem files to IPython_crash_report.txt.
4297 name of post-mortem files to IPython_crash_report.txt.
4292
4298
4293 * Cleanup/update of the docs. Added all the new readline info and
4299 * Cleanup/update of the docs. Added all the new readline info and
4294 formatted all lists as 'real lists'.
4300 formatted all lists as 'real lists'.
4295
4301
4296 * IPython/ipmaker.py (make_IPython): removed now-obsolete
4302 * IPython/ipmaker.py (make_IPython): removed now-obsolete
4297 tab-completion options, since the full readline parse_and_bind is
4303 tab-completion options, since the full readline parse_and_bind is
4298 now accessible.
4304 now accessible.
4299
4305
4300 * IPython/iplib.py (InteractiveShell.init_readline): Changed
4306 * IPython/iplib.py (InteractiveShell.init_readline): Changed
4301 handling of readline options. Now users can specify any string to
4307 handling of readline options. Now users can specify any string to
4302 be passed to parse_and_bind(), as well as the delimiters to be
4308 be passed to parse_and_bind(), as well as the delimiters to be
4303 removed.
4309 removed.
4304 (InteractiveShell.__init__): Added __name__ to the global
4310 (InteractiveShell.__init__): Added __name__ to the global
4305 namespace so that things like Itpl which rely on its existence
4311 namespace so that things like Itpl which rely on its existence
4306 don't crash.
4312 don't crash.
4307 (InteractiveShell._prefilter): Defined the default with a _ so
4313 (InteractiveShell._prefilter): Defined the default with a _ so
4308 that prefilter() is easier to override, while the default one
4314 that prefilter() is easier to override, while the default one
4309 remains available.
4315 remains available.
4310
4316
4311 2002-04-18 Fernando Perez <fperez@colorado.edu>
4317 2002-04-18 Fernando Perez <fperez@colorado.edu>
4312
4318
4313 * Added information about pdb in the docs.
4319 * Added information about pdb in the docs.
4314
4320
4315 2002-04-17 Fernando Perez <fperez@colorado.edu>
4321 2002-04-17 Fernando Perez <fperez@colorado.edu>
4316
4322
4317 * IPython/ipmaker.py (make_IPython): added rc_override option to
4323 * IPython/ipmaker.py (make_IPython): added rc_override option to
4318 allow passing config options at creation time which may override
4324 allow passing config options at creation time which may override
4319 anything set in the config files or command line. This is
4325 anything set in the config files or command line. This is
4320 particularly useful for configuring embedded instances.
4326 particularly useful for configuring embedded instances.
4321
4327
4322 2002-04-15 Fernando Perez <fperez@colorado.edu>
4328 2002-04-15 Fernando Perez <fperez@colorado.edu>
4323
4329
4324 * IPython/Logger.py (Logger.log): Fixed a nasty bug which could
4330 * IPython/Logger.py (Logger.log): Fixed a nasty bug which could
4325 crash embedded instances because of the input cache falling out of
4331 crash embedded instances because of the input cache falling out of
4326 sync with the output counter.
4332 sync with the output counter.
4327
4333
4328 * IPython/Shell.py (IPythonShellEmbed.__init__): added a debug
4334 * IPython/Shell.py (IPythonShellEmbed.__init__): added a debug
4329 mode which calls pdb after an uncaught exception in IPython itself.
4335 mode which calls pdb after an uncaught exception in IPython itself.
4330
4336
4331 2002-04-14 Fernando Perez <fperez@colorado.edu>
4337 2002-04-14 Fernando Perez <fperez@colorado.edu>
4332
4338
4333 * IPython/iplib.py (InteractiveShell.showtraceback): pdb mucks up
4339 * IPython/iplib.py (InteractiveShell.showtraceback): pdb mucks up
4334 readline, fix it back after each call.
4340 readline, fix it back after each call.
4335
4341
4336 * IPython/ultraTB.py (AutoFormattedTB.__text): made text a private
4342 * IPython/ultraTB.py (AutoFormattedTB.__text): made text a private
4337 method to force all access via __call__(), which guarantees that
4343 method to force all access via __call__(), which guarantees that
4338 traceback references are properly deleted.
4344 traceback references are properly deleted.
4339
4345
4340 * IPython/Prompts.py (CachedOutput._display): minor fixes to
4346 * IPython/Prompts.py (CachedOutput._display): minor fixes to
4341 improve printing when pprint is in use.
4347 improve printing when pprint is in use.
4342
4348
4343 2002-04-13 Fernando Perez <fperez@colorado.edu>
4349 2002-04-13 Fernando Perez <fperez@colorado.edu>
4344
4350
4345 * IPython/Shell.py (IPythonShellEmbed.__call__): SystemExit
4351 * IPython/Shell.py (IPythonShellEmbed.__call__): SystemExit
4346 exceptions aren't caught anymore. If the user triggers one, he
4352 exceptions aren't caught anymore. If the user triggers one, he
4347 should know why he's doing it and it should go all the way up,
4353 should know why he's doing it and it should go all the way up,
4348 just like any other exception. So now @abort will fully kill the
4354 just like any other exception. So now @abort will fully kill the
4349 embedded interpreter and the embedding code (unless that happens
4355 embedded interpreter and the embedding code (unless that happens
4350 to catch SystemExit).
4356 to catch SystemExit).
4351
4357
4352 * IPython/ultraTB.py (VerboseTB.__init__): added a call_pdb flag
4358 * IPython/ultraTB.py (VerboseTB.__init__): added a call_pdb flag
4353 and a debugger() method to invoke the interactive pdb debugger
4359 and a debugger() method to invoke the interactive pdb debugger
4354 after printing exception information. Also added the corresponding
4360 after printing exception information. Also added the corresponding
4355 -pdb option and @pdb magic to control this feature, and updated
4361 -pdb option and @pdb magic to control this feature, and updated
4356 the docs. After a suggestion from Christopher Hart
4362 the docs. After a suggestion from Christopher Hart
4357 (hart-AT-caltech.edu).
4363 (hart-AT-caltech.edu).
4358
4364
4359 2002-04-12 Fernando Perez <fperez@colorado.edu>
4365 2002-04-12 Fernando Perez <fperez@colorado.edu>
4360
4366
4361 * IPython/Shell.py (IPythonShellEmbed.__init__): modified to use
4367 * IPython/Shell.py (IPythonShellEmbed.__init__): modified to use
4362 the exception handlers defined by the user (not the CrashHandler)
4368 the exception handlers defined by the user (not the CrashHandler)
4363 so that user exceptions don't trigger an ipython bug report.
4369 so that user exceptions don't trigger an ipython bug report.
4364
4370
4365 * IPython/ultraTB.py (ColorTB.__init__): made the color scheme
4371 * IPython/ultraTB.py (ColorTB.__init__): made the color scheme
4366 configurable (it should have always been so).
4372 configurable (it should have always been so).
4367
4373
4368 2002-03-26 Fernando Perez <fperez@colorado.edu>
4374 2002-03-26 Fernando Perez <fperez@colorado.edu>
4369
4375
4370 * IPython/Shell.py (IPythonShellEmbed.__call__): many changes here
4376 * IPython/Shell.py (IPythonShellEmbed.__call__): many changes here
4371 and there to fix embedding namespace issues. This should all be
4377 and there to fix embedding namespace issues. This should all be
4372 done in a more elegant way.
4378 done in a more elegant way.
4373
4379
4374 2002-03-25 Fernando Perez <fperez@colorado.edu>
4380 2002-03-25 Fernando Perez <fperez@colorado.edu>
4375
4381
4376 * IPython/genutils.py (get_home_dir): Try to make it work under
4382 * IPython/genutils.py (get_home_dir): Try to make it work under
4377 win9x also.
4383 win9x also.
4378
4384
4379 2002-03-20 Fernando Perez <fperez@colorado.edu>
4385 2002-03-20 Fernando Perez <fperez@colorado.edu>
4380
4386
4381 * IPython/Shell.py (IPythonShellEmbed.__init__): leave
4387 * IPython/Shell.py (IPythonShellEmbed.__init__): leave
4382 sys.displayhook untouched upon __init__.
4388 sys.displayhook untouched upon __init__.
4383
4389
4384 2002-03-19 Fernando Perez <fperez@colorado.edu>
4390 2002-03-19 Fernando Perez <fperez@colorado.edu>
4385
4391
4386 * Released 0.2.9 (for embedding bug, basically).
4392 * Released 0.2.9 (for embedding bug, basically).
4387
4393
4388 * IPython/Shell.py (IPythonShellEmbed.__call__): Trap SystemExit
4394 * IPython/Shell.py (IPythonShellEmbed.__call__): Trap SystemExit
4389 exceptions so that enclosing shell's state can be restored.
4395 exceptions so that enclosing shell's state can be restored.
4390
4396
4391 * Changed magic_gnuplot.py to magic-gnuplot.py to standardize
4397 * Changed magic_gnuplot.py to magic-gnuplot.py to standardize
4392 naming conventions in the .ipython/ dir.
4398 naming conventions in the .ipython/ dir.
4393
4399
4394 * IPython/iplib.py (InteractiveShell.init_readline): removed '-'
4400 * IPython/iplib.py (InteractiveShell.init_readline): removed '-'
4395 from delimiters list so filenames with - in them get expanded.
4401 from delimiters list so filenames with - in them get expanded.
4396
4402
4397 * IPython/Shell.py (IPythonShellEmbed.__call__): fixed bug with
4403 * IPython/Shell.py (IPythonShellEmbed.__call__): fixed bug with
4398 sys.displayhook not being properly restored after an embedded call.
4404 sys.displayhook not being properly restored after an embedded call.
4399
4405
4400 2002-03-18 Fernando Perez <fperez@colorado.edu>
4406 2002-03-18 Fernando Perez <fperez@colorado.edu>
4401
4407
4402 * Released 0.2.8
4408 * Released 0.2.8
4403
4409
4404 * IPython/iplib.py (InteractiveShell.user_setup): fixed bug where
4410 * IPython/iplib.py (InteractiveShell.user_setup): fixed bug where
4405 some files weren't being included in a -upgrade.
4411 some files weren't being included in a -upgrade.
4406 (InteractiveShell.init_readline): Added 'set show-all-if-ambiguous
4412 (InteractiveShell.init_readline): Added 'set show-all-if-ambiguous
4407 on' so that the first tab completes.
4413 on' so that the first tab completes.
4408 (InteractiveShell.handle_magic): fixed bug with spaces around
4414 (InteractiveShell.handle_magic): fixed bug with spaces around
4409 quotes breaking many magic commands.
4415 quotes breaking many magic commands.
4410
4416
4411 * setup.py: added note about ignoring the syntax error messages at
4417 * setup.py: added note about ignoring the syntax error messages at
4412 installation.
4418 installation.
4413
4419
4414 * IPython/UserConfig/magic_gnuplot.py (magic_gp): finished
4420 * IPython/UserConfig/magic_gnuplot.py (magic_gp): finished
4415 streamlining the gnuplot interface, now there's only one magic @gp.
4421 streamlining the gnuplot interface, now there's only one magic @gp.
4416
4422
4417 2002-03-17 Fernando Perez <fperez@colorado.edu>
4423 2002-03-17 Fernando Perez <fperez@colorado.edu>
4418
4424
4419 * IPython/UserConfig/magic_gnuplot.py: new name for the
4425 * IPython/UserConfig/magic_gnuplot.py: new name for the
4420 example-magic_pm.py file. Much enhanced system, now with a shell
4426 example-magic_pm.py file. Much enhanced system, now with a shell
4421 for communicating directly with gnuplot, one command at a time.
4427 for communicating directly with gnuplot, one command at a time.
4422
4428
4423 * IPython/Magic.py (Magic.magic_run): added option -n to prevent
4429 * IPython/Magic.py (Magic.magic_run): added option -n to prevent
4424 setting __name__=='__main__'.
4430 setting __name__=='__main__'.
4425
4431
4426 * IPython/UserConfig/example-magic_pm.py (magic_pm): Added
4432 * IPython/UserConfig/example-magic_pm.py (magic_pm): Added
4427 mini-shell for accessing gnuplot from inside ipython. Should
4433 mini-shell for accessing gnuplot from inside ipython. Should
4428 extend it later for grace access too. Inspired by Arnd's
4434 extend it later for grace access too. Inspired by Arnd's
4429 suggestion.
4435 suggestion.
4430
4436
4431 * IPython/iplib.py (InteractiveShell.handle_magic): fixed bug when
4437 * IPython/iplib.py (InteractiveShell.handle_magic): fixed bug when
4432 calling magic functions with () in their arguments. Thanks to Arnd
4438 calling magic functions with () in their arguments. Thanks to Arnd
4433 Baecker for pointing this to me.
4439 Baecker for pointing this to me.
4434
4440
4435 * IPython/numutils.py (sum_flat): fixed bug. Would recurse
4441 * IPython/numutils.py (sum_flat): fixed bug. Would recurse
4436 infinitely for integer or complex arrays (only worked with floats).
4442 infinitely for integer or complex arrays (only worked with floats).
4437
4443
4438 2002-03-16 Fernando Perez <fperez@colorado.edu>
4444 2002-03-16 Fernando Perez <fperez@colorado.edu>
4439
4445
4440 * setup.py: Merged setup and setup_windows into a single script
4446 * setup.py: Merged setup and setup_windows into a single script
4441 which properly handles things for windows users.
4447 which properly handles things for windows users.
4442
4448
4443 2002-03-15 Fernando Perez <fperez@colorado.edu>
4449 2002-03-15 Fernando Perez <fperez@colorado.edu>
4444
4450
4445 * Big change to the manual: now the magics are all automatically
4451 * Big change to the manual: now the magics are all automatically
4446 documented. This information is generated from their docstrings
4452 documented. This information is generated from their docstrings
4447 and put in a latex file included by the manual lyx file. This way
4453 and put in a latex file included by the manual lyx file. This way
4448 we get always up to date information for the magics. The manual
4454 we get always up to date information for the magics. The manual
4449 now also has proper version information, also auto-synced.
4455 now also has proper version information, also auto-synced.
4450
4456
4451 For this to work, an undocumented --magic_docstrings option was added.
4457 For this to work, an undocumented --magic_docstrings option was added.
4452
4458
4453 2002-03-13 Fernando Perez <fperez@colorado.edu>
4459 2002-03-13 Fernando Perez <fperez@colorado.edu>
4454
4460
4455 * IPython/ultraTB.py (TermColors): fixed problem with dark colors
4461 * IPython/ultraTB.py (TermColors): fixed problem with dark colors
4456 under CDE terminals. An explicit ;2 color reset is needed in the escapes.
4462 under CDE terminals. An explicit ;2 color reset is needed in the escapes.
4457
4463
4458 2002-03-12 Fernando Perez <fperez@colorado.edu>
4464 2002-03-12 Fernando Perez <fperez@colorado.edu>
4459
4465
4460 * IPython/ultraTB.py (TermColors): changed color escapes again to
4466 * IPython/ultraTB.py (TermColors): changed color escapes again to
4461 fix the (old, reintroduced) line-wrapping bug. Basically, if
4467 fix the (old, reintroduced) line-wrapping bug. Basically, if
4462 \001..\002 aren't given in the color escapes, lines get wrapped
4468 \001..\002 aren't given in the color escapes, lines get wrapped
4463 weirdly. But giving those screws up old xterms and emacs terms. So
4469 weirdly. But giving those screws up old xterms and emacs terms. So
4464 I added some logic for emacs terms to be ok, but I can't identify old
4470 I added some logic for emacs terms to be ok, but I can't identify old
4465 xterms separately ($TERM=='xterm' for many terminals, like konsole).
4471 xterms separately ($TERM=='xterm' for many terminals, like konsole).
4466
4472
4467 2002-03-10 Fernando Perez <fperez@colorado.edu>
4473 2002-03-10 Fernando Perez <fperez@colorado.edu>
4468
4474
4469 * IPython/usage.py (__doc__): Various documentation cleanups and
4475 * IPython/usage.py (__doc__): Various documentation cleanups and
4470 updates, both in usage docstrings and in the manual.
4476 updates, both in usage docstrings and in the manual.
4471
4477
4472 * IPython/Prompts.py (CachedOutput.set_colors): cleanups for
4478 * IPython/Prompts.py (CachedOutput.set_colors): cleanups for
4473 handling of caching. Set minimum acceptabe value for having a
4479 handling of caching. Set minimum acceptabe value for having a
4474 cache at 20 values.
4480 cache at 20 values.
4475
4481
4476 * IPython/iplib.py (InteractiveShell.user_setup): moved the
4482 * IPython/iplib.py (InteractiveShell.user_setup): moved the
4477 install_first_time function to a method, renamed it and added an
4483 install_first_time function to a method, renamed it and added an
4478 'upgrade' mode. Now people can update their config directory with
4484 'upgrade' mode. Now people can update their config directory with
4479 a simple command line switch (-upgrade, also new).
4485 a simple command line switch (-upgrade, also new).
4480
4486
4481 * IPython/Magic.py (Magic.magic_pfile): Made @pfile an alias to
4487 * IPython/Magic.py (Magic.magic_pfile): Made @pfile an alias to
4482 @file (convenient for automagic users under Python >= 2.2).
4488 @file (convenient for automagic users under Python >= 2.2).
4483 Removed @files (it seemed more like a plural than an abbrev. of
4489 Removed @files (it seemed more like a plural than an abbrev. of
4484 'file show').
4490 'file show').
4485
4491
4486 * IPython/iplib.py (install_first_time): Fixed crash if there were
4492 * IPython/iplib.py (install_first_time): Fixed crash if there were
4487 backup files ('~') in .ipython/ install directory.
4493 backup files ('~') in .ipython/ install directory.
4488
4494
4489 * IPython/ipmaker.py (make_IPython): fixes for new prompt
4495 * IPython/ipmaker.py (make_IPython): fixes for new prompt
4490 system. Things look fine, but these changes are fairly
4496 system. Things look fine, but these changes are fairly
4491 intrusive. Test them for a few days.
4497 intrusive. Test them for a few days.
4492
4498
4493 * IPython/Prompts.py (CachedOutput.__init__): Massive rewrite of
4499 * IPython/Prompts.py (CachedOutput.__init__): Massive rewrite of
4494 the prompts system. Now all in/out prompt strings are user
4500 the prompts system. Now all in/out prompt strings are user
4495 controllable. This is particularly useful for embedding, as one
4501 controllable. This is particularly useful for embedding, as one
4496 can tag embedded instances with particular prompts.
4502 can tag embedded instances with particular prompts.
4497
4503
4498 Also removed global use of sys.ps1/2, which now allows nested
4504 Also removed global use of sys.ps1/2, which now allows nested
4499 embeddings without any problems. Added command-line options for
4505 embeddings without any problems. Added command-line options for
4500 the prompt strings.
4506 the prompt strings.
4501
4507
4502 2002-03-08 Fernando Perez <fperez@colorado.edu>
4508 2002-03-08 Fernando Perez <fperez@colorado.edu>
4503
4509
4504 * IPython/UserConfig/example-embed-short.py (ipshell): added
4510 * IPython/UserConfig/example-embed-short.py (ipshell): added
4505 example file with the bare minimum code for embedding.
4511 example file with the bare minimum code for embedding.
4506
4512
4507 * IPython/Shell.py (IPythonShellEmbed.set_dummy_mode): added
4513 * IPython/Shell.py (IPythonShellEmbed.set_dummy_mode): added
4508 functionality for the embeddable shell to be activated/deactivated
4514 functionality for the embeddable shell to be activated/deactivated
4509 either globally or at each call.
4515 either globally or at each call.
4510
4516
4511 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixes the problem of
4517 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixes the problem of
4512 rewriting the prompt with '--->' for auto-inputs with proper
4518 rewriting the prompt with '--->' for auto-inputs with proper
4513 coloring. Now the previous UGLY hack in handle_auto() is gone, and
4519 coloring. Now the previous UGLY hack in handle_auto() is gone, and
4514 this is handled by the prompts class itself, as it should.
4520 this is handled by the prompts class itself, as it should.
4515
4521
4516 2002-03-05 Fernando Perez <fperez@colorado.edu>
4522 2002-03-05 Fernando Perez <fperez@colorado.edu>
4517
4523
4518 * IPython/Magic.py (Magic.magic_logstart): Changed @log to
4524 * IPython/Magic.py (Magic.magic_logstart): Changed @log to
4519 @logstart to avoid name clashes with the math log function.
4525 @logstart to avoid name clashes with the math log function.
4520
4526
4521 * Big updates to X/Emacs section of the manual.
4527 * Big updates to X/Emacs section of the manual.
4522
4528
4523 * Removed ipython_emacs. Milan explained to me how to pass
4529 * Removed ipython_emacs. Milan explained to me how to pass
4524 arguments to ipython through Emacs. Some day I'm going to end up
4530 arguments to ipython through Emacs. Some day I'm going to end up
4525 learning some lisp...
4531 learning some lisp...
4526
4532
4527 2002-03-04 Fernando Perez <fperez@colorado.edu>
4533 2002-03-04 Fernando Perez <fperez@colorado.edu>
4528
4534
4529 * IPython/ipython_emacs: Created script to be used as the
4535 * IPython/ipython_emacs: Created script to be used as the
4530 py-python-command Emacs variable so we can pass IPython
4536 py-python-command Emacs variable so we can pass IPython
4531 parameters. I can't figure out how to tell Emacs directly to pass
4537 parameters. I can't figure out how to tell Emacs directly to pass
4532 parameters to IPython, so a dummy shell script will do it.
4538 parameters to IPython, so a dummy shell script will do it.
4533
4539
4534 Other enhancements made for things to work better under Emacs'
4540 Other enhancements made for things to work better under Emacs'
4535 various types of terminals. Many thanks to Milan Zamazal
4541 various types of terminals. Many thanks to Milan Zamazal
4536 <pdm-AT-zamazal.org> for all the suggestions and pointers.
4542 <pdm-AT-zamazal.org> for all the suggestions and pointers.
4537
4543
4538 2002-03-01 Fernando Perez <fperez@colorado.edu>
4544 2002-03-01 Fernando Perez <fperez@colorado.edu>
4539
4545
4540 * IPython/ipmaker.py (make_IPython): added a --readline! option so
4546 * IPython/ipmaker.py (make_IPython): added a --readline! option so
4541 that loading of readline is now optional. This gives better
4547 that loading of readline is now optional. This gives better
4542 control to emacs users.
4548 control to emacs users.
4543
4549
4544 * IPython/ultraTB.py (__date__): Modified color escape sequences
4550 * IPython/ultraTB.py (__date__): Modified color escape sequences
4545 and now things work fine under xterm and in Emacs' term buffers
4551 and now things work fine under xterm and in Emacs' term buffers
4546 (though not shell ones). Well, in emacs you get colors, but all
4552 (though not shell ones). Well, in emacs you get colors, but all
4547 seem to be 'light' colors (no difference between dark and light
4553 seem to be 'light' colors (no difference between dark and light
4548 ones). But the garbage chars are gone, and also in xterms. It
4554 ones). But the garbage chars are gone, and also in xterms. It
4549 seems that now I'm using 'cleaner' ansi sequences.
4555 seems that now I'm using 'cleaner' ansi sequences.
4550
4556
4551 2002-02-21 Fernando Perez <fperez@colorado.edu>
4557 2002-02-21 Fernando Perez <fperez@colorado.edu>
4552
4558
4553 * Released 0.2.7 (mainly to publish the scoping fix).
4559 * Released 0.2.7 (mainly to publish the scoping fix).
4554
4560
4555 * IPython/Logger.py (Logger.logstate): added. A corresponding
4561 * IPython/Logger.py (Logger.logstate): added. A corresponding
4556 @logstate magic was created.
4562 @logstate magic was created.
4557
4563
4558 * IPython/Magic.py: fixed nested scoping problem under Python
4564 * IPython/Magic.py: fixed nested scoping problem under Python
4559 2.1.x (automagic wasn't working).
4565 2.1.x (automagic wasn't working).
4560
4566
4561 2002-02-20 Fernando Perez <fperez@colorado.edu>
4567 2002-02-20 Fernando Perez <fperez@colorado.edu>
4562
4568
4563 * Released 0.2.6.
4569 * Released 0.2.6.
4564
4570
4565 * IPython/OutputTrap.py (OutputTrap.__init__): added a 'quiet'
4571 * IPython/OutputTrap.py (OutputTrap.__init__): added a 'quiet'
4566 option so that logs can come out without any headers at all.
4572 option so that logs can come out without any headers at all.
4567
4573
4568 * IPython/UserConfig/ipythonrc-scipy.py: created a profile for
4574 * IPython/UserConfig/ipythonrc-scipy.py: created a profile for
4569 SciPy.
4575 SciPy.
4570
4576
4571 * IPython/iplib.py (InteractiveShell.embed_mainloop): Changed so
4577 * IPython/iplib.py (InteractiveShell.embed_mainloop): Changed so
4572 that embedded IPython calls don't require vars() to be explicitly
4578 that embedded IPython calls don't require vars() to be explicitly
4573 passed. Now they are extracted from the caller's frame (code
4579 passed. Now they are extracted from the caller's frame (code
4574 snatched from Eric Jones' weave). Added better documentation to
4580 snatched from Eric Jones' weave). Added better documentation to
4575 the section on embedding and the example file.
4581 the section on embedding and the example file.
4576
4582
4577 * IPython/genutils.py (page): Changed so that under emacs, it just
4583 * IPython/genutils.py (page): Changed so that under emacs, it just
4578 prints the string. You can then page up and down in the emacs
4584 prints the string. You can then page up and down in the emacs
4579 buffer itself. This is how the builtin help() works.
4585 buffer itself. This is how the builtin help() works.
4580
4586
4581 * IPython/Prompts.py (CachedOutput.__call__): Fixed issue with
4587 * IPython/Prompts.py (CachedOutput.__call__): Fixed issue with
4582 macro scoping: macros need to be executed in the user's namespace
4588 macro scoping: macros need to be executed in the user's namespace
4583 to work as if they had been typed by the user.
4589 to work as if they had been typed by the user.
4584
4590
4585 * IPython/Magic.py (Magic.magic_macro): Changed macros so they
4591 * IPython/Magic.py (Magic.magic_macro): Changed macros so they
4586 execute automatically (no need to type 'exec...'). They then
4592 execute automatically (no need to type 'exec...'). They then
4587 behave like 'true macros'. The printing system was also modified
4593 behave like 'true macros'. The printing system was also modified
4588 for this to work.
4594 for this to work.
4589
4595
4590 2002-02-19 Fernando Perez <fperez@colorado.edu>
4596 2002-02-19 Fernando Perez <fperez@colorado.edu>
4591
4597
4592 * IPython/genutils.py (page_file): new function for paging files
4598 * IPython/genutils.py (page_file): new function for paging files
4593 in an OS-independent way. Also necessary for file viewing to work
4599 in an OS-independent way. Also necessary for file viewing to work
4594 well inside Emacs buffers.
4600 well inside Emacs buffers.
4595 (page): Added checks for being in an emacs buffer.
4601 (page): Added checks for being in an emacs buffer.
4596 (page): fixed bug for Windows ($TERM isn't set in Windows). Fixed
4602 (page): fixed bug for Windows ($TERM isn't set in Windows). Fixed
4597 same bug in iplib.
4603 same bug in iplib.
4598
4604
4599 2002-02-18 Fernando Perez <fperez@colorado.edu>
4605 2002-02-18 Fernando Perez <fperez@colorado.edu>
4600
4606
4601 * IPython/iplib.py (InteractiveShell.init_readline): modified use
4607 * IPython/iplib.py (InteractiveShell.init_readline): modified use
4602 of readline so that IPython can work inside an Emacs buffer.
4608 of readline so that IPython can work inside an Emacs buffer.
4603
4609
4604 * IPython/ultraTB.py (AutoFormattedTB.__call__): some fixes to
4610 * IPython/ultraTB.py (AutoFormattedTB.__call__): some fixes to
4605 method signatures (they weren't really bugs, but it looks cleaner
4611 method signatures (they weren't really bugs, but it looks cleaner
4606 and keeps PyChecker happy).
4612 and keeps PyChecker happy).
4607
4613
4608 * IPython/ipmaker.py (make_IPython): added hooks Struct to __IP
4614 * IPython/ipmaker.py (make_IPython): added hooks Struct to __IP
4609 for implementing various user-defined hooks. Currently only
4615 for implementing various user-defined hooks. Currently only
4610 display is done.
4616 display is done.
4611
4617
4612 * IPython/Prompts.py (CachedOutput._display): changed display
4618 * IPython/Prompts.py (CachedOutput._display): changed display
4613 functions so that they can be dynamically changed by users easily.
4619 functions so that they can be dynamically changed by users easily.
4614
4620
4615 * IPython/Extensions/numeric_formats.py (num_display): added an
4621 * IPython/Extensions/numeric_formats.py (num_display): added an
4616 extension for printing NumPy arrays in flexible manners. It
4622 extension for printing NumPy arrays in flexible manners. It
4617 doesn't do anything yet, but all the structure is in
4623 doesn't do anything yet, but all the structure is in
4618 place. Ultimately the plan is to implement output format control
4624 place. Ultimately the plan is to implement output format control
4619 like in Octave.
4625 like in Octave.
4620
4626
4621 * IPython/Magic.py (Magic.lsmagic): changed so that bound magic
4627 * IPython/Magic.py (Magic.lsmagic): changed so that bound magic
4622 methods are found at run-time by all the automatic machinery.
4628 methods are found at run-time by all the automatic machinery.
4623
4629
4624 2002-02-17 Fernando Perez <fperez@colorado.edu>
4630 2002-02-17 Fernando Perez <fperez@colorado.edu>
4625
4631
4626 * setup_Windows.py (make_shortcut): documented. Cleaned up the
4632 * setup_Windows.py (make_shortcut): documented. Cleaned up the
4627 whole file a little.
4633 whole file a little.
4628
4634
4629 * ToDo: closed this document. Now there's a new_design.lyx
4635 * ToDo: closed this document. Now there's a new_design.lyx
4630 document for all new ideas. Added making a pdf of it for the
4636 document for all new ideas. Added making a pdf of it for the
4631 end-user distro.
4637 end-user distro.
4632
4638
4633 * IPython/Logger.py (Logger.switch_log): Created this to replace
4639 * IPython/Logger.py (Logger.switch_log): Created this to replace
4634 logon() and logoff(). It also fixes a nasty crash reported by
4640 logon() and logoff(). It also fixes a nasty crash reported by
4635 Philip Hisley <compsys-AT-starpower.net>. Many thanks to him.
4641 Philip Hisley <compsys-AT-starpower.net>. Many thanks to him.
4636
4642
4637 * IPython/iplib.py (complete): got auto-completion to work with
4643 * IPython/iplib.py (complete): got auto-completion to work with
4638 automagic (I had wanted this for a long time).
4644 automagic (I had wanted this for a long time).
4639
4645
4640 * IPython/Magic.py (Magic.magic_files): Added @files as an alias
4646 * IPython/Magic.py (Magic.magic_files): Added @files as an alias
4641 to @file, since file() is now a builtin and clashes with automagic
4647 to @file, since file() is now a builtin and clashes with automagic
4642 for @file.
4648 for @file.
4643
4649
4644 * Made some new files: Prompts, CrashHandler, Magic, Logger. All
4650 * Made some new files: Prompts, CrashHandler, Magic, Logger. All
4645 of this was previously in iplib, which had grown to more than 2000
4651 of this was previously in iplib, which had grown to more than 2000
4646 lines, way too long. No new functionality, but it makes managing
4652 lines, way too long. No new functionality, but it makes managing
4647 the code a bit easier.
4653 the code a bit easier.
4648
4654
4649 * IPython/iplib.py (IPythonCrashHandler.__call__): Added version
4655 * IPython/iplib.py (IPythonCrashHandler.__call__): Added version
4650 information to crash reports.
4656 information to crash reports.
4651
4657
4652 2002-02-12 Fernando Perez <fperez@colorado.edu>
4658 2002-02-12 Fernando Perez <fperez@colorado.edu>
4653
4659
4654 * Released 0.2.5.
4660 * Released 0.2.5.
4655
4661
4656 2002-02-11 Fernando Perez <fperez@colorado.edu>
4662 2002-02-11 Fernando Perez <fperez@colorado.edu>
4657
4663
4658 * Wrote a relatively complete Windows installer. It puts
4664 * Wrote a relatively complete Windows installer. It puts
4659 everything in place, creates Start Menu entries and fixes the
4665 everything in place, creates Start Menu entries and fixes the
4660 color issues. Nothing fancy, but it works.
4666 color issues. Nothing fancy, but it works.
4661
4667
4662 2002-02-10 Fernando Perez <fperez@colorado.edu>
4668 2002-02-10 Fernando Perez <fperez@colorado.edu>
4663
4669
4664 * IPython/iplib.py (InteractiveShell.safe_execfile): added an
4670 * IPython/iplib.py (InteractiveShell.safe_execfile): added an
4665 os.path.expanduser() call so that we can type @run ~/myfile.py and
4671 os.path.expanduser() call so that we can type @run ~/myfile.py and
4666 have thigs work as expected.
4672 have thigs work as expected.
4667
4673
4668 * IPython/genutils.py (page): fixed exception handling so things
4674 * IPython/genutils.py (page): fixed exception handling so things
4669 work both in Unix and Windows correctly. Quitting a pager triggers
4675 work both in Unix and Windows correctly. Quitting a pager triggers
4670 an IOError/broken pipe in Unix, and in windows not finding a pager
4676 an IOError/broken pipe in Unix, and in windows not finding a pager
4671 is also an IOError, so I had to actually look at the return value
4677 is also an IOError, so I had to actually look at the return value
4672 of the exception, not just the exception itself. Should be ok now.
4678 of the exception, not just the exception itself. Should be ok now.
4673
4679
4674 * IPython/ultraTB.py (ColorSchemeTable.set_active_scheme):
4680 * IPython/ultraTB.py (ColorSchemeTable.set_active_scheme):
4675 modified to allow case-insensitive color scheme changes.
4681 modified to allow case-insensitive color scheme changes.
4676
4682
4677 2002-02-09 Fernando Perez <fperez@colorado.edu>
4683 2002-02-09 Fernando Perez <fperez@colorado.edu>
4678
4684
4679 * IPython/genutils.py (native_line_ends): new function to leave
4685 * IPython/genutils.py (native_line_ends): new function to leave
4680 user config files with os-native line-endings.
4686 user config files with os-native line-endings.
4681
4687
4682 * README and manual updates.
4688 * README and manual updates.
4683
4689
4684 * IPython/genutils.py: fixed unicode bug: use types.StringTypes
4690 * IPython/genutils.py: fixed unicode bug: use types.StringTypes
4685 instead of StringType to catch Unicode strings.
4691 instead of StringType to catch Unicode strings.
4686
4692
4687 * IPython/genutils.py (filefind): fixed bug for paths with
4693 * IPython/genutils.py (filefind): fixed bug for paths with
4688 embedded spaces (very common in Windows).
4694 embedded spaces (very common in Windows).
4689
4695
4690 * IPython/ipmaker.py (make_IPython): added a '.ini' to the rc
4696 * IPython/ipmaker.py (make_IPython): added a '.ini' to the rc
4691 files under Windows, so that they get automatically associated
4697 files under Windows, so that they get automatically associated
4692 with a text editor. Windows makes it a pain to handle
4698 with a text editor. Windows makes it a pain to handle
4693 extension-less files.
4699 extension-less files.
4694
4700
4695 * IPython/iplib.py (InteractiveShell.init_readline): Made the
4701 * IPython/iplib.py (InteractiveShell.init_readline): Made the
4696 warning about readline only occur for Posix. In Windows there's no
4702 warning about readline only occur for Posix. In Windows there's no
4697 way to get readline, so why bother with the warning.
4703 way to get readline, so why bother with the warning.
4698
4704
4699 * IPython/Struct.py (Struct.__str__): fixed to use self.__dict__
4705 * IPython/Struct.py (Struct.__str__): fixed to use self.__dict__
4700 for __str__ instead of dir(self), since dir() changed in 2.2.
4706 for __str__ instead of dir(self), since dir() changed in 2.2.
4701
4707
4702 * Ported to Windows! Tested on XP, I suspect it should work fine
4708 * Ported to Windows! Tested on XP, I suspect it should work fine
4703 on NT/2000, but I don't think it will work on 98 et al. That
4709 on NT/2000, but I don't think it will work on 98 et al. That
4704 series of Windows is such a piece of junk anyway that I won't try
4710 series of Windows is such a piece of junk anyway that I won't try
4705 porting it there. The XP port was straightforward, showed a few
4711 porting it there. The XP port was straightforward, showed a few
4706 bugs here and there (fixed all), in particular some string
4712 bugs here and there (fixed all), in particular some string
4707 handling stuff which required considering Unicode strings (which
4713 handling stuff which required considering Unicode strings (which
4708 Windows uses). This is good, but hasn't been too tested :) No
4714 Windows uses). This is good, but hasn't been too tested :) No
4709 fancy installer yet, I'll put a note in the manual so people at
4715 fancy installer yet, I'll put a note in the manual so people at
4710 least make manually a shortcut.
4716 least make manually a shortcut.
4711
4717
4712 * IPython/iplib.py (Magic.magic_colors): Unified the color options
4718 * IPython/iplib.py (Magic.magic_colors): Unified the color options
4713 into a single one, "colors". This now controls both prompt and
4719 into a single one, "colors". This now controls both prompt and
4714 exception color schemes, and can be changed both at startup
4720 exception color schemes, and can be changed both at startup
4715 (either via command-line switches or via ipythonrc files) and at
4721 (either via command-line switches or via ipythonrc files) and at
4716 runtime, with @colors.
4722 runtime, with @colors.
4717 (Magic.magic_run): renamed @prun to @run and removed the old
4723 (Magic.magic_run): renamed @prun to @run and removed the old
4718 @run. The two were too similar to warrant keeping both.
4724 @run. The two were too similar to warrant keeping both.
4719
4725
4720 2002-02-03 Fernando Perez <fperez@colorado.edu>
4726 2002-02-03 Fernando Perez <fperez@colorado.edu>
4721
4727
4722 * IPython/iplib.py (install_first_time): Added comment on how to
4728 * IPython/iplib.py (install_first_time): Added comment on how to
4723 configure the color options for first-time users. Put a <return>
4729 configure the color options for first-time users. Put a <return>
4724 request at the end so that small-terminal users get a chance to
4730 request at the end so that small-terminal users get a chance to
4725 read the startup info.
4731 read the startup info.
4726
4732
4727 2002-01-23 Fernando Perez <fperez@colorado.edu>
4733 2002-01-23 Fernando Perez <fperez@colorado.edu>
4728
4734
4729 * IPython/iplib.py (CachedOutput.update): Changed output memory
4735 * IPython/iplib.py (CachedOutput.update): Changed output memory
4730 variable names from _o,_oo,_ooo,_o<n> to simply _,__,___,_<n>. For
4736 variable names from _o,_oo,_ooo,_o<n> to simply _,__,___,_<n>. For
4731 input history we still use _i. Did this b/c these variable are
4737 input history we still use _i. Did this b/c these variable are
4732 very commonly used in interactive work, so the less we need to
4738 very commonly used in interactive work, so the less we need to
4733 type the better off we are.
4739 type the better off we are.
4734 (Magic.magic_prun): updated @prun to better handle the namespaces
4740 (Magic.magic_prun): updated @prun to better handle the namespaces
4735 the file will run in, including a fix for __name__ not being set
4741 the file will run in, including a fix for __name__ not being set
4736 before.
4742 before.
4737
4743
4738 2002-01-20 Fernando Perez <fperez@colorado.edu>
4744 2002-01-20 Fernando Perez <fperez@colorado.edu>
4739
4745
4740 * IPython/ultraTB.py (VerboseTB.linereader): Fixed printing of
4746 * IPython/ultraTB.py (VerboseTB.linereader): Fixed printing of
4741 extra garbage for Python 2.2. Need to look more carefully into
4747 extra garbage for Python 2.2. Need to look more carefully into
4742 this later.
4748 this later.
4743
4749
4744 2002-01-19 Fernando Perez <fperez@colorado.edu>
4750 2002-01-19 Fernando Perez <fperez@colorado.edu>
4745
4751
4746 * IPython/iplib.py (InteractiveShell.showtraceback): fixed to
4752 * IPython/iplib.py (InteractiveShell.showtraceback): fixed to
4747 display SyntaxError exceptions properly formatted when they occur
4753 display SyntaxError exceptions properly formatted when they occur
4748 (they can be triggered by imported code).
4754 (they can be triggered by imported code).
4749
4755
4750 2002-01-18 Fernando Perez <fperez@colorado.edu>
4756 2002-01-18 Fernando Perez <fperez@colorado.edu>
4751
4757
4752 * IPython/iplib.py (InteractiveShell.safe_execfile): now
4758 * IPython/iplib.py (InteractiveShell.safe_execfile): now
4753 SyntaxError exceptions are reported nicely formatted, instead of
4759 SyntaxError exceptions are reported nicely formatted, instead of
4754 spitting out only offset information as before.
4760 spitting out only offset information as before.
4755 (Magic.magic_prun): Added the @prun function for executing
4761 (Magic.magic_prun): Added the @prun function for executing
4756 programs with command line args inside IPython.
4762 programs with command line args inside IPython.
4757
4763
4758 2002-01-16 Fernando Perez <fperez@colorado.edu>
4764 2002-01-16 Fernando Perez <fperez@colorado.edu>
4759
4765
4760 * IPython/iplib.py (Magic.magic_hist): Changed @hist and @dhist
4766 * IPython/iplib.py (Magic.magic_hist): Changed @hist and @dhist
4761 to *not* include the last item given in a range. This brings their
4767 to *not* include the last item given in a range. This brings their
4762 behavior in line with Python's slicing:
4768 behavior in line with Python's slicing:
4763 a[n1:n2] -> a[n1]...a[n2-1]
4769 a[n1:n2] -> a[n1]...a[n2-1]
4764 It may be a bit less convenient, but I prefer to stick to Python's
4770 It may be a bit less convenient, but I prefer to stick to Python's
4765 conventions *everywhere*, so users never have to wonder.
4771 conventions *everywhere*, so users never have to wonder.
4766 (Magic.magic_macro): Added @macro function to ease the creation of
4772 (Magic.magic_macro): Added @macro function to ease the creation of
4767 macros.
4773 macros.
4768
4774
4769 2002-01-05 Fernando Perez <fperez@colorado.edu>
4775 2002-01-05 Fernando Perez <fperez@colorado.edu>
4770
4776
4771 * Released 0.2.4.
4777 * Released 0.2.4.
4772
4778
4773 * IPython/iplib.py (Magic.magic_pdef):
4779 * IPython/iplib.py (Magic.magic_pdef):
4774 (InteractiveShell.safe_execfile): report magic lines and error
4780 (InteractiveShell.safe_execfile): report magic lines and error
4775 lines without line numbers so one can easily copy/paste them for
4781 lines without line numbers so one can easily copy/paste them for
4776 re-execution.
4782 re-execution.
4777
4783
4778 * Updated manual with recent changes.
4784 * Updated manual with recent changes.
4779
4785
4780 * IPython/iplib.py (Magic.magic_oinfo): added constructor
4786 * IPython/iplib.py (Magic.magic_oinfo): added constructor
4781 docstring printing when class? is called. Very handy for knowing
4787 docstring printing when class? is called. Very handy for knowing
4782 how to create class instances (as long as __init__ is well
4788 how to create class instances (as long as __init__ is well
4783 documented, of course :)
4789 documented, of course :)
4784 (Magic.magic_doc): print both class and constructor docstrings.
4790 (Magic.magic_doc): print both class and constructor docstrings.
4785 (Magic.magic_pdef): give constructor info if passed a class and
4791 (Magic.magic_pdef): give constructor info if passed a class and
4786 __call__ info for callable object instances.
4792 __call__ info for callable object instances.
4787
4793
4788 2002-01-04 Fernando Perez <fperez@colorado.edu>
4794 2002-01-04 Fernando Perez <fperez@colorado.edu>
4789
4795
4790 * Made deep_reload() off by default. It doesn't always work
4796 * Made deep_reload() off by default. It doesn't always work
4791 exactly as intended, so it's probably safer to have it off. It's
4797 exactly as intended, so it's probably safer to have it off. It's
4792 still available as dreload() anyway, so nothing is lost.
4798 still available as dreload() anyway, so nothing is lost.
4793
4799
4794 2002-01-02 Fernando Perez <fperez@colorado.edu>
4800 2002-01-02 Fernando Perez <fperez@colorado.edu>
4795
4801
4796 * Released 0.2.3 (contacted R.Singh at CU about biopython course,
4802 * Released 0.2.3 (contacted R.Singh at CU about biopython course,
4797 so I wanted an updated release).
4803 so I wanted an updated release).
4798
4804
4799 2001-12-27 Fernando Perez <fperez@colorado.edu>
4805 2001-12-27 Fernando Perez <fperez@colorado.edu>
4800
4806
4801 * IPython/iplib.py (InteractiveShell.interact): Added the original
4807 * IPython/iplib.py (InteractiveShell.interact): Added the original
4802 code from 'code.py' for this module in order to change the
4808 code from 'code.py' for this module in order to change the
4803 handling of a KeyboardInterrupt. This was necessary b/c otherwise
4809 handling of a KeyboardInterrupt. This was necessary b/c otherwise
4804 the history cache would break when the user hit Ctrl-C, and
4810 the history cache would break when the user hit Ctrl-C, and
4805 interact() offers no way to add any hooks to it.
4811 interact() offers no way to add any hooks to it.
4806
4812
4807 2001-12-23 Fernando Perez <fperez@colorado.edu>
4813 2001-12-23 Fernando Perez <fperez@colorado.edu>
4808
4814
4809 * setup.py: added check for 'MANIFEST' before trying to remove
4815 * setup.py: added check for 'MANIFEST' before trying to remove
4810 it. Thanks to Sean Reifschneider.
4816 it. Thanks to Sean Reifschneider.
4811
4817
4812 2001-12-22 Fernando Perez <fperez@colorado.edu>
4818 2001-12-22 Fernando Perez <fperez@colorado.edu>
4813
4819
4814 * Released 0.2.2.
4820 * Released 0.2.2.
4815
4821
4816 * Finished (reasonably) writing the manual. Later will add the
4822 * Finished (reasonably) writing the manual. Later will add the
4817 python-standard navigation stylesheets, but for the time being
4823 python-standard navigation stylesheets, but for the time being
4818 it's fairly complete. Distribution will include html and pdf
4824 it's fairly complete. Distribution will include html and pdf
4819 versions.
4825 versions.
4820
4826
4821 * Bugfix: '.' wasn't being added to sys.path. Thanks to Prabhu
4827 * Bugfix: '.' wasn't being added to sys.path. Thanks to Prabhu
4822 (MayaVi author).
4828 (MayaVi author).
4823
4829
4824 2001-12-21 Fernando Perez <fperez@colorado.edu>
4830 2001-12-21 Fernando Perez <fperez@colorado.edu>
4825
4831
4826 * Released 0.2.1. Barring any nasty bugs, this is it as far as a
4832 * Released 0.2.1. Barring any nasty bugs, this is it as far as a
4827 good public release, I think (with the manual and the distutils
4833 good public release, I think (with the manual and the distutils
4828 installer). The manual can use some work, but that can go
4834 installer). The manual can use some work, but that can go
4829 slowly. Otherwise I think it's quite nice for end users. Next
4835 slowly. Otherwise I think it's quite nice for end users. Next
4830 summer, rewrite the guts of it...
4836 summer, rewrite the guts of it...
4831
4837
4832 * Changed format of ipythonrc files to use whitespace as the
4838 * Changed format of ipythonrc files to use whitespace as the
4833 separator instead of an explicit '='. Cleaner.
4839 separator instead of an explicit '='. Cleaner.
4834
4840
4835 2001-12-20 Fernando Perez <fperez@colorado.edu>
4841 2001-12-20 Fernando Perez <fperez@colorado.edu>
4836
4842
4837 * Started a manual in LyX. For now it's just a quick merge of the
4843 * Started a manual in LyX. For now it's just a quick merge of the
4838 various internal docstrings and READMEs. Later it may grow into a
4844 various internal docstrings and READMEs. Later it may grow into a
4839 nice, full-blown manual.
4845 nice, full-blown manual.
4840
4846
4841 * Set up a distutils based installer. Installation should now be
4847 * Set up a distutils based installer. Installation should now be
4842 trivially simple for end-users.
4848 trivially simple for end-users.
4843
4849
4844 2001-12-11 Fernando Perez <fperez@colorado.edu>
4850 2001-12-11 Fernando Perez <fperez@colorado.edu>
4845
4851
4846 * Released 0.2.0. First public release, announced it at
4852 * Released 0.2.0. First public release, announced it at
4847 comp.lang.python. From now on, just bugfixes...
4853 comp.lang.python. From now on, just bugfixes...
4848
4854
4849 * Went through all the files, set copyright/license notices and
4855 * Went through all the files, set copyright/license notices and
4850 cleaned up things. Ready for release.
4856 cleaned up things. Ready for release.
4851
4857
4852 2001-12-10 Fernando Perez <fperez@colorado.edu>
4858 2001-12-10 Fernando Perez <fperez@colorado.edu>
4853
4859
4854 * Changed the first-time installer not to use tarfiles. It's more
4860 * Changed the first-time installer not to use tarfiles. It's more
4855 robust now and less unix-dependent. Also makes it easier for
4861 robust now and less unix-dependent. Also makes it easier for
4856 people to later upgrade versions.
4862 people to later upgrade versions.
4857
4863
4858 * Changed @exit to @abort to reflect the fact that it's pretty
4864 * Changed @exit to @abort to reflect the fact that it's pretty
4859 brutal (a sys.exit()). The difference between @abort and Ctrl-D
4865 brutal (a sys.exit()). The difference between @abort and Ctrl-D
4860 becomes significant only when IPyhton is embedded: in that case,
4866 becomes significant only when IPyhton is embedded: in that case,
4861 C-D closes IPython only, but @abort kills the enclosing program
4867 C-D closes IPython only, but @abort kills the enclosing program
4862 too (unless it had called IPython inside a try catching
4868 too (unless it had called IPython inside a try catching
4863 SystemExit).
4869 SystemExit).
4864
4870
4865 * Created Shell module which exposes the actuall IPython Shell
4871 * Created Shell module which exposes the actuall IPython Shell
4866 classes, currently the normal and the embeddable one. This at
4872 classes, currently the normal and the embeddable one. This at
4867 least offers a stable interface we won't need to change when
4873 least offers a stable interface we won't need to change when
4868 (later) the internals are rewritten. That rewrite will be confined
4874 (later) the internals are rewritten. That rewrite will be confined
4869 to iplib and ipmaker, but the Shell interface should remain as is.
4875 to iplib and ipmaker, but the Shell interface should remain as is.
4870
4876
4871 * Added embed module which offers an embeddable IPShell object,
4877 * Added embed module which offers an embeddable IPShell object,
4872 useful to fire up IPython *inside* a running program. Great for
4878 useful to fire up IPython *inside* a running program. Great for
4873 debugging or dynamical data analysis.
4879 debugging or dynamical data analysis.
4874
4880
4875 2001-12-08 Fernando Perez <fperez@colorado.edu>
4881 2001-12-08 Fernando Perez <fperez@colorado.edu>
4876
4882
4877 * Fixed small bug preventing seeing info from methods of defined
4883 * Fixed small bug preventing seeing info from methods of defined
4878 objects (incorrect namespace in _ofind()).
4884 objects (incorrect namespace in _ofind()).
4879
4885
4880 * Documentation cleanup. Moved the main usage docstrings to a
4886 * Documentation cleanup. Moved the main usage docstrings to a
4881 separate file, usage.py (cleaner to maintain, and hopefully in the
4887 separate file, usage.py (cleaner to maintain, and hopefully in the
4882 future some perlpod-like way of producing interactive, man and
4888 future some perlpod-like way of producing interactive, man and
4883 html docs out of it will be found).
4889 html docs out of it will be found).
4884
4890
4885 * Added @profile to see your profile at any time.
4891 * Added @profile to see your profile at any time.
4886
4892
4887 * Added @p as an alias for 'print'. It's especially convenient if
4893 * Added @p as an alias for 'print'. It's especially convenient if
4888 using automagic ('p x' prints x).
4894 using automagic ('p x' prints x).
4889
4895
4890 * Small cleanups and fixes after a pychecker run.
4896 * Small cleanups and fixes after a pychecker run.
4891
4897
4892 * Changed the @cd command to handle @cd - and @cd -<n> for
4898 * Changed the @cd command to handle @cd - and @cd -<n> for
4893 visiting any directory in _dh.
4899 visiting any directory in _dh.
4894
4900
4895 * Introduced _dh, a history of visited directories. @dhist prints
4901 * Introduced _dh, a history of visited directories. @dhist prints
4896 it out with numbers.
4902 it out with numbers.
4897
4903
4898 2001-12-07 Fernando Perez <fperez@colorado.edu>
4904 2001-12-07 Fernando Perez <fperez@colorado.edu>
4899
4905
4900 * Released 0.1.22
4906 * Released 0.1.22
4901
4907
4902 * Made initialization a bit more robust against invalid color
4908 * Made initialization a bit more robust against invalid color
4903 options in user input (exit, not traceback-crash).
4909 options in user input (exit, not traceback-crash).
4904
4910
4905 * Changed the bug crash reporter to write the report only in the
4911 * Changed the bug crash reporter to write the report only in the
4906 user's .ipython directory. That way IPython won't litter people's
4912 user's .ipython directory. That way IPython won't litter people's
4907 hard disks with crash files all over the place. Also print on
4913 hard disks with crash files all over the place. Also print on
4908 screen the necessary mail command.
4914 screen the necessary mail command.
4909
4915
4910 * With the new ultraTB, implemented LightBG color scheme for light
4916 * With the new ultraTB, implemented LightBG color scheme for light
4911 background terminals. A lot of people like white backgrounds, so I
4917 background terminals. A lot of people like white backgrounds, so I
4912 guess we should at least give them something readable.
4918 guess we should at least give them something readable.
4913
4919
4914 2001-12-06 Fernando Perez <fperez@colorado.edu>
4920 2001-12-06 Fernando Perez <fperez@colorado.edu>
4915
4921
4916 * Modified the structure of ultraTB. Now there's a proper class
4922 * Modified the structure of ultraTB. Now there's a proper class
4917 for tables of color schemes which allow adding schemes easily and
4923 for tables of color schemes which allow adding schemes easily and
4918 switching the active scheme without creating a new instance every
4924 switching the active scheme without creating a new instance every
4919 time (which was ridiculous). The syntax for creating new schemes
4925 time (which was ridiculous). The syntax for creating new schemes
4920 is also cleaner. I think ultraTB is finally done, with a clean
4926 is also cleaner. I think ultraTB is finally done, with a clean
4921 class structure. Names are also much cleaner (now there's proper
4927 class structure. Names are also much cleaner (now there's proper
4922 color tables, no need for every variable to also have 'color' in
4928 color tables, no need for every variable to also have 'color' in
4923 its name).
4929 its name).
4924
4930
4925 * Broke down genutils into separate files. Now genutils only
4931 * Broke down genutils into separate files. Now genutils only
4926 contains utility functions, and classes have been moved to their
4932 contains utility functions, and classes have been moved to their
4927 own files (they had enough independent functionality to warrant
4933 own files (they had enough independent functionality to warrant
4928 it): ConfigLoader, OutputTrap, Struct.
4934 it): ConfigLoader, OutputTrap, Struct.
4929
4935
4930 2001-12-05 Fernando Perez <fperez@colorado.edu>
4936 2001-12-05 Fernando Perez <fperez@colorado.edu>
4931
4937
4932 * IPython turns 21! Released version 0.1.21, as a candidate for
4938 * IPython turns 21! Released version 0.1.21, as a candidate for
4933 public consumption. If all goes well, release in a few days.
4939 public consumption. If all goes well, release in a few days.
4934
4940
4935 * Fixed path bug (files in Extensions/ directory wouldn't be found
4941 * Fixed path bug (files in Extensions/ directory wouldn't be found
4936 unless IPython/ was explicitly in sys.path).
4942 unless IPython/ was explicitly in sys.path).
4937
4943
4938 * Extended the FlexCompleter class as MagicCompleter to allow
4944 * Extended the FlexCompleter class as MagicCompleter to allow
4939 completion of @-starting lines.
4945 completion of @-starting lines.
4940
4946
4941 * Created __release__.py file as a central repository for release
4947 * Created __release__.py file as a central repository for release
4942 info that other files can read from.
4948 info that other files can read from.
4943
4949
4944 * Fixed small bug in logging: when logging was turned on in
4950 * Fixed small bug in logging: when logging was turned on in
4945 mid-session, old lines with special meanings (!@?) were being
4951 mid-session, old lines with special meanings (!@?) were being
4946 logged without the prepended comment, which is necessary since
4952 logged without the prepended comment, which is necessary since
4947 they are not truly valid python syntax. This should make session
4953 they are not truly valid python syntax. This should make session
4948 restores produce less errors.
4954 restores produce less errors.
4949
4955
4950 * The namespace cleanup forced me to make a FlexCompleter class
4956 * The namespace cleanup forced me to make a FlexCompleter class
4951 which is nothing but a ripoff of rlcompleter, but with selectable
4957 which is nothing but a ripoff of rlcompleter, but with selectable
4952 namespace (rlcompleter only works in __main__.__dict__). I'll try
4958 namespace (rlcompleter only works in __main__.__dict__). I'll try
4953 to submit a note to the authors to see if this change can be
4959 to submit a note to the authors to see if this change can be
4954 incorporated in future rlcompleter releases (Dec.6: done)
4960 incorporated in future rlcompleter releases (Dec.6: done)
4955
4961
4956 * More fixes to namespace handling. It was a mess! Now all
4962 * More fixes to namespace handling. It was a mess! Now all
4957 explicit references to __main__.__dict__ are gone (except when
4963 explicit references to __main__.__dict__ are gone (except when
4958 really needed) and everything is handled through the namespace
4964 really needed) and everything is handled through the namespace
4959 dicts in the IPython instance. We seem to be getting somewhere
4965 dicts in the IPython instance. We seem to be getting somewhere
4960 with this, finally...
4966 with this, finally...
4961
4967
4962 * Small documentation updates.
4968 * Small documentation updates.
4963
4969
4964 * Created the Extensions directory under IPython (with an
4970 * Created the Extensions directory under IPython (with an
4965 __init__.py). Put the PhysicalQ stuff there. This directory should
4971 __init__.py). Put the PhysicalQ stuff there. This directory should
4966 be used for all special-purpose extensions.
4972 be used for all special-purpose extensions.
4967
4973
4968 * File renaming:
4974 * File renaming:
4969 ipythonlib --> ipmaker
4975 ipythonlib --> ipmaker
4970 ipplib --> iplib
4976 ipplib --> iplib
4971 This makes a bit more sense in terms of what these files actually do.
4977 This makes a bit more sense in terms of what these files actually do.
4972
4978
4973 * Moved all the classes and functions in ipythonlib to ipplib, so
4979 * Moved all the classes and functions in ipythonlib to ipplib, so
4974 now ipythonlib only has make_IPython(). This will ease up its
4980 now ipythonlib only has make_IPython(). This will ease up its
4975 splitting in smaller functional chunks later.
4981 splitting in smaller functional chunks later.
4976
4982
4977 * Cleaned up (done, I think) output of @whos. Better column
4983 * Cleaned up (done, I think) output of @whos. Better column
4978 formatting, and now shows str(var) for as much as it can, which is
4984 formatting, and now shows str(var) for as much as it can, which is
4979 typically what one gets with a 'print var'.
4985 typically what one gets with a 'print var'.
4980
4986
4981 2001-12-04 Fernando Perez <fperez@colorado.edu>
4987 2001-12-04 Fernando Perez <fperez@colorado.edu>
4982
4988
4983 * Fixed namespace problems. Now builtin/IPyhton/user names get
4989 * Fixed namespace problems. Now builtin/IPyhton/user names get
4984 properly reported in their namespace. Internal namespace handling
4990 properly reported in their namespace. Internal namespace handling
4985 is finally getting decent (not perfect yet, but much better than
4991 is finally getting decent (not perfect yet, but much better than
4986 the ad-hoc mess we had).
4992 the ad-hoc mess we had).
4987
4993
4988 * Removed -exit option. If people just want to run a python
4994 * Removed -exit option. If people just want to run a python
4989 script, that's what the normal interpreter is for. Less
4995 script, that's what the normal interpreter is for. Less
4990 unnecessary options, less chances for bugs.
4996 unnecessary options, less chances for bugs.
4991
4997
4992 * Added a crash handler which generates a complete post-mortem if
4998 * Added a crash handler which generates a complete post-mortem if
4993 IPython crashes. This will help a lot in tracking bugs down the
4999 IPython crashes. This will help a lot in tracking bugs down the
4994 road.
5000 road.
4995
5001
4996 * Fixed nasty bug in auto-evaluation part of prefilter(). Names
5002 * Fixed nasty bug in auto-evaluation part of prefilter(). Names
4997 which were boud to functions being reassigned would bypass the
5003 which were boud to functions being reassigned would bypass the
4998 logger, breaking the sync of _il with the prompt counter. This
5004 logger, breaking the sync of _il with the prompt counter. This
4999 would then crash IPython later when a new line was logged.
5005 would then crash IPython later when a new line was logged.
5000
5006
5001 2001-12-02 Fernando Perez <fperez@colorado.edu>
5007 2001-12-02 Fernando Perez <fperez@colorado.edu>
5002
5008
5003 * Made IPython a package. This means people don't have to clutter
5009 * Made IPython a package. This means people don't have to clutter
5004 their sys.path with yet another directory. Changed the INSTALL
5010 their sys.path with yet another directory. Changed the INSTALL
5005 file accordingly.
5011 file accordingly.
5006
5012
5007 * Cleaned up the output of @who_ls, @who and @whos. @who_ls now
5013 * Cleaned up the output of @who_ls, @who and @whos. @who_ls now
5008 sorts its output (so @who shows it sorted) and @whos formats the
5014 sorts its output (so @who shows it sorted) and @whos formats the
5009 table according to the width of the first column. Nicer, easier to
5015 table according to the width of the first column. Nicer, easier to
5010 read. Todo: write a generic table_format() which takes a list of
5016 read. Todo: write a generic table_format() which takes a list of
5011 lists and prints it nicely formatted, with optional row/column
5017 lists and prints it nicely formatted, with optional row/column
5012 separators and proper padding and justification.
5018 separators and proper padding and justification.
5013
5019
5014 * Released 0.1.20
5020 * Released 0.1.20
5015
5021
5016 * Fixed bug in @log which would reverse the inputcache list (a
5022 * Fixed bug in @log which would reverse the inputcache list (a
5017 copy operation was missing).
5023 copy operation was missing).
5018
5024
5019 * Code cleanup. @config was changed to use page(). Better, since
5025 * Code cleanup. @config was changed to use page(). Better, since
5020 its output is always quite long.
5026 its output is always quite long.
5021
5027
5022 * Itpl is back as a dependency. I was having too many problems
5028 * Itpl is back as a dependency. I was having too many problems
5023 getting the parametric aliases to work reliably, and it's just
5029 getting the parametric aliases to work reliably, and it's just
5024 easier to code weird string operations with it than playing %()s
5030 easier to code weird string operations with it than playing %()s
5025 games. It's only ~6k, so I don't think it's too big a deal.
5031 games. It's only ~6k, so I don't think it's too big a deal.
5026
5032
5027 * Found (and fixed) a very nasty bug with history. !lines weren't
5033 * Found (and fixed) a very nasty bug with history. !lines weren't
5028 getting cached, and the out of sync caches would crash
5034 getting cached, and the out of sync caches would crash
5029 IPython. Fixed it by reorganizing the prefilter/handlers/logger
5035 IPython. Fixed it by reorganizing the prefilter/handlers/logger
5030 division of labor a bit better. Bug fixed, cleaner structure.
5036 division of labor a bit better. Bug fixed, cleaner structure.
5031
5037
5032 2001-12-01 Fernando Perez <fperez@colorado.edu>
5038 2001-12-01 Fernando Perez <fperez@colorado.edu>
5033
5039
5034 * Released 0.1.19
5040 * Released 0.1.19
5035
5041
5036 * Added option -n to @hist to prevent line number printing. Much
5042 * Added option -n to @hist to prevent line number printing. Much
5037 easier to copy/paste code this way.
5043 easier to copy/paste code this way.
5038
5044
5039 * Created global _il to hold the input list. Allows easy
5045 * Created global _il to hold the input list. Allows easy
5040 re-execution of blocks of code by slicing it (inspired by Janko's
5046 re-execution of blocks of code by slicing it (inspired by Janko's
5041 comment on 'macros').
5047 comment on 'macros').
5042
5048
5043 * Small fixes and doc updates.
5049 * Small fixes and doc updates.
5044
5050
5045 * Rewrote @history function (was @h). Renamed it to @hist, @h is
5051 * Rewrote @history function (was @h). Renamed it to @hist, @h is
5046 much too fragile with automagic. Handles properly multi-line
5052 much too fragile with automagic. Handles properly multi-line
5047 statements and takes parameters.
5053 statements and takes parameters.
5048
5054
5049 2001-11-30 Fernando Perez <fperez@colorado.edu>
5055 2001-11-30 Fernando Perez <fperez@colorado.edu>
5050
5056
5051 * Version 0.1.18 released.
5057 * Version 0.1.18 released.
5052
5058
5053 * Fixed nasty namespace bug in initial module imports.
5059 * Fixed nasty namespace bug in initial module imports.
5054
5060
5055 * Added copyright/license notes to all code files (except
5061 * Added copyright/license notes to all code files (except
5056 DPyGetOpt). For the time being, LGPL. That could change.
5062 DPyGetOpt). For the time being, LGPL. That could change.
5057
5063
5058 * Rewrote a much nicer README, updated INSTALL, cleaned up
5064 * Rewrote a much nicer README, updated INSTALL, cleaned up
5059 ipythonrc-* samples.
5065 ipythonrc-* samples.
5060
5066
5061 * Overall code/documentation cleanup. Basically ready for
5067 * Overall code/documentation cleanup. Basically ready for
5062 release. Only remaining thing: licence decision (LGPL?).
5068 release. Only remaining thing: licence decision (LGPL?).
5063
5069
5064 * Converted load_config to a class, ConfigLoader. Now recursion
5070 * Converted load_config to a class, ConfigLoader. Now recursion
5065 control is better organized. Doesn't include the same file twice.
5071 control is better organized. Doesn't include the same file twice.
5066
5072
5067 2001-11-29 Fernando Perez <fperez@colorado.edu>
5073 2001-11-29 Fernando Perez <fperez@colorado.edu>
5068
5074
5069 * Got input history working. Changed output history variables from
5075 * Got input history working. Changed output history variables from
5070 _p to _o so that _i is for input and _o for output. Just cleaner
5076 _p to _o so that _i is for input and _o for output. Just cleaner
5071 convention.
5077 convention.
5072
5078
5073 * Implemented parametric aliases. This pretty much allows the
5079 * Implemented parametric aliases. This pretty much allows the
5074 alias system to offer full-blown shell convenience, I think.
5080 alias system to offer full-blown shell convenience, I think.
5075
5081
5076 * Version 0.1.17 released, 0.1.18 opened.
5082 * Version 0.1.17 released, 0.1.18 opened.
5077
5083
5078 * dot_ipython/ipythonrc (alias): added documentation.
5084 * dot_ipython/ipythonrc (alias): added documentation.
5079 (xcolor): Fixed small bug (xcolors -> xcolor)
5085 (xcolor): Fixed small bug (xcolors -> xcolor)
5080
5086
5081 * Changed the alias system. Now alias is a magic command to define
5087 * Changed the alias system. Now alias is a magic command to define
5082 aliases just like the shell. Rationale: the builtin magics should
5088 aliases just like the shell. Rationale: the builtin magics should
5083 be there for things deeply connected to IPython's
5089 be there for things deeply connected to IPython's
5084 architecture. And this is a much lighter system for what I think
5090 architecture. And this is a much lighter system for what I think
5085 is the really important feature: allowing users to define quickly
5091 is the really important feature: allowing users to define quickly
5086 magics that will do shell things for them, so they can customize
5092 magics that will do shell things for them, so they can customize
5087 IPython easily to match their work habits. If someone is really
5093 IPython easily to match their work habits. If someone is really
5088 desperate to have another name for a builtin alias, they can
5094 desperate to have another name for a builtin alias, they can
5089 always use __IP.magic_newname = __IP.magic_oldname. Hackish but
5095 always use __IP.magic_newname = __IP.magic_oldname. Hackish but
5090 works.
5096 works.
5091
5097
5092 2001-11-28 Fernando Perez <fperez@colorado.edu>
5098 2001-11-28 Fernando Perez <fperez@colorado.edu>
5093
5099
5094 * Changed @file so that it opens the source file at the proper
5100 * Changed @file so that it opens the source file at the proper
5095 line. Since it uses less, if your EDITOR environment is
5101 line. Since it uses less, if your EDITOR environment is
5096 configured, typing v will immediately open your editor of choice
5102 configured, typing v will immediately open your editor of choice
5097 right at the line where the object is defined. Not as quick as
5103 right at the line where the object is defined. Not as quick as
5098 having a direct @edit command, but for all intents and purposes it
5104 having a direct @edit command, but for all intents and purposes it
5099 works. And I don't have to worry about writing @edit to deal with
5105 works. And I don't have to worry about writing @edit to deal with
5100 all the editors, less does that.
5106 all the editors, less does that.
5101
5107
5102 * Version 0.1.16 released, 0.1.17 opened.
5108 * Version 0.1.16 released, 0.1.17 opened.
5103
5109
5104 * Fixed some nasty bugs in the page/page_dumb combo that could
5110 * Fixed some nasty bugs in the page/page_dumb combo that could
5105 crash IPython.
5111 crash IPython.
5106
5112
5107 2001-11-27 Fernando Perez <fperez@colorado.edu>
5113 2001-11-27 Fernando Perez <fperez@colorado.edu>
5108
5114
5109 * Version 0.1.15 released, 0.1.16 opened.
5115 * Version 0.1.15 released, 0.1.16 opened.
5110
5116
5111 * Finally got ? and ?? to work for undefined things: now it's
5117 * Finally got ? and ?? to work for undefined things: now it's
5112 possible to type {}.get? and get information about the get method
5118 possible to type {}.get? and get information about the get method
5113 of dicts, or os.path? even if only os is defined (so technically
5119 of dicts, or os.path? even if only os is defined (so technically
5114 os.path isn't). Works at any level. For example, after import os,
5120 os.path isn't). Works at any level. For example, after import os,
5115 os?, os.path?, os.path.abspath? all work. This is great, took some
5121 os?, os.path?, os.path.abspath? all work. This is great, took some
5116 work in _ofind.
5122 work in _ofind.
5117
5123
5118 * Fixed more bugs with logging. The sanest way to do it was to add
5124 * Fixed more bugs with logging. The sanest way to do it was to add
5119 to @log a 'mode' parameter. Killed two in one shot (this mode
5125 to @log a 'mode' parameter. Killed two in one shot (this mode
5120 option was a request of Janko's). I think it's finally clean
5126 option was a request of Janko's). I think it's finally clean
5121 (famous last words).
5127 (famous last words).
5122
5128
5123 * Added a page_dumb() pager which does a decent job of paging on
5129 * Added a page_dumb() pager which does a decent job of paging on
5124 screen, if better things (like less) aren't available. One less
5130 screen, if better things (like less) aren't available. One less
5125 unix dependency (someday maybe somebody will port this to
5131 unix dependency (someday maybe somebody will port this to
5126 windows).
5132 windows).
5127
5133
5128 * Fixed problem in magic_log: would lock of logging out if log
5134 * Fixed problem in magic_log: would lock of logging out if log
5129 creation failed (because it would still think it had succeeded).
5135 creation failed (because it would still think it had succeeded).
5130
5136
5131 * Improved the page() function using curses to auto-detect screen
5137 * Improved the page() function using curses to auto-detect screen
5132 size. Now it can make a much better decision on whether to print
5138 size. Now it can make a much better decision on whether to print
5133 or page a string. Option screen_length was modified: a value 0
5139 or page a string. Option screen_length was modified: a value 0
5134 means auto-detect, and that's the default now.
5140 means auto-detect, and that's the default now.
5135
5141
5136 * Version 0.1.14 released, 0.1.15 opened. I think this is ready to
5142 * Version 0.1.14 released, 0.1.15 opened. I think this is ready to
5137 go out. I'll test it for a few days, then talk to Janko about
5143 go out. I'll test it for a few days, then talk to Janko about
5138 licences and announce it.
5144 licences and announce it.
5139
5145
5140 * Fixed the length of the auto-generated ---> prompt which appears
5146 * Fixed the length of the auto-generated ---> prompt which appears
5141 for auto-parens and auto-quotes. Getting this right isn't trivial,
5147 for auto-parens and auto-quotes. Getting this right isn't trivial,
5142 with all the color escapes, different prompt types and optional
5148 with all the color escapes, different prompt types and optional
5143 separators. But it seems to be working in all the combinations.
5149 separators. But it seems to be working in all the combinations.
5144
5150
5145 2001-11-26 Fernando Perez <fperez@colorado.edu>
5151 2001-11-26 Fernando Perez <fperez@colorado.edu>
5146
5152
5147 * Wrote a regexp filter to get option types from the option names
5153 * Wrote a regexp filter to get option types from the option names
5148 string. This eliminates the need to manually keep two duplicate
5154 string. This eliminates the need to manually keep two duplicate
5149 lists.
5155 lists.
5150
5156
5151 * Removed the unneeded check_option_names. Now options are handled
5157 * Removed the unneeded check_option_names. Now options are handled
5152 in a much saner manner and it's easy to visually check that things
5158 in a much saner manner and it's easy to visually check that things
5153 are ok.
5159 are ok.
5154
5160
5155 * Updated version numbers on all files I modified to carry a
5161 * Updated version numbers on all files I modified to carry a
5156 notice so Janko and Nathan have clear version markers.
5162 notice so Janko and Nathan have clear version markers.
5157
5163
5158 * Updated docstring for ultraTB with my changes. I should send
5164 * Updated docstring for ultraTB with my changes. I should send
5159 this to Nathan.
5165 this to Nathan.
5160
5166
5161 * Lots of small fixes. Ran everything through pychecker again.
5167 * Lots of small fixes. Ran everything through pychecker again.
5162
5168
5163 * Made loading of deep_reload an cmd line option. If it's not too
5169 * Made loading of deep_reload an cmd line option. If it's not too
5164 kosher, now people can just disable it. With -nodeep_reload it's
5170 kosher, now people can just disable it. With -nodeep_reload it's
5165 still available as dreload(), it just won't overwrite reload().
5171 still available as dreload(), it just won't overwrite reload().
5166
5172
5167 * Moved many options to the no| form (-opt and -noopt
5173 * Moved many options to the no| form (-opt and -noopt
5168 accepted). Cleaner.
5174 accepted). Cleaner.
5169
5175
5170 * Changed magic_log so that if called with no parameters, it uses
5176 * Changed magic_log so that if called with no parameters, it uses
5171 'rotate' mode. That way auto-generated logs aren't automatically
5177 'rotate' mode. That way auto-generated logs aren't automatically
5172 over-written. For normal logs, now a backup is made if it exists
5178 over-written. For normal logs, now a backup is made if it exists
5173 (only 1 level of backups). A new 'backup' mode was added to the
5179 (only 1 level of backups). A new 'backup' mode was added to the
5174 Logger class to support this. This was a request by Janko.
5180 Logger class to support this. This was a request by Janko.
5175
5181
5176 * Added @logoff/@logon to stop/restart an active log.
5182 * Added @logoff/@logon to stop/restart an active log.
5177
5183
5178 * Fixed a lot of bugs in log saving/replay. It was pretty
5184 * Fixed a lot of bugs in log saving/replay. It was pretty
5179 broken. Now special lines (!@,/) appear properly in the command
5185 broken. Now special lines (!@,/) appear properly in the command
5180 history after a log replay.
5186 history after a log replay.
5181
5187
5182 * Tried and failed to implement full session saving via pickle. My
5188 * Tried and failed to implement full session saving via pickle. My
5183 idea was to pickle __main__.__dict__, but modules can't be
5189 idea was to pickle __main__.__dict__, but modules can't be
5184 pickled. This would be a better alternative to replaying logs, but
5190 pickled. This would be a better alternative to replaying logs, but
5185 seems quite tricky to get to work. Changed -session to be called
5191 seems quite tricky to get to work. Changed -session to be called
5186 -logplay, which more accurately reflects what it does. And if we
5192 -logplay, which more accurately reflects what it does. And if we
5187 ever get real session saving working, -session is now available.
5193 ever get real session saving working, -session is now available.
5188
5194
5189 * Implemented color schemes for prompts also. As for tracebacks,
5195 * Implemented color schemes for prompts also. As for tracebacks,
5190 currently only NoColor and Linux are supported. But now the
5196 currently only NoColor and Linux are supported. But now the
5191 infrastructure is in place, based on a generic ColorScheme
5197 infrastructure is in place, based on a generic ColorScheme
5192 class. So writing and activating new schemes both for the prompts
5198 class. So writing and activating new schemes both for the prompts
5193 and the tracebacks should be straightforward.
5199 and the tracebacks should be straightforward.
5194
5200
5195 * Version 0.1.13 released, 0.1.14 opened.
5201 * Version 0.1.13 released, 0.1.14 opened.
5196
5202
5197 * Changed handling of options for output cache. Now counter is
5203 * Changed handling of options for output cache. Now counter is
5198 hardwired starting at 1 and one specifies the maximum number of
5204 hardwired starting at 1 and one specifies the maximum number of
5199 entries *in the outcache* (not the max prompt counter). This is
5205 entries *in the outcache* (not the max prompt counter). This is
5200 much better, since many statements won't increase the cache
5206 much better, since many statements won't increase the cache
5201 count. It also eliminated some confusing options, now there's only
5207 count. It also eliminated some confusing options, now there's only
5202 one: cache_size.
5208 one: cache_size.
5203
5209
5204 * Added 'alias' magic function and magic_alias option in the
5210 * Added 'alias' magic function and magic_alias option in the
5205 ipythonrc file. Now the user can easily define whatever names he
5211 ipythonrc file. Now the user can easily define whatever names he
5206 wants for the magic functions without having to play weird
5212 wants for the magic functions without having to play weird
5207 namespace games. This gives IPython a real shell-like feel.
5213 namespace games. This gives IPython a real shell-like feel.
5208
5214
5209 * Fixed doc/?/?? for magics. Now all work, in all forms (explicit
5215 * Fixed doc/?/?? for magics. Now all work, in all forms (explicit
5210 @ or not).
5216 @ or not).
5211
5217
5212 This was one of the last remaining 'visible' bugs (that I know
5218 This was one of the last remaining 'visible' bugs (that I know
5213 of). I think if I can clean up the session loading so it works
5219 of). I think if I can clean up the session loading so it works
5214 100% I'll release a 0.2.0 version on c.p.l (talk to Janko first
5220 100% I'll release a 0.2.0 version on c.p.l (talk to Janko first
5215 about licensing).
5221 about licensing).
5216
5222
5217 2001-11-25 Fernando Perez <fperez@colorado.edu>
5223 2001-11-25 Fernando Perez <fperez@colorado.edu>
5218
5224
5219 * Rewrote somewhat oinfo (?/??). Nicer, now uses page() and
5225 * Rewrote somewhat oinfo (?/??). Nicer, now uses page() and
5220 there's a cleaner distinction between what ? and ?? show.
5226 there's a cleaner distinction between what ? and ?? show.
5221
5227
5222 * Added screen_length option. Now the user can define his own
5228 * Added screen_length option. Now the user can define his own
5223 screen size for page() operations.
5229 screen size for page() operations.
5224
5230
5225 * Implemented magic shell-like functions with automatic code
5231 * Implemented magic shell-like functions with automatic code
5226 generation. Now adding another function is just a matter of adding
5232 generation. Now adding another function is just a matter of adding
5227 an entry to a dict, and the function is dynamically generated at
5233 an entry to a dict, and the function is dynamically generated at
5228 run-time. Python has some really cool features!
5234 run-time. Python has some really cool features!
5229
5235
5230 * Renamed many options to cleanup conventions a little. Now all
5236 * Renamed many options to cleanup conventions a little. Now all
5231 are lowercase, and only underscores where needed. Also in the code
5237 are lowercase, and only underscores where needed. Also in the code
5232 option name tables are clearer.
5238 option name tables are clearer.
5233
5239
5234 * Changed prompts a little. Now input is 'In [n]:' instead of
5240 * Changed prompts a little. Now input is 'In [n]:' instead of
5235 'In[n]:='. This allows it the numbers to be aligned with the
5241 'In[n]:='. This allows it the numbers to be aligned with the
5236 Out[n] numbers, and removes usage of ':=' which doesn't exist in
5242 Out[n] numbers, and removes usage of ':=' which doesn't exist in
5237 Python (it was a Mathematica thing). The '...' continuation prompt
5243 Python (it was a Mathematica thing). The '...' continuation prompt
5238 was also changed a little to align better.
5244 was also changed a little to align better.
5239
5245
5240 * Fixed bug when flushing output cache. Not all _p<n> variables
5246 * Fixed bug when flushing output cache. Not all _p<n> variables
5241 exist, so their deletion needs to be wrapped in a try:
5247 exist, so their deletion needs to be wrapped in a try:
5242
5248
5243 * Figured out how to properly use inspect.formatargspec() (it
5249 * Figured out how to properly use inspect.formatargspec() (it
5244 requires the args preceded by *). So I removed all the code from
5250 requires the args preceded by *). So I removed all the code from
5245 _get_pdef in Magic, which was just replicating that.
5251 _get_pdef in Magic, which was just replicating that.
5246
5252
5247 * Added test to prefilter to allow redefining magic function names
5253 * Added test to prefilter to allow redefining magic function names
5248 as variables. This is ok, since the @ form is always available,
5254 as variables. This is ok, since the @ form is always available,
5249 but whe should allow the user to define a variable called 'ls' if
5255 but whe should allow the user to define a variable called 'ls' if
5250 he needs it.
5256 he needs it.
5251
5257
5252 * Moved the ToDo information from README into a separate ToDo.
5258 * Moved the ToDo information from README into a separate ToDo.
5253
5259
5254 * General code cleanup and small bugfixes. I think it's close to a
5260 * General code cleanup and small bugfixes. I think it's close to a
5255 state where it can be released, obviously with a big 'beta'
5261 state where it can be released, obviously with a big 'beta'
5256 warning on it.
5262 warning on it.
5257
5263
5258 * Got the magic function split to work. Now all magics are defined
5264 * Got the magic function split to work. Now all magics are defined
5259 in a separate class. It just organizes things a bit, and now
5265 in a separate class. It just organizes things a bit, and now
5260 Xemacs behaves nicer (it was choking on InteractiveShell b/c it
5266 Xemacs behaves nicer (it was choking on InteractiveShell b/c it
5261 was too long).
5267 was too long).
5262
5268
5263 * Changed @clear to @reset to avoid potential confusions with
5269 * Changed @clear to @reset to avoid potential confusions with
5264 the shell command clear. Also renamed @cl to @clear, which does
5270 the shell command clear. Also renamed @cl to @clear, which does
5265 exactly what people expect it to from their shell experience.
5271 exactly what people expect it to from their shell experience.
5266
5272
5267 Added a check to the @reset command (since it's so
5273 Added a check to the @reset command (since it's so
5268 destructive, it's probably a good idea to ask for confirmation).
5274 destructive, it's probably a good idea to ask for confirmation).
5269 But now reset only works for full namespace resetting. Since the
5275 But now reset only works for full namespace resetting. Since the
5270 del keyword is already there for deleting a few specific
5276 del keyword is already there for deleting a few specific
5271 variables, I don't see the point of having a redundant magic
5277 variables, I don't see the point of having a redundant magic
5272 function for the same task.
5278 function for the same task.
5273
5279
5274 2001-11-24 Fernando Perez <fperez@colorado.edu>
5280 2001-11-24 Fernando Perez <fperez@colorado.edu>
5275
5281
5276 * Updated the builtin docs (esp. the ? ones).
5282 * Updated the builtin docs (esp. the ? ones).
5277
5283
5278 * Ran all the code through pychecker. Not terribly impressed with
5284 * Ran all the code through pychecker. Not terribly impressed with
5279 it: lots of spurious warnings and didn't really find anything of
5285 it: lots of spurious warnings and didn't really find anything of
5280 substance (just a few modules being imported and not used).
5286 substance (just a few modules being imported and not used).
5281
5287
5282 * Implemented the new ultraTB functionality into IPython. New
5288 * Implemented the new ultraTB functionality into IPython. New
5283 option: xcolors. This chooses color scheme. xmode now only selects
5289 option: xcolors. This chooses color scheme. xmode now only selects
5284 between Plain and Verbose. Better orthogonality.
5290 between Plain and Verbose. Better orthogonality.
5285
5291
5286 * Large rewrite of ultraTB. Much cleaner now, with a separation of
5292 * Large rewrite of ultraTB. Much cleaner now, with a separation of
5287 mode and color scheme for the exception handlers. Now it's
5293 mode and color scheme for the exception handlers. Now it's
5288 possible to have the verbose traceback with no coloring.
5294 possible to have the verbose traceback with no coloring.
5289
5295
5290 2001-11-23 Fernando Perez <fperez@colorado.edu>
5296 2001-11-23 Fernando Perez <fperez@colorado.edu>
5291
5297
5292 * Version 0.1.12 released, 0.1.13 opened.
5298 * Version 0.1.12 released, 0.1.13 opened.
5293
5299
5294 * Removed option to set auto-quote and auto-paren escapes by
5300 * Removed option to set auto-quote and auto-paren escapes by
5295 user. The chances of breaking valid syntax are just too high. If
5301 user. The chances of breaking valid syntax are just too high. If
5296 someone *really* wants, they can always dig into the code.
5302 someone *really* wants, they can always dig into the code.
5297
5303
5298 * Made prompt separators configurable.
5304 * Made prompt separators configurable.
5299
5305
5300 2001-11-22 Fernando Perez <fperez@colorado.edu>
5306 2001-11-22 Fernando Perez <fperez@colorado.edu>
5301
5307
5302 * Small bugfixes in many places.
5308 * Small bugfixes in many places.
5303
5309
5304 * Removed the MyCompleter class from ipplib. It seemed redundant
5310 * Removed the MyCompleter class from ipplib. It seemed redundant
5305 with the C-p,C-n history search functionality. Less code to
5311 with the C-p,C-n history search functionality. Less code to
5306 maintain.
5312 maintain.
5307
5313
5308 * Moved all the original ipython.py code into ipythonlib.py. Right
5314 * Moved all the original ipython.py code into ipythonlib.py. Right
5309 now it's just one big dump into a function called make_IPython, so
5315 now it's just one big dump into a function called make_IPython, so
5310 no real modularity has been gained. But at least it makes the
5316 no real modularity has been gained. But at least it makes the
5311 wrapper script tiny, and since ipythonlib is a module, it gets
5317 wrapper script tiny, and since ipythonlib is a module, it gets
5312 compiled and startup is much faster.
5318 compiled and startup is much faster.
5313
5319
5314 This is a reasobably 'deep' change, so we should test it for a
5320 This is a reasobably 'deep' change, so we should test it for a
5315 while without messing too much more with the code.
5321 while without messing too much more with the code.
5316
5322
5317 2001-11-21 Fernando Perez <fperez@colorado.edu>
5323 2001-11-21 Fernando Perez <fperez@colorado.edu>
5318
5324
5319 * Version 0.1.11 released, 0.1.12 opened for further work.
5325 * Version 0.1.11 released, 0.1.12 opened for further work.
5320
5326
5321 * Removed dependency on Itpl. It was only needed in one place. It
5327 * Removed dependency on Itpl. It was only needed in one place. It
5322 would be nice if this became part of python, though. It makes life
5328 would be nice if this became part of python, though. It makes life
5323 *a lot* easier in some cases.
5329 *a lot* easier in some cases.
5324
5330
5325 * Simplified the prefilter code a bit. Now all handlers are
5331 * Simplified the prefilter code a bit. Now all handlers are
5326 expected to explicitly return a value (at least a blank string).
5332 expected to explicitly return a value (at least a blank string).
5327
5333
5328 * Heavy edits in ipplib. Removed the help system altogether. Now
5334 * Heavy edits in ipplib. Removed the help system altogether. Now
5329 obj?/?? is used for inspecting objects, a magic @doc prints
5335 obj?/?? is used for inspecting objects, a magic @doc prints
5330 docstrings, and full-blown Python help is accessed via the 'help'
5336 docstrings, and full-blown Python help is accessed via the 'help'
5331 keyword. This cleans up a lot of code (less to maintain) and does
5337 keyword. This cleans up a lot of code (less to maintain) and does
5332 the job. Since 'help' is now a standard Python component, might as
5338 the job. Since 'help' is now a standard Python component, might as
5333 well use it and remove duplicate functionality.
5339 well use it and remove duplicate functionality.
5334
5340
5335 Also removed the option to use ipplib as a standalone program. By
5341 Also removed the option to use ipplib as a standalone program. By
5336 now it's too dependent on other parts of IPython to function alone.
5342 now it's too dependent on other parts of IPython to function alone.
5337
5343
5338 * Fixed bug in genutils.pager. It would crash if the pager was
5344 * Fixed bug in genutils.pager. It would crash if the pager was
5339 exited immediately after opening (broken pipe).
5345 exited immediately after opening (broken pipe).
5340
5346
5341 * Trimmed down the VerboseTB reporting a little. The header is
5347 * Trimmed down the VerboseTB reporting a little. The header is
5342 much shorter now and the repeated exception arguments at the end
5348 much shorter now and the repeated exception arguments at the end
5343 have been removed. For interactive use the old header seemed a bit
5349 have been removed. For interactive use the old header seemed a bit
5344 excessive.
5350 excessive.
5345
5351
5346 * Fixed small bug in output of @whos for variables with multi-word
5352 * Fixed small bug in output of @whos for variables with multi-word
5347 types (only first word was displayed).
5353 types (only first word was displayed).
5348
5354
5349 2001-11-17 Fernando Perez <fperez@colorado.edu>
5355 2001-11-17 Fernando Perez <fperez@colorado.edu>
5350
5356
5351 * Version 0.1.10 released, 0.1.11 opened for further work.
5357 * Version 0.1.10 released, 0.1.11 opened for further work.
5352
5358
5353 * Modified dirs and friends. dirs now *returns* the stack (not
5359 * Modified dirs and friends. dirs now *returns* the stack (not
5354 prints), so one can manipulate it as a variable. Convenient to
5360 prints), so one can manipulate it as a variable. Convenient to
5355 travel along many directories.
5361 travel along many directories.
5356
5362
5357 * Fixed bug in magic_pdef: would only work with functions with
5363 * Fixed bug in magic_pdef: would only work with functions with
5358 arguments with default values.
5364 arguments with default values.
5359
5365
5360 2001-11-14 Fernando Perez <fperez@colorado.edu>
5366 2001-11-14 Fernando Perez <fperez@colorado.edu>
5361
5367
5362 * Added the PhysicsInput stuff to dot_ipython so it ships as an
5368 * Added the PhysicsInput stuff to dot_ipython so it ships as an
5363 example with IPython. Various other minor fixes and cleanups.
5369 example with IPython. Various other minor fixes and cleanups.
5364
5370
5365 * Version 0.1.9 released, 0.1.10 opened for further work.
5371 * Version 0.1.9 released, 0.1.10 opened for further work.
5366
5372
5367 * Added sys.path to the list of directories searched in the
5373 * Added sys.path to the list of directories searched in the
5368 execfile= option. It used to be the current directory and the
5374 execfile= option. It used to be the current directory and the
5369 user's IPYTHONDIR only.
5375 user's IPYTHONDIR only.
5370
5376
5371 2001-11-13 Fernando Perez <fperez@colorado.edu>
5377 2001-11-13 Fernando Perez <fperez@colorado.edu>
5372
5378
5373 * Reinstated the raw_input/prefilter separation that Janko had
5379 * Reinstated the raw_input/prefilter separation that Janko had
5374 initially. This gives a more convenient setup for extending the
5380 initially. This gives a more convenient setup for extending the
5375 pre-processor from the outside: raw_input always gets a string,
5381 pre-processor from the outside: raw_input always gets a string,
5376 and prefilter has to process it. We can then redefine prefilter
5382 and prefilter has to process it. We can then redefine prefilter
5377 from the outside and implement extensions for special
5383 from the outside and implement extensions for special
5378 purposes.
5384 purposes.
5379
5385
5380 Today I got one for inputting PhysicalQuantity objects
5386 Today I got one for inputting PhysicalQuantity objects
5381 (from Scientific) without needing any function calls at
5387 (from Scientific) without needing any function calls at
5382 all. Extremely convenient, and it's all done as a user-level
5388 all. Extremely convenient, and it's all done as a user-level
5383 extension (no IPython code was touched). Now instead of:
5389 extension (no IPython code was touched). Now instead of:
5384 a = PhysicalQuantity(4.2,'m/s**2')
5390 a = PhysicalQuantity(4.2,'m/s**2')
5385 one can simply say
5391 one can simply say
5386 a = 4.2 m/s**2
5392 a = 4.2 m/s**2
5387 or even
5393 or even
5388 a = 4.2 m/s^2
5394 a = 4.2 m/s^2
5389
5395
5390 I use this, but it's also a proof of concept: IPython really is
5396 I use this, but it's also a proof of concept: IPython really is
5391 fully user-extensible, even at the level of the parsing of the
5397 fully user-extensible, even at the level of the parsing of the
5392 command line. It's not trivial, but it's perfectly doable.
5398 command line. It's not trivial, but it's perfectly doable.
5393
5399
5394 * Added 'add_flip' method to inclusion conflict resolver. Fixes
5400 * Added 'add_flip' method to inclusion conflict resolver. Fixes
5395 the problem of modules being loaded in the inverse order in which
5401 the problem of modules being loaded in the inverse order in which
5396 they were defined in
5402 they were defined in
5397
5403
5398 * Version 0.1.8 released, 0.1.9 opened for further work.
5404 * Version 0.1.8 released, 0.1.9 opened for further work.
5399
5405
5400 * Added magics pdef, source and file. They respectively show the
5406 * Added magics pdef, source and file. They respectively show the
5401 definition line ('prototype' in C), source code and full python
5407 definition line ('prototype' in C), source code and full python
5402 file for any callable object. The object inspector oinfo uses
5408 file for any callable object. The object inspector oinfo uses
5403 these to show the same information.
5409 these to show the same information.
5404
5410
5405 * Version 0.1.7 released, 0.1.8 opened for further work.
5411 * Version 0.1.7 released, 0.1.8 opened for further work.
5406
5412
5407 * Separated all the magic functions into a class called Magic. The
5413 * Separated all the magic functions into a class called Magic. The
5408 InteractiveShell class was becoming too big for Xemacs to handle
5414 InteractiveShell class was becoming too big for Xemacs to handle
5409 (de-indenting a line would lock it up for 10 seconds while it
5415 (de-indenting a line would lock it up for 10 seconds while it
5410 backtracked on the whole class!)
5416 backtracked on the whole class!)
5411
5417
5412 FIXME: didn't work. It can be done, but right now namespaces are
5418 FIXME: didn't work. It can be done, but right now namespaces are
5413 all messed up. Do it later (reverted it for now, so at least
5419 all messed up. Do it later (reverted it for now, so at least
5414 everything works as before).
5420 everything works as before).
5415
5421
5416 * Got the object introspection system (magic_oinfo) working! I
5422 * Got the object introspection system (magic_oinfo) working! I
5417 think this is pretty much ready for release to Janko, so he can
5423 think this is pretty much ready for release to Janko, so he can
5418 test it for a while and then announce it. Pretty much 100% of what
5424 test it for a while and then announce it. Pretty much 100% of what
5419 I wanted for the 'phase 1' release is ready. Happy, tired.
5425 I wanted for the 'phase 1' release is ready. Happy, tired.
5420
5426
5421 2001-11-12 Fernando Perez <fperez@colorado.edu>
5427 2001-11-12 Fernando Perez <fperez@colorado.edu>
5422
5428
5423 * Version 0.1.6 released, 0.1.7 opened for further work.
5429 * Version 0.1.6 released, 0.1.7 opened for further work.
5424
5430
5425 * Fixed bug in printing: it used to test for truth before
5431 * Fixed bug in printing: it used to test for truth before
5426 printing, so 0 wouldn't print. Now checks for None.
5432 printing, so 0 wouldn't print. Now checks for None.
5427
5433
5428 * Fixed bug where auto-execs increase the prompt counter by 2 (b/c
5434 * Fixed bug where auto-execs increase the prompt counter by 2 (b/c
5429 they have to call len(str(sys.ps1)) ). But the fix is ugly, it
5435 they have to call len(str(sys.ps1)) ). But the fix is ugly, it
5430 reaches by hand into the outputcache. Think of a better way to do
5436 reaches by hand into the outputcache. Think of a better way to do
5431 this later.
5437 this later.
5432
5438
5433 * Various small fixes thanks to Nathan's comments.
5439 * Various small fixes thanks to Nathan's comments.
5434
5440
5435 * Changed magic_pprint to magic_Pprint. This way it doesn't
5441 * Changed magic_pprint to magic_Pprint. This way it doesn't
5436 collide with pprint() and the name is consistent with the command
5442 collide with pprint() and the name is consistent with the command
5437 line option.
5443 line option.
5438
5444
5439 * Changed prompt counter behavior to be fully like
5445 * Changed prompt counter behavior to be fully like
5440 Mathematica's. That is, even input that doesn't return a result
5446 Mathematica's. That is, even input that doesn't return a result
5441 raises the prompt counter. The old behavior was kind of confusing
5447 raises the prompt counter. The old behavior was kind of confusing
5442 (getting the same prompt number several times if the operation
5448 (getting the same prompt number several times if the operation
5443 didn't return a result).
5449 didn't return a result).
5444
5450
5445 * Fixed Nathan's last name in a couple of places (Gray, not Graham).
5451 * Fixed Nathan's last name in a couple of places (Gray, not Graham).
5446
5452
5447 * Fixed -Classic mode (wasn't working anymore).
5453 * Fixed -Classic mode (wasn't working anymore).
5448
5454
5449 * Added colored prompts using Nathan's new code. Colors are
5455 * Added colored prompts using Nathan's new code. Colors are
5450 currently hardwired, they can be user-configurable. For
5456 currently hardwired, they can be user-configurable. For
5451 developers, they can be chosen in file ipythonlib.py, at the
5457 developers, they can be chosen in file ipythonlib.py, at the
5452 beginning of the CachedOutput class def.
5458 beginning of the CachedOutput class def.
5453
5459
5454 2001-11-11 Fernando Perez <fperez@colorado.edu>
5460 2001-11-11 Fernando Perez <fperez@colorado.edu>
5455
5461
5456 * Version 0.1.5 released, 0.1.6 opened for further work.
5462 * Version 0.1.5 released, 0.1.6 opened for further work.
5457
5463
5458 * Changed magic_env to *return* the environment as a dict (not to
5464 * Changed magic_env to *return* the environment as a dict (not to
5459 print it). This way it prints, but it can also be processed.
5465 print it). This way it prints, but it can also be processed.
5460
5466
5461 * Added Verbose exception reporting to interactive
5467 * Added Verbose exception reporting to interactive
5462 exceptions. Very nice, now even 1/0 at the prompt gives a verbose
5468 exceptions. Very nice, now even 1/0 at the prompt gives a verbose
5463 traceback. Had to make some changes to the ultraTB file. This is
5469 traceback. Had to make some changes to the ultraTB file. This is
5464 probably the last 'big' thing in my mental todo list. This ties
5470 probably the last 'big' thing in my mental todo list. This ties
5465 in with the next entry:
5471 in with the next entry:
5466
5472
5467 * Changed -Xi and -Xf to a single -xmode option. Now all the user
5473 * Changed -Xi and -Xf to a single -xmode option. Now all the user
5468 has to specify is Plain, Color or Verbose for all exception
5474 has to specify is Plain, Color or Verbose for all exception
5469 handling.
5475 handling.
5470
5476
5471 * Removed ShellServices option. All this can really be done via
5477 * Removed ShellServices option. All this can really be done via
5472 the magic system. It's easier to extend, cleaner and has automatic
5478 the magic system. It's easier to extend, cleaner and has automatic
5473 namespace protection and documentation.
5479 namespace protection and documentation.
5474
5480
5475 2001-11-09 Fernando Perez <fperez@colorado.edu>
5481 2001-11-09 Fernando Perez <fperez@colorado.edu>
5476
5482
5477 * Fixed bug in output cache flushing (missing parameter to
5483 * Fixed bug in output cache flushing (missing parameter to
5478 __init__). Other small bugs fixed (found using pychecker).
5484 __init__). Other small bugs fixed (found using pychecker).
5479
5485
5480 * Version 0.1.4 opened for bugfixing.
5486 * Version 0.1.4 opened for bugfixing.
5481
5487
5482 2001-11-07 Fernando Perez <fperez@colorado.edu>
5488 2001-11-07 Fernando Perez <fperez@colorado.edu>
5483
5489
5484 * Version 0.1.3 released, mainly because of the raw_input bug.
5490 * Version 0.1.3 released, mainly because of the raw_input bug.
5485
5491
5486 * Fixed NASTY bug in raw_input: input line wasn't properly parsed
5492 * Fixed NASTY bug in raw_input: input line wasn't properly parsed
5487 and when testing for whether things were callable, a call could
5493 and when testing for whether things were callable, a call could
5488 actually be made to certain functions. They would get called again
5494 actually be made to certain functions. They would get called again
5489 once 'really' executed, with a resulting double call. A disaster
5495 once 'really' executed, with a resulting double call. A disaster
5490 in many cases (list.reverse() would never work!).
5496 in many cases (list.reverse() would never work!).
5491
5497
5492 * Removed prefilter() function, moved its code to raw_input (which
5498 * Removed prefilter() function, moved its code to raw_input (which
5493 after all was just a near-empty caller for prefilter). This saves
5499 after all was just a near-empty caller for prefilter). This saves
5494 a function call on every prompt, and simplifies the class a tiny bit.
5500 a function call on every prompt, and simplifies the class a tiny bit.
5495
5501
5496 * Fix _ip to __ip name in magic example file.
5502 * Fix _ip to __ip name in magic example file.
5497
5503
5498 * Changed 'tar -x -f' to 'tar xvf' in auto-installer. This should
5504 * Changed 'tar -x -f' to 'tar xvf' in auto-installer. This should
5499 work with non-gnu versions of tar.
5505 work with non-gnu versions of tar.
5500
5506
5501 2001-11-06 Fernando Perez <fperez@colorado.edu>
5507 2001-11-06 Fernando Perez <fperez@colorado.edu>
5502
5508
5503 * Version 0.1.2. Just to keep track of the recent changes.
5509 * Version 0.1.2. Just to keep track of the recent changes.
5504
5510
5505 * Fixed nasty bug in output prompt routine. It used to check 'if
5511 * Fixed nasty bug in output prompt routine. It used to check 'if
5506 arg != None...'. Problem is, this fails if arg implements a
5512 arg != None...'. Problem is, this fails if arg implements a
5507 special comparison (__cmp__) which disallows comparing to
5513 special comparison (__cmp__) which disallows comparing to
5508 None. Found it when trying to use the PhysicalQuantity module from
5514 None. Found it when trying to use the PhysicalQuantity module from
5509 ScientificPython.
5515 ScientificPython.
5510
5516
5511 2001-11-05 Fernando Perez <fperez@colorado.edu>
5517 2001-11-05 Fernando Perez <fperez@colorado.edu>
5512
5518
5513 * Also added dirs. Now the pushd/popd/dirs family functions
5519 * Also added dirs. Now the pushd/popd/dirs family functions
5514 basically like the shell, with the added convenience of going home
5520 basically like the shell, with the added convenience of going home
5515 when called with no args.
5521 when called with no args.
5516
5522
5517 * pushd/popd slightly modified to mimic shell behavior more
5523 * pushd/popd slightly modified to mimic shell behavior more
5518 closely.
5524 closely.
5519
5525
5520 * Added env,pushd,popd from ShellServices as magic functions. I
5526 * Added env,pushd,popd from ShellServices as magic functions. I
5521 think the cleanest will be to port all desired functions from
5527 think the cleanest will be to port all desired functions from
5522 ShellServices as magics and remove ShellServices altogether. This
5528 ShellServices as magics and remove ShellServices altogether. This
5523 will provide a single, clean way of adding functionality
5529 will provide a single, clean way of adding functionality
5524 (shell-type or otherwise) to IP.
5530 (shell-type or otherwise) to IP.
5525
5531
5526 2001-11-04 Fernando Perez <fperez@colorado.edu>
5532 2001-11-04 Fernando Perez <fperez@colorado.edu>
5527
5533
5528 * Added .ipython/ directory to sys.path. This way users can keep
5534 * Added .ipython/ directory to sys.path. This way users can keep
5529 customizations there and access them via import.
5535 customizations there and access them via import.
5530
5536
5531 2001-11-03 Fernando Perez <fperez@colorado.edu>
5537 2001-11-03 Fernando Perez <fperez@colorado.edu>
5532
5538
5533 * Opened version 0.1.1 for new changes.
5539 * Opened version 0.1.1 for new changes.
5534
5540
5535 * Changed version number to 0.1.0: first 'public' release, sent to
5541 * Changed version number to 0.1.0: first 'public' release, sent to
5536 Nathan and Janko.
5542 Nathan and Janko.
5537
5543
5538 * Lots of small fixes and tweaks.
5544 * Lots of small fixes and tweaks.
5539
5545
5540 * Minor changes to whos format. Now strings are shown, snipped if
5546 * Minor changes to whos format. Now strings are shown, snipped if
5541 too long.
5547 too long.
5542
5548
5543 * Changed ShellServices to work on __main__ so they show up in @who
5549 * Changed ShellServices to work on __main__ so they show up in @who
5544
5550
5545 * Help also works with ? at the end of a line:
5551 * Help also works with ? at the end of a line:
5546 ?sin and sin?
5552 ?sin and sin?
5547 both produce the same effect. This is nice, as often I use the
5553 both produce the same effect. This is nice, as often I use the
5548 tab-complete to find the name of a method, but I used to then have
5554 tab-complete to find the name of a method, but I used to then have
5549 to go to the beginning of the line to put a ? if I wanted more
5555 to go to the beginning of the line to put a ? if I wanted more
5550 info. Now I can just add the ? and hit return. Convenient.
5556 info. Now I can just add the ? and hit return. Convenient.
5551
5557
5552 2001-11-02 Fernando Perez <fperez@colorado.edu>
5558 2001-11-02 Fernando Perez <fperez@colorado.edu>
5553
5559
5554 * Python version check (>=2.1) added.
5560 * Python version check (>=2.1) added.
5555
5561
5556 * Added LazyPython documentation. At this point the docs are quite
5562 * Added LazyPython documentation. At this point the docs are quite
5557 a mess. A cleanup is in order.
5563 a mess. A cleanup is in order.
5558
5564
5559 * Auto-installer created. For some bizarre reason, the zipfiles
5565 * Auto-installer created. For some bizarre reason, the zipfiles
5560 module isn't working on my system. So I made a tar version
5566 module isn't working on my system. So I made a tar version
5561 (hopefully the command line options in various systems won't kill
5567 (hopefully the command line options in various systems won't kill
5562 me).
5568 me).
5563
5569
5564 * Fixes to Struct in genutils. Now all dictionary-like methods are
5570 * Fixes to Struct in genutils. Now all dictionary-like methods are
5565 protected (reasonably).
5571 protected (reasonably).
5566
5572
5567 * Added pager function to genutils and changed ? to print usage
5573 * Added pager function to genutils and changed ? to print usage
5568 note through it (it was too long).
5574 note through it (it was too long).
5569
5575
5570 * Added the LazyPython functionality. Works great! I changed the
5576 * Added the LazyPython functionality. Works great! I changed the
5571 auto-quote escape to ';', it's on home row and next to '. But
5577 auto-quote escape to ';', it's on home row and next to '. But
5572 both auto-quote and auto-paren (still /) escapes are command-line
5578 both auto-quote and auto-paren (still /) escapes are command-line
5573 parameters.
5579 parameters.
5574
5580
5575
5581
5576 2001-11-01 Fernando Perez <fperez@colorado.edu>
5582 2001-11-01 Fernando Perez <fperez@colorado.edu>
5577
5583
5578 * Version changed to 0.0.7. Fairly large change: configuration now
5584 * Version changed to 0.0.7. Fairly large change: configuration now
5579 is all stored in a directory, by default .ipython. There, all
5585 is all stored in a directory, by default .ipython. There, all
5580 config files have normal looking names (not .names)
5586 config files have normal looking names (not .names)
5581
5587
5582 * Version 0.0.6 Released first to Lucas and Archie as a test
5588 * Version 0.0.6 Released first to Lucas and Archie as a test
5583 run. Since it's the first 'semi-public' release, change version to
5589 run. Since it's the first 'semi-public' release, change version to
5584 > 0.0.6 for any changes now.
5590 > 0.0.6 for any changes now.
5585
5591
5586 * Stuff I had put in the ipplib.py changelog:
5592 * Stuff I had put in the ipplib.py changelog:
5587
5593
5588 Changes to InteractiveShell:
5594 Changes to InteractiveShell:
5589
5595
5590 - Made the usage message a parameter.
5596 - Made the usage message a parameter.
5591
5597
5592 - Require the name of the shell variable to be given. It's a bit
5598 - Require the name of the shell variable to be given. It's a bit
5593 of a hack, but allows the name 'shell' not to be hardwired in the
5599 of a hack, but allows the name 'shell' not to be hardwired in the
5594 magic (@) handler, which is problematic b/c it requires
5600 magic (@) handler, which is problematic b/c it requires
5595 polluting the global namespace with 'shell'. This in turn is
5601 polluting the global namespace with 'shell'. This in turn is
5596 fragile: if a user redefines a variable called shell, things
5602 fragile: if a user redefines a variable called shell, things
5597 break.
5603 break.
5598
5604
5599 - magic @: all functions available through @ need to be defined
5605 - magic @: all functions available through @ need to be defined
5600 as magic_<name>, even though they can be called simply as
5606 as magic_<name>, even though they can be called simply as
5601 @<name>. This allows the special command @magic to gather
5607 @<name>. This allows the special command @magic to gather
5602 information automatically about all existing magic functions,
5608 information automatically about all existing magic functions,
5603 even if they are run-time user extensions, by parsing the shell
5609 even if they are run-time user extensions, by parsing the shell
5604 instance __dict__ looking for special magic_ names.
5610 instance __dict__ looking for special magic_ names.
5605
5611
5606 - mainloop: added *two* local namespace parameters. This allows
5612 - mainloop: added *two* local namespace parameters. This allows
5607 the class to differentiate between parameters which were there
5613 the class to differentiate between parameters which were there
5608 before and after command line initialization was processed. This
5614 before and after command line initialization was processed. This
5609 way, later @who can show things loaded at startup by the
5615 way, later @who can show things loaded at startup by the
5610 user. This trick was necessary to make session saving/reloading
5616 user. This trick was necessary to make session saving/reloading
5611 really work: ideally after saving/exiting/reloading a session,
5617 really work: ideally after saving/exiting/reloading a session,
5612 *everything* should look the same, including the output of @who. I
5618 *everything* should look the same, including the output of @who. I
5613 was only able to make this work with this double namespace
5619 was only able to make this work with this double namespace
5614 trick.
5620 trick.
5615
5621
5616 - added a header to the logfile which allows (almost) full
5622 - added a header to the logfile which allows (almost) full
5617 session restoring.
5623 session restoring.
5618
5624
5619 - prepend lines beginning with @ or !, with a and log
5625 - prepend lines beginning with @ or !, with a and log
5620 them. Why? !lines: may be useful to know what you did @lines:
5626 them. Why? !lines: may be useful to know what you did @lines:
5621 they may affect session state. So when restoring a session, at
5627 they may affect session state. So when restoring a session, at
5622 least inform the user of their presence. I couldn't quite get
5628 least inform the user of their presence. I couldn't quite get
5623 them to properly re-execute, but at least the user is warned.
5629 them to properly re-execute, but at least the user is warned.
5624
5630
5625 * Started ChangeLog.
5631 * Started ChangeLog.
General Comments 0
You need to be logged in to leave comments. Login now