##// END OF EJS Templates
generate_output_prompt hook
vivainio -
Show More
@@ -1,585 +1,588 b''
1 1 # -*- coding: utf-8 -*-
2 2 """
3 3 Classes for handling input/output prompts.
4 4
5 $Id: Prompts.py 1303 2006-05-17 03:39:29Z fperez $"""
5 $Id: Prompts.py 1366 2006-06-15 19:45:50Z vivainio $"""
6 6
7 7 #*****************************************************************************
8 8 # Copyright (C) 2001-2006 Fernando Perez <fperez@colorado.edu>
9 9 #
10 10 # Distributed under the terms of the BSD License. The full license is in
11 11 # the file COPYING, distributed as part of this software.
12 12 #*****************************************************************************
13 13
14 14 from IPython import Release
15 15 __author__ = '%s <%s>' % Release.authors['Fernando']
16 16 __license__ = Release.license
17 17 __version__ = Release.version
18 18
19 19 #****************************************************************************
20 20 # Required modules
21 21 import __builtin__
22 22 import os
23 23 import socket
24 24 import sys
25 25 import time
26 26
27 27 # IPython's own
28 28 from IPython import ColorANSI
29 29 from IPython.Itpl import ItplNS
30 30 from IPython.ipstruct import Struct
31 31 from IPython.macro import Macro
32 32 from IPython.genutils import *
33 33
34 34 #****************************************************************************
35 35 #Color schemes for Prompts.
36 36
37 37 PromptColors = ColorANSI.ColorSchemeTable()
38 38 InputColors = ColorANSI.InputTermColors # just a shorthand
39 39 Colors = ColorANSI.TermColors # just a shorthand
40 40
41 41 PromptColors.add_scheme(ColorANSI.ColorScheme(
42 42 'NoColor',
43 43 in_prompt = InputColors.NoColor, # Input prompt
44 44 in_number = InputColors.NoColor, # Input prompt number
45 45 in_prompt2 = InputColors.NoColor, # Continuation prompt
46 46 in_normal = InputColors.NoColor, # color off (usu. Colors.Normal)
47 47
48 48 out_prompt = Colors.NoColor, # Output prompt
49 49 out_number = Colors.NoColor, # Output prompt number
50 50
51 51 normal = Colors.NoColor # color off (usu. Colors.Normal)
52 52 ))
53 53
54 54 # make some schemes as instances so we can copy them for modification easily:
55 55 __PColLinux = ColorANSI.ColorScheme(
56 56 'Linux',
57 57 in_prompt = InputColors.Green,
58 58 in_number = InputColors.LightGreen,
59 59 in_prompt2 = InputColors.Green,
60 60 in_normal = InputColors.Normal, # color off (usu. Colors.Normal)
61 61
62 62 out_prompt = Colors.Red,
63 63 out_number = Colors.LightRed,
64 64
65 65 normal = Colors.Normal
66 66 )
67 67 # Don't forget to enter it into the table!
68 68 PromptColors.add_scheme(__PColLinux)
69 69
70 70 # Slightly modified Linux for light backgrounds
71 71 __PColLightBG = __PColLinux.copy('LightBG')
72 72
73 73 __PColLightBG.colors.update(
74 74 in_prompt = InputColors.Blue,
75 75 in_number = InputColors.LightBlue,
76 76 in_prompt2 = InputColors.Blue
77 77 )
78 78 PromptColors.add_scheme(__PColLightBG)
79 79
80 80 del Colors,InputColors
81 81
82 82 #-----------------------------------------------------------------------------
83 83 def multiple_replace(dict, text):
84 84 """ Replace in 'text' all occurences of any key in the given
85 85 dictionary by its corresponding value. Returns the new string."""
86 86
87 87 # Function by Xavier Defrang, originally found at:
88 88 # http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/81330
89 89
90 90 # Create a regular expression from the dictionary keys
91 91 regex = re.compile("(%s)" % "|".join(map(re.escape, dict.keys())))
92 92 # For each match, look-up corresponding value in dictionary
93 93 return regex.sub(lambda mo: dict[mo.string[mo.start():mo.end()]], text)
94 94
95 95 #-----------------------------------------------------------------------------
96 96 # Special characters that can be used in prompt templates, mainly bash-like
97 97
98 98 # If $HOME isn't defined (Windows), make it an absurd string so that it can
99 99 # never be expanded out into '~'. Basically anything which can never be a
100 100 # reasonable directory name will do, we just want the $HOME -> '~' operation
101 101 # to become a no-op. We pre-compute $HOME here so it's not done on every
102 102 # prompt call.
103 103
104 104 # FIXME:
105 105
106 106 # - This should be turned into a class which does proper namespace management,
107 107 # since the prompt specials need to be evaluated in a certain namespace.
108 108 # Currently it's just globals, which need to be managed manually by code
109 109 # below.
110 110
111 111 # - I also need to split up the color schemes from the prompt specials
112 112 # somehow. I don't have a clean design for that quite yet.
113 113
114 114 HOME = os.environ.get("HOME","//////:::::ZZZZZ,,,~~~")
115 115
116 116 # We precompute a few more strings here for the prompt_specials, which are
117 117 # fixed once ipython starts. This reduces the runtime overhead of computing
118 118 # prompt strings.
119 119 USER = os.environ.get("USER")
120 120 HOSTNAME = socket.gethostname()
121 121 HOSTNAME_SHORT = HOSTNAME.split(".")[0]
122 122 ROOT_SYMBOL = "$#"[os.name=='nt' or os.getuid()==0]
123 123
124 124 prompt_specials_color = {
125 125 # Prompt/history count
126 126 '%n' : '${self.col_num}' '${self.cache.prompt_count}' '${self.col_p}',
127 127 '\\#': '${self.col_num}' '${self.cache.prompt_count}' '${self.col_p}',
128 128 # Prompt/history count, with the actual digits replaced by dots. Used
129 129 # mainly in continuation prompts (prompt_in2)
130 130 '\\D': '${"."*len(str(self.cache.prompt_count))}',
131 131 # Current working directory
132 132 '\\w': '${os.getcwd()}',
133 133 # Current time
134 134 '\\t' : '${time.strftime("%H:%M:%S")}',
135 135 # Basename of current working directory.
136 136 # (use os.sep to make this portable across OSes)
137 137 '\\W' : '${os.getcwd().split("%s")[-1]}' % os.sep,
138 138 # These X<N> are an extension to the normal bash prompts. They return
139 139 # N terms of the path, after replacing $HOME with '~'
140 140 '\\X0': '${os.getcwd().replace("%s","~")}' % HOME,
141 141 '\\X1': '${self.cwd_filt(1)}',
142 142 '\\X2': '${self.cwd_filt(2)}',
143 143 '\\X3': '${self.cwd_filt(3)}',
144 144 '\\X4': '${self.cwd_filt(4)}',
145 145 '\\X5': '${self.cwd_filt(5)}',
146 146 # Y<N> are similar to X<N>, but they show '~' if it's the directory
147 147 # N+1 in the list. Somewhat like %cN in tcsh.
148 148 '\\Y0': '${self.cwd_filt2(0)}',
149 149 '\\Y1': '${self.cwd_filt2(1)}',
150 150 '\\Y2': '${self.cwd_filt2(2)}',
151 151 '\\Y3': '${self.cwd_filt2(3)}',
152 152 '\\Y4': '${self.cwd_filt2(4)}',
153 153 '\\Y5': '${self.cwd_filt2(5)}',
154 154 # Hostname up to first .
155 155 '\\h': HOSTNAME_SHORT,
156 156 # Full hostname
157 157 '\\H': HOSTNAME,
158 158 # Username of current user
159 159 '\\u': USER,
160 160 # Escaped '\'
161 161 '\\\\': '\\',
162 162 # Newline
163 163 '\\n': '\n',
164 164 # Carriage return
165 165 '\\r': '\r',
166 166 # Release version
167 167 '\\v': __version__,
168 168 # Root symbol ($ or #)
169 169 '\\$': ROOT_SYMBOL,
170 170 }
171 171
172 172 # A copy of the prompt_specials dictionary but with all color escapes removed,
173 173 # so we can correctly compute the prompt length for the auto_rewrite method.
174 174 prompt_specials_nocolor = prompt_specials_color.copy()
175 175 prompt_specials_nocolor['%n'] = '${self.cache.prompt_count}'
176 176 prompt_specials_nocolor['\\#'] = '${self.cache.prompt_count}'
177 177
178 178 # Add in all the InputTermColors color escapes as valid prompt characters.
179 179 # They all get added as \\C_COLORNAME, so that we don't have any conflicts
180 180 # with a color name which may begin with a letter used by any other of the
181 181 # allowed specials. This of course means that \\C will never be allowed for
182 182 # anything else.
183 183 input_colors = ColorANSI.InputTermColors
184 184 for _color in dir(input_colors):
185 185 if _color[0] != '_':
186 186 c_name = '\\C_'+_color
187 187 prompt_specials_color[c_name] = getattr(input_colors,_color)
188 188 prompt_specials_nocolor[c_name] = ''
189 189
190 190 # we default to no color for safety. Note that prompt_specials is a global
191 191 # variable used by all prompt objects.
192 192 prompt_specials = prompt_specials_nocolor
193 193
194 194 #-----------------------------------------------------------------------------
195 195 def str_safe(arg):
196 196 """Convert to a string, without ever raising an exception.
197 197
198 198 If str(arg) fails, <ERROR: ... > is returned, where ... is the exception
199 199 error message."""
200 200
201 201 try:
202 202 out = str(arg)
203 203 except UnicodeError:
204 204 try:
205 205 out = arg.encode('utf_8','replace')
206 206 except Exception,msg:
207 207 # let's keep this little duplication here, so that the most common
208 208 # case doesn't suffer from a double try wrapping.
209 209 out = '<ERROR: %s>' % msg
210 210 except Exception,msg:
211 211 out = '<ERROR: %s>' % msg
212 212 return out
213 213
214 214 class BasePrompt:
215 215 """Interactive prompt similar to Mathematica's."""
216 216 def __init__(self,cache,sep,prompt,pad_left=False):
217 217
218 218 # Hack: we access information about the primary prompt through the
219 219 # cache argument. We need this, because we want the secondary prompt
220 220 # to be aligned with the primary one. Color table info is also shared
221 221 # by all prompt classes through the cache. Nice OO spaghetti code!
222 222 self.cache = cache
223 223 self.sep = sep
224 224
225 225 # regexp to count the number of spaces at the end of a prompt
226 226 # expression, useful for prompt auto-rewriting
227 227 self.rspace = re.compile(r'(\s*)$')
228 228 # Flag to left-pad prompt strings to match the length of the primary
229 229 # prompt
230 230 self.pad_left = pad_left
231 231 # Set template to create each actual prompt (where numbers change)
232 232 self.p_template = prompt
233 233 self.set_p_str()
234 234
235 235 def set_p_str(self):
236 236 """ Set the interpolating prompt strings.
237 237
238 238 This must be called every time the color settings change, because the
239 239 prompt_specials global may have changed."""
240 240
241 241 import os,time # needed in locals for prompt string handling
242 242 loc = locals()
243 243 self.p_str = ItplNS('%s%s%s' %
244 244 ('${self.sep}${self.col_p}',
245 245 multiple_replace(prompt_specials, self.p_template),
246 246 '${self.col_norm}'),self.cache.user_ns,loc)
247 247
248 248 self.p_str_nocolor = ItplNS(multiple_replace(prompt_specials_nocolor,
249 249 self.p_template),
250 250 self.cache.user_ns,loc)
251 251
252 252 def write(self,msg): # dbg
253 253 sys.stdout.write(msg)
254 254 return ''
255 255
256 256 def __str__(self):
257 257 """Return a string form of the prompt.
258 258
259 259 This for is useful for continuation and output prompts, since it is
260 260 left-padded to match lengths with the primary one (if the
261 261 self.pad_left attribute is set)."""
262 262
263 263 out_str = str_safe(self.p_str)
264 264 if self.pad_left:
265 265 # We must find the amount of padding required to match lengths,
266 266 # taking the color escapes (which are invisible on-screen) into
267 267 # account.
268 268 esc_pad = len(out_str) - len(str_safe(self.p_str_nocolor))
269 269 format = '%%%ss' % (len(str(self.cache.last_prompt))+esc_pad)
270 270 return format % out_str
271 271 else:
272 272 return out_str
273 273
274 274 # these path filters are put in as methods so that we can control the
275 275 # namespace where the prompt strings get evaluated
276 276 def cwd_filt(self,depth):
277 277 """Return the last depth elements of the current working directory.
278 278
279 279 $HOME is always replaced with '~'.
280 280 If depth==0, the full path is returned."""
281 281
282 282 cwd = os.getcwd().replace(HOME,"~")
283 283 out = os.sep.join(cwd.split(os.sep)[-depth:])
284 284 if out:
285 285 return out
286 286 else:
287 287 return os.sep
288 288
289 289 def cwd_filt2(self,depth):
290 290 """Return the last depth elements of the current working directory.
291 291
292 292 $HOME is always replaced with '~'.
293 293 If depth==0, the full path is returned."""
294 294
295 295 cwd = os.getcwd().replace(HOME,"~").split(os.sep)
296 296 if '~' in cwd and len(cwd) == depth+1:
297 297 depth += 1
298 298 out = os.sep.join(cwd[-depth:])
299 299 if out:
300 300 return out
301 301 else:
302 302 return os.sep
303 303
304 304 class Prompt1(BasePrompt):
305 305 """Input interactive prompt similar to Mathematica's."""
306 306
307 307 def __init__(self,cache,sep='\n',prompt='In [\\#]: ',pad_left=True):
308 308 BasePrompt.__init__(self,cache,sep,prompt,pad_left)
309 309
310 310 def set_colors(self):
311 311 self.set_p_str()
312 312 Colors = self.cache.color_table.active_colors # shorthand
313 313 self.col_p = Colors.in_prompt
314 314 self.col_num = Colors.in_number
315 315 self.col_norm = Colors.in_normal
316 316 # We need a non-input version of these escapes for the '--->'
317 317 # auto-call prompts used in the auto_rewrite() method.
318 318 self.col_p_ni = self.col_p.replace('\001','').replace('\002','')
319 319 self.col_norm_ni = Colors.normal
320 320
321 321 def __str__(self):
322 322 self.cache.prompt_count += 1
323 323 self.cache.last_prompt = str_safe(self.p_str_nocolor).split('\n')[-1]
324 324 return str_safe(self.p_str)
325 325
326 326 def auto_rewrite(self):
327 327 """Print a string of the form '--->' which lines up with the previous
328 328 input string. Useful for systems which re-write the user input when
329 329 handling automatically special syntaxes."""
330 330
331 331 curr = str(self.cache.last_prompt)
332 332 nrspaces = len(self.rspace.search(curr).group())
333 333 return '%s%s>%s%s' % (self.col_p_ni,'-'*(len(curr)-nrspaces-1),
334 334 ' '*nrspaces,self.col_norm_ni)
335 335
336 336 class PromptOut(BasePrompt):
337 337 """Output interactive prompt similar to Mathematica's."""
338 338
339 339 def __init__(self,cache,sep='',prompt='Out[\\#]: ',pad_left=True):
340 340 BasePrompt.__init__(self,cache,sep,prompt,pad_left)
341 341 if not self.p_template:
342 342 self.__str__ = lambda: ''
343 343
344 344 def set_colors(self):
345 345 self.set_p_str()
346 346 Colors = self.cache.color_table.active_colors # shorthand
347 347 self.col_p = Colors.out_prompt
348 348 self.col_num = Colors.out_number
349 349 self.col_norm = Colors.normal
350 350
351 351 class Prompt2(BasePrompt):
352 352 """Interactive continuation prompt."""
353 353
354 354 def __init__(self,cache,prompt=' .\\D.: ',pad_left=True):
355 355 self.cache = cache
356 356 self.p_template = prompt
357 357 self.pad_left = pad_left
358 358 self.set_p_str()
359 359
360 360 def set_p_str(self):
361 361 import os,time # needed in locals for prompt string handling
362 362 loc = locals()
363 363 self.p_str = ItplNS('%s%s%s' %
364 364 ('${self.col_p2}',
365 365 multiple_replace(prompt_specials, self.p_template),
366 366 '$self.col_norm'),
367 367 self.cache.user_ns,loc)
368 368 self.p_str_nocolor = ItplNS(multiple_replace(prompt_specials_nocolor,
369 369 self.p_template),
370 370 self.cache.user_ns,loc)
371 371
372 372 def set_colors(self):
373 373 self.set_p_str()
374 374 Colors = self.cache.color_table.active_colors
375 375 self.col_p2 = Colors.in_prompt2
376 376 self.col_norm = Colors.in_normal
377 377 # FIXME (2004-06-16) HACK: prevent crashes for users who haven't
378 378 # updated their prompt_in2 definitions. Remove eventually.
379 379 self.col_p = Colors.out_prompt
380 380 self.col_num = Colors.out_number
381 381
382
382 383 #-----------------------------------------------------------------------------
383 384 class CachedOutput:
384 385 """Class for printing output from calculations while keeping a cache of
385 386 reults. It dynamically creates global variables prefixed with _ which
386 387 contain these results.
387 388
388 389 Meant to be used as a sys.displayhook replacement, providing numbered
389 390 prompts and cache services.
390 391
391 392 Initialize with initial and final values for cache counter (this defines
392 393 the maximum size of the cache."""
393 394
394 395 def __init__(self,shell,cache_size,Pprint,
395 396 colors='NoColor',input_sep='\n',
396 397 output_sep='\n',output_sep2='',
397 398 ps1 = None, ps2 = None,ps_out = None,pad_left=True):
398 399
399 400 cache_size_min = 3
400 401 if cache_size <= 0:
401 402 self.do_full_cache = 0
402 403 cache_size = 0
403 404 elif cache_size < cache_size_min:
404 405 self.do_full_cache = 0
405 406 cache_size = 0
406 407 warn('caching was disabled (min value for cache size is %s).' %
407 408 cache_size_min,level=3)
408 409 else:
409 410 self.do_full_cache = 1
410 411
411 412 self.cache_size = cache_size
412 413 self.input_sep = input_sep
413 414
414 415 # we need a reference to the user-level namespace
415 416 self.shell = shell
416 417 self.user_ns = shell.user_ns
417 418 # and to the user's input
418 419 self.input_hist = shell.input_hist
419 420 # and to the user's logger, for logging output
420 421 self.logger = shell.logger
421 422
422 423 # Set input prompt strings and colors
423 424 if cache_size == 0:
424 425 if ps1.find('%n') > -1 or ps1.find('\\#') > -1: ps1 = '>>> '
425 426 if ps2.find('%n') > -1 or ps2.find('\\#') > -1: ps2 = '... '
426 427 self.ps1_str = self._set_prompt_str(ps1,'In [\\#]: ','>>> ')
427 428 self.ps2_str = self._set_prompt_str(ps2,' .\\D.: ','... ')
428 429 self.ps_out_str = self._set_prompt_str(ps_out,'Out[\\#]: ','')
429 430
430 431 self.color_table = PromptColors
431 432 self.prompt1 = Prompt1(self,sep=input_sep,prompt=self.ps1_str,
432 433 pad_left=pad_left)
433 434 self.prompt2 = Prompt2(self,prompt=self.ps2_str,pad_left=pad_left)
434 435 self.prompt_out = PromptOut(self,sep='',prompt=self.ps_out_str,
435 436 pad_left=pad_left)
436 437 self.set_colors(colors)
437 438
438 439 # other more normal stuff
439 440 # b/c each call to the In[] prompt raises it by 1, even the first.
440 441 self.prompt_count = 0
441 442 # Store the last prompt string each time, we need it for aligning
442 443 # continuation and auto-rewrite prompts
443 444 self.last_prompt = ''
444 445 self.Pprint = Pprint
445 446 self.output_sep = output_sep
446 447 self.output_sep2 = output_sep2
447 448 self._,self.__,self.___ = '','',''
448 449 self.pprint_types = map(type,[(),[],{}])
449 450
450 451 # these are deliberately global:
451 452 to_user_ns = {'_':self._,'__':self.__,'___':self.___}
452 453 self.user_ns.update(to_user_ns)
453 454
454 455 def _set_prompt_str(self,p_str,cache_def,no_cache_def):
455 456 if p_str is None:
456 457 if self.do_full_cache:
457 458 return cache_def
458 459 else:
459 460 return no_cache_def
460 461 else:
461 462 return p_str
462 463
463 464 def set_colors(self,colors):
464 465 """Set the active color scheme and configure colors for the three
465 466 prompt subsystems."""
466 467
467 468 # FIXME: the prompt_specials global should be gobbled inside this
468 469 # class instead. Do it when cleaning up the whole 3-prompt system.
469 470 global prompt_specials
470 471 if colors.lower()=='nocolor':
471 472 prompt_specials = prompt_specials_nocolor
472 473 else:
473 474 prompt_specials = prompt_specials_color
474 475
475 476 self.color_table.set_active_scheme(colors)
476 477 self.prompt1.set_colors()
477 478 self.prompt2.set_colors()
478 479 self.prompt_out.set_colors()
479 480
480 481 def __call__(self,arg=None):
481 482 """Printing with history cache management.
482 483
483 484 This is invoked everytime the interpreter needs to print, and is
484 485 activated by setting the variable sys.displayhook to it."""
485 486
486 487 # If something injected a '_' variable in __builtin__, delete
487 488 # ipython's automatic one so we don't clobber that. gettext() in
488 489 # particular uses _, so we need to stay away from it.
489 490 if '_' in __builtin__.__dict__:
490 491 try:
491 492 del self.user_ns['_']
492 493 except KeyError:
493 494 pass
494 495 if arg is not None:
495 496 cout_write = Term.cout.write # fast lookup
496 497 # first handle the cache and counters
497 498
498 499 # do not print output if input ends in ';'
499 500 if self.input_hist[self.prompt_count].endswith(';\n'):
500 501 return
501 502 # don't use print, puts an extra space
502 503 cout_write(self.output_sep)
504 outprompt = self.shell.hooks.generate_output_prompt()
503 505 if self.do_full_cache:
504 cout_write(str(self.prompt_out))
506 cout_write(outprompt)
505 507
506 508 if isinstance(arg,Macro):
507 509 print 'Executing Macro...'
508 510 # in case the macro takes a long time to execute
509 511 Term.cout.flush()
510 512 self.shell.runlines(arg.value)
511 513 return None
512 514
513 515 # and now call a possibly user-defined print mechanism
514 516 manipulated_val = self.display(arg)
515 517
516 518 # user display hooks can change the variable to be stored in
517 519 # output history
518 520
519 521 if manipulated_val is not None:
520 522 arg = manipulated_val
521 523
522 524 # avoid recursive reference when displaying _oh/Out
523 525 if arg is not self.user_ns['_oh']:
524 526 self.update(arg)
525 527
526 528 if self.logger.log_output:
527 529 self.logger.log_write(repr(arg),'output')
528 530 cout_write(self.output_sep2)
529 531 Term.cout.flush()
530 532
531 533 def _display(self,arg):
532 534 """Default printer method, uses pprint.
533 535
534 536 Do ip.set_hook("result_display", my_displayhook) for custom result
535 537 display, e.g. when your own objects need special formatting.
536 538 """
537 539
538 540 return self.shell.hooks.result_display(arg)
539 541
540 542 # Assign the default display method:
541 543 display = _display
542 544
543 545 def update(self,arg):
544 546 #print '***cache_count', self.cache_count # dbg
545 547 if len(self.user_ns['_oh']) >= self.cache_size and self.do_full_cache:
546 548 warn('Output cache limit (currently '+
547 549 `self.cache_size`+' entries) hit.\n'
548 550 'Flushing cache and resetting history counter...\n'
549 551 'The only history variables available will be _,__,___ and _1\n'
550 552 'with the current result.')
551 553
552 554 self.flush()
553 555 # Don't overwrite '_' and friends if '_' is in __builtin__ (otherwise
554 556 # we cause buggy behavior for things like gettext).
555 557 if '_' not in __builtin__.__dict__:
556 558 self.___ = self.__
557 559 self.__ = self._
558 560 self._ = arg
559 561 self.user_ns.update({'_':self._,'__':self.__,'___':self.___})
560 562
561 563 # hackish access to top-level namespace to create _1,_2... dynamically
562 564 to_main = {}
563 565 if self.do_full_cache:
564 566 new_result = '_'+`self.prompt_count`
565 567 to_main[new_result] = arg
566 568 self.user_ns.update(to_main)
567 569 self.user_ns['_oh'][self.prompt_count] = arg
568 570
569 571 def flush(self):
570 572 if not self.do_full_cache:
571 573 raise ValueError,"You shouldn't have reached the cache flush "\
572 574 "if full caching is not enabled!"
573 575 # delete auto-generated vars from global namespace
574 576
575 577 for n in range(1,self.prompt_count + 1):
576 578 key = '_'+`n`
577 579 try:
578 580 del self.user_ns[key]
579 581 except: pass
580 582 self.user_ns['_oh'].clear()
581 583
582 584 if '_' not in __builtin__.__dict__:
583 585 self.user_ns.update({'_':None,'__':None, '___':None})
584 586 import gc
585 587 gc.collect() # xxx needed?
588
@@ -1,206 +1,210 b''
1 1 """hooks for IPython.
2 2
3 3 In Python, it is possible to overwrite any method of any object if you really
4 4 want to. But IPython exposes a few 'hooks', methods which are _designed_ to
5 5 be overwritten by users for customization purposes. This module defines the
6 6 default versions of all such hooks, which get used by IPython if not
7 7 overridden by the user.
8 8
9 9 hooks are simple functions, but they should be declared with 'self' as their
10 10 first argument, because when activated they are registered into IPython as
11 11 instance methods. The self argument will be the IPython running instance
12 12 itself, so hooks have full access to the entire IPython object.
13 13
14 14 If you wish to define a new hook and activate it, you need to put the
15 15 necessary code into a python file which can be either imported or execfile()'d
16 16 from within your ipythonrc configuration.
17 17
18 18 For example, suppose that you have a module called 'myiphooks' in your
19 19 PYTHONPATH, which contains the following definition:
20 20
21 21 import os
22 22 import IPython.ipapi
23 23 ip = IPython.ipapi.get()
24 24
25 25 def calljed(self,filename, linenum):
26 26 "My editor hook calls the jed editor directly."
27 27 print "Calling my own editor, jed ..."
28 28 os.system('jed +%d %s' % (linenum,filename))
29 29
30 30 ip.set_hook('editor', calljed)
31 31
32 32 You can then enable the functionality by doing 'import myiphooks'
33 33 somewhere in your configuration files or ipython command line.
34 34
35 $Id: hooks.py 1365 2006-06-15 19:11:26Z vivainio $"""
35 $Id: hooks.py 1366 2006-06-15 19:45:50Z vivainio $"""
36 36
37 37 #*****************************************************************************
38 38 # Copyright (C) 2005 Fernando Perez. <fperez@colorado.edu>
39 39 #
40 40 # Distributed under the terms of the BSD License. The full license is in
41 41 # the file COPYING, distributed as part of this software.
42 42 #*****************************************************************************
43 43
44 44 from IPython import Release
45 45 from IPython import ipapi
46 46 __author__ = '%s <%s>' % Release.authors['Fernando']
47 47 __license__ = Release.license
48 48 __version__ = Release.version
49 49
50 50 import os,bisect
51 51 from genutils import Term
52 52 from pprint import PrettyPrinter
53 53
54 54 # List here all the default hooks. For now it's just the editor functions
55 55 # but over time we'll move here all the public API for user-accessible things.
56 56 __all__ = ['editor', 'fix_error_editor', 'result_display',
57 57 'input_prefilter', 'shutdown_hook', 'late_startup_hook',
58 'generate_prompt' ]
58 'generate_prompt', 'generate_output_prompt' ]
59 59
60 60 pformat = PrettyPrinter().pformat
61 61
62 62 def editor(self,filename, linenum=None):
63 63 """Open the default editor at the given filename and linenumber.
64 64
65 65 This is IPython's default editor hook, you can use it as an example to
66 66 write your own modified one. To set your own editor function as the
67 67 new editor hook, call ip.set_hook('editor',yourfunc)."""
68 68
69 69 # IPython configures a default editor at startup by reading $EDITOR from
70 70 # the environment, and falling back on vi (unix) or notepad (win32).
71 71 editor = self.rc.editor
72 72
73 73 # marker for at which line to open the file (for existing objects)
74 74 if linenum is None or editor=='notepad':
75 75 linemark = ''
76 76 else:
77 77 linemark = '+%d' % int(linenum)
78 78
79 79 # Enclose in quotes if necessary and legal
80 80 if ' ' in editor and os.path.isfile(editor) and editor[0] != '"':
81 81 editor = '"%s"' % editor
82 82
83 83 # Call the actual editor
84 84 os.system('%s %s %s' % (editor,linemark,filename))
85 85
86 86 import tempfile
87 87 def fix_error_editor(self,filename,linenum,column,msg):
88 88 """Open the editor at the given filename, linenumber, column and
89 89 show an error message. This is used for correcting syntax errors.
90 90 The current implementation only has special support for the VIM editor,
91 91 and falls back on the 'editor' hook if VIM is not used.
92 92
93 93 Call ip.set_hook('fix_error_editor',youfunc) to use your own function,
94 94 """
95 95 def vim_quickfix_file():
96 96 t = tempfile.NamedTemporaryFile()
97 97 t.write('%s:%d:%d:%s\n' % (filename,linenum,column,msg))
98 98 t.flush()
99 99 return t
100 100 if os.path.basename(self.rc.editor) != 'vim':
101 101 self.hooks.editor(filename,linenum)
102 102 return
103 103 t = vim_quickfix_file()
104 104 try:
105 105 os.system('vim --cmd "set errorformat=%f:%l:%c:%m" -q ' + t.name)
106 106 finally:
107 107 t.close()
108 108
109 109
110 110 class CommandChainDispatcher:
111 111 """ Dispatch calls to a chain of commands until some func can handle it
112 112
113 113 Usage: instantiate, execute "add" to add commands (with optional
114 114 priority), execute normally via f() calling mechanism.
115 115
116 116 """
117 117 def __init__(self,commands=None):
118 118 if commands is None:
119 119 self.chain = []
120 120 else:
121 121 self.chain = commands
122 122
123 123
124 124 def __call__(self,*args, **kw):
125 125 """ Command chain is called just like normal func.
126 126
127 127 This will call all funcs in chain with the same args as were given to this
128 128 function, and return the result of first func that didn't raise
129 129 TryNext """
130 130
131 131 for prio,cmd in self.chain:
132 132 #print "prio",prio,"cmd",cmd #dbg
133 133 try:
134 134 ret = cmd(*args, **kw)
135 135 return ret
136 136 except ipapi.TryNext, exc:
137 137 if exc.args or exc.kwargs:
138 138 args = exc.args
139 139 kw = exc.kwargs
140 140
141 141 def __str__(self):
142 142 return str(self.chain)
143 143
144 144 def add(self, func, priority=0):
145 145 """ Add a func to the cmd chain with given priority """
146 146 bisect.insort(self.chain,(priority,func))
147 147
148 148 def result_display(self,arg):
149 149 """ Default display hook.
150 150
151 151 Called for displaying the result to the user.
152 152 """
153 153
154 154 if self.rc.pprint:
155 155 out = pformat(arg)
156 156 if '\n' in out:
157 157 # So that multi-line strings line up with the left column of
158 158 # the screen, instead of having the output prompt mess up
159 159 # their first line.
160 160 Term.cout.write('\n')
161 161 print >>Term.cout, out
162 162 else:
163 163 # By default, the interactive prompt uses repr() to display results,
164 164 # so we should honor this. Users who'd rather use a different
165 165 # mechanism can easily override this hook.
166 166 print >>Term.cout, repr(arg)
167 167 # the default display hook doesn't manipulate the value to put in history
168 168 return None
169 169
170 170 def input_prefilter(self,line):
171 171 """ Default input prefilter
172 172
173 173 This returns the line as unchanged, so that the interpreter
174 174 knows that nothing was done and proceeds with "classic" prefiltering
175 175 (%magics, !shell commands etc.).
176 176
177 177 Note that leading whitespace is not passed to this hook. Prefilter
178 178 can't alter indentation.
179 179
180 180 """
181 181 #print "attempt to rewrite",line #dbg
182 182 return line
183 183
184 184 def shutdown_hook(self):
185 185 """ default shutdown hook
186 186
187 187 Typically, shotdown hooks should raise TryNext so all shutdown ops are done
188 188 """
189 189
190 190 #print "default shutdown hook ok" # dbg
191 191 return
192 192
193 193 def late_startup_hook(self):
194 194 """ Executed after ipython has been constructed and configured
195 195
196 196 """
197 197 #print "default startup hook ok" # dbg
198 198
199 199 def generate_prompt(self, is_continuation):
200 200 """ calculate and return a string with the prompt to display """
201 201 ip = self.api
202 202 if is_continuation:
203 203 return str(ip.IP.outputcache.prompt2)
204 204 return str(ip.IP.outputcache.prompt1)
205 205
206 No newline at end of file
206 def generate_output_prompt(self):
207 ip = self.api
208 return str(ip.IP.outputcache.prompt_out)
209
210 No newline at end of file
@@ -1,5582 +1,5585 b''
1 1 2006-06-15 Ville Vainio <vivainio@gmail.com>
2 2
3 3 * iplib.py, hooks.py: Added new generate_prompt hook that can be
4 4 used to create prompts dynamically, instead of the "old" way of
5 5 assigning "magic" strings to prompt_in1 and prompt_in2. The old
6 6 way still works (it's invoked by the default hook), of course.
7
8 * Prompts.py: added generate_output_prompt hook for altering output
9 prompt
7 10
8 11 * Release.py: Changed version string to 0.7.3.svn.
9 12
10 13 2006-06-15 Walter Doerwald <walter@livinglogic.de>
11 14
12 15 * IPython/Extensions/ibrowse.py: Change _BrowserLevel.moveto() so that
13 16 the call to fetch() always tries to fetch enough data for at least one
14 17 full screen. This makes it possible to simply call moveto(0,0,True) in
15 18 the constructor. Fix typos and removed the obsolete goto attribute.
16 19
17 20 2006-06-12 Ville Vainio <vivainio@gmail.com>
18 21
19 22 * ipy_profile_sh.py: applied Krisha Mohan Gundu's patch for
20 23 allowing $variable interpolation within multiline statements,
21 24 though so far only with "sh" profile for a testing period.
22 25 The patch also enables splitting long commands with \ but it
23 26 doesn't work properly yet.
24 27
25 28 2006-06-12 Walter Doerwald <walter@livinglogic.de>
26 29
27 30 * IPython/Extensions/ibrowse.py (_dodisplay): Display the length of the
28 31 input history and the position of the cursor in the input history for
29 32 the find, findbackwards and goto command.
30 33
31 34 2006-06-10 Walter Doerwald <walter@livinglogic.de>
32 35
33 36 * IPython/Extensions/ibrowse.py: Add a class _CommandInput that
34 37 implements the basic functionality of browser commands that require
35 38 input. Reimplement the goto, find and findbackwards commands as
36 39 subclasses of _CommandInput. Add an input history and keymaps to those
37 40 commands. Add "\r" as a keyboard shortcut for the enterdefault and
38 41 execute commands.
39 42
40 43 2006-06-07 Ville Vainio <vivainio@gmail.com>
41 44
42 45 * iplib.py: ipython mybatch.ipy exits ipython immediately after
43 46 running the batch files instead of leaving the session open.
44 47
45 48 2006-06-07 Fernando Perez <Fernando.Perez@colorado.edu>
46 49
47 50 * IPython/iplib.py (InteractiveShell.__init__): update BSD fix, as
48 51 the original fix was incomplete. Patch submitted by W. Maier.
49 52
50 53 2006-06-07 Ville Vainio <vivainio@gmail.com>
51 54
52 55 * iplib.py,Magic.py, ipmaker.py (magic_rehashx):
53 56 Confirmation prompts can be supressed by 'quiet' option.
54 57 _ip.options.quiet = 1 means "assume yes for all yes/no queries".
55 58
56 59 2006-06-06 *** Released version 0.7.2
57 60
58 61 2006-06-06 Fernando Perez <Fernando.Perez@colorado.edu>
59 62
60 63 * IPython/Release.py (version): Made 0.7.2 final for release.
61 64 Repo tagged and release cut.
62 65
63 66 2006-06-05 Ville Vainio <vivainio@gmail.com>
64 67
65 68 * Magic.py (magic_rehashx): Honor no_alias list earlier in
66 69 %rehashx, to avoid clobbering builtins in ipy_profile_sh.py
67 70
68 71 * upgrade_dir.py: try import 'path' module a bit harder
69 72 (for %upgrade)
70 73
71 74 2006-06-03 Fernando Perez <Fernando.Perez@colorado.edu>
72 75
73 76 * IPython/genutils.py (ask_yes_no): treat EOF as a default answer
74 77 instead of looping 20 times.
75 78
76 79 * IPython/ipmaker.py (make_IPython): honor -ipythondir flag
77 80 correctly at initialization time. Bug reported by Krishna Mohan
78 81 Gundu <gkmohan-AT-gmail.com> on the user list.
79 82
80 83 * IPython/Release.py (version): Mark 0.7.2 version to start
81 84 testing for release on 06/06.
82 85
83 86 2006-05-31 Fernando Perez <Fernando.Perez@colorado.edu>
84 87
85 88 * scripts/irunner: thin script interface so users don't have to
86 89 find the module and call it as an executable, since modules rarely
87 90 live in people's PATH.
88 91
89 92 * IPython/irunner.py (InteractiveRunner.__init__): added
90 93 delaybeforesend attribute to control delays with newer versions of
91 94 pexpect. Thanks to detailed help from pexpect's author, Noah
92 95 Spurrier <noah-AT-noah.org>. Noted how to use the SAGE runner
93 96 correctly (it works in NoColor mode).
94 97
95 98 * IPython/iplib.py (handle_normal): fix nasty crash reported on
96 99 SAGE list, from improper log() calls.
97 100
98 101 2006-05-31 Ville Vainio <vivainio@gmail.com>
99 102
100 103 * upgrade_dir.py, Magic.py (magic_upgrade): call upgrade_dir
101 104 with args in parens to work correctly with dirs that have spaces.
102 105
103 106 2006-05-30 Fernando Perez <Fernando.Perez@colorado.edu>
104 107
105 108 * IPython/Logger.py (Logger.logstart): add option to log raw input
106 109 instead of the processed one. A -r flag was added to the
107 110 %logstart magic used for controlling logging.
108 111
109 112 2006-05-29 Fernando Perez <Fernando.Perez@colorado.edu>
110 113
111 114 * IPython/iplib.py (InteractiveShell.__init__): add check for the
112 115 *BSDs to omit --color from all 'ls' aliases, since *BSD ls doesn't
113 116 recognize the option. After a bug report by Will Maier. This
114 117 closes #64 (will do it after confirmation from W. Maier).
115 118
116 119 * IPython/irunner.py: New module to run scripts as if manually
117 120 typed into an interactive environment, based on pexpect. After a
118 121 submission by Ken Schutte <kschutte-AT-csail.mit.edu> on the
119 122 ipython-user list. Simple unittests in the tests/ directory.
120 123
121 124 * tools/release: add Will Maier, OpenBSD port maintainer, to
122 125 recepients list. We are now officially part of the OpenBSD ports:
123 126 http://www.openbsd.org/ports.html ! Many thanks to Will for the
124 127 work.
125 128
126 129 2006-05-26 Fernando Perez <Fernando.Perez@colorado.edu>
127 130
128 131 * IPython/ipmaker.py (make_IPython): modify sys.argv fix (below)
129 132 so that it doesn't break tkinter apps.
130 133
131 134 * IPython/iplib.py (_prefilter): fix bug where aliases would
132 135 shadow variables when autocall was fully off. Reported by SAGE
133 136 author William Stein.
134 137
135 138 * IPython/OInspect.py (Inspector.__init__): add a flag to control
136 139 at what detail level strings are computed when foo? is requested.
137 140 This allows users to ask for example that the string form of an
138 141 object is only computed when foo?? is called, or even never, by
139 142 setting the object_info_string_level >= 2 in the configuration
140 143 file. This new option has been added and documented. After a
141 144 request by SAGE to be able to control the printing of very large
142 145 objects more easily.
143 146
144 147 2006-05-25 Fernando Perez <Fernando.Perez@colorado.edu>
145 148
146 149 * IPython/ipmaker.py (make_IPython): remove the ipython call path
147 150 from sys.argv, to be 100% consistent with how Python itself works
148 151 (as seen for example with python -i file.py). After a bug report
149 152 by Jeffrey Collins.
150 153
151 154 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix
152 155 nasty bug which was preventing custom namespaces with -pylab,
153 156 reported by M. Foord. Minor cleanup, remove old matplotlib.matlab
154 157 compatibility (long gone from mpl).
155 158
156 159 * IPython/ipapi.py (make_session): name change: create->make. We
157 160 use make in other places (ipmaker,...), it's shorter and easier to
158 161 type and say, etc. I'm trying to clean things before 0.7.2 so
159 162 that I can keep things stable wrt to ipapi in the chainsaw branch.
160 163
161 164 * ipython.el: fix the py-pdbtrack-input-prompt variable so that
162 165 python-mode recognizes our debugger mode. Add support for
163 166 autoindent inside (X)emacs. After a patch sent in by Jin Liu
164 167 <m.liu.jin-AT-gmail.com> originally written by
165 168 doxgen-AT-newsmth.net (with minor modifications for xemacs
166 169 compatibility)
167 170
168 171 * IPython/Debugger.py (Pdb.format_stack_entry): fix formatting of
169 172 tracebacks when walking the stack so that the stack tracking system
170 173 in emacs' python-mode can identify the frames correctly.
171 174
172 175 * IPython/ipmaker.py (make_IPython): make the internal (and
173 176 default config) autoedit_syntax value false by default. Too many
174 177 users have complained to me (both on and off-list) about problems
175 178 with this option being on by default, so I'm making it default to
176 179 off. It can still be enabled by anyone via the usual mechanisms.
177 180
178 181 * IPython/completer.py (Completer.attr_matches): add support for
179 182 PyCrust-style _getAttributeNames magic method. Patch contributed
180 183 by <mscott-AT-goldenspud.com>. Closes #50.
181 184
182 185 * IPython/iplib.py (InteractiveShell.__init__): remove the
183 186 deletion of exit/quit from __builtin__, which can break
184 187 third-party tools like the Zope debugging console. The
185 188 %exit/%quit magics remain. In general, it's probably a good idea
186 189 not to delete anything from __builtin__, since we never know what
187 190 that will break. In any case, python now (for 2.5) will support
188 191 'real' exit/quit, so this issue is moot. Closes #55.
189 192
190 193 * IPython/genutils.py (with_obj): rename the 'with' function to
191 194 'withobj' to avoid incompatibilities with Python 2.5, where 'with'
192 195 becomes a language keyword. Closes #53.
193 196
194 197 * IPython/FakeModule.py (FakeModule.__init__): add a proper
195 198 __file__ attribute to this so it fools more things into thinking
196 199 it is a real module. Closes #59.
197 200
198 201 * IPython/Magic.py (magic_edit): add -n option to open the editor
199 202 at a specific line number. After a patch by Stefan van der Walt.
200 203
201 204 2006-05-23 Fernando Perez <Fernando.Perez@colorado.edu>
202 205
203 206 * IPython/iplib.py (edit_syntax_error): fix crash when for some
204 207 reason the file could not be opened. After automatic crash
205 208 reports sent by James Graham <jgraham-AT-ast.cam.ac.uk> and
206 209 Charles Dolan <charlespatrickdolan-AT-yahoo.com>.
207 210 (_should_recompile): Don't fire editor if using %bg, since there
208 211 is no file in the first place. From the same report as above.
209 212 (raw_input): protect against faulty third-party prefilters. After
210 213 an automatic crash report sent by Dirk Laurie <dirk-AT-sun.ac.za>
211 214 while running under SAGE.
212 215
213 216 2006-05-23 Ville Vainio <vivainio@gmail.com>
214 217
215 218 * ipapi.py: Stripped down ip.to_user_ns() to work only as
216 219 ip.to_user_ns("x1 y1"), which exposes vars x1 and y1. ipapi.get()
217 220 now returns None (again), unless dummy is specifically allowed by
218 221 ipapi.get(allow_dummy=True).
219 222
220 223 2006-05-18 Fernando Perez <Fernando.Perez@colorado.edu>
221 224
222 225 * IPython: remove all 2.2-compatibility objects and hacks from
223 226 everywhere, since we only support 2.3 at this point. Docs
224 227 updated.
225 228
226 229 * IPython/ipapi.py (IPApi.__init__): Clean up of all getters.
227 230 Anything requiring extra validation can be turned into a Python
228 231 property in the future. I used a property for the db one b/c
229 232 there was a nasty circularity problem with the initialization
230 233 order, which right now I don't have time to clean up.
231 234
232 235 * IPython/Shell.py (MTInteractiveShell.runcode): Fix, I think,
233 236 another locking bug reported by Jorgen. I'm not 100% sure though,
234 237 so more testing is needed...
235 238
236 239 2006-05-17 Fernando Perez <Fernando.Perez@colorado.edu>
237 240
238 241 * IPython/ipapi.py (IPApi.to_user_ns): New function to inject
239 242 local variables from any routine in user code (typically executed
240 243 with %run) directly into the interactive namespace. Very useful
241 244 when doing complex debugging.
242 245 (IPythonNotRunning): Changed the default None object to a dummy
243 246 whose attributes can be queried as well as called without
244 247 exploding, to ease writing code which works transparently both in
245 248 and out of ipython and uses some of this API.
246 249
247 250 2006-05-16 Fernando Perez <Fernando.Perez@colorado.edu>
248 251
249 252 * IPython/hooks.py (result_display): Fix the fact that our display
250 253 hook was using str() instead of repr(), as the default python
251 254 console does. This had gone unnoticed b/c it only happened if
252 255 %Pprint was off, but the inconsistency was there.
253 256
254 257 2006-05-15 Ville Vainio <vivainio@gmail.com>
255 258
256 259 * Oinspect.py: Only show docstring for nonexisting/binary files
257 260 when doing object??, closing ticket #62
258 261
259 262 2006-05-13 Fernando Perez <Fernando.Perez@colorado.edu>
260 263
261 264 * IPython/Shell.py (MTInteractiveShell.runsource): Fix threading
262 265 bug, closes http://www.scipy.net/roundup/ipython/issue55. A lock
263 266 was being released in a routine which hadn't checked if it had
264 267 been the one to acquire it.
265 268
266 269 2006-05-07 Fernando Perez <Fernando.Perez@colorado.edu>
267 270
268 271 * IPython/Release.py (version): put out 0.7.2.rc1 for testing.
269 272
270 273 2006-04-11 Ville Vainio <vivainio@gmail.com>
271 274
272 275 * iplib.py, ipmaker.py: .ipy extension now means "ipython batch file"
273 276 in command line. E.g. "ipython test.ipy" runs test.ipy with ipython
274 277 prefilters, allowing stuff like magics and aliases in the file.
275 278
276 279 * Prompts.py, Extensions/clearcmd.py, ipy_system_conf.py: %clear magic
277 280 added. Supported now are "%clear in" and "%clear out" (clear input and
278 281 output history, respectively). Also fixed CachedOutput.flush to
279 282 properly flush the output cache.
280 283
281 284 * Extensions/pspersistence.py: Fix %store to avoid "%store obj.attr"
282 285 half-success (and fail explicitly).
283 286
284 287 2006-03-28 Ville Vainio <vivainio@gmail.com>
285 288
286 289 * iplib.py: Fix quoting of aliases so that only argless ones
287 290 are quoted
288 291
289 292 2006-03-28 Ville Vainio <vivainio@gmail.com>
290 293
291 294 * iplib.py: Quote aliases with spaces in the name.
292 295 "c:\program files\blah\bin" is now legal alias target.
293 296
294 297 * ext_rehashdir.py: Space no longer allowed as arg
295 298 separator, since space is legal in path names.
296 299
297 300 2006-03-16 Ville Vainio <vivainio@gmail.com>
298 301
299 302 * upgrade_dir.py: Take path.py from Extensions, correcting
300 303 %upgrade magic
301 304
302 305 * ipmaker.py: Suggest using %upgrade if ipy_user_conf.py isn't found.
303 306
304 307 * hooks.py: Only enclose editor binary in quotes if legal and
305 308 necessary (space in the name, and is an existing file). Fixes a bug
306 309 reported by Zachary Pincus.
307 310
308 311 2006-03-13 Fernando Perez <Fernando.Perez@colorado.edu>
309 312
310 313 * Manual: thanks to a tip on proper color handling for Emacs, by
311 314 Eric J Haywiser <ejh1-AT-MIT.EDU>.
312 315
313 316 * ipython.el: close http://www.scipy.net/roundup/ipython/issue57
314 317 by applying the provided patch. Thanks to Liu Jin
315 318 <m.liu.jin-AT-gmail.com> for the contribution. No problems under
316 319 XEmacs/Linux, I'm trusting the submitter that it actually helps
317 320 under win32/GNU Emacs. Will revisit if any problems are reported.
318 321
319 322 2006-03-12 Fernando Perez <Fernando.Perez@colorado.edu>
320 323
321 324 * IPython/Gnuplot2.py (_FileClass): update for current Gnuplot.py
322 325 from SVN, thanks to a patch by Ryan Woodard <rywo@bas.ac.uk>.
323 326
324 327 2006-03-12 Ville Vainio <vivainio@gmail.com>
325 328
326 329 * Magic.py (magic_timeit): Added %timeit magic, contributed by
327 330 Torsten Marek.
328 331
329 332 2006-03-12 Fernando Perez <Fernando.Perez@colorado.edu>
330 333
331 334 * IPython/Magic.py (magic_macro): fix so that the n1-n2 syntax for
332 335 line ranges works again.
333 336
334 337 2006-03-11 Fernando Perez <Fernando.Perez@colorado.edu>
335 338
336 339 * IPython/iplib.py (showtraceback): add back sys.last_traceback
337 340 and friends, after a discussion with Zach Pincus on ipython-user.
338 341 I'm not 100% sure, but after thinking aobut it quite a bit, it may
339 342 be OK. Testing with the multithreaded shells didn't reveal any
340 343 problems, but let's keep an eye out.
341 344
342 345 In the process, I fixed a few things which were calling
343 346 self.InteractiveTB() directly (like safe_execfile), which is a
344 347 mistake: ALL exception reporting should be done by calling
345 348 self.showtraceback(), which handles state and tab-completion and
346 349 more.
347 350
348 351 2006-03-01 Ville Vainio <vivainio@gmail.com>
349 352
350 353 * Extensions/ipipe.py: Added Walter Doerwald's "ipipe" module.
351 354 To use, do "from ipipe import *".
352 355
353 356 2006-02-24 Ville Vainio <vivainio@gmail.com>
354 357
355 358 * Magic.py, upgrade_dir.py: %upgrade magic added. Does things more
356 359 "cleanly" and safely than the older upgrade mechanism.
357 360
358 361 2006-02-21 Ville Vainio <vivainio@gmail.com>
359 362
360 363 * Magic.py: %save works again.
361 364
362 365 2006-02-15 Ville Vainio <vivainio@gmail.com>
363 366
364 367 * Magic.py: %Pprint works again
365 368
366 369 * Extensions/ipy_sane_defaults.py: Provide everything provided
367 370 in default ipythonrc, to make it possible to have a completely empty
368 371 ipythonrc (and thus completely rc-file free configuration)
369 372
370 373
371 374 2006-02-11 Fernando Perez <Fernando.Perez@colorado.edu>
372 375
373 376 * IPython/hooks.py (editor): quote the call to the editor command,
374 377 to allow commands with spaces in them. Problem noted by watching
375 378 Ian Oswald's video about textpad under win32 at
376 379 http://showmedo.com/videoListPage?listKey=PythonIPythonSeries
377 380
378 381 * IPython/UserConfig/ipythonrc: Replace @ signs with % when
379 382 describing magics (we haven't used @ for a loong time).
380 383
381 384 * IPython/ultraTB.py (VerboseTB.text.text_repr): Added patch
382 385 contributed by marienz to close
383 386 http://www.scipy.net/roundup/ipython/issue53.
384 387
385 388 2006-02-10 Ville Vainio <vivainio@gmail.com>
386 389
387 390 * genutils.py: getoutput now works in win32 too
388 391
389 392 * completer.py: alias and magic completion only invoked
390 393 at the first "item" in the line, to avoid "cd %store"
391 394 nonsense.
392 395
393 396 2006-02-09 Ville Vainio <vivainio@gmail.com>
394 397
395 398 * test/*: Added a unit testing framework (finally).
396 399 '%run runtests.py' to run test_*.
397 400
398 401 * ipapi.py: Exposed runlines and set_custom_exc
399 402
400 403 2006-02-07 Ville Vainio <vivainio@gmail.com>
401 404
402 405 * iplib.py: don't split "f 1 2" to "f(1,2)" in autocall,
403 406 instead use "f(1 2)" as before.
404 407
405 408 2006-02-05 Fernando Perez <Fernando.Perez@colorado.edu>
406 409
407 410 * IPython/demo.py (IPythonDemo): Add new classes to the demo
408 411 facilities, for demos processed by the IPython input filter
409 412 (IPythonDemo), and for running a script one-line-at-a-time as a
410 413 demo, both for pure Python (LineDemo) and for IPython-processed
411 414 input (IPythonLineDemo). After a request by Dave Kohel, from the
412 415 SAGE team.
413 416 (Demo.edit): added and edit() method to the demo objects, to edit
414 417 the in-memory copy of the last executed block.
415 418
416 419 * IPython/Magic.py (magic_edit): add '-r' option for 'raw'
417 420 processing to %edit, %macro and %save. These commands can now be
418 421 invoked on the unprocessed input as it was typed by the user
419 422 (without any prefilters applied). After requests by the SAGE team
420 423 at SAGE days 2006: http://modular.ucsd.edu/sage/days1/schedule.html.
421 424
422 425 2006-02-01 Ville Vainio <vivainio@gmail.com>
423 426
424 427 * setup.py, eggsetup.py: easy_install ipython==dev works
425 428 correctly now (on Linux)
426 429
427 430 * ipy_user_conf,ipmaker: user config changes, removed spurious
428 431 warnings
429 432
430 433 * iplib: if rc.banner is string, use it as is.
431 434
432 435 * Magic: %pycat accepts a string argument and pages it's contents.
433 436
434 437
435 438 2006-01-30 Ville Vainio <vivainio@gmail.com>
436 439
437 440 * pickleshare,pspersistence,ipapi,Magic: persistence overhaul.
438 441 Now %store and bookmarks work through PickleShare, meaning that
439 442 concurrent access is possible and all ipython sessions see the
440 443 same database situation all the time, instead of snapshot of
441 444 the situation when the session was started. Hence, %bookmark
442 445 results are immediately accessible from othes sessions. The database
443 446 is also available for use by user extensions. See:
444 447 http://www.python.org/pypi/pickleshare
445 448
446 449 * hooks.py: Two new hooks, 'shutdown_hook' and 'late_startup_hook'.
447 450
448 451 * aliases can now be %store'd
449 452
450 453 * path.py move to Extensions so that pickleshare does not need
451 454 IPython-specific import. Extensions added to pythonpath right
452 455 at __init__.
453 456
454 457 * iplib.py: ipalias deprecated/redundant; aliases are converted and
455 458 called with _ip.system and the pre-transformed command string.
456 459
457 460 2006-01-29 Fernando Perez <Fernando.Perez@colorado.edu>
458 461
459 462 * IPython/iplib.py (interact): Fix that we were not catching
460 463 KeyboardInterrupt exceptions properly. I'm not quite sure why the
461 464 logic here had to change, but it's fixed now.
462 465
463 466 2006-01-29 Ville Vainio <vivainio@gmail.com>
464 467
465 468 * iplib.py: Try to import pyreadline on Windows.
466 469
467 470 2006-01-27 Ville Vainio <vivainio@gmail.com>
468 471
469 472 * iplib.py: Expose ipapi as _ip in builtin namespace.
470 473 Makes ipmagic (-> _ip.magic), ipsystem (-> _ip.system)
471 474 and ip_set_hook (-> _ip.set_hook) redundant. % and !
472 475 syntax now produce _ip.* variant of the commands.
473 476
474 477 * "_ip.options().autoedit_syntax = 2" automatically throws
475 478 user to editor for syntax error correction without prompting.
476 479
477 480 2006-01-27 Ville Vainio <vivainio@gmail.com>
478 481
479 482 * ipmaker.py: Give "realistic" sys.argv for scripts (without
480 483 'ipython' at argv[0]) executed through command line.
481 484 NOTE: this DEPRECATES calling ipython with multiple scripts
482 485 ("ipython a.py b.py c.py")
483 486
484 487 * iplib.py, hooks.py: Added configurable input prefilter,
485 488 named 'input_prefilter'. See ext_rescapture.py for example
486 489 usage.
487 490
488 491 * ext_rescapture.py, Magic.py: Better system command output capture
489 492 through 'var = !ls' (deprecates user-visible %sc). Same notation
490 493 applies for magics, 'var = %alias' assigns alias list to var.
491 494
492 495 * ipapi.py: added meta() for accessing extension-usable data store.
493 496
494 497 * iplib.py: added InteractiveShell.getapi(). New magics should be
495 498 written doing self.getapi() instead of using the shell directly.
496 499
497 500 * Magic.py: %store now allows doing %store foo > ~/myfoo.txt and
498 501 %store foo >> ~/myfoo.txt to store variables to files (in clean
499 502 textual form, not a restorable pickle).
500 503
501 504 * ipmaker.py: now import ipy_profile_PROFILENAME automatically
502 505
503 506 * usage.py, Magic.py: added %quickref
504 507
505 508 * iplib.py: ESC_PAREN fixes: /f 1 2 -> f(1,2), not f(1 2).
506 509
507 510 * GetoptErrors when invoking magics etc. with wrong args
508 511 are now more helpful:
509 512 GetoptError: option -l not recognized (allowed: "qb" )
510 513
511 514 2006-01-25 Fernando Perez <Fernando.Perez@colorado.edu>
512 515
513 516 * IPython/demo.py (Demo.show): Flush stdout after each block, so
514 517 computationally intensive blocks don't appear to stall the demo.
515 518
516 519 2006-01-24 Ville Vainio <vivainio@gmail.com>
517 520
518 521 * iplib.py, hooks.py: 'result_display' hook can return a non-None
519 522 value to manipulate resulting history entry.
520 523
521 524 * ipapi.py: Moved TryNext here from hooks.py. Moved functions
522 525 to instance methods of IPApi class, to make extending an embedded
523 526 IPython feasible. See ext_rehashdir.py for example usage.
524 527
525 528 * Merged 1071-1076 from banches/0.7.1
526 529
527 530
528 531 2006-01-23 Fernando Perez <Fernando.Perez@colorado.edu>
529 532
530 533 * tools/release (daystamp): Fix build tools to use the new
531 534 eggsetup.py script to build lightweight eggs.
532 535
533 536 * Applied changesets 1062 and 1064 before 0.7.1 release.
534 537
535 538 * IPython/Magic.py (magic_history): Add '-r' option to %hist, to
536 539 see the raw input history (without conversions like %ls ->
537 540 ipmagic("ls")). After a request from W. Stein, SAGE
538 541 (http://modular.ucsd.edu/sage) developer. This information is
539 542 stored in the input_hist_raw attribute of the IPython instance, so
540 543 developers can access it if needed (it's an InputList instance).
541 544
542 545 * Versionstring = 0.7.2.svn
543 546
544 547 * eggsetup.py: A separate script for constructing eggs, creates
545 548 proper launch scripts even on Windows (an .exe file in
546 549 \python24\scripts).
547 550
548 551 * ipapi.py: launch_new_instance, launch entry point needed for the
549 552 egg.
550 553
551 554 2006-01-23 Ville Vainio <vivainio@gmail.com>
552 555
553 556 * Added %cpaste magic for pasting python code
554 557
555 558 2006-01-22 Ville Vainio <vivainio@gmail.com>
556 559
557 560 * Merge from branches/0.7.1 into trunk, revs 1052-1057
558 561
559 562 * Versionstring = 0.7.2.svn
560 563
561 564 * eggsetup.py: A separate script for constructing eggs, creates
562 565 proper launch scripts even on Windows (an .exe file in
563 566 \python24\scripts).
564 567
565 568 * ipapi.py: launch_new_instance, launch entry point needed for the
566 569 egg.
567 570
568 571 2006-01-22 Fernando Perez <Fernando.Perez@colorado.edu>
569 572
570 573 * IPython/OInspect.py (Inspector.pinfo): fix bug where foo?? or
571 574 %pfile foo would print the file for foo even if it was a binary.
572 575 Now, extensions '.so' and '.dll' are skipped.
573 576
574 577 * IPython/Shell.py (MTInteractiveShell.__init__): Fix threading
575 578 bug, where macros would fail in all threaded modes. I'm not 100%
576 579 sure, so I'm going to put out an rc instead of making a release
577 580 today, and wait for feedback for at least a few days.
578 581
579 582 * IPython/iplib.py (handle_normal): fix (finally? somehow I doubt
580 583 it...) the handling of pasting external code with autoindent on.
581 584 To get out of a multiline input, the rule will appear for most
582 585 users unchanged: two blank lines or change the indent level
583 586 proposed by IPython. But there is a twist now: you can
584 587 add/subtract only *one or two spaces*. If you add/subtract three
585 588 or more (unless you completely delete the line), IPython will
586 589 accept that line, and you'll need to enter a second one of pure
587 590 whitespace. I know it sounds complicated, but I can't find a
588 591 different solution that covers all the cases, with the right
589 592 heuristics. Hopefully in actual use, nobody will really notice
590 593 all these strange rules and things will 'just work'.
591 594
592 595 2006-01-21 Fernando Perez <Fernando.Perez@colorado.edu>
593 596
594 597 * IPython/iplib.py (interact): catch exceptions which can be
595 598 triggered asynchronously by signal handlers. Thanks to an
596 599 automatic crash report, submitted by Colin Kingsley
597 600 <tercel-AT-gentoo.org>.
598 601
599 602 2006-01-20 Ville Vainio <vivainio@gmail.com>
600 603
601 604 * Ipython/Extensions/ext_rehashdir.py: Created a usable example
602 605 (%rehashdir, very useful, try it out) of how to extend ipython
603 606 with new magics. Also added Extensions dir to pythonpath to make
604 607 importing extensions easy.
605 608
606 609 * %store now complains when trying to store interactively declared
607 610 classes / instances of those classes.
608 611
609 612 * Extensions/ipy_system_conf.py, UserConfig/ipy_user_conf.py,
610 613 ipmaker.py: Config rehaul. Now ipy_..._conf.py are always imported
611 614 if they exist, and ipy_user_conf.py with some defaults is created for
612 615 the user.
613 616
614 617 * Startup rehashing done by the config file, not InterpreterExec.
615 618 This means system commands are available even without selecting the
616 619 pysh profile. It's the sensible default after all.
617 620
618 621 2006-01-20 Fernando Perez <Fernando.Perez@colorado.edu>
619 622
620 623 * IPython/iplib.py (raw_input): I _think_ I got the pasting of
621 624 multiline code with autoindent on working. But I am really not
622 625 sure, so this needs more testing. Will commit a debug-enabled
623 626 version for now, while I test it some more, so that Ville and
624 627 others may also catch any problems. Also made
625 628 self.indent_current_str() a method, to ensure that there's no
626 629 chance of the indent space count and the corresponding string
627 630 falling out of sync. All code needing the string should just call
628 631 the method.
629 632
630 633 2006-01-18 Fernando Perez <Fernando.Perez@colorado.edu>
631 634
632 635 * IPython/Magic.py (magic_edit): fix check for when users don't
633 636 save their output files, the try/except was in the wrong section.
634 637
635 638 2006-01-17 Fernando Perez <Fernando.Perez@colorado.edu>
636 639
637 640 * IPython/Magic.py (magic_run): fix __file__ global missing from
638 641 script's namespace when executed via %run. After a report by
639 642 Vivian.
640 643
641 644 * IPython/Debugger.py (Pdb.__init__): Fix breakage with '%run -d'
642 645 when using python 2.4. The parent constructor changed in 2.4, and
643 646 we need to track it directly (we can't call it, as it messes up
644 647 readline and tab-completion inside our pdb would stop working).
645 648 After a bug report by R. Bernstein <rocky-AT-panix.com>.
646 649
647 650 2006-01-16 Ville Vainio <vivainio@gmail.com>
648 651
649 652 * Ipython/magic.py:Reverted back to old %edit functionality
650 653 that returns file contents on exit.
651 654
652 655 * IPython/path.py: Added Jason Orendorff's "path" module to
653 656 IPython tree, http://www.jorendorff.com/articles/python/path/.
654 657 You can get path objects conveniently through %sc, and !!, e.g.:
655 658 sc files=ls
656 659 for p in files.paths: # or files.p
657 660 print p,p.mtime
658 661
659 662 * Ipython/iplib.py:"," and ";" autoquoting-upon-autocall
660 663 now work again without considering the exclusion regexp -
661 664 hence, things like ',foo my/path' turn to 'foo("my/path")'
662 665 instead of syntax error.
663 666
664 667
665 668 2006-01-14 Ville Vainio <vivainio@gmail.com>
666 669
667 670 * IPython/ipapi.py (ashook, asmagic, options): Added convenience
668 671 ipapi decorators for python 2.4 users, options() provides access to rc
669 672 data.
670 673
671 674 * IPython/Magic.py (magic_cd): %cd now accepts backslashes
672 675 as path separators (even on Linux ;-). Space character after
673 676 backslash (as yielded by tab completer) is still space;
674 677 "%cd long\ name" works as expected.
675 678
676 679 * IPython/ipapi.py,hooks.py,iplib.py: Hooks now implemented
677 680 as "chain of command", with priority. API stays the same,
678 681 TryNext exception raised by a hook function signals that
679 682 current hook failed and next hook should try handling it, as
680 683 suggested by Walter DΓΆrwald <walter@livinglogic.de>. Walter also
681 684 requested configurable display hook, which is now implemented.
682 685
683 686 2006-01-13 Ville Vainio <vivainio@gmail.com>
684 687
685 688 * IPython/platutils*.py: platform specific utility functions,
686 689 so far only set_term_title is implemented (change terminal
687 690 label in windowing systems). %cd now changes the title to
688 691 current dir.
689 692
690 693 * IPython/Release.py: Added myself to "authors" list,
691 694 had to create new files.
692 695
693 696 * IPython/iplib.py (handle_shell_escape): fixed logical flaw in
694 697 shell escape; not a known bug but had potential to be one in the
695 698 future.
696 699
697 700 * IPython/ipapi.py (added),OInspect.py,iplib.py: "Public"
698 701 extension API for IPython! See the module for usage example. Fix
699 702 OInspect for docstring-less magic functions.
700 703
701 704
702 705 2006-01-13 Fernando Perez <Fernando.Perez@colorado.edu>
703 706
704 707 * IPython/iplib.py (raw_input): temporarily deactivate all
705 708 attempts at allowing pasting of code with autoindent on. It
706 709 introduced bugs (reported by Prabhu) and I can't seem to find a
707 710 robust combination which works in all cases. Will have to revisit
708 711 later.
709 712
710 713 * IPython/genutils.py: remove isspace() function. We've dropped
711 714 2.2 compatibility, so it's OK to use the string method.
712 715
713 716 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
714 717
715 718 * IPython/iplib.py (InteractiveShell.__init__): fix regexp
716 719 matching what NOT to autocall on, to include all python binary
717 720 operators (including things like 'and', 'or', 'is' and 'in').
718 721 Prompted by a bug report on 'foo & bar', but I realized we had
719 722 many more potential bug cases with other operators. The regexp is
720 723 self.re_exclude_auto, it's fairly commented.
721 724
722 725 2006-01-12 Ville Vainio <vivainio@gmail.com>
723 726
724 727 * IPython/iplib.py (make_quoted_expr,handle_shell_escape):
725 728 Prettified and hardened string/backslash quoting with ipsystem(),
726 729 ipalias() and ipmagic(). Now even \ characters are passed to
727 730 %magics, !shell escapes and aliases exactly as they are in the
728 731 ipython command line. Should improve backslash experience,
729 732 particularly in Windows (path delimiter for some commands that
730 733 won't understand '/'), but Unix benefits as well (regexps). %cd
731 734 magic still doesn't support backslash path delimiters, though. Also
732 735 deleted all pretense of supporting multiline command strings in
733 736 !system or %magic commands. Thanks to Jerry McRae for suggestions.
734 737
735 738 * doc/build_doc_instructions.txt added. Documentation on how to
736 739 use doc/update_manual.py, added yesterday. Both files contributed
737 740 by JΓΆrgen Stenarson <jorgen.stenarson-AT-bostream.nu>. This slates
738 741 doc/*.sh for deprecation at a later date.
739 742
740 743 * /ipython.py Added ipython.py to root directory for
741 744 zero-installation (tar xzvf ipython.tgz; cd ipython; python
742 745 ipython.py) and development convenience (no need to kee doing
743 746 "setup.py install" between changes).
744 747
745 748 * Made ! and !! shell escapes work (again) in multiline expressions:
746 749 if 1:
747 750 !ls
748 751 !!ls
749 752
750 753 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
751 754
752 755 * IPython/ipstruct.py (Struct): Rename IPython.Struct to
753 756 IPython.ipstruct, to avoid local shadowing of the stdlib 'struct'
754 757 module in case-insensitive installation. Was causing crashes
755 758 under win32. Closes http://www.scipy.net/roundup/ipython/issue49.
756 759
757 760 * IPython/Magic.py (magic_pycat): Fix pycat, patch by Marien Zwart
758 761 <marienz-AT-gentoo.org>, closes
759 762 http://www.scipy.net/roundup/ipython/issue51.
760 763
761 764 2006-01-11 Fernando Perez <Fernando.Perez@colorado.edu>
762 765
763 766 * IPython/Shell.py (IPShellGTK.on_timer): Finally fix the the
764 767 problem of excessive CPU usage under *nix and keyboard lag under
765 768 win32.
766 769
767 770 2006-01-10 *** Released version 0.7.0
768 771
769 772 2006-01-10 Fernando Perez <Fernando.Perez@colorado.edu>
770 773
771 774 * IPython/Release.py (revision): tag version number to 0.7.0,
772 775 ready for release.
773 776
774 777 * IPython/Magic.py (magic_edit): Add print statement to %edit so
775 778 it informs the user of the name of the temp. file used. This can
776 779 help if you decide later to reuse that same file, so you know
777 780 where to copy the info from.
778 781
779 782 2006-01-09 Fernando Perez <Fernando.Perez@colorado.edu>
780 783
781 784 * setup_bdist_egg.py: little script to build an egg. Added
782 785 support in the release tools as well.
783 786
784 787 2006-01-08 Fernando Perez <Fernando.Perez@colorado.edu>
785 788
786 789 * IPython/Shell.py (IPShellWX.__init__): add support for WXPython
787 790 version selection (new -wxversion command line and ipythonrc
788 791 parameter). Patch contributed by Arnd Baecker
789 792 <arnd.baecker-AT-web.de>.
790 793
791 794 * IPython/iplib.py (embed_mainloop): fix tab-completion in
792 795 embedded instances, for variables defined at the interactive
793 796 prompt of the embedded ipython. Reported by Arnd.
794 797
795 798 * IPython/Magic.py (magic_autocall): Fix %autocall magic. Now
796 799 it can be used as a (stateful) toggle, or with a direct parameter.
797 800
798 801 * IPython/ultraTB.py (_fixed_getinnerframes): remove debug assert which
799 802 could be triggered in certain cases and cause the traceback
800 803 printer not to work.
801 804
802 805 2006-01-07 Fernando Perez <Fernando.Perez@colorado.edu>
803 806
804 807 * IPython/iplib.py (_should_recompile): Small fix, closes
805 808 http://www.scipy.net/roundup/ipython/issue48. Patch by Scott.
806 809
807 810 2006-01-04 Fernando Perez <Fernando.Perez@colorado.edu>
808 811
809 812 * IPython/Shell.py (IPShellGTK.mainloop): fix bug in the GTK
810 813 backend for matplotlib (100% cpu utiliziation). Thanks to Charlie
811 814 Moad for help with tracking it down.
812 815
813 816 * IPython/iplib.py (handle_auto): fix autocall handling for
814 817 objects which support BOTH __getitem__ and __call__ (so that f [x]
815 818 is left alone, instead of becoming f([x]) automatically).
816 819
817 820 * IPython/Magic.py (magic_cd): fix crash when cd -b was used.
818 821 Ville's patch.
819 822
820 823 2006-01-03 Fernando Perez <Fernando.Perez@colorado.edu>
821 824
822 825 * IPython/iplib.py (handle_auto): changed autocall semantics to
823 826 include 'smart' mode, where the autocall transformation is NOT
824 827 applied if there are no arguments on the line. This allows you to
825 828 just type 'foo' if foo is a callable to see its internal form,
826 829 instead of having it called with no arguments (typically a
827 830 mistake). The old 'full' autocall still exists: for that, you
828 831 need to set the 'autocall' parameter to 2 in your ipythonrc file.
829 832
830 833 * IPython/completer.py (Completer.attr_matches): add
831 834 tab-completion support for Enthoughts' traits. After a report by
832 835 Arnd and a patch by Prabhu.
833 836
834 837 2006-01-02 Fernando Perez <Fernando.Perez@colorado.edu>
835 838
836 839 * IPython/ultraTB.py (_fixed_getinnerframes): added Alex
837 840 Schmolck's patch to fix inspect.getinnerframes().
838 841
839 842 * IPython/iplib.py (InteractiveShell.__init__): significant fixes
840 843 for embedded instances, regarding handling of namespaces and items
841 844 added to the __builtin__ one. Multiple embedded instances and
842 845 recursive embeddings should work better now (though I'm not sure
843 846 I've got all the corner cases fixed, that code is a bit of a brain
844 847 twister).
845 848
846 849 * IPython/Magic.py (magic_edit): added support to edit in-memory
847 850 macros (automatically creates the necessary temp files). %edit
848 851 also doesn't return the file contents anymore, it's just noise.
849 852
850 853 * IPython/completer.py (Completer.attr_matches): revert change to
851 854 complete only on attributes listed in __all__. I realized it
852 855 cripples the tab-completion system as a tool for exploring the
853 856 internals of unknown libraries (it renders any non-__all__
854 857 attribute off-limits). I got bit by this when trying to see
855 858 something inside the dis module.
856 859
857 860 2005-12-31 Fernando Perez <Fernando.Perez@colorado.edu>
858 861
859 862 * IPython/iplib.py (InteractiveShell.__init__): add .meta
860 863 namespace for users and extension writers to hold data in. This
861 864 follows the discussion in
862 865 http://projects.scipy.org/ipython/ipython/wiki/RefactoringIPython.
863 866
864 867 * IPython/completer.py (IPCompleter.complete): small patch to help
865 868 tab-completion under Emacs, after a suggestion by John Barnard
866 869 <barnarj-AT-ccf.org>.
867 870
868 871 * IPython/Magic.py (Magic.extract_input_slices): added support for
869 872 the slice notation in magics to use N-M to represent numbers N...M
870 873 (closed endpoints). This is used by %macro and %save.
871 874
872 875 * IPython/completer.py (Completer.attr_matches): for modules which
873 876 define __all__, complete only on those. After a patch by Jeffrey
874 877 Collins <jcollins_boulder-AT-earthlink.net>. Also, clean up and
875 878 speed up this routine.
876 879
877 880 * IPython/Logger.py (Logger.log): fix a history handling bug. I
878 881 don't know if this is the end of it, but the behavior now is
879 882 certainly much more correct. Note that coupled with macros,
880 883 slightly surprising (at first) behavior may occur: a macro will in
881 884 general expand to multiple lines of input, so upon exiting, the
882 885 in/out counters will both be bumped by the corresponding amount
883 886 (as if the macro's contents had been typed interactively). Typing
884 887 %hist will reveal the intermediate (silently processed) lines.
885 888
886 889 * IPython/Magic.py (magic_run): fix a subtle bug which could cause
887 890 pickle to fail (%run was overwriting __main__ and not restoring
888 891 it, but pickle relies on __main__ to operate).
889 892
890 893 * IPython/iplib.py (InteractiveShell): fix pdb calling: I'm now
891 894 using properties, but forgot to make the main InteractiveShell
892 895 class a new-style class. Properties fail silently, and
893 896 misteriously, with old-style class (getters work, but
894 897 setters don't do anything).
895 898
896 899 2005-12-30 Fernando Perez <Fernando.Perez@colorado.edu>
897 900
898 901 * IPython/Magic.py (magic_history): fix history reporting bug (I
899 902 know some nasties are still there, I just can't seem to find a
900 903 reproducible test case to track them down; the input history is
901 904 falling out of sync...)
902 905
903 906 * IPython/iplib.py (handle_shell_escape): fix bug where both
904 907 aliases and system accesses where broken for indented code (such
905 908 as loops).
906 909
907 910 * IPython/genutils.py (shell): fix small but critical bug for
908 911 win32 system access.
909 912
910 913 2005-12-29 Fernando Perez <Fernando.Perez@colorado.edu>
911 914
912 915 * IPython/iplib.py (showtraceback): remove use of the
913 916 sys.last_{type/value/traceback} structures, which are non
914 917 thread-safe.
915 918 (_prefilter): change control flow to ensure that we NEVER
916 919 introspect objects when autocall is off. This will guarantee that
917 920 having an input line of the form 'x.y', where access to attribute
918 921 'y' has side effects, doesn't trigger the side effect TWICE. It
919 922 is important to note that, with autocall on, these side effects
920 923 can still happen.
921 924 (ipsystem): new builtin, to complete the ip{magic/alias/system}
922 925 trio. IPython offers these three kinds of special calls which are
923 926 not python code, and it's a good thing to have their call method
924 927 be accessible as pure python functions (not just special syntax at
925 928 the command line). It gives us a better internal implementation
926 929 structure, as well as exposing these for user scripting more
927 930 cleanly.
928 931
929 932 * IPython/macro.py (Macro.__init__): moved macros to a standalone
930 933 file. Now that they'll be more likely to be used with the
931 934 persistance system (%store), I want to make sure their module path
932 935 doesn't change in the future, so that we don't break things for
933 936 users' persisted data.
934 937
935 938 * IPython/iplib.py (autoindent_update): move indentation
936 939 management into the _text_ processing loop, not the keyboard
937 940 interactive one. This is necessary to correctly process non-typed
938 941 multiline input (such as macros).
939 942
940 943 * IPython/Magic.py (Magic.format_latex): patch by Stefan van der
941 944 Walt <stefan-AT-sun.ac.za> to fix latex formatting of docstrings,
942 945 which was producing problems in the resulting manual.
943 946 (magic_whos): improve reporting of instances (show their class,
944 947 instead of simply printing 'instance' which isn't terribly
945 948 informative).
946 949
947 950 * IPython/genutils.py (shell): commit Jorgen Stenarson's patch
948 951 (minor mods) to support network shares under win32.
949 952
950 953 * IPython/winconsole.py (get_console_size): add new winconsole
951 954 module and fixes to page_dumb() to improve its behavior under
952 955 win32. Contributed by Alexander Belchenko <bialix-AT-ukr.net>.
953 956
954 957 * IPython/Magic.py (Macro): simplified Macro class to just
955 958 subclass list. We've had only 2.2 compatibility for a very long
956 959 time, yet I was still avoiding subclassing the builtin types. No
957 960 more (I'm also starting to use properties, though I won't shift to
958 961 2.3-specific features quite yet).
959 962 (magic_store): added Ville's patch for lightweight variable
960 963 persistence, after a request on the user list by Matt Wilkie
961 964 <maphew-AT-gmail.com>. The new %store magic's docstring has full
962 965 details.
963 966
964 967 * IPython/iplib.py (InteractiveShell.post_config_initialization):
965 968 changed the default logfile name from 'ipython.log' to
966 969 'ipython_log.py'. These logs are real python files, and now that
967 970 we have much better multiline support, people are more likely to
968 971 want to use them as such. Might as well name them correctly.
969 972
970 973 * IPython/Magic.py: substantial cleanup. While we can't stop
971 974 using magics as mixins, due to the existing customizations 'out
972 975 there' which rely on the mixin naming conventions, at least I
973 976 cleaned out all cross-class name usage. So once we are OK with
974 977 breaking compatibility, the two systems can be separated.
975 978
976 979 * IPython/Logger.py: major cleanup. This one is NOT a mixin
977 980 anymore, and the class is a fair bit less hideous as well. New
978 981 features were also introduced: timestamping of input, and logging
979 982 of output results. These are user-visible with the -t and -o
980 983 options to %logstart. Closes
981 984 http://www.scipy.net/roundup/ipython/issue11 and a request by
982 985 William Stein (SAGE developer - http://modular.ucsd.edu/sage).
983 986
984 987 2005-12-28 Fernando Perez <Fernando.Perez@colorado.edu>
985 988
986 989 * IPython/iplib.py (handle_shell_escape): add Ville's patch to
987 990 better hadnle backslashes in paths. See the thread 'More Windows
988 991 questions part 2 - \/ characters revisited' on the iypthon user
989 992 list:
990 993 http://scipy.net/pipermail/ipython-user/2005-June/000907.html
991 994
992 995 (InteractiveShell.__init__): fix tab-completion bug in threaded shells.
993 996
994 997 (InteractiveShell.__init__): change threaded shells to not use the
995 998 ipython crash handler. This was causing more problems than not,
996 999 as exceptions in the main thread (GUI code, typically) would
997 1000 always show up as a 'crash', when they really weren't.
998 1001
999 1002 The colors and exception mode commands (%colors/%xmode) have been
1000 1003 synchronized to also take this into account, so users can get
1001 1004 verbose exceptions for their threaded code as well. I also added
1002 1005 support for activating pdb inside this exception handler as well,
1003 1006 so now GUI authors can use IPython's enhanced pdb at runtime.
1004 1007
1005 1008 * IPython/ipmaker.py (make_IPython): make the autoedit_syntax flag
1006 1009 true by default, and add it to the shipped ipythonrc file. Since
1007 1010 this asks the user before proceeding, I think it's OK to make it
1008 1011 true by default.
1009 1012
1010 1013 * IPython/Magic.py (magic_exit): make new exit/quit magics instead
1011 1014 of the previous special-casing of input in the eval loop. I think
1012 1015 this is cleaner, as they really are commands and shouldn't have
1013 1016 a special role in the middle of the core code.
1014 1017
1015 1018 2005-12-27 Fernando Perez <Fernando.Perez@colorado.edu>
1016 1019
1017 1020 * IPython/iplib.py (edit_syntax_error): added support for
1018 1021 automatically reopening the editor if the file had a syntax error
1019 1022 in it. Thanks to scottt who provided the patch at:
1020 1023 http://www.scipy.net/roundup/ipython/issue36 (slightly modified
1021 1024 version committed).
1022 1025
1023 1026 * IPython/iplib.py (handle_normal): add suport for multi-line
1024 1027 input with emtpy lines. This fixes
1025 1028 http://www.scipy.net/roundup/ipython/issue43 and a similar
1026 1029 discussion on the user list.
1027 1030
1028 1031 WARNING: a behavior change is necessarily introduced to support
1029 1032 blank lines: now a single blank line with whitespace does NOT
1030 1033 break the input loop, which means that when autoindent is on, by
1031 1034 default hitting return on the next (indented) line does NOT exit.
1032 1035
1033 1036 Instead, to exit a multiline input you can either have:
1034 1037
1035 1038 - TWO whitespace lines (just hit return again), or
1036 1039 - a single whitespace line of a different length than provided
1037 1040 by the autoindent (add or remove a space).
1038 1041
1039 1042 * IPython/completer.py (MagicCompleter.__init__): new 'completer'
1040 1043 module to better organize all readline-related functionality.
1041 1044 I've deleted FlexCompleter and put all completion clases here.
1042 1045
1043 1046 * IPython/iplib.py (raw_input): improve indentation management.
1044 1047 It is now possible to paste indented code with autoindent on, and
1045 1048 the code is interpreted correctly (though it still looks bad on
1046 1049 screen, due to the line-oriented nature of ipython).
1047 1050 (MagicCompleter.complete): change behavior so that a TAB key on an
1048 1051 otherwise empty line actually inserts a tab, instead of completing
1049 1052 on the entire global namespace. This makes it easier to use the
1050 1053 TAB key for indentation. After a request by Hans Meine
1051 1054 <hans_meine-AT-gmx.net>
1052 1055 (_prefilter): add support so that typing plain 'exit' or 'quit'
1053 1056 does a sensible thing. Originally I tried to deviate as little as
1054 1057 possible from the default python behavior, but even that one may
1055 1058 change in this direction (thread on python-dev to that effect).
1056 1059 Regardless, ipython should do the right thing even if CPython's
1057 1060 '>>>' prompt doesn't.
1058 1061 (InteractiveShell): removed subclassing code.InteractiveConsole
1059 1062 class. By now we'd overridden just about all of its methods: I've
1060 1063 copied the remaining two over, and now ipython is a standalone
1061 1064 class. This will provide a clearer picture for the chainsaw
1062 1065 branch refactoring.
1063 1066
1064 1067 2005-12-26 Fernando Perez <Fernando.Perez@colorado.edu>
1065 1068
1066 1069 * IPython/ultraTB.py (VerboseTB.text): harden reporting against
1067 1070 failures for objects which break when dir() is called on them.
1068 1071
1069 1072 * IPython/FlexCompleter.py (Completer.__init__): Added support for
1070 1073 distinct local and global namespaces in the completer API. This
1071 1074 change allows us top properly handle completion with distinct
1072 1075 scopes, including in embedded instances (this had never really
1073 1076 worked correctly).
1074 1077
1075 1078 Note: this introduces a change in the constructor for
1076 1079 MagicCompleter, as a new global_namespace parameter is now the
1077 1080 second argument (the others were bumped one position).
1078 1081
1079 1082 2005-12-25 Fernando Perez <Fernando.Perez@colorado.edu>
1080 1083
1081 1084 * IPython/iplib.py (embed_mainloop): fix tab-completion in
1082 1085 embedded instances (which can be done now thanks to Vivian's
1083 1086 frame-handling fixes for pdb).
1084 1087 (InteractiveShell.__init__): Fix namespace handling problem in
1085 1088 embedded instances. We were overwriting __main__ unconditionally,
1086 1089 and this should only be done for 'full' (non-embedded) IPython;
1087 1090 embedded instances must respect the caller's __main__. Thanks to
1088 1091 a bug report by Yaroslav Bulatov <yaroslavvb-AT-gmail.com>
1089 1092
1090 1093 2005-12-24 Fernando Perez <Fernando.Perez@colorado.edu>
1091 1094
1092 1095 * setup.py: added download_url to setup(). This registers the
1093 1096 download address at PyPI, which is not only useful to humans
1094 1097 browsing the site, but is also picked up by setuptools (the Eggs
1095 1098 machinery). Thanks to Ville and R. Kern for the info/discussion
1096 1099 on this.
1097 1100
1098 1101 2005-12-23 Fernando Perez <Fernando.Perez@colorado.edu>
1099 1102
1100 1103 * IPython/Debugger.py (Pdb.__init__): Major pdb mode enhancements.
1101 1104 This brings a lot of nice functionality to the pdb mode, which now
1102 1105 has tab-completion, syntax highlighting, and better stack handling
1103 1106 than before. Many thanks to Vivian De Smedt
1104 1107 <vivian-AT-vdesmedt.com> for the original patches.
1105 1108
1106 1109 2005-12-08 Fernando Perez <Fernando.Perez@colorado.edu>
1107 1110
1108 1111 * IPython/Shell.py (IPShellGTK.mainloop): fix mainloop() calling
1109 1112 sequence to consistently accept the banner argument. The
1110 1113 inconsistency was tripping SAGE, thanks to Gary Zablackis
1111 1114 <gzabl-AT-yahoo.com> for the report.
1112 1115
1113 1116 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
1114 1117
1115 1118 * IPython/iplib.py (InteractiveShell.post_config_initialization):
1116 1119 Fix bug where a naked 'alias' call in the ipythonrc file would
1117 1120 cause a crash. Bug reported by Jorgen Stenarson.
1118 1121
1119 1122 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
1120 1123
1121 1124 * IPython/ipmaker.py (make_IPython): cleanups which should improve
1122 1125 startup time.
1123 1126
1124 1127 * IPython/iplib.py (runcode): my globals 'fix' for embedded
1125 1128 instances had introduced a bug with globals in normal code. Now
1126 1129 it's working in all cases.
1127 1130
1128 1131 * IPython/Magic.py (magic_psearch): Finish wildcard cleanup and
1129 1132 API changes. A new ipytonrc option, 'wildcards_case_sensitive'
1130 1133 has been introduced to set the default case sensitivity of the
1131 1134 searches. Users can still select either mode at runtime on a
1132 1135 per-search basis.
1133 1136
1134 1137 2005-11-13 Fernando Perez <Fernando.Perez@colorado.edu>
1135 1138
1136 1139 * IPython/wildcard.py (NameSpace.__init__): fix resolution of
1137 1140 attributes in wildcard searches for subclasses. Modified version
1138 1141 of a patch by Jorgen.
1139 1142
1140 1143 2005-11-12 Fernando Perez <Fernando.Perez@colorado.edu>
1141 1144
1142 1145 * IPython/iplib.py (embed_mainloop): Fix handling of globals for
1143 1146 embedded instances. I added a user_global_ns attribute to the
1144 1147 InteractiveShell class to handle this.
1145 1148
1146 1149 2005-10-31 Fernando Perez <Fernando.Perez@colorado.edu>
1147 1150
1148 1151 * IPython/Shell.py (IPShellGTK.mainloop): Change timeout_add to
1149 1152 idle_add, which fixes horrible keyboard lag problems under gtk 2.6
1150 1153 (reported under win32, but may happen also in other platforms).
1151 1154 Bug report and fix courtesy of Sean Moore <smm-AT-logic.bm>
1152 1155
1153 1156 2005-10-15 Fernando Perez <Fernando.Perez@colorado.edu>
1154 1157
1155 1158 * IPython/Magic.py (magic_psearch): new support for wildcard
1156 1159 patterns. Now, typing ?a*b will list all names which begin with a
1157 1160 and end in b, for example. The %psearch magic has full
1158 1161 docstrings. Many thanks to JΓΆrgen Stenarson
1159 1162 <jorgen.stenarson-AT-bostream.nu>, author of the patches
1160 1163 implementing this functionality.
1161 1164
1162 1165 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
1163 1166
1164 1167 * Manual: fixed long-standing annoyance of double-dashes (as in
1165 1168 --prefix=~, for example) being stripped in the HTML version. This
1166 1169 is a latex2html bug, but a workaround was provided. Many thanks
1167 1170 to George K. Thiruvathukal <gthiruv-AT-luc.edu> for the detailed
1168 1171 help, and Michael Tobis <mtobis-AT-gmail.com> for getting the ball
1169 1172 rolling. This seemingly small issue had tripped a number of users
1170 1173 when first installing, so I'm glad to see it gone.
1171 1174
1172 1175 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
1173 1176
1174 1177 * IPython/Extensions/numeric_formats.py: fix missing import,
1175 1178 reported by Stephen Walton.
1176 1179
1177 1180 2005-09-24 Fernando Perez <Fernando.Perez@colorado.edu>
1178 1181
1179 1182 * IPython/demo.py: finish demo module, fully documented now.
1180 1183
1181 1184 * IPython/genutils.py (file_read): simple little utility to read a
1182 1185 file and ensure it's closed afterwards.
1183 1186
1184 1187 2005-09-23 Fernando Perez <Fernando.Perez@colorado.edu>
1185 1188
1186 1189 * IPython/demo.py (Demo.__init__): added support for individually
1187 1190 tagging blocks for automatic execution.
1188 1191
1189 1192 * IPython/Magic.py (magic_pycat): new %pycat magic for showing
1190 1193 syntax-highlighted python sources, requested by John.
1191 1194
1192 1195 2005-09-22 Fernando Perez <Fernando.Perez@colorado.edu>
1193 1196
1194 1197 * IPython/demo.py (Demo.again): fix bug where again() blocks after
1195 1198 finishing.
1196 1199
1197 1200 * IPython/genutils.py (shlex_split): moved from Magic to here,
1198 1201 where all 2.2 compatibility stuff lives. I needed it for demo.py.
1199 1202
1200 1203 * IPython/demo.py (Demo.__init__): added support for silent
1201 1204 blocks, improved marks as regexps, docstrings written.
1202 1205 (Demo.__init__): better docstring, added support for sys.argv.
1203 1206
1204 1207 * IPython/genutils.py (marquee): little utility used by the demo
1205 1208 code, handy in general.
1206 1209
1207 1210 * IPython/demo.py (Demo.__init__): new class for interactive
1208 1211 demos. Not documented yet, I just wrote it in a hurry for
1209 1212 scipy'05. Will docstring later.
1210 1213
1211 1214 2005-09-20 Fernando Perez <Fernando.Perez@colorado.edu>
1212 1215
1213 1216 * IPython/Shell.py (sigint_handler): Drastic simplification which
1214 1217 also seems to make Ctrl-C work correctly across threads! This is
1215 1218 so simple, that I can't beleive I'd missed it before. Needs more
1216 1219 testing, though.
1217 1220 (KBINT): Never mind, revert changes. I'm sure I'd tried something
1218 1221 like this before...
1219 1222
1220 1223 * IPython/genutils.py (get_home_dir): add protection against
1221 1224 non-dirs in win32 registry.
1222 1225
1223 1226 * IPython/iplib.py (InteractiveShell.alias_table_validate): fix
1224 1227 bug where dict was mutated while iterating (pysh crash).
1225 1228
1226 1229 2005-09-06 Fernando Perez <Fernando.Perez@colorado.edu>
1227 1230
1228 1231 * IPython/iplib.py (handle_auto): Fix inconsistency arising from
1229 1232 spurious newlines added by this routine. After a report by
1230 1233 F. Mantegazza.
1231 1234
1232 1235 2005-09-05 Fernando Perez <Fernando.Perez@colorado.edu>
1233 1236
1234 1237 * IPython/Shell.py (hijack_gtk): remove pygtk.require("2.0")
1235 1238 calls. These were a leftover from the GTK 1.x days, and can cause
1236 1239 problems in certain cases (after a report by John Hunter).
1237 1240
1238 1241 * IPython/iplib.py (InteractiveShell.__init__): Trap exception if
1239 1242 os.getcwd() fails at init time. Thanks to patch from David Remahl
1240 1243 <chmod007-AT-mac.com>.
1241 1244 (InteractiveShell.__init__): prevent certain special magics from
1242 1245 being shadowed by aliases. Closes
1243 1246 http://www.scipy.net/roundup/ipython/issue41.
1244 1247
1245 1248 2005-08-31 Fernando Perez <Fernando.Perez@colorado.edu>
1246 1249
1247 1250 * IPython/iplib.py (InteractiveShell.complete): Added new
1248 1251 top-level completion method to expose the completion mechanism
1249 1252 beyond readline-based environments.
1250 1253
1251 1254 2005-08-19 Fernando Perez <Fernando.Perez@colorado.edu>
1252 1255
1253 1256 * tools/ipsvnc (svnversion): fix svnversion capture.
1254 1257
1255 1258 * IPython/iplib.py (InteractiveShell.__init__): Add has_readline
1256 1259 attribute to self, which was missing. Before, it was set by a
1257 1260 routine which in certain cases wasn't being called, so the
1258 1261 instance could end up missing the attribute. This caused a crash.
1259 1262 Closes http://www.scipy.net/roundup/ipython/issue40.
1260 1263
1261 1264 2005-08-16 Fernando Perez <fperez@colorado.edu>
1262 1265
1263 1266 * IPython/ultraTB.py (VerboseTB.text): don't crash if object
1264 1267 contains non-string attribute. Closes
1265 1268 http://www.scipy.net/roundup/ipython/issue38.
1266 1269
1267 1270 2005-08-14 Fernando Perez <fperez@colorado.edu>
1268 1271
1269 1272 * tools/ipsvnc: Minor improvements, to add changeset info.
1270 1273
1271 1274 2005-08-12 Fernando Perez <fperez@colorado.edu>
1272 1275
1273 1276 * IPython/iplib.py (runsource): remove self.code_to_run_src
1274 1277 attribute. I realized this is nothing more than
1275 1278 '\n'.join(self.buffer), and having the same data in two different
1276 1279 places is just asking for synchronization bugs. This may impact
1277 1280 people who have custom exception handlers, so I need to warn
1278 1281 ipython-dev about it (F. Mantegazza may use them).
1279 1282
1280 1283 2005-07-29 Fernando Perez <Fernando.Perez@colorado.edu>
1281 1284
1282 1285 * IPython/genutils.py: fix 2.2 compatibility (generators)
1283 1286
1284 1287 2005-07-18 Fernando Perez <fperez@colorado.edu>
1285 1288
1286 1289 * IPython/genutils.py (get_home_dir): fix to help users with
1287 1290 invalid $HOME under win32.
1288 1291
1289 1292 2005-07-17 Fernando Perez <fperez@colorado.edu>
1290 1293
1291 1294 * IPython/Prompts.py (str_safe): Make unicode-safe. Also remove
1292 1295 some old hacks and clean up a bit other routines; code should be
1293 1296 simpler and a bit faster.
1294 1297
1295 1298 * IPython/iplib.py (interact): removed some last-resort attempts
1296 1299 to survive broken stdout/stderr. That code was only making it
1297 1300 harder to abstract out the i/o (necessary for gui integration),
1298 1301 and the crashes it could prevent were extremely rare in practice
1299 1302 (besides being fully user-induced in a pretty violent manner).
1300 1303
1301 1304 * IPython/genutils.py (IOStream.__init__): Simplify the i/o stuff.
1302 1305 Nothing major yet, but the code is simpler to read; this should
1303 1306 make it easier to do more serious modifications in the future.
1304 1307
1305 1308 * IPython/Extensions/InterpreterExec.py: Fix auto-quoting in pysh,
1306 1309 which broke in .15 (thanks to a report by Ville).
1307 1310
1308 1311 * IPython/Itpl.py (Itpl.__init__): add unicode support (it may not
1309 1312 be quite correct, I know next to nothing about unicode). This
1310 1313 will allow unicode strings to be used in prompts, amongst other
1311 1314 cases. It also will prevent ipython from crashing when unicode
1312 1315 shows up unexpectedly in many places. If ascii encoding fails, we
1313 1316 assume utf_8. Currently the encoding is not a user-visible
1314 1317 setting, though it could be made so if there is demand for it.
1315 1318
1316 1319 * IPython/ipmaker.py (make_IPython): remove old 2.1-specific hack.
1317 1320
1318 1321 * IPython/Struct.py (Struct.merge): switch keys() to iterator.
1319 1322
1320 1323 * IPython/background_jobs.py: moved 2.2 compatibility to genutils.
1321 1324
1322 1325 * IPython/genutils.py: Add 2.2 compatibility here, so all other
1323 1326 code can work transparently for 2.2/2.3.
1324 1327
1325 1328 2005-07-16 Fernando Perez <fperez@colorado.edu>
1326 1329
1327 1330 * IPython/ultraTB.py (ExceptionColors): Make a global variable
1328 1331 out of the color scheme table used for coloring exception
1329 1332 tracebacks. This allows user code to add new schemes at runtime.
1330 1333 This is a minimally modified version of the patch at
1331 1334 http://www.scipy.net/roundup/ipython/issue35, many thanks to pabw
1332 1335 for the contribution.
1333 1336
1334 1337 * IPython/FlexCompleter.py (Completer.attr_matches): Add a
1335 1338 slightly modified version of the patch in
1336 1339 http://www.scipy.net/roundup/ipython/issue34, which also allows me
1337 1340 to remove the previous try/except solution (which was costlier).
1338 1341 Thanks to Gaetan Lehmann <gaetan.lehmann-AT-jouy.inra.fr> for the fix.
1339 1342
1340 1343 2005-06-08 Fernando Perez <fperez@colorado.edu>
1341 1344
1342 1345 * IPython/iplib.py (write/write_err): Add methods to abstract all
1343 1346 I/O a bit more.
1344 1347
1345 1348 * IPython/Shell.py (IPShellGTK.mainloop): Fix GTK deprecation
1346 1349 warning, reported by Aric Hagberg, fix by JD Hunter.
1347 1350
1348 1351 2005-06-02 *** Released version 0.6.15
1349 1352
1350 1353 2005-06-01 Fernando Perez <fperez@colorado.edu>
1351 1354
1352 1355 * IPython/iplib.py (MagicCompleter.file_matches): Fix
1353 1356 tab-completion of filenames within open-quoted strings. Note that
1354 1357 this requires that in ~/.ipython/ipythonrc, users change the
1355 1358 readline delimiters configuration to read:
1356 1359
1357 1360 readline_remove_delims -/~
1358 1361
1359 1362
1360 1363 2005-05-31 *** Released version 0.6.14
1361 1364
1362 1365 2005-05-29 Fernando Perez <fperez@colorado.edu>
1363 1366
1364 1367 * IPython/ultraTB.py (VerboseTB.text): Fix crash for tracebacks
1365 1368 with files not on the filesystem. Reported by Eliyahu Sandler
1366 1369 <eli@gondolin.net>
1367 1370
1368 1371 2005-05-22 Fernando Perez <fperez@colorado.edu>
1369 1372
1370 1373 * IPython/iplib.py: Fix a few crashes in the --upgrade option.
1371 1374 After an initial report by LUK ShunTim <shuntim.luk@polyu.edu.hk>.
1372 1375
1373 1376 2005-05-19 Fernando Perez <fperez@colorado.edu>
1374 1377
1375 1378 * IPython/iplib.py (safe_execfile): close a file which could be
1376 1379 left open (causing problems in win32, which locks open files).
1377 1380 Thanks to a bug report by D Brown <dbrown2@yahoo.com>.
1378 1381
1379 1382 2005-05-18 Fernando Perez <fperez@colorado.edu>
1380 1383
1381 1384 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): pass all
1382 1385 keyword arguments correctly to safe_execfile().
1383 1386
1384 1387 2005-05-13 Fernando Perez <fperez@colorado.edu>
1385 1388
1386 1389 * ipython.1: Added info about Qt to manpage, and threads warning
1387 1390 to usage page (invoked with --help).
1388 1391
1389 1392 * IPython/iplib.py (MagicCompleter.python_func_kw_matches): Added
1390 1393 new matcher (it goes at the end of the priority list) to do
1391 1394 tab-completion on named function arguments. Submitted by George
1392 1395 Sakkis <gsakkis-AT-eden.rutgers.edu>. See the thread at
1393 1396 http://www.scipy.net/pipermail/ipython-dev/2005-April/000436.html
1394 1397 for more details.
1395 1398
1396 1399 * IPython/Magic.py (magic_run): Added new -e flag to ignore
1397 1400 SystemExit exceptions in the script being run. Thanks to a report
1398 1401 by danny shevitz <danny_shevitz-AT-yahoo.com>, about this
1399 1402 producing very annoying behavior when running unit tests.
1400 1403
1401 1404 2005-05-12 Fernando Perez <fperez@colorado.edu>
1402 1405
1403 1406 * IPython/iplib.py (handle_auto): fixed auto-quoting and parens,
1404 1407 which I'd broken (again) due to a changed regexp. In the process,
1405 1408 added ';' as an escape to auto-quote the whole line without
1406 1409 splitting its arguments. Thanks to a report by Jerry McRae
1407 1410 <qrs0xyc02-AT-sneakemail.com>.
1408 1411
1409 1412 * IPython/ultraTB.py (VerboseTB.text): protect against rare but
1410 1413 possible crashes caused by a TokenError. Reported by Ed Schofield
1411 1414 <schofield-AT-ftw.at>.
1412 1415
1413 1416 2005-05-06 Fernando Perez <fperez@colorado.edu>
1414 1417
1415 1418 * IPython/Shell.py (hijack_wx): Fix to work with WX v.2.6.
1416 1419
1417 1420 2005-04-29 Fernando Perez <fperez@colorado.edu>
1418 1421
1419 1422 * IPython/Shell.py (IPShellQt): Thanks to Denis Rivière
1420 1423 <nudz-AT-free.fr>, Yann Cointepas <yann-AT-sapetnioc.org> and Benjamin
1421 1424 Thyreau <Benji2-AT-decideur.info>, we now have a -qthread option
1422 1425 which provides support for Qt interactive usage (similar to the
1423 1426 existing one for WX and GTK). This had been often requested.
1424 1427
1425 1428 2005-04-14 *** Released version 0.6.13
1426 1429
1427 1430 2005-04-08 Fernando Perez <fperez@colorado.edu>
1428 1431
1429 1432 * IPython/Magic.py (Magic._ofind): remove docstring evaluation
1430 1433 from _ofind, which gets called on almost every input line. Now,
1431 1434 we only try to get docstrings if they are actually going to be
1432 1435 used (the overhead of fetching unnecessary docstrings can be
1433 1436 noticeable for certain objects, such as Pyro proxies).
1434 1437
1435 1438 * IPython/iplib.py (MagicCompleter.python_matches): Change the API
1436 1439 for completers. For some reason I had been passing them the state
1437 1440 variable, which completers never actually need, and was in
1438 1441 conflict with the rlcompleter API. Custom completers ONLY need to
1439 1442 take the text parameter.
1440 1443
1441 1444 * IPython/Extensions/InterpreterExec.py: Fix regexp so that magics
1442 1445 work correctly in pysh. I've also moved all the logic which used
1443 1446 to be in pysh.py here, which will prevent problems with future
1444 1447 upgrades. However, this time I must warn users to update their
1445 1448 pysh profile to include the line
1446 1449
1447 1450 import_all IPython.Extensions.InterpreterExec
1448 1451
1449 1452 because otherwise things won't work for them. They MUST also
1450 1453 delete pysh.py and the line
1451 1454
1452 1455 execfile pysh.py
1453 1456
1454 1457 from their ipythonrc-pysh.
1455 1458
1456 1459 * IPython/FlexCompleter.py (Completer.attr_matches): Make more
1457 1460 robust in the face of objects whose dir() returns non-strings
1458 1461 (which it shouldn't, but some broken libs like ITK do). Thanks to
1459 1462 a patch by John Hunter (implemented differently, though). Also
1460 1463 minor improvements by using .extend instead of + on lists.
1461 1464
1462 1465 * pysh.py:
1463 1466
1464 1467 2005-04-06 Fernando Perez <fperez@colorado.edu>
1465 1468
1466 1469 * IPython/ipmaker.py (make_IPython): Make multi_line_specials on
1467 1470 by default, so that all users benefit from it. Those who don't
1468 1471 want it can still turn it off.
1469 1472
1470 1473 * IPython/UserConfig/ipythonrc: Add multi_line_specials to the
1471 1474 config file, I'd forgotten about this, so users were getting it
1472 1475 off by default.
1473 1476
1474 1477 * IPython/iplib.py (ipmagic): big overhaul of the magic system for
1475 1478 consistency. Now magics can be called in multiline statements,
1476 1479 and python variables can be expanded in magic calls via $var.
1477 1480 This makes the magic system behave just like aliases or !system
1478 1481 calls.
1479 1482
1480 1483 2005-03-28 Fernando Perez <fperez@colorado.edu>
1481 1484
1482 1485 * IPython/iplib.py (handle_auto): cleanup to use %s instead of
1483 1486 expensive string additions for building command. Add support for
1484 1487 trailing ';' when autocall is used.
1485 1488
1486 1489 2005-03-26 Fernando Perez <fperez@colorado.edu>
1487 1490
1488 1491 * ipython.el: Fix http://www.scipy.net/roundup/ipython/issue31.
1489 1492 Bugfix by A. Schmolck, the ipython.el maintainer. Also make
1490 1493 ipython.el robust against prompts with any number of spaces
1491 1494 (including 0) after the ':' character.
1492 1495
1493 1496 * IPython/Prompts.py (Prompt2.set_p_str): Fix spurious space in
1494 1497 continuation prompt, which misled users to think the line was
1495 1498 already indented. Closes debian Bug#300847, reported to me by
1496 1499 Norbert Tretkowski <tretkowski-AT-inittab.de>.
1497 1500
1498 1501 2005-03-23 Fernando Perez <fperez@colorado.edu>
1499 1502
1500 1503 * IPython/Prompts.py (Prompt1.__str__): Make sure that prompts are
1501 1504 properly aligned if they have embedded newlines.
1502 1505
1503 1506 * IPython/iplib.py (runlines): Add a public method to expose
1504 1507 IPython's code execution machinery, so that users can run strings
1505 1508 as if they had been typed at the prompt interactively.
1506 1509 (InteractiveShell.__init__): Added getoutput() to the __IPYTHON__
1507 1510 methods which can call the system shell, but with python variable
1508 1511 expansion. The three such methods are: __IPYTHON__.system,
1509 1512 .getoutput and .getoutputerror. These need to be documented in a
1510 1513 'public API' section (to be written) of the manual.
1511 1514
1512 1515 2005-03-20 Fernando Perez <fperez@colorado.edu>
1513 1516
1514 1517 * IPython/iplib.py (InteractiveShell.set_custom_exc): new system
1515 1518 for custom exception handling. This is quite powerful, and it
1516 1519 allows for user-installable exception handlers which can trap
1517 1520 custom exceptions at runtime and treat them separately from
1518 1521 IPython's default mechanisms. At the request of FrΓ©dΓ©ric
1519 1522 Mantegazza <mantegazza-AT-ill.fr>.
1520 1523 (InteractiveShell.set_custom_completer): public API function to
1521 1524 add new completers at runtime.
1522 1525
1523 1526 2005-03-19 Fernando Perez <fperez@colorado.edu>
1524 1527
1525 1528 * IPython/OInspect.py (getdoc): Add a call to obj.getdoc(), to
1526 1529 allow objects which provide their docstrings via non-standard
1527 1530 mechanisms (like Pyro proxies) to still be inspected by ipython's
1528 1531 ? system.
1529 1532
1530 1533 * IPython/iplib.py (InteractiveShell.__init__): back off the _o/_e
1531 1534 automatic capture system. I tried quite hard to make it work
1532 1535 reliably, and simply failed. I tried many combinations with the
1533 1536 subprocess module, but eventually nothing worked in all needed
1534 1537 cases (not blocking stdin for the child, duplicating stdout
1535 1538 without blocking, etc). The new %sc/%sx still do capture to these
1536 1539 magical list/string objects which make shell use much more
1537 1540 conveninent, so not all is lost.
1538 1541
1539 1542 XXX - FIX MANUAL for the change above!
1540 1543
1541 1544 (runsource): I copied code.py's runsource() into ipython to modify
1542 1545 it a bit. Now the code object and source to be executed are
1543 1546 stored in ipython. This makes this info accessible to third-party
1544 1547 tools, like custom exception handlers. After a request by FrΓ©dΓ©ric
1545 1548 Mantegazza <mantegazza-AT-ill.fr>.
1546 1549
1547 1550 * IPython/UserConfig/ipythonrc: Add up/down arrow keys to
1548 1551 history-search via readline (like C-p/C-n). I'd wanted this for a
1549 1552 long time, but only recently found out how to do it. For users
1550 1553 who already have their ipythonrc files made and want this, just
1551 1554 add:
1552 1555
1553 1556 readline_parse_and_bind "\e[A": history-search-backward
1554 1557 readline_parse_and_bind "\e[B": history-search-forward
1555 1558
1556 1559 2005-03-18 Fernando Perez <fperez@colorado.edu>
1557 1560
1558 1561 * IPython/Magic.py (magic_sc): %sc and %sx now use the fancy
1559 1562 LSString and SList classes which allow transparent conversions
1560 1563 between list mode and whitespace-separated string.
1561 1564 (magic_r): Fix recursion problem in %r.
1562 1565
1563 1566 * IPython/genutils.py (LSString): New class to be used for
1564 1567 automatic storage of the results of all alias/system calls in _o
1565 1568 and _e (stdout/err). These provide a .l/.list attribute which
1566 1569 does automatic splitting on newlines. This means that for most
1567 1570 uses, you'll never need to do capturing of output with %sc/%sx
1568 1571 anymore, since ipython keeps this always done for you. Note that
1569 1572 only the LAST results are stored, the _o/e variables are
1570 1573 overwritten on each call. If you need to save their contents
1571 1574 further, simply bind them to any other name.
1572 1575
1573 1576 2005-03-17 Fernando Perez <fperez@colorado.edu>
1574 1577
1575 1578 * IPython/Prompts.py (BasePrompt.cwd_filt): a few more fixes for
1576 1579 prompt namespace handling.
1577 1580
1578 1581 2005-03-16 Fernando Perez <fperez@colorado.edu>
1579 1582
1580 1583 * IPython/Prompts.py (CachedOutput.__init__): Fix default and
1581 1584 classic prompts to be '>>> ' (final space was missing, and it
1582 1585 trips the emacs python mode).
1583 1586 (BasePrompt.__str__): Added safe support for dynamic prompt
1584 1587 strings. Now you can set your prompt string to be '$x', and the
1585 1588 value of x will be printed from your interactive namespace. The
1586 1589 interpolation syntax includes the full Itpl support, so
1587 1590 ${foo()+x+bar()} is a valid prompt string now, and the function
1588 1591 calls will be made at runtime.
1589 1592
1590 1593 2005-03-15 Fernando Perez <fperez@colorado.edu>
1591 1594
1592 1595 * IPython/Magic.py (magic_history): renamed %hist to %history, to
1593 1596 avoid name clashes in pylab. %hist still works, it just forwards
1594 1597 the call to %history.
1595 1598
1596 1599 2005-03-02 *** Released version 0.6.12
1597 1600
1598 1601 2005-03-02 Fernando Perez <fperez@colorado.edu>
1599 1602
1600 1603 * IPython/iplib.py (handle_magic): log magic calls properly as
1601 1604 ipmagic() function calls.
1602 1605
1603 1606 * IPython/Magic.py (magic_time): Improved %time to support
1604 1607 statements and provide wall-clock as well as CPU time.
1605 1608
1606 1609 2005-02-27 Fernando Perez <fperez@colorado.edu>
1607 1610
1608 1611 * IPython/hooks.py: New hooks module, to expose user-modifiable
1609 1612 IPython functionality in a clean manner. For now only the editor
1610 1613 hook is actually written, and other thigns which I intend to turn
1611 1614 into proper hooks aren't yet there. The display and prefilter
1612 1615 stuff, for example, should be hooks. But at least now the
1613 1616 framework is in place, and the rest can be moved here with more
1614 1617 time later. IPython had had a .hooks variable for a long time for
1615 1618 this purpose, but I'd never actually used it for anything.
1616 1619
1617 1620 2005-02-26 Fernando Perez <fperez@colorado.edu>
1618 1621
1619 1622 * IPython/ipmaker.py (make_IPython): make the default ipython
1620 1623 directory be called _ipython under win32, to follow more the
1621 1624 naming peculiarities of that platform (where buggy software like
1622 1625 Visual Sourcesafe breaks with .named directories). Reported by
1623 1626 Ville Vainio.
1624 1627
1625 1628 2005-02-23 Fernando Perez <fperez@colorado.edu>
1626 1629
1627 1630 * IPython/iplib.py (InteractiveShell.__init__): removed a few
1628 1631 auto_aliases for win32 which were causing problems. Users can
1629 1632 define the ones they personally like.
1630 1633
1631 1634 2005-02-21 Fernando Perez <fperez@colorado.edu>
1632 1635
1633 1636 * IPython/Magic.py (magic_time): new magic to time execution of
1634 1637 expressions. After a request by Charles Moad <cmoad-AT-indiana.edu>.
1635 1638
1636 1639 2005-02-19 Fernando Perez <fperez@colorado.edu>
1637 1640
1638 1641 * IPython/ConfigLoader.py (ConfigLoader.load): Allow empty strings
1639 1642 into keys (for prompts, for example).
1640 1643
1641 1644 * IPython/Prompts.py (BasePrompt.set_p_str): Fix to allow empty
1642 1645 prompts in case users want them. This introduces a small behavior
1643 1646 change: ipython does not automatically add a space to all prompts
1644 1647 anymore. To get the old prompts with a space, users should add it
1645 1648 manually to their ipythonrc file, so for example prompt_in1 should
1646 1649 now read 'In [\#]: ' instead of 'In [\#]:'.
1647 1650 (BasePrompt.__init__): New option prompts_pad_left (only in rc
1648 1651 file) to control left-padding of secondary prompts.
1649 1652
1650 1653 * IPython/Magic.py (Magic.profile_missing_notice): Don't crash if
1651 1654 the profiler can't be imported. Fix for Debian, which removed
1652 1655 profile.py because of License issues. I applied a slightly
1653 1656 modified version of the original Debian patch at
1654 1657 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=294500.
1655 1658
1656 1659 2005-02-17 Fernando Perez <fperez@colorado.edu>
1657 1660
1658 1661 * IPython/genutils.py (native_line_ends): Fix bug which would
1659 1662 cause improper line-ends under win32 b/c I was not opening files
1660 1663 in binary mode. Bug report and fix thanks to Ville.
1661 1664
1662 1665 * IPython/iplib.py (handle_auto): Fix bug which I introduced when
1663 1666 trying to catch spurious foo[1] autocalls. My fix actually broke
1664 1667 ',/' autoquote/call with explicit escape (bad regexp).
1665 1668
1666 1669 2005-02-15 *** Released version 0.6.11
1667 1670
1668 1671 2005-02-14 Fernando Perez <fperez@colorado.edu>
1669 1672
1670 1673 * IPython/background_jobs.py: New background job management
1671 1674 subsystem. This is implemented via a new set of classes, and
1672 1675 IPython now provides a builtin 'jobs' object for background job
1673 1676 execution. A convenience %bg magic serves as a lightweight
1674 1677 frontend for starting the more common type of calls. This was
1675 1678 inspired by discussions with B. Granger and the BackgroundCommand
1676 1679 class described in the book Python Scripting for Computational
1677 1680 Science, by H. P. Langtangen: http://folk.uio.no/hpl/scripting
1678 1681 (although ultimately no code from this text was used, as IPython's
1679 1682 system is a separate implementation).
1680 1683
1681 1684 * IPython/iplib.py (MagicCompleter.python_matches): add new option
1682 1685 to control the completion of single/double underscore names
1683 1686 separately. As documented in the example ipytonrc file, the
1684 1687 readline_omit__names variable can now be set to 2, to omit even
1685 1688 single underscore names. Thanks to a patch by Brian Wong
1686 1689 <BrianWong-AT-AirgoNetworks.Com>.
1687 1690 (InteractiveShell.__init__): Fix bug which would cause foo[1] to
1688 1691 be autocalled as foo([1]) if foo were callable. A problem for
1689 1692 things which are both callable and implement __getitem__.
1690 1693 (init_readline): Fix autoindentation for win32. Thanks to a patch
1691 1694 by Vivian De Smedt <vivian-AT-vdesmedt.com>.
1692 1695
1693 1696 2005-02-12 Fernando Perez <fperez@colorado.edu>
1694 1697
1695 1698 * IPython/ipmaker.py (make_IPython): Disabled the stout traps
1696 1699 which I had written long ago to sort out user error messages which
1697 1700 may occur during startup. This seemed like a good idea initially,
1698 1701 but it has proven a disaster in retrospect. I don't want to
1699 1702 change much code for now, so my fix is to set the internal 'debug'
1700 1703 flag to true everywhere, whose only job was precisely to control
1701 1704 this subsystem. This closes issue 28 (as well as avoiding all
1702 1705 sorts of strange hangups which occur from time to time).
1703 1706
1704 1707 2005-02-07 Fernando Perez <fperez@colorado.edu>
1705 1708
1706 1709 * IPython/Magic.py (magic_edit): Fix 'ed -p' not working when the
1707 1710 previous call produced a syntax error.
1708 1711
1709 1712 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1710 1713 classes without constructor.
1711 1714
1712 1715 2005-02-06 Fernando Perez <fperez@colorado.edu>
1713 1716
1714 1717 * IPython/iplib.py (MagicCompleter.complete): Extend the list of
1715 1718 completions with the results of each matcher, so we return results
1716 1719 to the user from all namespaces. This breaks with ipython
1717 1720 tradition, but I think it's a nicer behavior. Now you get all
1718 1721 possible completions listed, from all possible namespaces (python,
1719 1722 filesystem, magics...) After a request by John Hunter
1720 1723 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1721 1724
1722 1725 2005-02-05 Fernando Perez <fperez@colorado.edu>
1723 1726
1724 1727 * IPython/Magic.py (magic_prun): Fix bug where prun would fail if
1725 1728 the call had quote characters in it (the quotes were stripped).
1726 1729
1727 1730 2005-01-31 Fernando Perez <fperez@colorado.edu>
1728 1731
1729 1732 * IPython/iplib.py (InteractiveShell.__init__): reduce reliance on
1730 1733 Itpl.itpl() to make the code more robust against psyco
1731 1734 optimizations.
1732 1735
1733 1736 * IPython/Itpl.py (Itpl.__str__): Use a _getframe() call instead
1734 1737 of causing an exception. Quicker, cleaner.
1735 1738
1736 1739 2005-01-28 Fernando Perez <fperez@colorado.edu>
1737 1740
1738 1741 * scripts/ipython_win_post_install.py (install): hardcode
1739 1742 sys.prefix+'python.exe' as the executable path. It turns out that
1740 1743 during the post-installation run, sys.executable resolves to the
1741 1744 name of the binary installer! I should report this as a distutils
1742 1745 bug, I think. I updated the .10 release with this tiny fix, to
1743 1746 avoid annoying the lists further.
1744 1747
1745 1748 2005-01-27 *** Released version 0.6.10
1746 1749
1747 1750 2005-01-27 Fernando Perez <fperez@colorado.edu>
1748 1751
1749 1752 * IPython/numutils.py (norm): Added 'inf' as optional name for
1750 1753 L-infinity norm, included references to mathworld.com for vector
1751 1754 norm definitions.
1752 1755 (amin/amax): added amin/amax for array min/max. Similar to what
1753 1756 pylab ships with after the recent reorganization of names.
1754 1757 (spike/spike_odd): removed deprecated spike/spike_odd functions.
1755 1758
1756 1759 * ipython.el: committed Alex's recent fixes and improvements.
1757 1760 Tested with python-mode from CVS, and it looks excellent. Since
1758 1761 python-mode hasn't released anything in a while, I'm temporarily
1759 1762 putting a copy of today's CVS (v 4.70) of python-mode in:
1760 1763 http://ipython.scipy.org/tmp/python-mode.el
1761 1764
1762 1765 * scripts/ipython_win_post_install.py (install): Win32 fix to use
1763 1766 sys.executable for the executable name, instead of assuming it's
1764 1767 called 'python.exe' (the post-installer would have produced broken
1765 1768 setups on systems with a differently named python binary).
1766 1769
1767 1770 * IPython/PyColorize.py (Parser.__call__): change explicit '\n'
1768 1771 references to os.linesep, to make the code more
1769 1772 platform-independent. This is also part of the win32 coloring
1770 1773 fixes.
1771 1774
1772 1775 * IPython/genutils.py (page_dumb): Remove attempts to chop long
1773 1776 lines, which actually cause coloring bugs because the length of
1774 1777 the line is very difficult to correctly compute with embedded
1775 1778 escapes. This was the source of all the coloring problems under
1776 1779 Win32. I think that _finally_, Win32 users have a properly
1777 1780 working ipython in all respects. This would never have happened
1778 1781 if not for Gary Bishop and Viktor Ransmayr's great help and work.
1779 1782
1780 1783 2005-01-26 *** Released version 0.6.9
1781 1784
1782 1785 2005-01-25 Fernando Perez <fperez@colorado.edu>
1783 1786
1784 1787 * setup.py: finally, we have a true Windows installer, thanks to
1785 1788 the excellent work of Viktor Ransmayr
1786 1789 <viktor.ransmayr-AT-t-online.de>. The docs have been updated for
1787 1790 Windows users. The setup routine is quite a bit cleaner thanks to
1788 1791 this, and the post-install script uses the proper functions to
1789 1792 allow a clean de-installation using the standard Windows Control
1790 1793 Panel.
1791 1794
1792 1795 * IPython/genutils.py (get_home_dir): changed to use the $HOME
1793 1796 environment variable under all OSes (including win32) if
1794 1797 available. This will give consistency to win32 users who have set
1795 1798 this variable for any reason. If os.environ['HOME'] fails, the
1796 1799 previous policy of using HOMEDRIVE\HOMEPATH kicks in.
1797 1800
1798 1801 2005-01-24 Fernando Perez <fperez@colorado.edu>
1799 1802
1800 1803 * IPython/numutils.py (empty_like): add empty_like(), similar to
1801 1804 zeros_like() but taking advantage of the new empty() Numeric routine.
1802 1805
1803 1806 2005-01-23 *** Released version 0.6.8
1804 1807
1805 1808 2005-01-22 Fernando Perez <fperez@colorado.edu>
1806 1809
1807 1810 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): I removed the
1808 1811 automatic show() calls. After discussing things with JDH, it
1809 1812 turns out there are too many corner cases where this can go wrong.
1810 1813 It's best not to try to be 'too smart', and simply have ipython
1811 1814 reproduce as much as possible the default behavior of a normal
1812 1815 python shell.
1813 1816
1814 1817 * IPython/iplib.py (InteractiveShell.__init__): Modified the
1815 1818 line-splitting regexp and _prefilter() to avoid calling getattr()
1816 1819 on assignments. This closes
1817 1820 http://www.scipy.net/roundup/ipython/issue24. Note that Python's
1818 1821 readline uses getattr(), so a simple <TAB> keypress is still
1819 1822 enough to trigger getattr() calls on an object.
1820 1823
1821 1824 2005-01-21 Fernando Perez <fperez@colorado.edu>
1822 1825
1823 1826 * IPython/Shell.py (MatplotlibShellBase.magic_run): Fix the %run
1824 1827 docstring under pylab so it doesn't mask the original.
1825 1828
1826 1829 2005-01-21 *** Released version 0.6.7
1827 1830
1828 1831 2005-01-21 Fernando Perez <fperez@colorado.edu>
1829 1832
1830 1833 * IPython/Shell.py (MTInteractiveShell.runcode): Trap a crash with
1831 1834 signal handling for win32 users in multithreaded mode.
1832 1835
1833 1836 2005-01-17 Fernando Perez <fperez@colorado.edu>
1834 1837
1835 1838 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1836 1839 instances with no __init__. After a crash report by Norbert Nemec
1837 1840 <Norbert-AT-nemec-online.de>.
1838 1841
1839 1842 2005-01-14 Fernando Perez <fperez@colorado.edu>
1840 1843
1841 1844 * IPython/ultraTB.py (VerboseTB.text): Fix bug in reporting of
1842 1845 names for verbose exceptions, when multiple dotted names and the
1843 1846 'parent' object were present on the same line.
1844 1847
1845 1848 2005-01-11 Fernando Perez <fperez@colorado.edu>
1846 1849
1847 1850 * IPython/genutils.py (flag_calls): new utility to trap and flag
1848 1851 calls in functions. I need it to clean up matplotlib support.
1849 1852 Also removed some deprecated code in genutils.
1850 1853
1851 1854 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): small fix so
1852 1855 that matplotlib scripts called with %run, which don't call show()
1853 1856 themselves, still have their plotting windows open.
1854 1857
1855 1858 2005-01-05 Fernando Perez <fperez@colorado.edu>
1856 1859
1857 1860 * IPython/Shell.py (IPShellGTK.__init__): Patch by Andrew Straw
1858 1861 <astraw-AT-caltech.edu>, to fix gtk deprecation warnings.
1859 1862
1860 1863 2004-12-19 Fernando Perez <fperez@colorado.edu>
1861 1864
1862 1865 * IPython/Shell.py (MTInteractiveShell.runcode): Get rid of
1863 1866 parent_runcode, which was an eyesore. The same result can be
1864 1867 obtained with Python's regular superclass mechanisms.
1865 1868
1866 1869 2004-12-17 Fernando Perez <fperez@colorado.edu>
1867 1870
1868 1871 * IPython/Magic.py (Magic.magic_sc): Fix quote stripping problem
1869 1872 reported by Prabhu.
1870 1873 (Magic.magic_sx): direct all errors to Term.cerr (defaults to
1871 1874 sys.stderr) instead of explicitly calling sys.stderr. This helps
1872 1875 maintain our I/O abstractions clean, for future GUI embeddings.
1873 1876
1874 1877 * IPython/genutils.py (info): added new utility for sys.stderr
1875 1878 unified info message handling (thin wrapper around warn()).
1876 1879
1877 1880 * IPython/ultraTB.py (VerboseTB.text): Fix misreported global
1878 1881 composite (dotted) names on verbose exceptions.
1879 1882 (VerboseTB.nullrepr): harden against another kind of errors which
1880 1883 Python's inspect module can trigger, and which were crashing
1881 1884 IPython. Thanks to a report by Marco Lombardi
1882 1885 <mlombard-AT-ma010192.hq.eso.org>.
1883 1886
1884 1887 2004-12-13 *** Released version 0.6.6
1885 1888
1886 1889 2004-12-12 Fernando Perez <fperez@colorado.edu>
1887 1890
1888 1891 * IPython/Shell.py (IPShellGTK.mainloop): catch RuntimeErrors
1889 1892 generated by pygtk upon initialization if it was built without
1890 1893 threads (for matplotlib users). After a crash reported by
1891 1894 Leguijt, Jaap J SIEP-EPT-RES <Jaap.Leguijt-AT-shell.com>.
1892 1895
1893 1896 * IPython/ipmaker.py (make_IPython): fix small bug in the
1894 1897 import_some parameter for multiple imports.
1895 1898
1896 1899 * IPython/iplib.py (ipmagic): simplified the interface of
1897 1900 ipmagic() to take a single string argument, just as it would be
1898 1901 typed at the IPython cmd line.
1899 1902 (ipalias): Added new ipalias() with an interface identical to
1900 1903 ipmagic(). This completes exposing a pure python interface to the
1901 1904 alias and magic system, which can be used in loops or more complex
1902 1905 code where IPython's automatic line mangling is not active.
1903 1906
1904 1907 * IPython/genutils.py (timing): changed interface of timing to
1905 1908 simply run code once, which is the most common case. timings()
1906 1909 remains unchanged, for the cases where you want multiple runs.
1907 1910
1908 1911 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix a
1909 1912 bug where Python2.2 crashes with exec'ing code which does not end
1910 1913 in a single newline. Python 2.3 is OK, so I hadn't noticed this
1911 1914 before.
1912 1915
1913 1916 2004-12-10 Fernando Perez <fperez@colorado.edu>
1914 1917
1915 1918 * IPython/Magic.py (Magic.magic_prun): changed name of option from
1916 1919 -t to -T, to accomodate the new -t flag in %run (the %run and
1917 1920 %prun options are kind of intermixed, and it's not easy to change
1918 1921 this with the limitations of python's getopt).
1919 1922
1920 1923 * IPython/Magic.py (Magic.magic_run): Added new -t option to time
1921 1924 the execution of scripts. It's not as fine-tuned as timeit.py,
1922 1925 but it works from inside ipython (and under 2.2, which lacks
1923 1926 timeit.py). Optionally a number of runs > 1 can be given for
1924 1927 timing very short-running code.
1925 1928
1926 1929 * IPython/genutils.py (uniq_stable): new routine which returns a
1927 1930 list of unique elements in any iterable, but in stable order of
1928 1931 appearance. I needed this for the ultraTB fixes, and it's a handy
1929 1932 utility.
1930 1933
1931 1934 * IPython/ultraTB.py (VerboseTB.text): Fix proper reporting of
1932 1935 dotted names in Verbose exceptions. This had been broken since
1933 1936 the very start, now x.y will properly be printed in a Verbose
1934 1937 traceback, instead of x being shown and y appearing always as an
1935 1938 'undefined global'. Getting this to work was a bit tricky,
1936 1939 because by default python tokenizers are stateless. Saved by
1937 1940 python's ability to easily add a bit of state to an arbitrary
1938 1941 function (without needing to build a full-blown callable object).
1939 1942
1940 1943 Also big cleanup of this code, which had horrendous runtime
1941 1944 lookups of zillions of attributes for colorization. Moved all
1942 1945 this code into a few templates, which make it cleaner and quicker.
1943 1946
1944 1947 Printout quality was also improved for Verbose exceptions: one
1945 1948 variable per line, and memory addresses are printed (this can be
1946 1949 quite handy in nasty debugging situations, which is what Verbose
1947 1950 is for).
1948 1951
1949 1952 * IPython/ipmaker.py (make_IPython): Do NOT execute files named in
1950 1953 the command line as scripts to be loaded by embedded instances.
1951 1954 Doing so has the potential for an infinite recursion if there are
1952 1955 exceptions thrown in the process. This fixes a strange crash
1953 1956 reported by Philippe MULLER <muller-AT-irit.fr>.
1954 1957
1955 1958 2004-12-09 Fernando Perez <fperez@colorado.edu>
1956 1959
1957 1960 * IPython/Shell.py (MatplotlibShellBase.use): Change pylab support
1958 1961 to reflect new names in matplotlib, which now expose the
1959 1962 matlab-compatible interface via a pylab module instead of the
1960 1963 'matlab' name. The new code is backwards compatible, so users of
1961 1964 all matplotlib versions are OK. Patch by J. Hunter.
1962 1965
1963 1966 * IPython/OInspect.py (Inspector.pinfo): Add to object? printing
1964 1967 of __init__ docstrings for instances (class docstrings are already
1965 1968 automatically printed). Instances with customized docstrings
1966 1969 (indep. of the class) are also recognized and all 3 separate
1967 1970 docstrings are printed (instance, class, constructor). After some
1968 1971 comments/suggestions by J. Hunter.
1969 1972
1970 1973 2004-12-05 Fernando Perez <fperez@colorado.edu>
1971 1974
1972 1975 * IPython/iplib.py (MagicCompleter.complete): Remove annoying
1973 1976 warnings when tab-completion fails and triggers an exception.
1974 1977
1975 1978 2004-12-03 Fernando Perez <fperez@colorado.edu>
1976 1979
1977 1980 * IPython/Magic.py (magic_prun): Fix bug where an exception would
1978 1981 be triggered when using 'run -p'. An incorrect option flag was
1979 1982 being set ('d' instead of 'D').
1980 1983 (manpage): fix missing escaped \- sign.
1981 1984
1982 1985 2004-11-30 *** Released version 0.6.5
1983 1986
1984 1987 2004-11-30 Fernando Perez <fperez@colorado.edu>
1985 1988
1986 1989 * IPython/Magic.py (Magic.magic_run): Fix bug in breakpoint
1987 1990 setting with -d option.
1988 1991
1989 1992 * setup.py (docfiles): Fix problem where the doc glob I was using
1990 1993 was COMPLETELY BROKEN. It was giving the right files by pure
1991 1994 accident, but failed once I tried to include ipython.el. Note:
1992 1995 glob() does NOT allow you to do exclusion on multiple endings!
1993 1996
1994 1997 2004-11-29 Fernando Perez <fperez@colorado.edu>
1995 1998
1996 1999 * IPython/usage.py (__doc__): cleaned up usage docstring, by using
1997 2000 the manpage as the source. Better formatting & consistency.
1998 2001
1999 2002 * IPython/Magic.py (magic_run): Added new -d option, to run
2000 2003 scripts under the control of the python pdb debugger. Note that
2001 2004 this required changing the %prun option -d to -D, to avoid a clash
2002 2005 (since %run must pass options to %prun, and getopt is too dumb to
2003 2006 handle options with string values with embedded spaces). Thanks
2004 2007 to a suggestion by Matthew Arnison <maffew-AT-cat.org.au>.
2005 2008 (magic_who_ls): added type matching to %who and %whos, so that one
2006 2009 can filter their output to only include variables of certain
2007 2010 types. Another suggestion by Matthew.
2008 2011 (magic_whos): Added memory summaries in kb and Mb for arrays.
2009 2012 (magic_who): Improve formatting (break lines every 9 vars).
2010 2013
2011 2014 2004-11-28 Fernando Perez <fperez@colorado.edu>
2012 2015
2013 2016 * IPython/Logger.py (Logger.log): Fix bug in syncing the input
2014 2017 cache when empty lines were present.
2015 2018
2016 2019 2004-11-24 Fernando Perez <fperez@colorado.edu>
2017 2020
2018 2021 * IPython/usage.py (__doc__): document the re-activated threading
2019 2022 options for WX and GTK.
2020 2023
2021 2024 2004-11-23 Fernando Perez <fperez@colorado.edu>
2022 2025
2023 2026 * IPython/Shell.py (start): Added Prabhu's big patch to reactivate
2024 2027 the -wthread and -gthread options, along with a new -tk one to try
2025 2028 and coordinate Tk threading with wx/gtk. The tk support is very
2026 2029 platform dependent, since it seems to require Tcl and Tk to be
2027 2030 built with threads (Fedora1/2 appears NOT to have it, but in
2028 2031 Prabhu's Debian boxes it works OK). But even with some Tk
2029 2032 limitations, this is a great improvement.
2030 2033
2031 2034 * IPython/Prompts.py (prompt_specials_color): Added \t for time
2032 2035 info in user prompts. Patch by Prabhu.
2033 2036
2034 2037 2004-11-18 Fernando Perez <fperez@colorado.edu>
2035 2038
2036 2039 * IPython/genutils.py (ask_yes_no): Add check for a max of 20
2037 2040 EOFErrors and bail, to avoid infinite loops if a non-terminating
2038 2041 file is fed into ipython. Patch submitted in issue 19 by user,
2039 2042 many thanks.
2040 2043
2041 2044 * IPython/iplib.py (InteractiveShell.handle_auto): do NOT trigger
2042 2045 autoquote/parens in continuation prompts, which can cause lots of
2043 2046 problems. Closes roundup issue 20.
2044 2047
2045 2048 2004-11-17 Fernando Perez <fperez@colorado.edu>
2046 2049
2047 2050 * debian/control (Build-Depends-Indep): Fix dpatch dependency,
2048 2051 reported as debian bug #280505. I'm not sure my local changelog
2049 2052 entry has the proper debian format (Jack?).
2050 2053
2051 2054 2004-11-08 *** Released version 0.6.4
2052 2055
2053 2056 2004-11-08 Fernando Perez <fperez@colorado.edu>
2054 2057
2055 2058 * IPython/iplib.py (init_readline): Fix exit message for Windows
2056 2059 when readline is active. Thanks to a report by Eric Jones
2057 2060 <eric-AT-enthought.com>.
2058 2061
2059 2062 2004-11-07 Fernando Perez <fperez@colorado.edu>
2060 2063
2061 2064 * IPython/genutils.py (page): Add a trap for OSError exceptions,
2062 2065 sometimes seen by win2k/cygwin users.
2063 2066
2064 2067 2004-11-06 Fernando Perez <fperez@colorado.edu>
2065 2068
2066 2069 * IPython/iplib.py (interact): Change the handling of %Exit from
2067 2070 trying to propagate a SystemExit to an internal ipython flag.
2068 2071 This is less elegant than using Python's exception mechanism, but
2069 2072 I can't get that to work reliably with threads, so under -pylab
2070 2073 %Exit was hanging IPython. Cross-thread exception handling is
2071 2074 really a bitch. Thaks to a bug report by Stephen Walton
2072 2075 <stephen.walton-AT-csun.edu>.
2073 2076
2074 2077 2004-11-04 Fernando Perez <fperez@colorado.edu>
2075 2078
2076 2079 * IPython/iplib.py (raw_input_original): store a pointer to the
2077 2080 true raw_input to harden against code which can modify it
2078 2081 (wx.py.PyShell does this and would otherwise crash ipython).
2079 2082 Thanks to a bug report by Jim Flowers <james.flowers-AT-lgx.com>.
2080 2083
2081 2084 * IPython/Shell.py (MTInteractiveShell.runsource): Cleaner fix for
2082 2085 Ctrl-C problem, which does not mess up the input line.
2083 2086
2084 2087 2004-11-03 Fernando Perez <fperez@colorado.edu>
2085 2088
2086 2089 * IPython/Release.py: Changed licensing to BSD, in all files.
2087 2090 (name): lowercase name for tarball/RPM release.
2088 2091
2089 2092 * IPython/OInspect.py (getdoc): wrap inspect.getdoc() safely for
2090 2093 use throughout ipython.
2091 2094
2092 2095 * IPython/Magic.py (Magic._ofind): Switch to using the new
2093 2096 OInspect.getdoc() function.
2094 2097
2095 2098 * IPython/Shell.py (sigint_handler): Hack to ignore the execution
2096 2099 of the line currently being canceled via Ctrl-C. It's extremely
2097 2100 ugly, but I don't know how to do it better (the problem is one of
2098 2101 handling cross-thread exceptions).
2099 2102
2100 2103 2004-10-28 Fernando Perez <fperez@colorado.edu>
2101 2104
2102 2105 * IPython/Shell.py (signal_handler): add signal handlers to trap
2103 2106 SIGINT and SIGSEGV in threaded code properly. Thanks to a bug
2104 2107 report by Francesc Alted.
2105 2108
2106 2109 2004-10-21 Fernando Perez <fperez@colorado.edu>
2107 2110
2108 2111 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Fix @
2109 2112 to % for pysh syntax extensions.
2110 2113
2111 2114 2004-10-09 Fernando Perez <fperez@colorado.edu>
2112 2115
2113 2116 * IPython/Magic.py (Magic.magic_whos): modify output of Numeric
2114 2117 arrays to print a more useful summary, without calling str(arr).
2115 2118 This avoids the problem of extremely lengthy computations which
2116 2119 occur if arr is large, and appear to the user as a system lockup
2117 2120 with 100% cpu activity. After a suggestion by Kristian Sandberg
2118 2121 <Kristian.Sandberg@colorado.edu>.
2119 2122 (Magic.__init__): fix bug in global magic escapes not being
2120 2123 correctly set.
2121 2124
2122 2125 2004-10-08 Fernando Perez <fperez@colorado.edu>
2123 2126
2124 2127 * IPython/Magic.py (__license__): change to absolute imports of
2125 2128 ipython's own internal packages, to start adapting to the absolute
2126 2129 import requirement of PEP-328.
2127 2130
2128 2131 * IPython/genutils.py (__author__): Fix coding to utf-8 on all
2129 2132 files, and standardize author/license marks through the Release
2130 2133 module instead of having per/file stuff (except for files with
2131 2134 particular licenses, like the MIT/PSF-licensed codes).
2132 2135
2133 2136 * IPython/Debugger.py: remove dead code for python 2.1
2134 2137
2135 2138 2004-10-04 Fernando Perez <fperez@colorado.edu>
2136 2139
2137 2140 * IPython/iplib.py (ipmagic): New function for accessing magics
2138 2141 via a normal python function call.
2139 2142
2140 2143 * IPython/Magic.py (Magic.magic_magic): Change the magic escape
2141 2144 from '@' to '%', to accomodate the new @decorator syntax of python
2142 2145 2.4.
2143 2146
2144 2147 2004-09-29 Fernando Perez <fperez@colorado.edu>
2145 2148
2146 2149 * IPython/Shell.py (MatplotlibShellBase.use): Added a wrapper to
2147 2150 matplotlib.use to prevent running scripts which try to switch
2148 2151 interactive backends from within ipython. This will just crash
2149 2152 the python interpreter, so we can't allow it (but a detailed error
2150 2153 is given to the user).
2151 2154
2152 2155 2004-09-28 Fernando Perez <fperez@colorado.edu>
2153 2156
2154 2157 * IPython/Shell.py (MatplotlibShellBase.mplot_exec):
2155 2158 matplotlib-related fixes so that using @run with non-matplotlib
2156 2159 scripts doesn't pop up spurious plot windows. This requires
2157 2160 matplotlib >= 0.63, where I had to make some changes as well.
2158 2161
2159 2162 * IPython/ipmaker.py (make_IPython): update version requirement to
2160 2163 python 2.2.
2161 2164
2162 2165 * IPython/iplib.py (InteractiveShell.mainloop): Add an optional
2163 2166 banner arg for embedded customization.
2164 2167
2165 2168 * IPython/Magic.py (Magic.__init__): big cleanup to remove all
2166 2169 explicit uses of __IP as the IPython's instance name. Now things
2167 2170 are properly handled via the shell.name value. The actual code
2168 2171 is a bit ugly b/c I'm doing it via a global in Magic.py, but this
2169 2172 is much better than before. I'll clean things completely when the
2170 2173 magic stuff gets a real overhaul.
2171 2174
2172 2175 * ipython.1: small fixes, sent in by Jack Moffit. He also sent in
2173 2176 minor changes to debian dir.
2174 2177
2175 2178 * IPython/iplib.py (InteractiveShell.__init__): Fix adding a
2176 2179 pointer to the shell itself in the interactive namespace even when
2177 2180 a user-supplied dict is provided. This is needed for embedding
2178 2181 purposes (found by tests with Michel Sanner).
2179 2182
2180 2183 2004-09-27 Fernando Perez <fperez@colorado.edu>
2181 2184
2182 2185 * IPython/UserConfig/ipythonrc: remove []{} from
2183 2186 readline_remove_delims, so that things like [modname.<TAB> do
2184 2187 proper completion. This disables [].TAB, but that's a less common
2185 2188 case than module names in list comprehensions, for example.
2186 2189 Thanks to a report by Andrea Riciputi.
2187 2190
2188 2191 2004-09-09 Fernando Perez <fperez@colorado.edu>
2189 2192
2190 2193 * IPython/Shell.py (IPShellGTK.mainloop): reorder to avoid
2191 2194 blocking problems in win32 and osx. Fix by John.
2192 2195
2193 2196 2004-09-08 Fernando Perez <fperez@colorado.edu>
2194 2197
2195 2198 * IPython/Shell.py (IPShellWX.OnInit): Fix output redirection bug
2196 2199 for Win32 and OSX. Fix by John Hunter.
2197 2200
2198 2201 2004-08-30 *** Released version 0.6.3
2199 2202
2200 2203 2004-08-30 Fernando Perez <fperez@colorado.edu>
2201 2204
2202 2205 * setup.py (isfile): Add manpages to list of dependent files to be
2203 2206 updated.
2204 2207
2205 2208 2004-08-27 Fernando Perez <fperez@colorado.edu>
2206 2209
2207 2210 * IPython/Shell.py (start): I've disabled -wthread and -gthread
2208 2211 for now. They don't really work with standalone WX/GTK code
2209 2212 (though matplotlib IS working fine with both of those backends).
2210 2213 This will neeed much more testing. I disabled most things with
2211 2214 comments, so turning it back on later should be pretty easy.
2212 2215
2213 2216 * IPython/iplib.py (InteractiveShell.__init__): Fix accidental
2214 2217 autocalling of expressions like r'foo', by modifying the line
2215 2218 split regexp. Closes
2216 2219 http://www.scipy.net/roundup/ipython/issue18, reported by Nicholas
2217 2220 Riley <ipythonbugs-AT-sabi.net>.
2218 2221 (InteractiveShell.mainloop): honor --nobanner with banner
2219 2222 extensions.
2220 2223
2221 2224 * IPython/Shell.py: Significant refactoring of all classes, so
2222 2225 that we can really support ALL matplotlib backends and threading
2223 2226 models (John spotted a bug with Tk which required this). Now we
2224 2227 should support single-threaded, WX-threads and GTK-threads, both
2225 2228 for generic code and for matplotlib.
2226 2229
2227 2230 * IPython/ipmaker.py (__call__): Changed -mpthread option to
2228 2231 -pylab, to simplify things for users. Will also remove the pylab
2229 2232 profile, since now all of matplotlib configuration is directly
2230 2233 handled here. This also reduces startup time.
2231 2234
2232 2235 * IPython/Shell.py (IPShellGTK.run): Fixed bug where mainloop() of
2233 2236 shell wasn't being correctly called. Also in IPShellWX.
2234 2237
2235 2238 * IPython/iplib.py (InteractiveShell.__init__): Added option to
2236 2239 fine-tune banner.
2237 2240
2238 2241 * IPython/numutils.py (spike): Deprecate these spike functions,
2239 2242 delete (long deprecated) gnuplot_exec handler.
2240 2243
2241 2244 2004-08-26 Fernando Perez <fperez@colorado.edu>
2242 2245
2243 2246 * ipython.1: Update for threading options, plus some others which
2244 2247 were missing.
2245 2248
2246 2249 * IPython/ipmaker.py (__call__): Added -wthread option for
2247 2250 wxpython thread handling. Make sure threading options are only
2248 2251 valid at the command line.
2249 2252
2250 2253 * scripts/ipython: moved shell selection into a factory function
2251 2254 in Shell.py, to keep the starter script to a minimum.
2252 2255
2253 2256 2004-08-25 Fernando Perez <fperez@colorado.edu>
2254 2257
2255 2258 * IPython/Shell.py (IPShellWX.wxexit): fixes to WX threading, by
2256 2259 John. Along with some recent changes he made to matplotlib, the
2257 2260 next versions of both systems should work very well together.
2258 2261
2259 2262 2004-08-24 Fernando Perez <fperez@colorado.edu>
2260 2263
2261 2264 * IPython/Magic.py (Magic.magic_prun): cleanup some dead code. I
2262 2265 tried to switch the profiling to using hotshot, but I'm getting
2263 2266 strange errors from prof.runctx() there. I may be misreading the
2264 2267 docs, but it looks weird. For now the profiling code will
2265 2268 continue to use the standard profiler.
2266 2269
2267 2270 2004-08-23 Fernando Perez <fperez@colorado.edu>
2268 2271
2269 2272 * IPython/Shell.py (IPShellWX.__init__): Improvements to the WX
2270 2273 threaded shell, by John Hunter. It's not quite ready yet, but
2271 2274 close.
2272 2275
2273 2276 2004-08-22 Fernando Perez <fperez@colorado.edu>
2274 2277
2275 2278 * IPython/iplib.py (InteractiveShell.interact): tab cleanups, also
2276 2279 in Magic and ultraTB.
2277 2280
2278 2281 * ipython.1: document threading options in manpage.
2279 2282
2280 2283 * scripts/ipython: Changed name of -thread option to -gthread,
2281 2284 since this is GTK specific. I want to leave the door open for a
2282 2285 -wthread option for WX, which will most likely be necessary. This
2283 2286 change affects usage and ipmaker as well.
2284 2287
2285 2288 * IPython/Shell.py (matplotlib_shell): Add a factory function to
2286 2289 handle the matplotlib shell issues. Code by John Hunter
2287 2290 <jdhunter-AT-nitace.bsd.uchicago.edu>.
2288 2291 (IPShellMatplotlibWX.__init__): Rudimentary WX support. It's
2289 2292 broken (and disabled for end users) for now, but it puts the
2290 2293 infrastructure in place.
2291 2294
2292 2295 2004-08-21 Fernando Perez <fperez@colorado.edu>
2293 2296
2294 2297 * ipythonrc-pylab: Add matplotlib support.
2295 2298
2296 2299 * matplotlib_config.py: new files for matplotlib support, part of
2297 2300 the pylab profile.
2298 2301
2299 2302 * IPython/usage.py (__doc__): documented the threading options.
2300 2303
2301 2304 2004-08-20 Fernando Perez <fperez@colorado.edu>
2302 2305
2303 2306 * ipython: Modified the main calling routine to handle the -thread
2304 2307 and -mpthread options. This needs to be done as a top-level hack,
2305 2308 because it determines which class to instantiate for IPython
2306 2309 itself.
2307 2310
2308 2311 * IPython/Shell.py (MTInteractiveShell.__init__): New set of
2309 2312 classes to support multithreaded GTK operation without blocking,
2310 2313 and matplotlib with all backends. This is a lot of still very
2311 2314 experimental code, and threads are tricky. So it may still have a
2312 2315 few rough edges... This code owes a lot to
2313 2316 http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/65109, by
2314 2317 Brian # McErlean and John Finlay, to Antoon Pardon for fixes, and
2315 2318 to John Hunter for all the matplotlib work.
2316 2319
2317 2320 * IPython/ipmaker.py (__call__): Added -thread and -mpthread
2318 2321 options for gtk thread and matplotlib support.
2319 2322
2320 2323 2004-08-16 Fernando Perez <fperez@colorado.edu>
2321 2324
2322 2325 * IPython/iplib.py (InteractiveShell.__init__): don't trigger
2323 2326 autocall for things like p*q,p/q,p+q,p-q, when p is callable. Bug
2324 2327 reported by Stephen Walton <stephen.walton-AT-csun.edu>.
2325 2328
2326 2329 2004-08-11 Fernando Perez <fperez@colorado.edu>
2327 2330
2328 2331 * setup.py (isfile): Fix build so documentation gets updated for
2329 2332 rpms (it was only done for .tgz builds).
2330 2333
2331 2334 2004-08-10 Fernando Perez <fperez@colorado.edu>
2332 2335
2333 2336 * genutils.py (Term): Fix misspell of stdin stream (sin->cin).
2334 2337
2335 2338 * iplib.py : Silence syntax error exceptions in tab-completion.
2336 2339
2337 2340 2004-08-05 Fernando Perez <fperez@colorado.edu>
2338 2341
2339 2342 * IPython/Prompts.py (Prompt2.set_colors): Fix incorrectly set
2340 2343 'color off' mark for continuation prompts. This was causing long
2341 2344 continuation lines to mis-wrap.
2342 2345
2343 2346 2004-08-01 Fernando Perez <fperez@colorado.edu>
2344 2347
2345 2348 * IPython/ipmaker.py (make_IPython): Allow the shell class used
2346 2349 for building ipython to be a parameter. All this is necessary
2347 2350 right now to have a multithreaded version, but this insane
2348 2351 non-design will be cleaned up soon. For now, it's a hack that
2349 2352 works.
2350 2353
2351 2354 * IPython/Shell.py (IPShell.__init__): Stop using mutable default
2352 2355 args in various places. No bugs so far, but it's a dangerous
2353 2356 practice.
2354 2357
2355 2358 2004-07-31 Fernando Perez <fperez@colorado.edu>
2356 2359
2357 2360 * IPython/iplib.py (complete): ignore SyntaxError exceptions to
2358 2361 fix completion of files with dots in their names under most
2359 2362 profiles (pysh was OK because the completion order is different).
2360 2363
2361 2364 2004-07-27 Fernando Perez <fperez@colorado.edu>
2362 2365
2363 2366 * IPython/iplib.py (InteractiveShell.__init__): build dict of
2364 2367 keywords manually, b/c the one in keyword.py was removed in python
2365 2368 2.4. Patch by Anakim Border <aborder-AT-users.sourceforge.net>.
2366 2369 This is NOT a bug under python 2.3 and earlier.
2367 2370
2368 2371 2004-07-26 Fernando Perez <fperez@colorado.edu>
2369 2372
2370 2373 * IPython/ultraTB.py (VerboseTB.text): Add another
2371 2374 linecache.checkcache() call to try to prevent inspect.py from
2372 2375 crashing under python 2.3. I think this fixes
2373 2376 http://www.scipy.net/roundup/ipython/issue17.
2374 2377
2375 2378 2004-07-26 *** Released version 0.6.2
2376 2379
2377 2380 2004-07-26 Fernando Perez <fperez@colorado.edu>
2378 2381
2379 2382 * IPython/Magic.py (Magic.magic_cd): Fix bug where 'cd -N' would
2380 2383 fail for any number.
2381 2384 (Magic.magic_bookmark): Fix bug where 'bookmark -l' would fail for
2382 2385 empty bookmarks.
2383 2386
2384 2387 2004-07-26 *** Released version 0.6.1
2385 2388
2386 2389 2004-07-26 Fernando Perez <fperez@colorado.edu>
2387 2390
2388 2391 * ipython_win_post_install.py (run): Added pysh shortcut for Windows.
2389 2392
2390 2393 * IPython/iplib.py (protect_filename): Applied Ville's patch for
2391 2394 escaping '()[]{}' in filenames.
2392 2395
2393 2396 * IPython/Magic.py (shlex_split): Fix handling of '*' and '?' for
2394 2397 Python 2.2 users who lack a proper shlex.split.
2395 2398
2396 2399 2004-07-19 Fernando Perez <fperez@colorado.edu>
2397 2400
2398 2401 * IPython/iplib.py (InteractiveShell.init_readline): Add support
2399 2402 for reading readline's init file. I follow the normal chain:
2400 2403 $INPUTRC is honored, otherwise ~/.inputrc is used. Thanks to a
2401 2404 report by Mike Heeter. This closes
2402 2405 http://www.scipy.net/roundup/ipython/issue16.
2403 2406
2404 2407 2004-07-18 Fernando Perez <fperez@colorado.edu>
2405 2408
2406 2409 * IPython/iplib.py (__init__): Add better handling of '\' under
2407 2410 Win32 for filenames. After a patch by Ville.
2408 2411
2409 2412 2004-07-17 Fernando Perez <fperez@colorado.edu>
2410 2413
2411 2414 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
2412 2415 autocalling would be triggered for 'foo is bar' if foo is
2413 2416 callable. I also cleaned up the autocall detection code to use a
2414 2417 regexp, which is faster. Bug reported by Alexander Schmolck.
2415 2418
2416 2419 * IPython/Magic.py (Magic.magic_pinfo): Fix bug where strings with
2417 2420 '?' in them would confuse the help system. Reported by Alex
2418 2421 Schmolck.
2419 2422
2420 2423 2004-07-16 Fernando Perez <fperez@colorado.edu>
2421 2424
2422 2425 * IPython/GnuplotInteractive.py (__all__): added plot2.
2423 2426
2424 2427 * IPython/Gnuplot2.py (Gnuplot.plot2): added new function for
2425 2428 plotting dictionaries, lists or tuples of 1d arrays.
2426 2429
2427 2430 * IPython/Magic.py (Magic.magic_hist): small clenaups and
2428 2431 optimizations.
2429 2432
2430 2433 * IPython/iplib.py:Remove old Changelog info for cleanup. This is
2431 2434 the information which was there from Janko's original IPP code:
2432 2435
2433 2436 03.05.99 20:53 porto.ifm.uni-kiel.de
2434 2437 --Started changelog.
2435 2438 --make clear do what it say it does
2436 2439 --added pretty output of lines from inputcache
2437 2440 --Made Logger a mixin class, simplifies handling of switches
2438 2441 --Added own completer class. .string<TAB> expands to last history
2439 2442 line which starts with string. The new expansion is also present
2440 2443 with Ctrl-r from the readline library. But this shows, who this
2441 2444 can be done for other cases.
2442 2445 --Added convention that all shell functions should accept a
2443 2446 parameter_string This opens the door for different behaviour for
2444 2447 each function. @cd is a good example of this.
2445 2448
2446 2449 04.05.99 12:12 porto.ifm.uni-kiel.de
2447 2450 --added logfile rotation
2448 2451 --added new mainloop method which freezes first the namespace
2449 2452
2450 2453 07.05.99 21:24 porto.ifm.uni-kiel.de
2451 2454 --added the docreader classes. Now there is a help system.
2452 2455 -This is only a first try. Currently it's not easy to put new
2453 2456 stuff in the indices. But this is the way to go. Info would be
2454 2457 better, but HTML is every where and not everybody has an info
2455 2458 system installed and it's not so easy to change html-docs to info.
2456 2459 --added global logfile option
2457 2460 --there is now a hook for object inspection method pinfo needs to
2458 2461 be provided for this. Can be reached by two '??'.
2459 2462
2460 2463 08.05.99 20:51 porto.ifm.uni-kiel.de
2461 2464 --added a README
2462 2465 --bug in rc file. Something has changed so functions in the rc
2463 2466 file need to reference the shell and not self. Not clear if it's a
2464 2467 bug or feature.
2465 2468 --changed rc file for new behavior
2466 2469
2467 2470 2004-07-15 Fernando Perez <fperez@colorado.edu>
2468 2471
2469 2472 * IPython/Logger.py (Logger.log): fixed recent bug where the input
2470 2473 cache was falling out of sync in bizarre manners when multi-line
2471 2474 input was present. Minor optimizations and cleanup.
2472 2475
2473 2476 (Logger): Remove old Changelog info for cleanup. This is the
2474 2477 information which was there from Janko's original code:
2475 2478
2476 2479 Changes to Logger: - made the default log filename a parameter
2477 2480
2478 2481 - put a check for lines beginning with !@? in log(). Needed
2479 2482 (even if the handlers properly log their lines) for mid-session
2480 2483 logging activation to work properly. Without this, lines logged
2481 2484 in mid session, which get read from the cache, would end up
2482 2485 'bare' (with !@? in the open) in the log. Now they are caught
2483 2486 and prepended with a #.
2484 2487
2485 2488 * IPython/iplib.py (InteractiveShell.init_readline): added check
2486 2489 in case MagicCompleter fails to be defined, so we don't crash.
2487 2490
2488 2491 2004-07-13 Fernando Perez <fperez@colorado.edu>
2489 2492
2490 2493 * IPython/Gnuplot2.py (Gnuplot.hardcopy): add automatic generation
2491 2494 of EPS if the requested filename ends in '.eps'.
2492 2495
2493 2496 2004-07-04 Fernando Perez <fperez@colorado.edu>
2494 2497
2495 2498 * IPython/iplib.py (InteractiveShell.handle_shell_escape): Fix
2496 2499 escaping of quotes when calling the shell.
2497 2500
2498 2501 2004-07-02 Fernando Perez <fperez@colorado.edu>
2499 2502
2500 2503 * IPython/Prompts.py (CachedOutput.update): Fix problem with
2501 2504 gettext not working because we were clobbering '_'. Fixes
2502 2505 http://www.scipy.net/roundup/ipython/issue6.
2503 2506
2504 2507 2004-07-01 Fernando Perez <fperez@colorado.edu>
2505 2508
2506 2509 * IPython/Magic.py (Magic.magic_cd): integrated bookmark handling
2507 2510 into @cd. Patch by Ville.
2508 2511
2509 2512 * IPython/iplib.py (InteractiveShell.post_config_initialization):
2510 2513 new function to store things after ipmaker runs. Patch by Ville.
2511 2514 Eventually this will go away once ipmaker is removed and the class
2512 2515 gets cleaned up, but for now it's ok. Key functionality here is
2513 2516 the addition of the persistent storage mechanism, a dict for
2514 2517 keeping data across sessions (for now just bookmarks, but more can
2515 2518 be implemented later).
2516 2519
2517 2520 * IPython/Magic.py (Magic.magic_bookmark): New bookmark system,
2518 2521 persistent across sections. Patch by Ville, I modified it
2519 2522 soemwhat to allow bookmarking arbitrary dirs other than CWD. Also
2520 2523 added a '-l' option to list all bookmarks.
2521 2524
2522 2525 * IPython/iplib.py (InteractiveShell.atexit_operations): new
2523 2526 center for cleanup. Registered with atexit.register(). I moved
2524 2527 here the old exit_cleanup(). After a patch by Ville.
2525 2528
2526 2529 * IPython/Magic.py (get_py_filename): added '~' to the accepted
2527 2530 characters in the hacked shlex_split for python 2.2.
2528 2531
2529 2532 * IPython/iplib.py (file_matches): more fixes to filenames with
2530 2533 whitespace in them. It's not perfect, but limitations in python's
2531 2534 readline make it impossible to go further.
2532 2535
2533 2536 2004-06-29 Fernando Perez <fperez@colorado.edu>
2534 2537
2535 2538 * IPython/iplib.py (file_matches): escape whitespace correctly in
2536 2539 filename completions. Bug reported by Ville.
2537 2540
2538 2541 2004-06-28 Fernando Perez <fperez@colorado.edu>
2539 2542
2540 2543 * IPython/ipmaker.py (__call__): Added per-profile histories. Now
2541 2544 the history file will be called 'history-PROFNAME' (or just
2542 2545 'history' if no profile is loaded). I was getting annoyed at
2543 2546 getting my Numerical work history clobbered by pysh sessions.
2544 2547
2545 2548 * IPython/iplib.py (InteractiveShell.__init__): Internal
2546 2549 getoutputerror() function so that we can honor the system_verbose
2547 2550 flag for _all_ system calls. I also added escaping of #
2548 2551 characters here to avoid confusing Itpl.
2549 2552
2550 2553 * IPython/Magic.py (shlex_split): removed call to shell in
2551 2554 parse_options and replaced it with shlex.split(). The annoying
2552 2555 part was that in Python 2.2, shlex.split() doesn't exist, so I had
2553 2556 to backport it from 2.3, with several frail hacks (the shlex
2554 2557 module is rather limited in 2.2). Thanks to a suggestion by Ville
2555 2558 Vainio <vivainio@kolumbus.fi>. For Python 2.3 there should be no
2556 2559 problem.
2557 2560
2558 2561 (Magic.magic_system_verbose): new toggle to print the actual
2559 2562 system calls made by ipython. Mainly for debugging purposes.
2560 2563
2561 2564 * IPython/GnuplotRuntime.py (gnu_out): fix bug for cygwin, which
2562 2565 doesn't support persistence. Reported (and fix suggested) by
2563 2566 Travis Caldwell <travis_caldwell2000@yahoo.com>.
2564 2567
2565 2568 2004-06-26 Fernando Perez <fperez@colorado.edu>
2566 2569
2567 2570 * IPython/Logger.py (Logger.log): fix to handle correctly empty
2568 2571 continue prompts.
2569 2572
2570 2573 * IPython/Extensions/InterpreterExec.py (pysh): moved the pysh()
2571 2574 function (basically a big docstring) and a few more things here to
2572 2575 speedup startup. pysh.py is now very lightweight. We want because
2573 2576 it gets execfile'd, while InterpreterExec gets imported, so
2574 2577 byte-compilation saves time.
2575 2578
2576 2579 2004-06-25 Fernando Perez <fperez@colorado.edu>
2577 2580
2578 2581 * IPython/Magic.py (Magic.magic_cd): Fixed to restore usage of 'cd
2579 2582 -NUM', which was recently broken.
2580 2583
2581 2584 * IPython/iplib.py (InteractiveShell.handle_shell_escape): allow !
2582 2585 in multi-line input (but not !!, which doesn't make sense there).
2583 2586
2584 2587 * IPython/UserConfig/ipythonrc: made autoindent on by default.
2585 2588 It's just too useful, and people can turn it off in the less
2586 2589 common cases where it's a problem.
2587 2590
2588 2591 2004-06-24 Fernando Perez <fperez@colorado.edu>
2589 2592
2590 2593 * IPython/iplib.py (InteractiveShell._prefilter): big change -
2591 2594 special syntaxes (like alias calling) is now allied in multi-line
2592 2595 input. This is still _very_ experimental, but it's necessary for
2593 2596 efficient shell usage combining python looping syntax with system
2594 2597 calls. For now it's restricted to aliases, I don't think it
2595 2598 really even makes sense to have this for magics.
2596 2599
2597 2600 2004-06-23 Fernando Perez <fperez@colorado.edu>
2598 2601
2599 2602 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Added
2600 2603 $var=cmd <=> @sc var=cmd and $$var=cmd <=> @sc -l var=cmd.
2601 2604
2602 2605 * IPython/Magic.py (Magic.magic_rehashx): modified to handle
2603 2606 extensions under Windows (after code sent by Gary Bishop). The
2604 2607 extensions considered 'executable' are stored in IPython's rc
2605 2608 structure as win_exec_ext.
2606 2609
2607 2610 * IPython/genutils.py (shell): new function, like system() but
2608 2611 without return value. Very useful for interactive shell work.
2609 2612
2610 2613 * IPython/Magic.py (Magic.magic_unalias): New @unalias function to
2611 2614 delete aliases.
2612 2615
2613 2616 * IPython/iplib.py (InteractiveShell.alias_table_update): make
2614 2617 sure that the alias table doesn't contain python keywords.
2615 2618
2616 2619 2004-06-21 Fernando Perez <fperez@colorado.edu>
2617 2620
2618 2621 * IPython/Magic.py (Magic.magic_rehash): Fix crash when
2619 2622 non-existent items are found in $PATH. Reported by Thorsten.
2620 2623
2621 2624 2004-06-20 Fernando Perez <fperez@colorado.edu>
2622 2625
2623 2626 * IPython/iplib.py (complete): modified the completer so that the
2624 2627 order of priorities can be easily changed at runtime.
2625 2628
2626 2629 * IPython/Extensions/InterpreterExec.py (prefilter_shell):
2627 2630 Modified to auto-execute all lines beginning with '~', '/' or '.'.
2628 2631
2629 2632 * IPython/Magic.py (Magic.magic_sx): modified @sc and @sx to
2630 2633 expand Python variables prepended with $ in all system calls. The
2631 2634 same was done to InteractiveShell.handle_shell_escape. Now all
2632 2635 system access mechanisms (!, !!, @sc, @sx and aliases) allow the
2633 2636 expansion of python variables and expressions according to the
2634 2637 syntax of PEP-215 - http://www.python.org/peps/pep-0215.html.
2635 2638
2636 2639 Though PEP-215 has been rejected, a similar (but simpler) one
2637 2640 seems like it will go into Python 2.4, PEP-292 -
2638 2641 http://www.python.org/peps/pep-0292.html.
2639 2642
2640 2643 I'll keep the full syntax of PEP-215, since IPython has since the
2641 2644 start used Ka-Ping Yee's reference implementation discussed there
2642 2645 (Itpl), and I actually like the powerful semantics it offers.
2643 2646
2644 2647 In order to access normal shell variables, the $ has to be escaped
2645 2648 via an extra $. For example:
2646 2649
2647 2650 In [7]: PATH='a python variable'
2648 2651
2649 2652 In [8]: !echo $PATH
2650 2653 a python variable
2651 2654
2652 2655 In [9]: !echo $$PATH
2653 2656 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2654 2657
2655 2658 (Magic.parse_options): escape $ so the shell doesn't evaluate
2656 2659 things prematurely.
2657 2660
2658 2661 * IPython/iplib.py (InteractiveShell.call_alias): added the
2659 2662 ability for aliases to expand python variables via $.
2660 2663
2661 2664 * IPython/Magic.py (Magic.magic_rehash): based on the new alias
2662 2665 system, now there's a @rehash/@rehashx pair of magics. These work
2663 2666 like the csh rehash command, and can be invoked at any time. They
2664 2667 build a table of aliases to everything in the user's $PATH
2665 2668 (@rehash uses everything, @rehashx is slower but only adds
2666 2669 executable files). With this, the pysh.py-based shell profile can
2667 2670 now simply call rehash upon startup, and full access to all
2668 2671 programs in the user's path is obtained.
2669 2672
2670 2673 * IPython/iplib.py (InteractiveShell.call_alias): The new alias
2671 2674 functionality is now fully in place. I removed the old dynamic
2672 2675 code generation based approach, in favor of a much lighter one
2673 2676 based on a simple dict. The advantage is that this allows me to
2674 2677 now have thousands of aliases with negligible cost (unthinkable
2675 2678 with the old system).
2676 2679
2677 2680 2004-06-19 Fernando Perez <fperez@colorado.edu>
2678 2681
2679 2682 * IPython/iplib.py (__init__): extended MagicCompleter class to
2680 2683 also complete (last in priority) on user aliases.
2681 2684
2682 2685 * IPython/Itpl.py (Itpl.__str__): fixed order of globals/locals in
2683 2686 call to eval.
2684 2687 (ItplNS.__init__): Added a new class which functions like Itpl,
2685 2688 but allows configuring the namespace for the evaluation to occur
2686 2689 in.
2687 2690
2688 2691 2004-06-18 Fernando Perez <fperez@colorado.edu>
2689 2692
2690 2693 * IPython/iplib.py (InteractiveShell.runcode): modify to print a
2691 2694 better message when 'exit' or 'quit' are typed (a common newbie
2692 2695 confusion).
2693 2696
2694 2697 * IPython/Magic.py (Magic.magic_colors): Added the runtime color
2695 2698 check for Windows users.
2696 2699
2697 2700 * IPython/iplib.py (InteractiveShell.user_setup): removed
2698 2701 disabling of colors for Windows. I'll test at runtime and issue a
2699 2702 warning if Gary's readline isn't found, as to nudge users to
2700 2703 download it.
2701 2704
2702 2705 2004-06-16 Fernando Perez <fperez@colorado.edu>
2703 2706
2704 2707 * IPython/genutils.py (Stream.__init__): changed to print errors
2705 2708 to sys.stderr. I had a circular dependency here. Now it's
2706 2709 possible to run ipython as IDLE's shell (consider this pre-alpha,
2707 2710 since true stdout things end up in the starting terminal instead
2708 2711 of IDLE's out).
2709 2712
2710 2713 * IPython/Prompts.py (Prompt2.set_colors): prevent crashes for
2711 2714 users who haven't # updated their prompt_in2 definitions. Remove
2712 2715 eventually.
2713 2716 (multiple_replace): added credit to original ASPN recipe.
2714 2717
2715 2718 2004-06-15 Fernando Perez <fperez@colorado.edu>
2716 2719
2717 2720 * IPython/iplib.py (InteractiveShell.__init__): add 'cp' to the
2718 2721 list of auto-defined aliases.
2719 2722
2720 2723 2004-06-13 Fernando Perez <fperez@colorado.edu>
2721 2724
2722 2725 * setup.py (scriptfiles): Don't trigger win_post_install unless an
2723 2726 install was really requested (so setup.py can be used for other
2724 2727 things under Windows).
2725 2728
2726 2729 2004-06-10 Fernando Perez <fperez@colorado.edu>
2727 2730
2728 2731 * IPython/Logger.py (Logger.create_log): Manually remove any old
2729 2732 backup, since os.remove may fail under Windows. Fixes bug
2730 2733 reported by Thorsten.
2731 2734
2732 2735 2004-06-09 Fernando Perez <fperez@colorado.edu>
2733 2736
2734 2737 * examples/example-embed.py: fixed all references to %n (replaced
2735 2738 with \\# for ps1/out prompts and with \\D for ps2 prompts). Done
2736 2739 for all examples and the manual as well.
2737 2740
2738 2741 2004-06-08 Fernando Perez <fperez@colorado.edu>
2739 2742
2740 2743 * IPython/Prompts.py (Prompt2.set_p_str): fixed all prompt
2741 2744 alignment and color management. All 3 prompt subsystems now
2742 2745 inherit from BasePrompt.
2743 2746
2744 2747 * tools/release: updates for windows installer build and tag rpms
2745 2748 with python version (since paths are fixed).
2746 2749
2747 2750 * IPython/UserConfig/ipythonrc: modified to use \# instead of %n,
2748 2751 which will become eventually obsolete. Also fixed the default
2749 2752 prompt_in2 to use \D, so at least new users start with the correct
2750 2753 defaults.
2751 2754 WARNING: Users with existing ipythonrc files will need to apply
2752 2755 this fix manually!
2753 2756
2754 2757 * setup.py: make windows installer (.exe). This is finally the
2755 2758 integration of an old patch by Cory Dodt <dodt-AT-fcoe.k12.ca.us>,
2756 2759 which I hadn't included because it required Python 2.3 (or recent
2757 2760 distutils).
2758 2761
2759 2762 * IPython/usage.py (__doc__): update docs (and manpage) to reflect
2760 2763 usage of new '\D' escape.
2761 2764
2762 2765 * IPython/Prompts.py (ROOT_SYMBOL): Small fix for Windows (which
2763 2766 lacks os.getuid())
2764 2767 (CachedOutput.set_colors): Added the ability to turn coloring
2765 2768 on/off with @colors even for manually defined prompt colors. It
2766 2769 uses a nasty global, but it works safely and via the generic color
2767 2770 handling mechanism.
2768 2771 (Prompt2.__init__): Introduced new escape '\D' for continuation
2769 2772 prompts. It represents the counter ('\#') as dots.
2770 2773 *** NOTE *** THIS IS A BACKWARDS-INCOMPATIBLE CHANGE. Users will
2771 2774 need to update their ipythonrc files and replace '%n' with '\D' in
2772 2775 their prompt_in2 settings everywhere. Sorry, but there's
2773 2776 otherwise no clean way to get all prompts to properly align. The
2774 2777 ipythonrc shipped with IPython has been updated.
2775 2778
2776 2779 2004-06-07 Fernando Perez <fperez@colorado.edu>
2777 2780
2778 2781 * setup.py (isfile): Pass local_icons option to latex2html, so the
2779 2782 resulting HTML file is self-contained. Thanks to
2780 2783 dryice-AT-liu.com.cn for the tip.
2781 2784
2782 2785 * pysh.py: I created a new profile 'shell', which implements a
2783 2786 _rudimentary_ IPython-based shell. This is in NO WAY a realy
2784 2787 system shell, nor will it become one anytime soon. It's mainly
2785 2788 meant to illustrate the use of the new flexible bash-like prompts.
2786 2789 I guess it could be used by hardy souls for true shell management,
2787 2790 but it's no tcsh/bash... pysh.py is loaded by the 'shell'
2788 2791 profile. This uses the InterpreterExec extension provided by
2789 2792 W.J. van der Laan <gnufnork-AT-hetdigitalegat.nl>
2790 2793
2791 2794 * IPython/Prompts.py (PromptOut.__str__): now it will correctly
2792 2795 auto-align itself with the length of the previous input prompt
2793 2796 (taking into account the invisible color escapes).
2794 2797 (CachedOutput.__init__): Large restructuring of this class. Now
2795 2798 all three prompts (primary1, primary2, output) are proper objects,
2796 2799 managed by the 'parent' CachedOutput class. The code is still a
2797 2800 bit hackish (all prompts share state via a pointer to the cache),
2798 2801 but it's overall far cleaner than before.
2799 2802
2800 2803 * IPython/genutils.py (getoutputerror): modified to add verbose,
2801 2804 debug and header options. This makes the interface of all getout*
2802 2805 functions uniform.
2803 2806 (SystemExec.getoutputerror): added getoutputerror to SystemExec.
2804 2807
2805 2808 * IPython/Magic.py (Magic.default_option): added a function to
2806 2809 allow registering default options for any magic command. This
2807 2810 makes it easy to have profiles which customize the magics globally
2808 2811 for a certain use. The values set through this function are
2809 2812 picked up by the parse_options() method, which all magics should
2810 2813 use to parse their options.
2811 2814
2812 2815 * IPython/genutils.py (warn): modified the warnings framework to
2813 2816 use the Term I/O class. I'm trying to slowly unify all of
2814 2817 IPython's I/O operations to pass through Term.
2815 2818
2816 2819 * IPython/Prompts.py (Prompt2._str_other): Added functionality in
2817 2820 the secondary prompt to correctly match the length of the primary
2818 2821 one for any prompt. Now multi-line code will properly line up
2819 2822 even for path dependent prompts, such as the new ones available
2820 2823 via the prompt_specials.
2821 2824
2822 2825 2004-06-06 Fernando Perez <fperez@colorado.edu>
2823 2826
2824 2827 * IPython/Prompts.py (prompt_specials): Added the ability to have
2825 2828 bash-like special sequences in the prompts, which get
2826 2829 automatically expanded. Things like hostname, current working
2827 2830 directory and username are implemented already, but it's easy to
2828 2831 add more in the future. Thanks to a patch by W.J. van der Laan
2829 2832 <gnufnork-AT-hetdigitalegat.nl>
2830 2833 (prompt_specials): Added color support for prompt strings, so
2831 2834 users can define arbitrary color setups for their prompts.
2832 2835
2833 2836 2004-06-05 Fernando Perez <fperez@colorado.edu>
2834 2837
2835 2838 * IPython/genutils.py (Term.reopen_all): Added Windows-specific
2836 2839 code to load Gary Bishop's readline and configure it
2837 2840 automatically. Thanks to Gary for help on this.
2838 2841
2839 2842 2004-06-01 Fernando Perez <fperez@colorado.edu>
2840 2843
2841 2844 * IPython/Logger.py (Logger.create_log): fix bug for logging
2842 2845 with no filename (previous fix was incomplete).
2843 2846
2844 2847 2004-05-25 Fernando Perez <fperez@colorado.edu>
2845 2848
2846 2849 * IPython/Magic.py (Magic.parse_options): fix bug where naked
2847 2850 parens would get passed to the shell.
2848 2851
2849 2852 2004-05-20 Fernando Perez <fperez@colorado.edu>
2850 2853
2851 2854 * IPython/Magic.py (Magic.magic_prun): changed default profile
2852 2855 sort order to 'time' (the more common profiling need).
2853 2856
2854 2857 * IPython/OInspect.py (Inspector.pinfo): flush the inspect cache
2855 2858 so that source code shown is guaranteed in sync with the file on
2856 2859 disk (also changed in psource). Similar fix to the one for
2857 2860 ultraTB on 2004-05-06. Thanks to a bug report by Yann Le Du
2858 2861 <yann.ledu-AT-noos.fr>.
2859 2862
2860 2863 * IPython/Magic.py (Magic.parse_options): Fixed bug where commands
2861 2864 with a single option would not be correctly parsed. Closes
2862 2865 http://www.scipy.net/roundup/ipython/issue14. This bug had been
2863 2866 introduced in 0.6.0 (on 2004-05-06).
2864 2867
2865 2868 2004-05-13 *** Released version 0.6.0
2866 2869
2867 2870 2004-05-13 Fernando Perez <fperez@colorado.edu>
2868 2871
2869 2872 * debian/: Added debian/ directory to CVS, so that debian support
2870 2873 is publicly accessible. The debian package is maintained by Jack
2871 2874 Moffit <jack-AT-xiph.org>.
2872 2875
2873 2876 * Documentation: included the notes about an ipython-based system
2874 2877 shell (the hypothetical 'pysh') into the new_design.pdf document,
2875 2878 so that these ideas get distributed to users along with the
2876 2879 official documentation.
2877 2880
2878 2881 2004-05-10 Fernando Perez <fperez@colorado.edu>
2879 2882
2880 2883 * IPython/Logger.py (Logger.create_log): fix recently introduced
2881 2884 bug (misindented line) where logstart would fail when not given an
2882 2885 explicit filename.
2883 2886
2884 2887 2004-05-09 Fernando Perez <fperez@colorado.edu>
2885 2888
2886 2889 * IPython/Magic.py (Magic.parse_options): skip system call when
2887 2890 there are no options to look for. Faster, cleaner for the common
2888 2891 case.
2889 2892
2890 2893 * Documentation: many updates to the manual: describing Windows
2891 2894 support better, Gnuplot updates, credits, misc small stuff. Also
2892 2895 updated the new_design doc a bit.
2893 2896
2894 2897 2004-05-06 *** Released version 0.6.0.rc1
2895 2898
2896 2899 2004-05-06 Fernando Perez <fperez@colorado.edu>
2897 2900
2898 2901 * IPython/ultraTB.py (ListTB.text): modified a ton of string +=
2899 2902 operations to use the vastly more efficient list/''.join() method.
2900 2903 (FormattedTB.text): Fix
2901 2904 http://www.scipy.net/roundup/ipython/issue12 - exception source
2902 2905 extract not updated after reload. Thanks to Mike Salib
2903 2906 <msalib-AT-mit.edu> for pinning the source of the problem.
2904 2907 Fortunately, the solution works inside ipython and doesn't require
2905 2908 any changes to python proper.
2906 2909
2907 2910 * IPython/Magic.py (Magic.parse_options): Improved to process the
2908 2911 argument list as a true shell would (by actually using the
2909 2912 underlying system shell). This way, all @magics automatically get
2910 2913 shell expansion for variables. Thanks to a comment by Alex
2911 2914 Schmolck.
2912 2915
2913 2916 2004-04-04 Fernando Perez <fperez@colorado.edu>
2914 2917
2915 2918 * IPython/iplib.py (InteractiveShell.interact): Added a special
2916 2919 trap for a debugger quit exception, which is basically impossible
2917 2920 to handle by normal mechanisms, given what pdb does to the stack.
2918 2921 This fixes a crash reported by <fgibbons-AT-llama.med.harvard.edu>.
2919 2922
2920 2923 2004-04-03 Fernando Perez <fperez@colorado.edu>
2921 2924
2922 2925 * IPython/genutils.py (Term): Standardized the names of the Term
2923 2926 class streams to cin/cout/cerr, following C++ naming conventions
2924 2927 (I can't use in/out/err because 'in' is not a valid attribute
2925 2928 name).
2926 2929
2927 2930 * IPython/iplib.py (InteractiveShell.interact): don't increment
2928 2931 the prompt if there's no user input. By Daniel 'Dang' Griffith
2929 2932 <pythondev-dang-AT-lazytwinacres.net>, after a suggestion from
2930 2933 Francois Pinard.
2931 2934
2932 2935 2004-04-02 Fernando Perez <fperez@colorado.edu>
2933 2936
2934 2937 * IPython/genutils.py (Stream.__init__): Modified to survive at
2935 2938 least importing in contexts where stdin/out/err aren't true file
2936 2939 objects, such as PyCrust (they lack fileno() and mode). However,
2937 2940 the recovery facilities which rely on these things existing will
2938 2941 not work.
2939 2942
2940 2943 2004-04-01 Fernando Perez <fperez@colorado.edu>
2941 2944
2942 2945 * IPython/Magic.py (Magic.magic_sx): modified (as well as @sc) to
2943 2946 use the new getoutputerror() function, so it properly
2944 2947 distinguishes stdout/err.
2945 2948
2946 2949 * IPython/genutils.py (getoutputerror): added a function to
2947 2950 capture separately the standard output and error of a command.
2948 2951 After a comment from dang on the mailing lists. This code is
2949 2952 basically a modified version of commands.getstatusoutput(), from
2950 2953 the standard library.
2951 2954
2952 2955 * IPython/iplib.py (InteractiveShell.handle_shell_escape): added
2953 2956 '!!' as a special syntax (shorthand) to access @sx.
2954 2957
2955 2958 * IPython/Magic.py (Magic.magic_sx): new magic, to execute a shell
2956 2959 command and return its output as a list split on '\n'.
2957 2960
2958 2961 2004-03-31 Fernando Perez <fperez@colorado.edu>
2959 2962
2960 2963 * IPython/FakeModule.py (FakeModule.__init__): added __nonzero__
2961 2964 method to dictionaries used as FakeModule instances if they lack
2962 2965 it. At least pydoc in python2.3 breaks for runtime-defined
2963 2966 functions without this hack. At some point I need to _really_
2964 2967 understand what FakeModule is doing, because it's a gross hack.
2965 2968 But it solves Arnd's problem for now...
2966 2969
2967 2970 2004-02-27 Fernando Perez <fperez@colorado.edu>
2968 2971
2969 2972 * IPython/Logger.py (Logger.create_log): Fix bug where 'rotate'
2970 2973 mode would behave erratically. Also increased the number of
2971 2974 possible logs in rotate mod to 999. Thanks to Rod Holland
2972 2975 <rhh@StructureLABS.com> for the report and fixes.
2973 2976
2974 2977 2004-02-26 Fernando Perez <fperez@colorado.edu>
2975 2978
2976 2979 * IPython/genutils.py (page): Check that the curses module really
2977 2980 has the initscr attribute before trying to use it. For some
2978 2981 reason, the Solaris curses module is missing this. I think this
2979 2982 should be considered a Solaris python bug, but I'm not sure.
2980 2983
2981 2984 2004-01-17 Fernando Perez <fperez@colorado.edu>
2982 2985
2983 2986 * IPython/genutils.py (Stream.__init__): Changes to try to make
2984 2987 ipython robust against stdin/out/err being closed by the user.
2985 2988 This is 'user error' (and blocks a normal python session, at least
2986 2989 the stdout case). However, Ipython should be able to survive such
2987 2990 instances of abuse as gracefully as possible. To simplify the
2988 2991 coding and maintain compatibility with Gary Bishop's Term
2989 2992 contributions, I've made use of classmethods for this. I think
2990 2993 this introduces a dependency on python 2.2.
2991 2994
2992 2995 2004-01-13 Fernando Perez <fperez@colorado.edu>
2993 2996
2994 2997 * IPython/numutils.py (exp_safe): simplified the code a bit and
2995 2998 removed the need for importing the kinds module altogether.
2996 2999
2997 3000 2004-01-06 Fernando Perez <fperez@colorado.edu>
2998 3001
2999 3002 * IPython/Magic.py (Magic.magic_sc): Made the shell capture system
3000 3003 a magic function instead, after some community feedback. No
3001 3004 special syntax will exist for it, but its name is deliberately
3002 3005 very short.
3003 3006
3004 3007 2003-12-20 Fernando Perez <fperez@colorado.edu>
3005 3008
3006 3009 * IPython/iplib.py (InteractiveShell.handle_shell_assign): Added
3007 3010 new functionality, to automagically assign the result of a shell
3008 3011 command to a variable. I'll solicit some community feedback on
3009 3012 this before making it permanent.
3010 3013
3011 3014 * IPython/OInspect.py (Inspector.pinfo): Fix crash when info was
3012 3015 requested about callables for which inspect couldn't obtain a
3013 3016 proper argspec. Thanks to a crash report sent by Etienne
3014 3017 Posthumus <etienne-AT-apple01.cs.vu.nl>.
3015 3018
3016 3019 2003-12-09 Fernando Perez <fperez@colorado.edu>
3017 3020
3018 3021 * IPython/genutils.py (page): patch for the pager to work across
3019 3022 various versions of Windows. By Gary Bishop.
3020 3023
3021 3024 2003-12-04 Fernando Perez <fperez@colorado.edu>
3022 3025
3023 3026 * IPython/Gnuplot2.py (PlotItems): Fixes for working with
3024 3027 Gnuplot.py version 1.7, whose internal names changed quite a bit.
3025 3028 While I tested this and it looks ok, there may still be corner
3026 3029 cases I've missed.
3027 3030
3028 3031 2003-12-01 Fernando Perez <fperez@colorado.edu>
3029 3032
3030 3033 * IPython/iplib.py (InteractiveShell._prefilter): Fixed a bug
3031 3034 where a line like 'p,q=1,2' would fail because the automagic
3032 3035 system would be triggered for @p.
3033 3036
3034 3037 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): Tab-related
3035 3038 cleanups, code unmodified.
3036 3039
3037 3040 * IPython/genutils.py (Term): added a class for IPython to handle
3038 3041 output. In most cases it will just be a proxy for stdout/err, but
3039 3042 having this allows modifications to be made for some platforms,
3040 3043 such as handling color escapes under Windows. All of this code
3041 3044 was contributed by Gary Bishop, with minor modifications by me.
3042 3045 The actual changes affect many files.
3043 3046
3044 3047 2003-11-30 Fernando Perez <fperez@colorado.edu>
3045 3048
3046 3049 * IPython/iplib.py (file_matches): new completion code, courtesy
3047 3050 of Jeff Collins. This enables filename completion again under
3048 3051 python 2.3, which disabled it at the C level.
3049 3052
3050 3053 2003-11-11 Fernando Perez <fperez@colorado.edu>
3051 3054
3052 3055 * IPython/numutils.py (amap): Added amap() fn. Simple shorthand
3053 3056 for Numeric.array(map(...)), but often convenient.
3054 3057
3055 3058 2003-11-05 Fernando Perez <fperez@colorado.edu>
3056 3059
3057 3060 * IPython/numutils.py (frange): Changed a call from int() to
3058 3061 int(round()) to prevent a problem reported with arange() in the
3059 3062 numpy list.
3060 3063
3061 3064 2003-10-06 Fernando Perez <fperez@colorado.edu>
3062 3065
3063 3066 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): changed to
3064 3067 prevent crashes if sys lacks an argv attribute (it happens with
3065 3068 embedded interpreters which build a bare-bones sys module).
3066 3069 Thanks to a report/bugfix by Adam Hupp <hupp-AT-cs.wisc.edu>.
3067 3070
3068 3071 2003-09-24 Fernando Perez <fperez@colorado.edu>
3069 3072
3070 3073 * IPython/Magic.py (Magic._ofind): blanket except around getattr()
3071 3074 to protect against poorly written user objects where __getattr__
3072 3075 raises exceptions other than AttributeError. Thanks to a bug
3073 3076 report by Oliver Sander <osander-AT-gmx.de>.
3074 3077
3075 3078 * IPython/FakeModule.py (FakeModule.__repr__): this method was
3076 3079 missing. Thanks to bug report by Ralf Schmitt <ralf-AT-brainbot.com>.
3077 3080
3078 3081 2003-09-09 Fernando Perez <fperez@colorado.edu>
3079 3082
3080 3083 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
3081 3084 unpacking a list whith a callable as first element would
3082 3085 mistakenly trigger autocalling. Thanks to a bug report by Jeffery
3083 3086 Collins.
3084 3087
3085 3088 2003-08-25 *** Released version 0.5.0
3086 3089
3087 3090 2003-08-22 Fernando Perez <fperez@colorado.edu>
3088 3091
3089 3092 * IPython/ultraTB.py (VerboseTB.linereader): Improved handling of
3090 3093 improperly defined user exceptions. Thanks to feedback from Mark
3091 3094 Russell <mrussell-AT-verio.net>.
3092 3095
3093 3096 2003-08-20 Fernando Perez <fperez@colorado.edu>
3094 3097
3095 3098 * IPython/OInspect.py (Inspector.pinfo): changed String Form
3096 3099 printing so that it would print multi-line string forms starting
3097 3100 with a new line. This way the formatting is better respected for
3098 3101 objects which work hard to make nice string forms.
3099 3102
3100 3103 * IPython/iplib.py (InteractiveShell.handle_auto): Fix bug where
3101 3104 autocall would overtake data access for objects with both
3102 3105 __getitem__ and __call__.
3103 3106
3104 3107 2003-08-19 *** Released version 0.5.0-rc1
3105 3108
3106 3109 2003-08-19 Fernando Perez <fperez@colorado.edu>
3107 3110
3108 3111 * IPython/deep_reload.py (load_tail): single tiny change here
3109 3112 seems to fix the long-standing bug of dreload() failing to work
3110 3113 for dotted names. But this module is pretty tricky, so I may have
3111 3114 missed some subtlety. Needs more testing!.
3112 3115
3113 3116 * IPython/ultraTB.py (VerboseTB.linereader): harden against user
3114 3117 exceptions which have badly implemented __str__ methods.
3115 3118 (VerboseTB.text): harden against inspect.getinnerframes crashing,
3116 3119 which I've been getting reports about from Python 2.3 users. I
3117 3120 wish I had a simple test case to reproduce the problem, so I could
3118 3121 either write a cleaner workaround or file a bug report if
3119 3122 necessary.
3120 3123
3121 3124 * IPython/Magic.py (Magic.magic_edit): fixed bug where after
3122 3125 making a class 'foo', file 'foo.py' couldn't be edited. Thanks to
3123 3126 a bug report by Tjabo Kloppenburg.
3124 3127
3125 3128 * IPython/ultraTB.py (VerboseTB.debugger): hardened against pdb
3126 3129 crashes. Wrapped the pdb call in a blanket try/except, since pdb
3127 3130 seems rather unstable. Thanks to a bug report by Tjabo
3128 3131 Kloppenburg <tjabo.kloppenburg-AT-unix-ag.uni-siegen.de>.
3129 3132
3130 3133 * IPython/Release.py (version): release 0.5.0-rc1. I want to put
3131 3134 this out soon because of the critical fixes in the inner loop for
3132 3135 generators.
3133 3136
3134 3137 * IPython/Magic.py (Magic.getargspec): removed. This (and
3135 3138 _get_def) have been obsoleted by OInspect for a long time, I
3136 3139 hadn't noticed that they were dead code.
3137 3140 (Magic._ofind): restored _ofind functionality for a few literals
3138 3141 (those in ["''",'""','[]','{}','()']). But it won't work anymore
3139 3142 for things like "hello".capitalize?, since that would require a
3140 3143 potentially dangerous eval() again.
3141 3144
3142 3145 * IPython/iplib.py (InteractiveShell._prefilter): reorganized the
3143 3146 logic a bit more to clean up the escapes handling and minimize the
3144 3147 use of _ofind to only necessary cases. The interactive 'feel' of
3145 3148 IPython should have improved quite a bit with the changes in
3146 3149 _prefilter and _ofind (besides being far safer than before).
3147 3150
3148 3151 * IPython/Magic.py (Magic.magic_edit): Fixed old bug (but rather
3149 3152 obscure, never reported). Edit would fail to find the object to
3150 3153 edit under some circumstances.
3151 3154 (Magic._ofind): CRITICAL FIX. Finally removed the eval() calls
3152 3155 which were causing double-calling of generators. Those eval calls
3153 3156 were _very_ dangerous, since code with side effects could be
3154 3157 triggered. As they say, 'eval is evil'... These were the
3155 3158 nastiest evals in IPython. Besides, _ofind is now far simpler,
3156 3159 and it should also be quite a bit faster. Its use of inspect is
3157 3160 also safer, so perhaps some of the inspect-related crashes I've
3158 3161 seen lately with Python 2.3 might be taken care of. That will
3159 3162 need more testing.
3160 3163
3161 3164 2003-08-17 Fernando Perez <fperez@colorado.edu>
3162 3165
3163 3166 * IPython/iplib.py (InteractiveShell._prefilter): significant
3164 3167 simplifications to the logic for handling user escapes. Faster
3165 3168 and simpler code.
3166 3169
3167 3170 2003-08-14 Fernando Perez <fperez@colorado.edu>
3168 3171
3169 3172 * IPython/numutils.py (sum_flat): rewrote to be non-recursive.
3170 3173 Now it requires O(N) storage (N=size(a)) for non-contiguous input,
3171 3174 but it should be quite a bit faster. And the recursive version
3172 3175 generated O(log N) intermediate storage for all rank>1 arrays,
3173 3176 even if they were contiguous.
3174 3177 (l1norm): Added this function.
3175 3178 (norm): Added this function for arbitrary norms (including
3176 3179 l-infinity). l1 and l2 are still special cases for convenience
3177 3180 and speed.
3178 3181
3179 3182 2003-08-03 Fernando Perez <fperez@colorado.edu>
3180 3183
3181 3184 * IPython/Magic.py (Magic.magic_edit): Removed all remaining string
3182 3185 exceptions, which now raise PendingDeprecationWarnings in Python
3183 3186 2.3. There were some in Magic and some in Gnuplot2.
3184 3187
3185 3188 2003-06-30 Fernando Perez <fperez@colorado.edu>
3186 3189
3187 3190 * IPython/genutils.py (page): modified to call curses only for
3188 3191 terminals where TERM=='xterm'. After problems under many other
3189 3192 terminals were reported by Keith Beattie <KSBeattie-AT-lbl.gov>.
3190 3193
3191 3194 * IPython/iplib.py (complete): removed spurious 'print "IE"' which
3192 3195 would be triggered when readline was absent. This was just an old
3193 3196 debugging statement I'd forgotten to take out.
3194 3197
3195 3198 2003-06-20 Fernando Perez <fperez@colorado.edu>
3196 3199
3197 3200 * IPython/genutils.py (clock): modified to return only user time
3198 3201 (not counting system time), after a discussion on scipy. While
3199 3202 system time may be a useful quantity occasionally, it may much
3200 3203 more easily be skewed by occasional swapping or other similar
3201 3204 activity.
3202 3205
3203 3206 2003-06-05 Fernando Perez <fperez@colorado.edu>
3204 3207
3205 3208 * IPython/numutils.py (identity): new function, for building
3206 3209 arbitrary rank Kronecker deltas (mostly backwards compatible with
3207 3210 Numeric.identity)
3208 3211
3209 3212 2003-06-03 Fernando Perez <fperez@colorado.edu>
3210 3213
3211 3214 * IPython/iplib.py (InteractiveShell.handle_magic): protect
3212 3215 arguments passed to magics with spaces, to allow trailing '\' to
3213 3216 work normally (mainly for Windows users).
3214 3217
3215 3218 2003-05-29 Fernando Perez <fperez@colorado.edu>
3216 3219
3217 3220 * IPython/ipmaker.py (make_IPython): Load site._Helper() as help
3218 3221 instead of pydoc.help. This fixes a bizarre behavior where
3219 3222 printing '%s' % locals() would trigger the help system. Now
3220 3223 ipython behaves like normal python does.
3221 3224
3222 3225 Note that if one does 'from pydoc import help', the bizarre
3223 3226 behavior returns, but this will also happen in normal python, so
3224 3227 it's not an ipython bug anymore (it has to do with how pydoc.help
3225 3228 is implemented).
3226 3229
3227 3230 2003-05-22 Fernando Perez <fperez@colorado.edu>
3228 3231
3229 3232 * IPython/FlexCompleter.py (Completer.attr_matches): fixed to
3230 3233 return [] instead of None when nothing matches, also match to end
3231 3234 of line. Patch by Gary Bishop.
3232 3235
3233 3236 * IPython/ipmaker.py (make_IPython): Added same sys.excepthook
3234 3237 protection as before, for files passed on the command line. This
3235 3238 prevents the CrashHandler from kicking in if user files call into
3236 3239 sys.excepthook (such as PyQt and WxWindows have a nasty habit of
3237 3240 doing). After a report by Kasper Souren <Kasper.Souren-AT-ircam.fr>
3238 3241
3239 3242 2003-05-20 *** Released version 0.4.0
3240 3243
3241 3244 2003-05-20 Fernando Perez <fperez@colorado.edu>
3242 3245
3243 3246 * setup.py: added support for manpages. It's a bit hackish b/c of
3244 3247 a bug in the way the bdist_rpm distutils target handles gzipped
3245 3248 manpages, but it works. After a patch by Jack.
3246 3249
3247 3250 2003-05-19 Fernando Perez <fperez@colorado.edu>
3248 3251
3249 3252 * IPython/numutils.py: added a mockup of the kinds module, since
3250 3253 it was recently removed from Numeric. This way, numutils will
3251 3254 work for all users even if they are missing kinds.
3252 3255
3253 3256 * IPython/Magic.py (Magic._ofind): Harden against an inspect
3254 3257 failure, which can occur with SWIG-wrapped extensions. After a
3255 3258 crash report from Prabhu.
3256 3259
3257 3260 2003-05-16 Fernando Perez <fperez@colorado.edu>
3258 3261
3259 3262 * IPython/iplib.py (InteractiveShell.excepthook): New method to
3260 3263 protect ipython from user code which may call directly
3261 3264 sys.excepthook (this looks like an ipython crash to the user, even
3262 3265 when it isn't). After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
3263 3266 This is especially important to help users of WxWindows, but may
3264 3267 also be useful in other cases.
3265 3268
3266 3269 * IPython/ultraTB.py (AutoFormattedTB.__call__): Changed to allow
3267 3270 an optional tb_offset to be specified, and to preserve exception
3268 3271 info if given. After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
3269 3272
3270 3273 * ipython.1 (Default): Thanks to Jack's work, we now have manpages!
3271 3274
3272 3275 2003-05-15 Fernando Perez <fperez@colorado.edu>
3273 3276
3274 3277 * IPython/iplib.py (InteractiveShell.user_setup): Fix crash when
3275 3278 installing for a new user under Windows.
3276 3279
3277 3280 2003-05-12 Fernando Perez <fperez@colorado.edu>
3278 3281
3279 3282 * IPython/iplib.py (InteractiveShell.handle_emacs): New line
3280 3283 handler for Emacs comint-based lines. Currently it doesn't do
3281 3284 much (but importantly, it doesn't update the history cache). In
3282 3285 the future it may be expanded if Alex needs more functionality
3283 3286 there.
3284 3287
3285 3288 * IPython/CrashHandler.py (CrashHandler.__call__): Added platform
3286 3289 info to crash reports.
3287 3290
3288 3291 * IPython/iplib.py (InteractiveShell.mainloop): Added -c option,
3289 3292 just like Python's -c. Also fixed crash with invalid -color
3290 3293 option value at startup. Thanks to Will French
3291 3294 <wfrench-AT-bestweb.net> for the bug report.
3292 3295
3293 3296 2003-05-09 Fernando Perez <fperez@colorado.edu>
3294 3297
3295 3298 * IPython/genutils.py (EvalDict.__getitem__): Renamed EvalString
3296 3299 to EvalDict (it's a mapping, after all) and simplified its code
3297 3300 quite a bit, after a nice discussion on c.l.py where Gustavo
3298 3301 CΓ³rdova <gcordova-AT-sismex.com> suggested the new version.
3299 3302
3300 3303 2003-04-30 Fernando Perez <fperez@colorado.edu>
3301 3304
3302 3305 * IPython/genutils.py (timings_out): modified it to reduce its
3303 3306 overhead in the common reps==1 case.
3304 3307
3305 3308 2003-04-29 Fernando Perez <fperez@colorado.edu>
3306 3309
3307 3310 * IPython/genutils.py (timings_out): Modified to use the resource
3308 3311 module, which avoids the wraparound problems of time.clock().
3309 3312
3310 3313 2003-04-17 *** Released version 0.2.15pre4
3311 3314
3312 3315 2003-04-17 Fernando Perez <fperez@colorado.edu>
3313 3316
3314 3317 * setup.py (scriptfiles): Split windows-specific stuff over to a
3315 3318 separate file, in an attempt to have a Windows GUI installer.
3316 3319 That didn't work, but part of the groundwork is done.
3317 3320
3318 3321 * IPython/UserConfig/ipythonrc: Added M-i, M-o and M-I for
3319 3322 indent/unindent with 4 spaces. Particularly useful in combination
3320 3323 with the new auto-indent option.
3321 3324
3322 3325 2003-04-16 Fernando Perez <fperez@colorado.edu>
3323 3326
3324 3327 * IPython/Magic.py: various replacements of self.rc for
3325 3328 self.shell.rc. A lot more remains to be done to fully disentangle
3326 3329 this class from the main Shell class.
3327 3330
3328 3331 * IPython/GnuplotRuntime.py: added checks for mouse support so
3329 3332 that we don't try to enable it if the current gnuplot doesn't
3330 3333 really support it. Also added checks so that we don't try to
3331 3334 enable persist under Windows (where Gnuplot doesn't recognize the
3332 3335 option).
3333 3336
3334 3337 * IPython/iplib.py (InteractiveShell.interact): Added optional
3335 3338 auto-indenting code, after a patch by King C. Shu
3336 3339 <kingshu-AT-myrealbox.com>. It's off by default because it doesn't
3337 3340 get along well with pasting indented code. If I ever figure out
3338 3341 how to make that part go well, it will become on by default.
3339 3342
3340 3343 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixed bug which would
3341 3344 crash ipython if there was an unmatched '%' in the user's prompt
3342 3345 string. Reported by Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
3343 3346
3344 3347 * IPython/iplib.py (InteractiveShell.interact): removed the
3345 3348 ability to ask the user whether he wants to crash or not at the
3346 3349 'last line' exception handler. Calling functions at that point
3347 3350 changes the stack, and the error reports would have incorrect
3348 3351 tracebacks.
3349 3352
3350 3353 * IPython/Magic.py (Magic.magic_page): Added new @page magic, to
3351 3354 pass through a peger a pretty-printed form of any object. After a
3352 3355 contribution by Olivier Aubert <oaubert-AT-bat710.univ-lyon1.fr>
3353 3356
3354 3357 2003-04-14 Fernando Perez <fperez@colorado.edu>
3355 3358
3356 3359 * IPython/iplib.py (InteractiveShell.user_setup): Fixed bug where
3357 3360 all files in ~ would be modified at first install (instead of
3358 3361 ~/.ipython). This could be potentially disastrous, as the
3359 3362 modification (make line-endings native) could damage binary files.
3360 3363
3361 3364 2003-04-10 Fernando Perez <fperez@colorado.edu>
3362 3365
3363 3366 * IPython/iplib.py (InteractiveShell.handle_help): Modified to
3364 3367 handle only lines which are invalid python. This now means that
3365 3368 lines like 'x=1 #?' execute properly. Thanks to Jeffery Collins
3366 3369 for the bug report.
3367 3370
3368 3371 2003-04-01 Fernando Perez <fperez@colorado.edu>
3369 3372
3370 3373 * IPython/iplib.py (InteractiveShell.showtraceback): Fixed bug
3371 3374 where failing to set sys.last_traceback would crash pdb.pm().
3372 3375 Thanks to Jeffery D. Collins <Jeff.Collins-AT-vexcel.com> for the bug
3373 3376 report.
3374 3377
3375 3378 2003-03-25 Fernando Perez <fperez@colorado.edu>
3376 3379
3377 3380 * IPython/Magic.py (Magic.magic_prun): rstrip() output of profiler
3378 3381 before printing it (it had a lot of spurious blank lines at the
3379 3382 end).
3380 3383
3381 3384 * IPython/Gnuplot2.py (Gnuplot.hardcopy): fixed bug where lpr
3382 3385 output would be sent 21 times! Obviously people don't use this
3383 3386 too often, or I would have heard about it.
3384 3387
3385 3388 2003-03-24 Fernando Perez <fperez@colorado.edu>
3386 3389
3387 3390 * setup.py (scriptfiles): renamed the data_files parameter from
3388 3391 'base' to 'data' to fix rpm build issues. Thanks to Ralf Ahlbrink
3389 3392 for the patch.
3390 3393
3391 3394 2003-03-20 Fernando Perez <fperez@colorado.edu>
3392 3395
3393 3396 * IPython/genutils.py (error): added error() and fatal()
3394 3397 functions.
3395 3398
3396 3399 2003-03-18 *** Released version 0.2.15pre3
3397 3400
3398 3401 2003-03-18 Fernando Perez <fperez@colorado.edu>
3399 3402
3400 3403 * setupext/install_data_ext.py
3401 3404 (install_data_ext.initialize_options): Class contributed by Jack
3402 3405 Moffit for fixing the old distutils hack. He is sending this to
3403 3406 the distutils folks so in the future we may not need it as a
3404 3407 private fix.
3405 3408
3406 3409 * MANIFEST.in: Extensive reorganization, based on Jack Moffit's
3407 3410 changes for Debian packaging. See his patch for full details.
3408 3411 The old distutils hack of making the ipythonrc* files carry a
3409 3412 bogus .py extension is gone, at last. Examples were moved to a
3410 3413 separate subdir under doc/, and the separate executable scripts
3411 3414 now live in their own directory. Overall a great cleanup. The
3412 3415 manual was updated to use the new files, and setup.py has been
3413 3416 fixed for this setup.
3414 3417
3415 3418 * IPython/PyColorize.py (Parser.usage): made non-executable and
3416 3419 created a pycolor wrapper around it to be included as a script.
3417 3420
3418 3421 2003-03-12 *** Released version 0.2.15pre2
3419 3422
3420 3423 2003-03-12 Fernando Perez <fperez@colorado.edu>
3421 3424
3422 3425 * IPython/ColorANSI.py (make_color_table): Finally fixed the
3423 3426 long-standing problem with garbage characters in some terminals.
3424 3427 The issue was really that the \001 and \002 escapes must _only_ be
3425 3428 passed to input prompts (which call readline), but _never_ to
3426 3429 normal text to be printed on screen. I changed ColorANSI to have
3427 3430 two classes: TermColors and InputTermColors, each with the
3428 3431 appropriate escapes for input prompts or normal text. The code in
3429 3432 Prompts.py got slightly more complicated, but this very old and
3430 3433 annoying bug is finally fixed.
3431 3434
3432 3435 All the credit for nailing down the real origin of this problem
3433 3436 and the correct solution goes to Jack Moffit <jack-AT-xiph.org>.
3434 3437 *Many* thanks to him for spending quite a bit of effort on this.
3435 3438
3436 3439 2003-03-05 *** Released version 0.2.15pre1
3437 3440
3438 3441 2003-03-03 Fernando Perez <fperez@colorado.edu>
3439 3442
3440 3443 * IPython/FakeModule.py: Moved the former _FakeModule to a
3441 3444 separate file, because it's also needed by Magic (to fix a similar
3442 3445 pickle-related issue in @run).
3443 3446
3444 3447 2003-03-02 Fernando Perez <fperez@colorado.edu>
3445 3448
3446 3449 * IPython/Magic.py (Magic.magic_autocall): new magic to control
3447 3450 the autocall option at runtime.
3448 3451 (Magic.magic_dhist): changed self.user_ns to self.shell.user_ns
3449 3452 across Magic.py to start separating Magic from InteractiveShell.
3450 3453 (Magic._ofind): Fixed to return proper namespace for dotted
3451 3454 names. Before, a dotted name would always return 'not currently
3452 3455 defined', because it would find the 'parent'. s.x would be found,
3453 3456 but since 'x' isn't defined by itself, it would get confused.
3454 3457 (Magic.magic_run): Fixed pickling problems reported by Ralf
3455 3458 Ahlbrink <RAhlbrink-AT-RosenInspection.net>. The fix was similar to
3456 3459 that I'd used when Mike Heeter reported similar issues at the
3457 3460 top-level, but now for @run. It boils down to injecting the
3458 3461 namespace where code is being executed with something that looks
3459 3462 enough like a module to fool pickle.dump(). Since a pickle stores
3460 3463 a named reference to the importing module, we need this for
3461 3464 pickles to save something sensible.
3462 3465
3463 3466 * IPython/ipmaker.py (make_IPython): added an autocall option.
3464 3467
3465 3468 * IPython/iplib.py (InteractiveShell._prefilter): reordered all of
3466 3469 the auto-eval code. Now autocalling is an option, and the code is
3467 3470 also vastly safer. There is no more eval() involved at all.
3468 3471
3469 3472 2003-03-01 Fernando Perez <fperez@colorado.edu>
3470 3473
3471 3474 * IPython/Magic.py (Magic._ofind): Changed interface to return a
3472 3475 dict with named keys instead of a tuple.
3473 3476
3474 3477 * IPython: Started using CVS for IPython as of 0.2.15pre1.
3475 3478
3476 3479 * setup.py (make_shortcut): Fixed message about directories
3477 3480 created during Windows installation (the directories were ok, just
3478 3481 the printed message was misleading). Thanks to Chris Liechti
3479 3482 <cliechti-AT-gmx.net> for the heads up.
3480 3483
3481 3484 2003-02-21 Fernando Perez <fperez@colorado.edu>
3482 3485
3483 3486 * IPython/iplib.py (InteractiveShell._prefilter): Fixed catching
3484 3487 of ValueError exception when checking for auto-execution. This
3485 3488 one is raised by things like Numeric arrays arr.flat when the
3486 3489 array is non-contiguous.
3487 3490
3488 3491 2003-01-31 Fernando Perez <fperez@colorado.edu>
3489 3492
3490 3493 * IPython/genutils.py (SystemExec.bq): Fixed bug where bq would
3491 3494 not return any value at all (even though the command would get
3492 3495 executed).
3493 3496 (xsys): Flush stdout right after printing the command to ensure
3494 3497 proper ordering of commands and command output in the total
3495 3498 output.
3496 3499 (SystemExec/xsys/bq): Switched the names of xsys/bq and
3497 3500 system/getoutput as defaults. The old ones are kept for
3498 3501 compatibility reasons, so no code which uses this library needs
3499 3502 changing.
3500 3503
3501 3504 2003-01-27 *** Released version 0.2.14
3502 3505
3503 3506 2003-01-25 Fernando Perez <fperez@colorado.edu>
3504 3507
3505 3508 * IPython/Magic.py (Magic.magic_edit): Fixed problem where
3506 3509 functions defined in previous edit sessions could not be re-edited
3507 3510 (because the temp files were immediately removed). Now temp files
3508 3511 are removed only at IPython's exit.
3509 3512 (Magic.magic_run): Improved @run to perform shell-like expansions
3510 3513 on its arguments (~users and $VARS). With this, @run becomes more
3511 3514 like a normal command-line.
3512 3515
3513 3516 * IPython/Shell.py (IPShellEmbed.__call__): Fixed a bunch of small
3514 3517 bugs related to embedding and cleaned up that code. A fairly
3515 3518 important one was the impossibility to access the global namespace
3516 3519 through the embedded IPython (only local variables were visible).
3517 3520
3518 3521 2003-01-14 Fernando Perez <fperez@colorado.edu>
3519 3522
3520 3523 * IPython/iplib.py (InteractiveShell._prefilter): Fixed
3521 3524 auto-calling to be a bit more conservative. Now it doesn't get
3522 3525 triggered if any of '!=()<>' are in the rest of the input line, to
3523 3526 allow comparing callables. Thanks to Alex for the heads up.
3524 3527
3525 3528 2003-01-07 Fernando Perez <fperez@colorado.edu>
3526 3529
3527 3530 * IPython/genutils.py (page): fixed estimation of the number of
3528 3531 lines in a string to be paged to simply count newlines. This
3529 3532 prevents over-guessing due to embedded escape sequences. A better
3530 3533 long-term solution would involve stripping out the control chars
3531 3534 for the count, but it's potentially so expensive I just don't
3532 3535 think it's worth doing.
3533 3536
3534 3537 2002-12-19 *** Released version 0.2.14pre50
3535 3538
3536 3539 2002-12-19 Fernando Perez <fperez@colorado.edu>
3537 3540
3538 3541 * tools/release (version): Changed release scripts to inform
3539 3542 Andrea and build a NEWS file with a list of recent changes.
3540 3543
3541 3544 * IPython/ColorANSI.py (__all__): changed terminal detection
3542 3545 code. Seems to work better for xterms without breaking
3543 3546 konsole. Will need more testing to determine if WinXP and Mac OSX
3544 3547 also work ok.
3545 3548
3546 3549 2002-12-18 *** Released version 0.2.14pre49
3547 3550
3548 3551 2002-12-18 Fernando Perez <fperez@colorado.edu>
3549 3552
3550 3553 * Docs: added new info about Mac OSX, from Andrea.
3551 3554
3552 3555 * IPython/Gnuplot2.py (String): Added a String PlotItem class to
3553 3556 allow direct plotting of python strings whose format is the same
3554 3557 of gnuplot data files.
3555 3558
3556 3559 2002-12-16 Fernando Perez <fperez@colorado.edu>
3557 3560
3558 3561 * IPython/iplib.py (InteractiveShell.interact): fixed default (y)
3559 3562 value of exit question to be acknowledged.
3560 3563
3561 3564 2002-12-03 Fernando Perez <fperez@colorado.edu>
3562 3565
3563 3566 * IPython/ipmaker.py: removed generators, which had been added
3564 3567 by mistake in an earlier debugging run. This was causing trouble
3565 3568 to users of python 2.1.x. Thanks to Abel Daniel <abli-AT-freemail.hu>
3566 3569 for pointing this out.
3567 3570
3568 3571 2002-11-17 Fernando Perez <fperez@colorado.edu>
3569 3572
3570 3573 * Manual: updated the Gnuplot section.
3571 3574
3572 3575 * IPython/GnuplotRuntime.py: refactored a lot all this code, with
3573 3576 a much better split of what goes in Runtime and what goes in
3574 3577 Interactive.
3575 3578
3576 3579 * IPython/ipmaker.py: fixed bug where import_fail_info wasn't
3577 3580 being imported from iplib.
3578 3581
3579 3582 * IPython/GnuplotInteractive.py (magic_gpc): renamed @gp to @gpc
3580 3583 for command-passing. Now the global Gnuplot instance is called
3581 3584 'gp' instead of 'g', which was really a far too fragile and
3582 3585 common name.
3583 3586
3584 3587 * IPython/Gnuplot2.py (eps_fix_bbox): added this to fix broken
3585 3588 bounding boxes generated by Gnuplot for square plots.
3586 3589
3587 3590 * IPython/genutils.py (popkey): new function added. I should
3588 3591 suggest this on c.l.py as a dict method, it seems useful.
3589 3592
3590 3593 * IPython/Gnuplot2.py (Gnuplot.plot): Overhauled plot and replot
3591 3594 to transparently handle PostScript generation. MUCH better than
3592 3595 the previous plot_eps/replot_eps (which I removed now). The code
3593 3596 is also fairly clean and well documented now (including
3594 3597 docstrings).
3595 3598
3596 3599 2002-11-13 Fernando Perez <fperez@colorado.edu>
3597 3600
3598 3601 * IPython/Magic.py (Magic.magic_edit): fixed docstring
3599 3602 (inconsistent with options).
3600 3603
3601 3604 * IPython/Gnuplot2.py (Gnuplot.hardcopy): hardcopy had been
3602 3605 manually disabled, I don't know why. Fixed it.
3603 3606 (Gnuplot._plot_eps): added new plot_eps/replot_eps to get directly
3604 3607 eps output.
3605 3608
3606 3609 2002-11-12 Fernando Perez <fperez@colorado.edu>
3607 3610
3608 3611 * IPython/genutils.py (ask_yes_no): trap EOF and ^C so that they
3609 3612 don't propagate up to caller. Fixes crash reported by François
3610 3613 Pinard.
3611 3614
3612 3615 2002-11-09 Fernando Perez <fperez@colorado.edu>
3613 3616
3614 3617 * IPython/ipmaker.py (make_IPython): fixed problem with writing
3615 3618 history file for new users.
3616 3619 (make_IPython): fixed bug where initial install would leave the
3617 3620 user running in the .ipython dir.
3618 3621 (make_IPython): fixed bug where config dir .ipython would be
3619 3622 created regardless of the given -ipythondir option. Thanks to Cory
3620 3623 Dodt <cdodt-AT-fcoe.k12.ca.us> for the bug report.
3621 3624
3622 3625 * IPython/genutils.py (ask_yes_no): new function for asking yes/no
3623 3626 type confirmations. Will need to use it in all of IPython's code
3624 3627 consistently.
3625 3628
3626 3629 * IPython/CrashHandler.py (CrashHandler.__call__): changed the
3627 3630 context to print 31 lines instead of the default 5. This will make
3628 3631 the crash reports extremely detailed in case the problem is in
3629 3632 libraries I don't have access to.
3630 3633
3631 3634 * IPython/iplib.py (InteractiveShell.interact): changed the 'last
3632 3635 line of defense' code to still crash, but giving users fair
3633 3636 warning. I don't want internal errors to go unreported: if there's
3634 3637 an internal problem, IPython should crash and generate a full
3635 3638 report.
3636 3639
3637 3640 2002-11-08 Fernando Perez <fperez@colorado.edu>
3638 3641
3639 3642 * IPython/iplib.py (InteractiveShell.interact): added code to trap
3640 3643 otherwise uncaught exceptions which can appear if people set
3641 3644 sys.stdout to something badly broken. Thanks to a crash report
3642 3645 from henni-AT-mail.brainbot.com.
3643 3646
3644 3647 2002-11-04 Fernando Perez <fperez@colorado.edu>
3645 3648
3646 3649 * IPython/iplib.py (InteractiveShell.interact): added
3647 3650 __IPYTHON__active to the builtins. It's a flag which goes on when
3648 3651 the interaction starts and goes off again when it stops. This
3649 3652 allows embedding code to detect being inside IPython. Before this
3650 3653 was done via __IPYTHON__, but that only shows that an IPython
3651 3654 instance has been created.
3652 3655
3653 3656 * IPython/Magic.py (Magic.magic_env): I realized that in a
3654 3657 UserDict, instance.data holds the data as a normal dict. So I
3655 3658 modified @env to return os.environ.data instead of rebuilding a
3656 3659 dict by hand.
3657 3660
3658 3661 2002-11-02 Fernando Perez <fperez@colorado.edu>
3659 3662
3660 3663 * IPython/genutils.py (warn): changed so that level 1 prints no
3661 3664 header. Level 2 is now the default (with 'WARNING' header, as
3662 3665 before). I think I tracked all places where changes were needed in
3663 3666 IPython, but outside code using the old level numbering may have
3664 3667 broken.
3665 3668
3666 3669 * IPython/iplib.py (InteractiveShell.runcode): added this to
3667 3670 handle the tracebacks in SystemExit traps correctly. The previous
3668 3671 code (through interact) was printing more of the stack than
3669 3672 necessary, showing IPython internal code to the user.
3670 3673
3671 3674 * IPython/UserConfig/ipythonrc.py: Made confirm_exit 1 by
3672 3675 default. Now that the default at the confirmation prompt is yes,
3673 3676 it's not so intrusive. François' argument that ipython sessions
3674 3677 tend to be complex enough not to lose them from an accidental C-d,
3675 3678 is a valid one.
3676 3679
3677 3680 * IPython/iplib.py (InteractiveShell.interact): added a
3678 3681 showtraceback() call to the SystemExit trap, and modified the exit
3679 3682 confirmation to have yes as the default.
3680 3683
3681 3684 * IPython/UserConfig/ipythonrc.py: removed 'session' option from
3682 3685 this file. It's been gone from the code for a long time, this was
3683 3686 simply leftover junk.
3684 3687
3685 3688 2002-11-01 Fernando Perez <fperez@colorado.edu>
3686 3689
3687 3690 * IPython/UserConfig/ipythonrc.py: new confirm_exit option
3688 3691 added. If set, IPython now traps EOF and asks for
3689 3692 confirmation. After a request by François Pinard.
3690 3693
3691 3694 * IPython/Magic.py (Magic.magic_Exit): New @Exit and @Quit instead
3692 3695 of @abort, and with a new (better) mechanism for handling the
3693 3696 exceptions.
3694 3697
3695 3698 2002-10-27 Fernando Perez <fperez@colorado.edu>
3696 3699
3697 3700 * IPython/usage.py (__doc__): updated the --help information and
3698 3701 the ipythonrc file to indicate that -log generates
3699 3702 ./ipython.log. Also fixed the corresponding info in @logstart.
3700 3703 This and several other fixes in the manuals thanks to reports by
3701 3704 François Pinard <pinard-AT-iro.umontreal.ca>.
3702 3705
3703 3706 * IPython/Logger.py (Logger.switch_log): Fixed error message to
3704 3707 refer to @logstart (instead of @log, which doesn't exist).
3705 3708
3706 3709 * IPython/iplib.py (InteractiveShell._prefilter): fixed
3707 3710 AttributeError crash. Thanks to Christopher Armstrong
3708 3711 <radix-AT-twistedmatrix.com> for the report/fix. This bug had been
3709 3712 introduced recently (in 0.2.14pre37) with the fix to the eval
3710 3713 problem mentioned below.
3711 3714
3712 3715 2002-10-17 Fernando Perez <fperez@colorado.edu>
3713 3716
3714 3717 * IPython/ConfigLoader.py (ConfigLoader.load): Fixes for Windows
3715 3718 installation. Thanks to Leonardo Santagada <retype-AT-terra.com.br>.
3716 3719
3717 3720 * IPython/iplib.py (InteractiveShell._prefilter): Many changes to
3718 3721 this function to fix a problem reported by Alex Schmolck. He saw
3719 3722 it with list comprehensions and generators, which were getting
3720 3723 called twice. The real problem was an 'eval' call in testing for
3721 3724 automagic which was evaluating the input line silently.
3722 3725
3723 3726 This is a potentially very nasty bug, if the input has side
3724 3727 effects which must not be repeated. The code is much cleaner now,
3725 3728 without any blanket 'except' left and with a regexp test for
3726 3729 actual function names.
3727 3730
3728 3731 But an eval remains, which I'm not fully comfortable with. I just
3729 3732 don't know how to find out if an expression could be a callable in
3730 3733 the user's namespace without doing an eval on the string. However
3731 3734 that string is now much more strictly checked so that no code
3732 3735 slips by, so the eval should only happen for things that can
3733 3736 really be only function/method names.
3734 3737
3735 3738 2002-10-15 Fernando Perez <fperez@colorado.edu>
3736 3739
3737 3740 * Updated LyX to 1.2.1 so I can work on the docs again. Added Mac
3738 3741 OSX information to main manual, removed README_Mac_OSX file from
3739 3742 distribution. Also updated credits for recent additions.
3740 3743
3741 3744 2002-10-10 Fernando Perez <fperez@colorado.edu>
3742 3745
3743 3746 * README_Mac_OSX: Added a README for Mac OSX users for fixing
3744 3747 terminal-related issues. Many thanks to Andrea Riciputi
3745 3748 <andrea.riciputi-AT-libero.it> for writing it.
3746 3749
3747 3750 * IPython/UserConfig/ipythonrc.py: Fixes to various small issues,
3748 3751 thanks to Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
3749 3752
3750 3753 * setup.py (make_shortcut): Fixes for Windows installation. Thanks
3751 3754 to Fredrik Kant <fredrik.kant-AT-front.com> and Syver Enstad
3752 3755 <syver-en-AT-online.no> who both submitted patches for this problem.
3753 3756
3754 3757 * IPython/iplib.py (InteractiveShell.embed_mainloop): Patch for
3755 3758 global embedding to make sure that things don't overwrite user
3756 3759 globals accidentally. Thanks to Richard <rxe-AT-renre-europe.com>
3757 3760
3758 3761 * IPython/Gnuplot2.py (gp): Patch for Gnuplot.py 1.6
3759 3762 compatibility. Thanks to Hayden Callow
3760 3763 <h.callow-AT-elec.canterbury.ac.nz>
3761 3764
3762 3765 2002-10-04 Fernando Perez <fperez@colorado.edu>
3763 3766
3764 3767 * IPython/Gnuplot2.py (PlotItem): Added 'index' option for
3765 3768 Gnuplot.File objects.
3766 3769
3767 3770 2002-07-23 Fernando Perez <fperez@colorado.edu>
3768 3771
3769 3772 * IPython/genutils.py (timing): Added timings() and timing() for
3770 3773 quick access to the most commonly needed data, the execution
3771 3774 times. Old timing() renamed to timings_out().
3772 3775
3773 3776 2002-07-18 Fernando Perez <fperez@colorado.edu>
3774 3777
3775 3778 * IPython/Shell.py (IPShellEmbed.restore_system_completer): fixed
3776 3779 bug with nested instances disrupting the parent's tab completion.
3777 3780
3778 3781 * IPython/iplib.py (all_completions): Added Alex Schmolck's
3779 3782 all_completions code to begin the emacs integration.
3780 3783
3781 3784 * IPython/Gnuplot2.py (zip_items): Added optional 'titles'
3782 3785 argument to allow titling individual arrays when plotting.
3783 3786
3784 3787 2002-07-15 Fernando Perez <fperez@colorado.edu>
3785 3788
3786 3789 * setup.py (make_shortcut): changed to retrieve the value of
3787 3790 'Program Files' directory from the registry (this value changes in
3788 3791 non-english versions of Windows). Thanks to Thomas Fanslau
3789 3792 <tfanslau-AT-gmx.de> for the report.
3790 3793
3791 3794 2002-07-10 Fernando Perez <fperez@colorado.edu>
3792 3795
3793 3796 * IPython/ultraTB.py (VerboseTB.debugger): enabled workaround for
3794 3797 a bug in pdb, which crashes if a line with only whitespace is
3795 3798 entered. Bug report submitted to sourceforge.
3796 3799
3797 3800 2002-07-09 Fernando Perez <fperez@colorado.edu>
3798 3801
3799 3802 * IPython/ultraTB.py (VerboseTB.nullrepr): fixed rare crash when
3800 3803 reporting exceptions (it's a bug in inspect.py, I just set a
3801 3804 workaround).
3802 3805
3803 3806 2002-07-08 Fernando Perez <fperez@colorado.edu>
3804 3807
3805 3808 * IPython/iplib.py (InteractiveShell.__init__): fixed reference to
3806 3809 __IPYTHON__ in __builtins__ to show up in user_ns.
3807 3810
3808 3811 2002-07-03 Fernando Perez <fperez@colorado.edu>
3809 3812
3810 3813 * IPython/GnuplotInteractive.py (magic_gp_set_default): changed
3811 3814 name from @gp_set_instance to @gp_set_default.
3812 3815
3813 3816 * IPython/ipmaker.py (make_IPython): default editor value set to
3814 3817 '0' (a string), to match the rc file. Otherwise will crash when
3815 3818 .strip() is called on it.
3816 3819
3817 3820
3818 3821 2002-06-28 Fernando Perez <fperez@colorado.edu>
3819 3822
3820 3823 * IPython/iplib.py (InteractiveShell.safe_execfile): fix importing
3821 3824 of files in current directory when a file is executed via
3822 3825 @run. Patch also by RA <ralf_ahlbrink-AT-web.de>.
3823 3826
3824 3827 * setup.py (manfiles): fix for rpm builds, submitted by RA
3825 3828 <ralf_ahlbrink-AT-web.de>. Now we have RPMs!
3826 3829
3827 3830 * IPython/ipmaker.py (make_IPython): fixed lookup of default
3828 3831 editor when set to '0'. Problem was, '0' evaluates to True (it's a
3829 3832 string!). A. Schmolck caught this one.
3830 3833
3831 3834 2002-06-27 Fernando Perez <fperez@colorado.edu>
3832 3835
3833 3836 * IPython/ipmaker.py (make_IPython): fixed bug when running user
3834 3837 defined files at the cmd line. __name__ wasn't being set to
3835 3838 __main__.
3836 3839
3837 3840 * IPython/Gnuplot2.py (zip_items): improved it so it can plot also
3838 3841 regular lists and tuples besides Numeric arrays.
3839 3842
3840 3843 * IPython/Prompts.py (CachedOutput.__call__): Added output
3841 3844 supression for input ending with ';'. Similar to Mathematica and
3842 3845 Matlab. The _* vars and Out[] list are still updated, just like
3843 3846 Mathematica behaves.
3844 3847
3845 3848 2002-06-25 Fernando Perez <fperez@colorado.edu>
3846 3849
3847 3850 * IPython/ConfigLoader.py (ConfigLoader.load): fixed checking of
3848 3851 .ini extensions for profiels under Windows.
3849 3852
3850 3853 * IPython/OInspect.py (Inspector.pinfo): improved alignment of
3851 3854 string form. Fix contributed by Alexander Schmolck
3852 3855 <a.schmolck-AT-gmx.net>
3853 3856
3854 3857 * IPython/GnuplotRuntime.py (gp_new): new function. Returns a
3855 3858 pre-configured Gnuplot instance.
3856 3859
3857 3860 2002-06-21 Fernando Perez <fperez@colorado.edu>
3858 3861
3859 3862 * IPython/numutils.py (exp_safe): new function, works around the
3860 3863 underflow problems in Numeric.
3861 3864 (log2): New fn. Safe log in base 2: returns exact integer answer
3862 3865 for exact integer powers of 2.
3863 3866
3864 3867 * IPython/Magic.py (get_py_filename): fixed it not expanding '~'
3865 3868 properly.
3866 3869
3867 3870 2002-06-20 Fernando Perez <fperez@colorado.edu>
3868 3871
3869 3872 * IPython/genutils.py (timing): new function like
3870 3873 Mathematica's. Similar to time_test, but returns more info.
3871 3874
3872 3875 2002-06-18 Fernando Perez <fperez@colorado.edu>
3873 3876
3874 3877 * IPython/Magic.py (Magic.magic_save): modified @save and @r
3875 3878 according to Mike Heeter's suggestions.
3876 3879
3877 3880 2002-06-16 Fernando Perez <fperez@colorado.edu>
3878 3881
3879 3882 * IPython/GnuplotRuntime.py: Massive overhaul to the Gnuplot
3880 3883 system. GnuplotMagic is gone as a user-directory option. New files
3881 3884 make it easier to use all the gnuplot stuff both from external
3882 3885 programs as well as from IPython. Had to rewrite part of
3883 3886 hardcopy() b/c of a strange bug: often the ps files simply don't
3884 3887 get created, and require a repeat of the command (often several
3885 3888 times).
3886 3889
3887 3890 * IPython/ultraTB.py (AutoFormattedTB.__call__): changed to
3888 3891 resolve output channel at call time, so that if sys.stderr has
3889 3892 been redirected by user this gets honored.
3890 3893
3891 3894 2002-06-13 Fernando Perez <fperez@colorado.edu>
3892 3895
3893 3896 * IPython/Shell.py (IPShell.__init__): Changed IPythonShell to
3894 3897 IPShell. Kept a copy with the old names to avoid breaking people's
3895 3898 embedded code.
3896 3899
3897 3900 * IPython/ipython: simplified it to the bare minimum after
3898 3901 Holger's suggestions. Added info about how to use it in
3899 3902 PYTHONSTARTUP.
3900 3903
3901 3904 * IPython/Shell.py (IPythonShell): changed the options passing
3902 3905 from a string with funky %s replacements to a straight list. Maybe
3903 3906 a bit more typing, but it follows sys.argv conventions, so there's
3904 3907 less special-casing to remember.
3905 3908
3906 3909 2002-06-12 Fernando Perez <fperez@colorado.edu>
3907 3910
3908 3911 * IPython/Magic.py (Magic.magic_r): new magic auto-repeat
3909 3912 command. Thanks to a suggestion by Mike Heeter.
3910 3913 (Magic.magic_pfile): added behavior to look at filenames if given
3911 3914 arg is not a defined object.
3912 3915 (Magic.magic_save): New @save function to save code snippets. Also
3913 3916 a Mike Heeter idea.
3914 3917
3915 3918 * IPython/UserConfig/GnuplotMagic.py (plot): Improvements to
3916 3919 plot() and replot(). Much more convenient now, especially for
3917 3920 interactive use.
3918 3921
3919 3922 * IPython/Magic.py (Magic.magic_run): Added .py automatically to
3920 3923 filenames.
3921 3924
3922 3925 2002-06-02 Fernando Perez <fperez@colorado.edu>
3923 3926
3924 3927 * IPython/Struct.py (Struct.__init__): modified to admit
3925 3928 initialization via another struct.
3926 3929
3927 3930 * IPython/genutils.py (SystemExec.__init__): New stateful
3928 3931 interface to xsys and bq. Useful for writing system scripts.
3929 3932
3930 3933 2002-05-30 Fernando Perez <fperez@colorado.edu>
3931 3934
3932 3935 * MANIFEST.in: Changed docfile selection to exclude all the lyx
3933 3936 documents. This will make the user download smaller (it's getting
3934 3937 too big).
3935 3938
3936 3939 2002-05-29 Fernando Perez <fperez@colorado.edu>
3937 3940
3938 3941 * IPython/iplib.py (_FakeModule.__init__): New class introduced to
3939 3942 fix problems with shelve and pickle. Seems to work, but I don't
3940 3943 know if corner cases break it. Thanks to Mike Heeter
3941 3944 <korora-AT-SDF.LONESTAR.ORG> for the bug reports and test cases.
3942 3945
3943 3946 2002-05-24 Fernando Perez <fperez@colorado.edu>
3944 3947
3945 3948 * IPython/Magic.py (Macro.__init__): fixed magics embedded in
3946 3949 macros having broken.
3947 3950
3948 3951 2002-05-21 Fernando Perez <fperez@colorado.edu>
3949 3952
3950 3953 * IPython/Magic.py (Magic.magic_logstart): fixed recently
3951 3954 introduced logging bug: all history before logging started was
3952 3955 being written one character per line! This came from the redesign
3953 3956 of the input history as a special list which slices to strings,
3954 3957 not to lists.
3955 3958
3956 3959 2002-05-20 Fernando Perez <fperez@colorado.edu>
3957 3960
3958 3961 * IPython/Prompts.py (CachedOutput.__init__): made the color table
3959 3962 be an attribute of all classes in this module. The design of these
3960 3963 classes needs some serious overhauling.
3961 3964
3962 3965 * IPython/DPyGetOpt.py (DPyGetOpt.setPosixCompliance): fixed bug
3963 3966 which was ignoring '_' in option names.
3964 3967
3965 3968 * IPython/ultraTB.py (FormattedTB.__init__): Changed
3966 3969 'Verbose_novars' to 'Context' and made it the new default. It's a
3967 3970 bit more readable and also safer than verbose.
3968 3971
3969 3972 * IPython/PyColorize.py (Parser.__call__): Fixed coloring of
3970 3973 triple-quoted strings.
3971 3974
3972 3975 * IPython/OInspect.py (__all__): new module exposing the object
3973 3976 introspection facilities. Now the corresponding magics are dummy
3974 3977 wrappers around this. Having this module will make it much easier
3975 3978 to put these functions into our modified pdb.
3976 3979 This new object inspector system uses the new colorizing module,
3977 3980 so source code and other things are nicely syntax highlighted.
3978 3981
3979 3982 2002-05-18 Fernando Perez <fperez@colorado.edu>
3980 3983
3981 3984 * IPython/ColorANSI.py: Split the coloring tools into a separate
3982 3985 module so I can use them in other code easier (they were part of
3983 3986 ultraTB).
3984 3987
3985 3988 2002-05-17 Fernando Perez <fperez@colorado.edu>
3986 3989
3987 3990 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3988 3991 fixed it to set the global 'g' also to the called instance, as
3989 3992 long as 'g' was still a gnuplot instance (so it doesn't overwrite
3990 3993 user's 'g' variables).
3991 3994
3992 3995 * IPython/iplib.py (InteractiveShell.__init__): Added In/Out
3993 3996 global variables (aliases to _ih,_oh) so that users which expect
3994 3997 In[5] or Out[7] to work aren't unpleasantly surprised.
3995 3998 (InputList.__getslice__): new class to allow executing slices of
3996 3999 input history directly. Very simple class, complements the use of
3997 4000 macros.
3998 4001
3999 4002 2002-05-16 Fernando Perez <fperez@colorado.edu>
4000 4003
4001 4004 * setup.py (docdirbase): make doc directory be just doc/IPython
4002 4005 without version numbers, it will reduce clutter for users.
4003 4006
4004 4007 * IPython/Magic.py (Magic.magic_run): Add explicit local dict to
4005 4008 execfile call to prevent possible memory leak. See for details:
4006 4009 http://mail.python.org/pipermail/python-list/2002-February/088476.html
4007 4010
4008 4011 2002-05-15 Fernando Perez <fperez@colorado.edu>
4009 4012
4010 4013 * IPython/Magic.py (Magic.magic_psource): made the object
4011 4014 introspection names be more standard: pdoc, pdef, pfile and
4012 4015 psource. They all print/page their output, and it makes
4013 4016 remembering them easier. Kept old names for compatibility as
4014 4017 aliases.
4015 4018
4016 4019 2002-05-14 Fernando Perez <fperez@colorado.edu>
4017 4020
4018 4021 * IPython/UserConfig/GnuplotMagic.py: I think I finally understood
4019 4022 what the mouse problem was. The trick is to use gnuplot with temp
4020 4023 files and NOT with pipes (for data communication), because having
4021 4024 both pipes and the mouse on is bad news.
4022 4025
4023 4026 2002-05-13 Fernando Perez <fperez@colorado.edu>
4024 4027
4025 4028 * IPython/Magic.py (Magic._ofind): fixed namespace order search
4026 4029 bug. Information would be reported about builtins even when
4027 4030 user-defined functions overrode them.
4028 4031
4029 4032 2002-05-11 Fernando Perez <fperez@colorado.edu>
4030 4033
4031 4034 * IPython/__init__.py (__all__): removed FlexCompleter from
4032 4035 __all__ so that things don't fail in platforms without readline.
4033 4036
4034 4037 2002-05-10 Fernando Perez <fperez@colorado.edu>
4035 4038
4036 4039 * IPython/__init__.py (__all__): removed numutils from __all__ b/c
4037 4040 it requires Numeric, effectively making Numeric a dependency for
4038 4041 IPython.
4039 4042
4040 4043 * Released 0.2.13
4041 4044
4042 4045 * IPython/Magic.py (Magic.magic_prun): big overhaul to the
4043 4046 profiler interface. Now all the major options from the profiler
4044 4047 module are directly supported in IPython, both for single
4045 4048 expressions (@prun) and for full programs (@run -p).
4046 4049
4047 4050 2002-05-09 Fernando Perez <fperez@colorado.edu>
4048 4051
4049 4052 * IPython/Magic.py (Magic.magic_doc): fixed to show docstrings of
4050 4053 magic properly formatted for screen.
4051 4054
4052 4055 * setup.py (make_shortcut): Changed things to put pdf version in
4053 4056 doc/ instead of doc/manual (had to change lyxport a bit).
4054 4057
4055 4058 * IPython/Magic.py (Profile.string_stats): made profile runs go
4056 4059 through pager (they are long and a pager allows searching, saving,
4057 4060 etc.)
4058 4061
4059 4062 2002-05-08 Fernando Perez <fperez@colorado.edu>
4060 4063
4061 4064 * Released 0.2.12
4062 4065
4063 4066 2002-05-06 Fernando Perez <fperez@colorado.edu>
4064 4067
4065 4068 * IPython/Magic.py (Magic.magic_hist): small bug fixed (recently
4066 4069 introduced); 'hist n1 n2' was broken.
4067 4070 (Magic.magic_pdb): added optional on/off arguments to @pdb
4068 4071 (Magic.magic_run): added option -i to @run, which executes code in
4069 4072 the IPython namespace instead of a clean one. Also added @irun as
4070 4073 an alias to @run -i.
4071 4074
4072 4075 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
4073 4076 fixed (it didn't really do anything, the namespaces were wrong).
4074 4077
4075 4078 * IPython/Debugger.py (__init__): Added workaround for python 2.1
4076 4079
4077 4080 * IPython/__init__.py (__all__): Fixed package namespace, now
4078 4081 'import IPython' does give access to IPython.<all> as
4079 4082 expected. Also renamed __release__ to Release.
4080 4083
4081 4084 * IPython/Debugger.py (__license__): created new Pdb class which
4082 4085 functions like a drop-in for the normal pdb.Pdb but does NOT
4083 4086 import readline by default. This way it doesn't muck up IPython's
4084 4087 readline handling, and now tab-completion finally works in the
4085 4088 debugger -- sort of. It completes things globally visible, but the
4086 4089 completer doesn't track the stack as pdb walks it. That's a bit
4087 4090 tricky, and I'll have to implement it later.
4088 4091
4089 4092 2002-05-05 Fernando Perez <fperez@colorado.edu>
4090 4093
4091 4094 * IPython/Magic.py (Magic.magic_oinfo): fixed formatting bug for
4092 4095 magic docstrings when printed via ? (explicit \'s were being
4093 4096 printed).
4094 4097
4095 4098 * IPython/ipmaker.py (make_IPython): fixed namespace
4096 4099 identification bug. Now variables loaded via logs or command-line
4097 4100 files are recognized in the interactive namespace by @who.
4098 4101
4099 4102 * IPython/iplib.py (InteractiveShell.safe_execfile): Fixed bug in
4100 4103 log replay system stemming from the string form of Structs.
4101 4104
4102 4105 * IPython/Magic.py (Macro.__init__): improved macros to properly
4103 4106 handle magic commands in them.
4104 4107 (Magic.magic_logstart): usernames are now expanded so 'logstart
4105 4108 ~/mylog' now works.
4106 4109
4107 4110 * IPython/iplib.py (complete): fixed bug where paths starting with
4108 4111 '/' would be completed as magic names.
4109 4112
4110 4113 2002-05-04 Fernando Perez <fperez@colorado.edu>
4111 4114
4112 4115 * IPython/Magic.py (Magic.magic_run): added options -p and -f to
4113 4116 allow running full programs under the profiler's control.
4114 4117
4115 4118 * IPython/ultraTB.py (FormattedTB.__init__): Added Verbose_novars
4116 4119 mode to report exceptions verbosely but without formatting
4117 4120 variables. This addresses the issue of ipython 'freezing' (it's
4118 4121 not frozen, but caught in an expensive formatting loop) when huge
4119 4122 variables are in the context of an exception.
4120 4123 (VerboseTB.text): Added '--->' markers at line where exception was
4121 4124 triggered. Much clearer to read, especially in NoColor modes.
4122 4125
4123 4126 * IPython/Magic.py (Magic.magic_run): bugfix: -n option had been
4124 4127 implemented in reverse when changing to the new parse_options().
4125 4128
4126 4129 2002-05-03 Fernando Perez <fperez@colorado.edu>
4127 4130
4128 4131 * IPython/Magic.py (Magic.parse_options): new function so that
4129 4132 magics can parse options easier.
4130 4133 (Magic.magic_prun): new function similar to profile.run(),
4131 4134 suggested by Chris Hart.
4132 4135 (Magic.magic_cd): fixed behavior so that it only changes if
4133 4136 directory actually is in history.
4134 4137
4135 4138 * IPython/usage.py (__doc__): added information about potential
4136 4139 slowness of Verbose exception mode when there are huge data
4137 4140 structures to be formatted (thanks to Archie Paulson).
4138 4141
4139 4142 * IPython/ipmaker.py (make_IPython): Changed default logging
4140 4143 (when simply called with -log) to use curr_dir/ipython.log in
4141 4144 rotate mode. Fixed crash which was occuring with -log before
4142 4145 (thanks to Jim Boyle).
4143 4146
4144 4147 2002-05-01 Fernando Perez <fperez@colorado.edu>
4145 4148
4146 4149 * Released 0.2.11 for these fixes (mainly the ultraTB one which
4147 4150 was nasty -- though somewhat of a corner case).
4148 4151
4149 4152 * IPython/ultraTB.py (AutoFormattedTB.text): renamed __text to
4150 4153 text (was a bug).
4151 4154
4152 4155 2002-04-30 Fernando Perez <fperez@colorado.edu>
4153 4156
4154 4157 * IPython/UserConfig/GnuplotMagic.py (magic_gp): Minor fix to add
4155 4158 a print after ^D or ^C from the user so that the In[] prompt
4156 4159 doesn't over-run the gnuplot one.
4157 4160
4158 4161 2002-04-29 Fernando Perez <fperez@colorado.edu>
4159 4162
4160 4163 * Released 0.2.10
4161 4164
4162 4165 * IPython/__release__.py (version): get date dynamically.
4163 4166
4164 4167 * Misc. documentation updates thanks to Arnd's comments. Also ran
4165 4168 a full spellcheck on the manual (hadn't been done in a while).
4166 4169
4167 4170 2002-04-27 Fernando Perez <fperez@colorado.edu>
4168 4171
4169 4172 * IPython/Magic.py (Magic.magic_logstart): Fixed bug where
4170 4173 starting a log in mid-session would reset the input history list.
4171 4174
4172 4175 2002-04-26 Fernando Perez <fperez@colorado.edu>
4173 4176
4174 4177 * IPython/iplib.py (InteractiveShell.wait): Fixed bug where not
4175 4178 all files were being included in an update. Now anything in
4176 4179 UserConfig that matches [A-Za-z]*.py will go (this excludes
4177 4180 __init__.py)
4178 4181
4179 4182 2002-04-25 Fernando Perez <fperez@colorado.edu>
4180 4183
4181 4184 * IPython/iplib.py (InteractiveShell.__init__): Added __IPYTHON__
4182 4185 to __builtins__ so that any form of embedded or imported code can
4183 4186 test for being inside IPython.
4184 4187
4185 4188 * IPython/UserConfig/GnuplotMagic.py: (magic_gp_set_instance):
4186 4189 changed to GnuplotMagic because it's now an importable module,
4187 4190 this makes the name follow that of the standard Gnuplot module.
4188 4191 GnuplotMagic can now be loaded at any time in mid-session.
4189 4192
4190 4193 2002-04-24 Fernando Perez <fperez@colorado.edu>
4191 4194
4192 4195 * IPython/numutils.py: removed SIUnits. It doesn't properly set
4193 4196 the globals (IPython has its own namespace) and the
4194 4197 PhysicalQuantity stuff is much better anyway.
4195 4198
4196 4199 * IPython/UserConfig/example-gnuplot.py (g2): Added gnuplot
4197 4200 embedding example to standard user directory for
4198 4201 distribution. Also put it in the manual.
4199 4202
4200 4203 * IPython/numutils.py (gnuplot_exec): Changed to take a gnuplot
4201 4204 instance as first argument (so it doesn't rely on some obscure
4202 4205 hidden global).
4203 4206
4204 4207 * IPython/UserConfig/ipythonrc.py: put () back in accepted
4205 4208 delimiters. While it prevents ().TAB from working, it allows
4206 4209 completions in open (... expressions. This is by far a more common
4207 4210 case.
4208 4211
4209 4212 2002-04-23 Fernando Perez <fperez@colorado.edu>
4210 4213
4211 4214 * IPython/Extensions/InterpreterPasteInput.py: new
4212 4215 syntax-processing module for pasting lines with >>> or ... at the
4213 4216 start.
4214 4217
4215 4218 * IPython/Extensions/PhysicalQ_Interactive.py
4216 4219 (PhysicalQuantityInteractive.__int__): fixed to work with either
4217 4220 Numeric or math.
4218 4221
4219 4222 * IPython/UserConfig/ipythonrc-numeric.py: reorganized the
4220 4223 provided profiles. Now we have:
4221 4224 -math -> math module as * and cmath with its own namespace.
4222 4225 -numeric -> Numeric as *, plus gnuplot & grace
4223 4226 -physics -> same as before
4224 4227
4225 4228 * IPython/Magic.py (Magic.magic_magic): Fixed bug where
4226 4229 user-defined magics wouldn't be found by @magic if they were
4227 4230 defined as class methods. Also cleaned up the namespace search
4228 4231 logic and the string building (to use %s instead of many repeated
4229 4232 string adds).
4230 4233
4231 4234 * IPython/UserConfig/example-magic.py (magic_foo): updated example
4232 4235 of user-defined magics to operate with class methods (cleaner, in
4233 4236 line with the gnuplot code).
4234 4237
4235 4238 2002-04-22 Fernando Perez <fperez@colorado.edu>
4236 4239
4237 4240 * setup.py: updated dependency list so that manual is updated when
4238 4241 all included files change.
4239 4242
4240 4243 * IPython/ipmaker.py (make_IPython): Fixed bug which was ignoring
4241 4244 the delimiter removal option (the fix is ugly right now).
4242 4245
4243 4246 * IPython/UserConfig/ipythonrc-physics.py: simplified not to load
4244 4247 all of the math profile (quicker loading, no conflict between
4245 4248 g-9.8 and g-gnuplot).
4246 4249
4247 4250 * IPython/CrashHandler.py (CrashHandler.__call__): changed default
4248 4251 name of post-mortem files to IPython_crash_report.txt.
4249 4252
4250 4253 * Cleanup/update of the docs. Added all the new readline info and
4251 4254 formatted all lists as 'real lists'.
4252 4255
4253 4256 * IPython/ipmaker.py (make_IPython): removed now-obsolete
4254 4257 tab-completion options, since the full readline parse_and_bind is
4255 4258 now accessible.
4256 4259
4257 4260 * IPython/iplib.py (InteractiveShell.init_readline): Changed
4258 4261 handling of readline options. Now users can specify any string to
4259 4262 be passed to parse_and_bind(), as well as the delimiters to be
4260 4263 removed.
4261 4264 (InteractiveShell.__init__): Added __name__ to the global
4262 4265 namespace so that things like Itpl which rely on its existence
4263 4266 don't crash.
4264 4267 (InteractiveShell._prefilter): Defined the default with a _ so
4265 4268 that prefilter() is easier to override, while the default one
4266 4269 remains available.
4267 4270
4268 4271 2002-04-18 Fernando Perez <fperez@colorado.edu>
4269 4272
4270 4273 * Added information about pdb in the docs.
4271 4274
4272 4275 2002-04-17 Fernando Perez <fperez@colorado.edu>
4273 4276
4274 4277 * IPython/ipmaker.py (make_IPython): added rc_override option to
4275 4278 allow passing config options at creation time which may override
4276 4279 anything set in the config files or command line. This is
4277 4280 particularly useful for configuring embedded instances.
4278 4281
4279 4282 2002-04-15 Fernando Perez <fperez@colorado.edu>
4280 4283
4281 4284 * IPython/Logger.py (Logger.log): Fixed a nasty bug which could
4282 4285 crash embedded instances because of the input cache falling out of
4283 4286 sync with the output counter.
4284 4287
4285 4288 * IPython/Shell.py (IPythonShellEmbed.__init__): added a debug
4286 4289 mode which calls pdb after an uncaught exception in IPython itself.
4287 4290
4288 4291 2002-04-14 Fernando Perez <fperez@colorado.edu>
4289 4292
4290 4293 * IPython/iplib.py (InteractiveShell.showtraceback): pdb mucks up
4291 4294 readline, fix it back after each call.
4292 4295
4293 4296 * IPython/ultraTB.py (AutoFormattedTB.__text): made text a private
4294 4297 method to force all access via __call__(), which guarantees that
4295 4298 traceback references are properly deleted.
4296 4299
4297 4300 * IPython/Prompts.py (CachedOutput._display): minor fixes to
4298 4301 improve printing when pprint is in use.
4299 4302
4300 4303 2002-04-13 Fernando Perez <fperez@colorado.edu>
4301 4304
4302 4305 * IPython/Shell.py (IPythonShellEmbed.__call__): SystemExit
4303 4306 exceptions aren't caught anymore. If the user triggers one, he
4304 4307 should know why he's doing it and it should go all the way up,
4305 4308 just like any other exception. So now @abort will fully kill the
4306 4309 embedded interpreter and the embedding code (unless that happens
4307 4310 to catch SystemExit).
4308 4311
4309 4312 * IPython/ultraTB.py (VerboseTB.__init__): added a call_pdb flag
4310 4313 and a debugger() method to invoke the interactive pdb debugger
4311 4314 after printing exception information. Also added the corresponding
4312 4315 -pdb option and @pdb magic to control this feature, and updated
4313 4316 the docs. After a suggestion from Christopher Hart
4314 4317 (hart-AT-caltech.edu).
4315 4318
4316 4319 2002-04-12 Fernando Perez <fperez@colorado.edu>
4317 4320
4318 4321 * IPython/Shell.py (IPythonShellEmbed.__init__): modified to use
4319 4322 the exception handlers defined by the user (not the CrashHandler)
4320 4323 so that user exceptions don't trigger an ipython bug report.
4321 4324
4322 4325 * IPython/ultraTB.py (ColorTB.__init__): made the color scheme
4323 4326 configurable (it should have always been so).
4324 4327
4325 4328 2002-03-26 Fernando Perez <fperez@colorado.edu>
4326 4329
4327 4330 * IPython/Shell.py (IPythonShellEmbed.__call__): many changes here
4328 4331 and there to fix embedding namespace issues. This should all be
4329 4332 done in a more elegant way.
4330 4333
4331 4334 2002-03-25 Fernando Perez <fperez@colorado.edu>
4332 4335
4333 4336 * IPython/genutils.py (get_home_dir): Try to make it work under
4334 4337 win9x also.
4335 4338
4336 4339 2002-03-20 Fernando Perez <fperez@colorado.edu>
4337 4340
4338 4341 * IPython/Shell.py (IPythonShellEmbed.__init__): leave
4339 4342 sys.displayhook untouched upon __init__.
4340 4343
4341 4344 2002-03-19 Fernando Perez <fperez@colorado.edu>
4342 4345
4343 4346 * Released 0.2.9 (for embedding bug, basically).
4344 4347
4345 4348 * IPython/Shell.py (IPythonShellEmbed.__call__): Trap SystemExit
4346 4349 exceptions so that enclosing shell's state can be restored.
4347 4350
4348 4351 * Changed magic_gnuplot.py to magic-gnuplot.py to standardize
4349 4352 naming conventions in the .ipython/ dir.
4350 4353
4351 4354 * IPython/iplib.py (InteractiveShell.init_readline): removed '-'
4352 4355 from delimiters list so filenames with - in them get expanded.
4353 4356
4354 4357 * IPython/Shell.py (IPythonShellEmbed.__call__): fixed bug with
4355 4358 sys.displayhook not being properly restored after an embedded call.
4356 4359
4357 4360 2002-03-18 Fernando Perez <fperez@colorado.edu>
4358 4361
4359 4362 * Released 0.2.8
4360 4363
4361 4364 * IPython/iplib.py (InteractiveShell.user_setup): fixed bug where
4362 4365 some files weren't being included in a -upgrade.
4363 4366 (InteractiveShell.init_readline): Added 'set show-all-if-ambiguous
4364 4367 on' so that the first tab completes.
4365 4368 (InteractiveShell.handle_magic): fixed bug with spaces around
4366 4369 quotes breaking many magic commands.
4367 4370
4368 4371 * setup.py: added note about ignoring the syntax error messages at
4369 4372 installation.
4370 4373
4371 4374 * IPython/UserConfig/magic_gnuplot.py (magic_gp): finished
4372 4375 streamlining the gnuplot interface, now there's only one magic @gp.
4373 4376
4374 4377 2002-03-17 Fernando Perez <fperez@colorado.edu>
4375 4378
4376 4379 * IPython/UserConfig/magic_gnuplot.py: new name for the
4377 4380 example-magic_pm.py file. Much enhanced system, now with a shell
4378 4381 for communicating directly with gnuplot, one command at a time.
4379 4382
4380 4383 * IPython/Magic.py (Magic.magic_run): added option -n to prevent
4381 4384 setting __name__=='__main__'.
4382 4385
4383 4386 * IPython/UserConfig/example-magic_pm.py (magic_pm): Added
4384 4387 mini-shell for accessing gnuplot from inside ipython. Should
4385 4388 extend it later for grace access too. Inspired by Arnd's
4386 4389 suggestion.
4387 4390
4388 4391 * IPython/iplib.py (InteractiveShell.handle_magic): fixed bug when
4389 4392 calling magic functions with () in their arguments. Thanks to Arnd
4390 4393 Baecker for pointing this to me.
4391 4394
4392 4395 * IPython/numutils.py (sum_flat): fixed bug. Would recurse
4393 4396 infinitely for integer or complex arrays (only worked with floats).
4394 4397
4395 4398 2002-03-16 Fernando Perez <fperez@colorado.edu>
4396 4399
4397 4400 * setup.py: Merged setup and setup_windows into a single script
4398 4401 which properly handles things for windows users.
4399 4402
4400 4403 2002-03-15 Fernando Perez <fperez@colorado.edu>
4401 4404
4402 4405 * Big change to the manual: now the magics are all automatically
4403 4406 documented. This information is generated from their docstrings
4404 4407 and put in a latex file included by the manual lyx file. This way
4405 4408 we get always up to date information for the magics. The manual
4406 4409 now also has proper version information, also auto-synced.
4407 4410
4408 4411 For this to work, an undocumented --magic_docstrings option was added.
4409 4412
4410 4413 2002-03-13 Fernando Perez <fperez@colorado.edu>
4411 4414
4412 4415 * IPython/ultraTB.py (TermColors): fixed problem with dark colors
4413 4416 under CDE terminals. An explicit ;2 color reset is needed in the escapes.
4414 4417
4415 4418 2002-03-12 Fernando Perez <fperez@colorado.edu>
4416 4419
4417 4420 * IPython/ultraTB.py (TermColors): changed color escapes again to
4418 4421 fix the (old, reintroduced) line-wrapping bug. Basically, if
4419 4422 \001..\002 aren't given in the color escapes, lines get wrapped
4420 4423 weirdly. But giving those screws up old xterms and emacs terms. So
4421 4424 I added some logic for emacs terms to be ok, but I can't identify old
4422 4425 xterms separately ($TERM=='xterm' for many terminals, like konsole).
4423 4426
4424 4427 2002-03-10 Fernando Perez <fperez@colorado.edu>
4425 4428
4426 4429 * IPython/usage.py (__doc__): Various documentation cleanups and
4427 4430 updates, both in usage docstrings and in the manual.
4428 4431
4429 4432 * IPython/Prompts.py (CachedOutput.set_colors): cleanups for
4430 4433 handling of caching. Set minimum acceptabe value for having a
4431 4434 cache at 20 values.
4432 4435
4433 4436 * IPython/iplib.py (InteractiveShell.user_setup): moved the
4434 4437 install_first_time function to a method, renamed it and added an
4435 4438 'upgrade' mode. Now people can update their config directory with
4436 4439 a simple command line switch (-upgrade, also new).
4437 4440
4438 4441 * IPython/Magic.py (Magic.magic_pfile): Made @pfile an alias to
4439 4442 @file (convenient for automagic users under Python >= 2.2).
4440 4443 Removed @files (it seemed more like a plural than an abbrev. of
4441 4444 'file show').
4442 4445
4443 4446 * IPython/iplib.py (install_first_time): Fixed crash if there were
4444 4447 backup files ('~') in .ipython/ install directory.
4445 4448
4446 4449 * IPython/ipmaker.py (make_IPython): fixes for new prompt
4447 4450 system. Things look fine, but these changes are fairly
4448 4451 intrusive. Test them for a few days.
4449 4452
4450 4453 * IPython/Prompts.py (CachedOutput.__init__): Massive rewrite of
4451 4454 the prompts system. Now all in/out prompt strings are user
4452 4455 controllable. This is particularly useful for embedding, as one
4453 4456 can tag embedded instances with particular prompts.
4454 4457
4455 4458 Also removed global use of sys.ps1/2, which now allows nested
4456 4459 embeddings without any problems. Added command-line options for
4457 4460 the prompt strings.
4458 4461
4459 4462 2002-03-08 Fernando Perez <fperez@colorado.edu>
4460 4463
4461 4464 * IPython/UserConfig/example-embed-short.py (ipshell): added
4462 4465 example file with the bare minimum code for embedding.
4463 4466
4464 4467 * IPython/Shell.py (IPythonShellEmbed.set_dummy_mode): added
4465 4468 functionality for the embeddable shell to be activated/deactivated
4466 4469 either globally or at each call.
4467 4470
4468 4471 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixes the problem of
4469 4472 rewriting the prompt with '--->' for auto-inputs with proper
4470 4473 coloring. Now the previous UGLY hack in handle_auto() is gone, and
4471 4474 this is handled by the prompts class itself, as it should.
4472 4475
4473 4476 2002-03-05 Fernando Perez <fperez@colorado.edu>
4474 4477
4475 4478 * IPython/Magic.py (Magic.magic_logstart): Changed @log to
4476 4479 @logstart to avoid name clashes with the math log function.
4477 4480
4478 4481 * Big updates to X/Emacs section of the manual.
4479 4482
4480 4483 * Removed ipython_emacs. Milan explained to me how to pass
4481 4484 arguments to ipython through Emacs. Some day I'm going to end up
4482 4485 learning some lisp...
4483 4486
4484 4487 2002-03-04 Fernando Perez <fperez@colorado.edu>
4485 4488
4486 4489 * IPython/ipython_emacs: Created script to be used as the
4487 4490 py-python-command Emacs variable so we can pass IPython
4488 4491 parameters. I can't figure out how to tell Emacs directly to pass
4489 4492 parameters to IPython, so a dummy shell script will do it.
4490 4493
4491 4494 Other enhancements made for things to work better under Emacs'
4492 4495 various types of terminals. Many thanks to Milan Zamazal
4493 4496 <pdm-AT-zamazal.org> for all the suggestions and pointers.
4494 4497
4495 4498 2002-03-01 Fernando Perez <fperez@colorado.edu>
4496 4499
4497 4500 * IPython/ipmaker.py (make_IPython): added a --readline! option so
4498 4501 that loading of readline is now optional. This gives better
4499 4502 control to emacs users.
4500 4503
4501 4504 * IPython/ultraTB.py (__date__): Modified color escape sequences
4502 4505 and now things work fine under xterm and in Emacs' term buffers
4503 4506 (though not shell ones). Well, in emacs you get colors, but all
4504 4507 seem to be 'light' colors (no difference between dark and light
4505 4508 ones). But the garbage chars are gone, and also in xterms. It
4506 4509 seems that now I'm using 'cleaner' ansi sequences.
4507 4510
4508 4511 2002-02-21 Fernando Perez <fperez@colorado.edu>
4509 4512
4510 4513 * Released 0.2.7 (mainly to publish the scoping fix).
4511 4514
4512 4515 * IPython/Logger.py (Logger.logstate): added. A corresponding
4513 4516 @logstate magic was created.
4514 4517
4515 4518 * IPython/Magic.py: fixed nested scoping problem under Python
4516 4519 2.1.x (automagic wasn't working).
4517 4520
4518 4521 2002-02-20 Fernando Perez <fperez@colorado.edu>
4519 4522
4520 4523 * Released 0.2.6.
4521 4524
4522 4525 * IPython/OutputTrap.py (OutputTrap.__init__): added a 'quiet'
4523 4526 option so that logs can come out without any headers at all.
4524 4527
4525 4528 * IPython/UserConfig/ipythonrc-scipy.py: created a profile for
4526 4529 SciPy.
4527 4530
4528 4531 * IPython/iplib.py (InteractiveShell.embed_mainloop): Changed so
4529 4532 that embedded IPython calls don't require vars() to be explicitly
4530 4533 passed. Now they are extracted from the caller's frame (code
4531 4534 snatched from Eric Jones' weave). Added better documentation to
4532 4535 the section on embedding and the example file.
4533 4536
4534 4537 * IPython/genutils.py (page): Changed so that under emacs, it just
4535 4538 prints the string. You can then page up and down in the emacs
4536 4539 buffer itself. This is how the builtin help() works.
4537 4540
4538 4541 * IPython/Prompts.py (CachedOutput.__call__): Fixed issue with
4539 4542 macro scoping: macros need to be executed in the user's namespace
4540 4543 to work as if they had been typed by the user.
4541 4544
4542 4545 * IPython/Magic.py (Magic.magic_macro): Changed macros so they
4543 4546 execute automatically (no need to type 'exec...'). They then
4544 4547 behave like 'true macros'. The printing system was also modified
4545 4548 for this to work.
4546 4549
4547 4550 2002-02-19 Fernando Perez <fperez@colorado.edu>
4548 4551
4549 4552 * IPython/genutils.py (page_file): new function for paging files
4550 4553 in an OS-independent way. Also necessary for file viewing to work
4551 4554 well inside Emacs buffers.
4552 4555 (page): Added checks for being in an emacs buffer.
4553 4556 (page): fixed bug for Windows ($TERM isn't set in Windows). Fixed
4554 4557 same bug in iplib.
4555 4558
4556 4559 2002-02-18 Fernando Perez <fperez@colorado.edu>
4557 4560
4558 4561 * IPython/iplib.py (InteractiveShell.init_readline): modified use
4559 4562 of readline so that IPython can work inside an Emacs buffer.
4560 4563
4561 4564 * IPython/ultraTB.py (AutoFormattedTB.__call__): some fixes to
4562 4565 method signatures (they weren't really bugs, but it looks cleaner
4563 4566 and keeps PyChecker happy).
4564 4567
4565 4568 * IPython/ipmaker.py (make_IPython): added hooks Struct to __IP
4566 4569 for implementing various user-defined hooks. Currently only
4567 4570 display is done.
4568 4571
4569 4572 * IPython/Prompts.py (CachedOutput._display): changed display
4570 4573 functions so that they can be dynamically changed by users easily.
4571 4574
4572 4575 * IPython/Extensions/numeric_formats.py (num_display): added an
4573 4576 extension for printing NumPy arrays in flexible manners. It
4574 4577 doesn't do anything yet, but all the structure is in
4575 4578 place. Ultimately the plan is to implement output format control
4576 4579 like in Octave.
4577 4580
4578 4581 * IPython/Magic.py (Magic.lsmagic): changed so that bound magic
4579 4582 methods are found at run-time by all the automatic machinery.
4580 4583
4581 4584 2002-02-17 Fernando Perez <fperez@colorado.edu>
4582 4585
4583 4586 * setup_Windows.py (make_shortcut): documented. Cleaned up the
4584 4587 whole file a little.
4585 4588
4586 4589 * ToDo: closed this document. Now there's a new_design.lyx
4587 4590 document for all new ideas. Added making a pdf of it for the
4588 4591 end-user distro.
4589 4592
4590 4593 * IPython/Logger.py (Logger.switch_log): Created this to replace
4591 4594 logon() and logoff(). It also fixes a nasty crash reported by
4592 4595 Philip Hisley <compsys-AT-starpower.net>. Many thanks to him.
4593 4596
4594 4597 * IPython/iplib.py (complete): got auto-completion to work with
4595 4598 automagic (I had wanted this for a long time).
4596 4599
4597 4600 * IPython/Magic.py (Magic.magic_files): Added @files as an alias
4598 4601 to @file, since file() is now a builtin and clashes with automagic
4599 4602 for @file.
4600 4603
4601 4604 * Made some new files: Prompts, CrashHandler, Magic, Logger. All
4602 4605 of this was previously in iplib, which had grown to more than 2000
4603 4606 lines, way too long. No new functionality, but it makes managing
4604 4607 the code a bit easier.
4605 4608
4606 4609 * IPython/iplib.py (IPythonCrashHandler.__call__): Added version
4607 4610 information to crash reports.
4608 4611
4609 4612 2002-02-12 Fernando Perez <fperez@colorado.edu>
4610 4613
4611 4614 * Released 0.2.5.
4612 4615
4613 4616 2002-02-11 Fernando Perez <fperez@colorado.edu>
4614 4617
4615 4618 * Wrote a relatively complete Windows installer. It puts
4616 4619 everything in place, creates Start Menu entries and fixes the
4617 4620 color issues. Nothing fancy, but it works.
4618 4621
4619 4622 2002-02-10 Fernando Perez <fperez@colorado.edu>
4620 4623
4621 4624 * IPython/iplib.py (InteractiveShell.safe_execfile): added an
4622 4625 os.path.expanduser() call so that we can type @run ~/myfile.py and
4623 4626 have thigs work as expected.
4624 4627
4625 4628 * IPython/genutils.py (page): fixed exception handling so things
4626 4629 work both in Unix and Windows correctly. Quitting a pager triggers
4627 4630 an IOError/broken pipe in Unix, and in windows not finding a pager
4628 4631 is also an IOError, so I had to actually look at the return value
4629 4632 of the exception, not just the exception itself. Should be ok now.
4630 4633
4631 4634 * IPython/ultraTB.py (ColorSchemeTable.set_active_scheme):
4632 4635 modified to allow case-insensitive color scheme changes.
4633 4636
4634 4637 2002-02-09 Fernando Perez <fperez@colorado.edu>
4635 4638
4636 4639 * IPython/genutils.py (native_line_ends): new function to leave
4637 4640 user config files with os-native line-endings.
4638 4641
4639 4642 * README and manual updates.
4640 4643
4641 4644 * IPython/genutils.py: fixed unicode bug: use types.StringTypes
4642 4645 instead of StringType to catch Unicode strings.
4643 4646
4644 4647 * IPython/genutils.py (filefind): fixed bug for paths with
4645 4648 embedded spaces (very common in Windows).
4646 4649
4647 4650 * IPython/ipmaker.py (make_IPython): added a '.ini' to the rc
4648 4651 files under Windows, so that they get automatically associated
4649 4652 with a text editor. Windows makes it a pain to handle
4650 4653 extension-less files.
4651 4654
4652 4655 * IPython/iplib.py (InteractiveShell.init_readline): Made the
4653 4656 warning about readline only occur for Posix. In Windows there's no
4654 4657 way to get readline, so why bother with the warning.
4655 4658
4656 4659 * IPython/Struct.py (Struct.__str__): fixed to use self.__dict__
4657 4660 for __str__ instead of dir(self), since dir() changed in 2.2.
4658 4661
4659 4662 * Ported to Windows! Tested on XP, I suspect it should work fine
4660 4663 on NT/2000, but I don't think it will work on 98 et al. That
4661 4664 series of Windows is such a piece of junk anyway that I won't try
4662 4665 porting it there. The XP port was straightforward, showed a few
4663 4666 bugs here and there (fixed all), in particular some string
4664 4667 handling stuff which required considering Unicode strings (which
4665 4668 Windows uses). This is good, but hasn't been too tested :) No
4666 4669 fancy installer yet, I'll put a note in the manual so people at
4667 4670 least make manually a shortcut.
4668 4671
4669 4672 * IPython/iplib.py (Magic.magic_colors): Unified the color options
4670 4673 into a single one, "colors". This now controls both prompt and
4671 4674 exception color schemes, and can be changed both at startup
4672 4675 (either via command-line switches or via ipythonrc files) and at
4673 4676 runtime, with @colors.
4674 4677 (Magic.magic_run): renamed @prun to @run and removed the old
4675 4678 @run. The two were too similar to warrant keeping both.
4676 4679
4677 4680 2002-02-03 Fernando Perez <fperez@colorado.edu>
4678 4681
4679 4682 * IPython/iplib.py (install_first_time): Added comment on how to
4680 4683 configure the color options for first-time users. Put a <return>
4681 4684 request at the end so that small-terminal users get a chance to
4682 4685 read the startup info.
4683 4686
4684 4687 2002-01-23 Fernando Perez <fperez@colorado.edu>
4685 4688
4686 4689 * IPython/iplib.py (CachedOutput.update): Changed output memory
4687 4690 variable names from _o,_oo,_ooo,_o<n> to simply _,__,___,_<n>. For
4688 4691 input history we still use _i. Did this b/c these variable are
4689 4692 very commonly used in interactive work, so the less we need to
4690 4693 type the better off we are.
4691 4694 (Magic.magic_prun): updated @prun to better handle the namespaces
4692 4695 the file will run in, including a fix for __name__ not being set
4693 4696 before.
4694 4697
4695 4698 2002-01-20 Fernando Perez <fperez@colorado.edu>
4696 4699
4697 4700 * IPython/ultraTB.py (VerboseTB.linereader): Fixed printing of
4698 4701 extra garbage for Python 2.2. Need to look more carefully into
4699 4702 this later.
4700 4703
4701 4704 2002-01-19 Fernando Perez <fperez@colorado.edu>
4702 4705
4703 4706 * IPython/iplib.py (InteractiveShell.showtraceback): fixed to
4704 4707 display SyntaxError exceptions properly formatted when they occur
4705 4708 (they can be triggered by imported code).
4706 4709
4707 4710 2002-01-18 Fernando Perez <fperez@colorado.edu>
4708 4711
4709 4712 * IPython/iplib.py (InteractiveShell.safe_execfile): now
4710 4713 SyntaxError exceptions are reported nicely formatted, instead of
4711 4714 spitting out only offset information as before.
4712 4715 (Magic.magic_prun): Added the @prun function for executing
4713 4716 programs with command line args inside IPython.
4714 4717
4715 4718 2002-01-16 Fernando Perez <fperez@colorado.edu>
4716 4719
4717 4720 * IPython/iplib.py (Magic.magic_hist): Changed @hist and @dhist
4718 4721 to *not* include the last item given in a range. This brings their
4719 4722 behavior in line with Python's slicing:
4720 4723 a[n1:n2] -> a[n1]...a[n2-1]
4721 4724 It may be a bit less convenient, but I prefer to stick to Python's
4722 4725 conventions *everywhere*, so users never have to wonder.
4723 4726 (Magic.magic_macro): Added @macro function to ease the creation of
4724 4727 macros.
4725 4728
4726 4729 2002-01-05 Fernando Perez <fperez@colorado.edu>
4727 4730
4728 4731 * Released 0.2.4.
4729 4732
4730 4733 * IPython/iplib.py (Magic.magic_pdef):
4731 4734 (InteractiveShell.safe_execfile): report magic lines and error
4732 4735 lines without line numbers so one can easily copy/paste them for
4733 4736 re-execution.
4734 4737
4735 4738 * Updated manual with recent changes.
4736 4739
4737 4740 * IPython/iplib.py (Magic.magic_oinfo): added constructor
4738 4741 docstring printing when class? is called. Very handy for knowing
4739 4742 how to create class instances (as long as __init__ is well
4740 4743 documented, of course :)
4741 4744 (Magic.magic_doc): print both class and constructor docstrings.
4742 4745 (Magic.magic_pdef): give constructor info if passed a class and
4743 4746 __call__ info for callable object instances.
4744 4747
4745 4748 2002-01-04 Fernando Perez <fperez@colorado.edu>
4746 4749
4747 4750 * Made deep_reload() off by default. It doesn't always work
4748 4751 exactly as intended, so it's probably safer to have it off. It's
4749 4752 still available as dreload() anyway, so nothing is lost.
4750 4753
4751 4754 2002-01-02 Fernando Perez <fperez@colorado.edu>
4752 4755
4753 4756 * Released 0.2.3 (contacted R.Singh at CU about biopython course,
4754 4757 so I wanted an updated release).
4755 4758
4756 4759 2001-12-27 Fernando Perez <fperez@colorado.edu>
4757 4760
4758 4761 * IPython/iplib.py (InteractiveShell.interact): Added the original
4759 4762 code from 'code.py' for this module in order to change the
4760 4763 handling of a KeyboardInterrupt. This was necessary b/c otherwise
4761 4764 the history cache would break when the user hit Ctrl-C, and
4762 4765 interact() offers no way to add any hooks to it.
4763 4766
4764 4767 2001-12-23 Fernando Perez <fperez@colorado.edu>
4765 4768
4766 4769 * setup.py: added check for 'MANIFEST' before trying to remove
4767 4770 it. Thanks to Sean Reifschneider.
4768 4771
4769 4772 2001-12-22 Fernando Perez <fperez@colorado.edu>
4770 4773
4771 4774 * Released 0.2.2.
4772 4775
4773 4776 * Finished (reasonably) writing the manual. Later will add the
4774 4777 python-standard navigation stylesheets, but for the time being
4775 4778 it's fairly complete. Distribution will include html and pdf
4776 4779 versions.
4777 4780
4778 4781 * Bugfix: '.' wasn't being added to sys.path. Thanks to Prabhu
4779 4782 (MayaVi author).
4780 4783
4781 4784 2001-12-21 Fernando Perez <fperez@colorado.edu>
4782 4785
4783 4786 * Released 0.2.1. Barring any nasty bugs, this is it as far as a
4784 4787 good public release, I think (with the manual and the distutils
4785 4788 installer). The manual can use some work, but that can go
4786 4789 slowly. Otherwise I think it's quite nice for end users. Next
4787 4790 summer, rewrite the guts of it...
4788 4791
4789 4792 * Changed format of ipythonrc files to use whitespace as the
4790 4793 separator instead of an explicit '='. Cleaner.
4791 4794
4792 4795 2001-12-20 Fernando Perez <fperez@colorado.edu>
4793 4796
4794 4797 * Started a manual in LyX. For now it's just a quick merge of the
4795 4798 various internal docstrings and READMEs. Later it may grow into a
4796 4799 nice, full-blown manual.
4797 4800
4798 4801 * Set up a distutils based installer. Installation should now be
4799 4802 trivially simple for end-users.
4800 4803
4801 4804 2001-12-11 Fernando Perez <fperez@colorado.edu>
4802 4805
4803 4806 * Released 0.2.0. First public release, announced it at
4804 4807 comp.lang.python. From now on, just bugfixes...
4805 4808
4806 4809 * Went through all the files, set copyright/license notices and
4807 4810 cleaned up things. Ready for release.
4808 4811
4809 4812 2001-12-10 Fernando Perez <fperez@colorado.edu>
4810 4813
4811 4814 * Changed the first-time installer not to use tarfiles. It's more
4812 4815 robust now and less unix-dependent. Also makes it easier for
4813 4816 people to later upgrade versions.
4814 4817
4815 4818 * Changed @exit to @abort to reflect the fact that it's pretty
4816 4819 brutal (a sys.exit()). The difference between @abort and Ctrl-D
4817 4820 becomes significant only when IPyhton is embedded: in that case,
4818 4821 C-D closes IPython only, but @abort kills the enclosing program
4819 4822 too (unless it had called IPython inside a try catching
4820 4823 SystemExit).
4821 4824
4822 4825 * Created Shell module which exposes the actuall IPython Shell
4823 4826 classes, currently the normal and the embeddable one. This at
4824 4827 least offers a stable interface we won't need to change when
4825 4828 (later) the internals are rewritten. That rewrite will be confined
4826 4829 to iplib and ipmaker, but the Shell interface should remain as is.
4827 4830
4828 4831 * Added embed module which offers an embeddable IPShell object,
4829 4832 useful to fire up IPython *inside* a running program. Great for
4830 4833 debugging or dynamical data analysis.
4831 4834
4832 4835 2001-12-08 Fernando Perez <fperez@colorado.edu>
4833 4836
4834 4837 * Fixed small bug preventing seeing info from methods of defined
4835 4838 objects (incorrect namespace in _ofind()).
4836 4839
4837 4840 * Documentation cleanup. Moved the main usage docstrings to a
4838 4841 separate file, usage.py (cleaner to maintain, and hopefully in the
4839 4842 future some perlpod-like way of producing interactive, man and
4840 4843 html docs out of it will be found).
4841 4844
4842 4845 * Added @profile to see your profile at any time.
4843 4846
4844 4847 * Added @p as an alias for 'print'. It's especially convenient if
4845 4848 using automagic ('p x' prints x).
4846 4849
4847 4850 * Small cleanups and fixes after a pychecker run.
4848 4851
4849 4852 * Changed the @cd command to handle @cd - and @cd -<n> for
4850 4853 visiting any directory in _dh.
4851 4854
4852 4855 * Introduced _dh, a history of visited directories. @dhist prints
4853 4856 it out with numbers.
4854 4857
4855 4858 2001-12-07 Fernando Perez <fperez@colorado.edu>
4856 4859
4857 4860 * Released 0.1.22
4858 4861
4859 4862 * Made initialization a bit more robust against invalid color
4860 4863 options in user input (exit, not traceback-crash).
4861 4864
4862 4865 * Changed the bug crash reporter to write the report only in the
4863 4866 user's .ipython directory. That way IPython won't litter people's
4864 4867 hard disks with crash files all over the place. Also print on
4865 4868 screen the necessary mail command.
4866 4869
4867 4870 * With the new ultraTB, implemented LightBG color scheme for light
4868 4871 background terminals. A lot of people like white backgrounds, so I
4869 4872 guess we should at least give them something readable.
4870 4873
4871 4874 2001-12-06 Fernando Perez <fperez@colorado.edu>
4872 4875
4873 4876 * Modified the structure of ultraTB. Now there's a proper class
4874 4877 for tables of color schemes which allow adding schemes easily and
4875 4878 switching the active scheme without creating a new instance every
4876 4879 time (which was ridiculous). The syntax for creating new schemes
4877 4880 is also cleaner. I think ultraTB is finally done, with a clean
4878 4881 class structure. Names are also much cleaner (now there's proper
4879 4882 color tables, no need for every variable to also have 'color' in
4880 4883 its name).
4881 4884
4882 4885 * Broke down genutils into separate files. Now genutils only
4883 4886 contains utility functions, and classes have been moved to their
4884 4887 own files (they had enough independent functionality to warrant
4885 4888 it): ConfigLoader, OutputTrap, Struct.
4886 4889
4887 4890 2001-12-05 Fernando Perez <fperez@colorado.edu>
4888 4891
4889 4892 * IPython turns 21! Released version 0.1.21, as a candidate for
4890 4893 public consumption. If all goes well, release in a few days.
4891 4894
4892 4895 * Fixed path bug (files in Extensions/ directory wouldn't be found
4893 4896 unless IPython/ was explicitly in sys.path).
4894 4897
4895 4898 * Extended the FlexCompleter class as MagicCompleter to allow
4896 4899 completion of @-starting lines.
4897 4900
4898 4901 * Created __release__.py file as a central repository for release
4899 4902 info that other files can read from.
4900 4903
4901 4904 * Fixed small bug in logging: when logging was turned on in
4902 4905 mid-session, old lines with special meanings (!@?) were being
4903 4906 logged without the prepended comment, which is necessary since
4904 4907 they are not truly valid python syntax. This should make session
4905 4908 restores produce less errors.
4906 4909
4907 4910 * The namespace cleanup forced me to make a FlexCompleter class
4908 4911 which is nothing but a ripoff of rlcompleter, but with selectable
4909 4912 namespace (rlcompleter only works in __main__.__dict__). I'll try
4910 4913 to submit a note to the authors to see if this change can be
4911 4914 incorporated in future rlcompleter releases (Dec.6: done)
4912 4915
4913 4916 * More fixes to namespace handling. It was a mess! Now all
4914 4917 explicit references to __main__.__dict__ are gone (except when
4915 4918 really needed) and everything is handled through the namespace
4916 4919 dicts in the IPython instance. We seem to be getting somewhere
4917 4920 with this, finally...
4918 4921
4919 4922 * Small documentation updates.
4920 4923
4921 4924 * Created the Extensions directory under IPython (with an
4922 4925 __init__.py). Put the PhysicalQ stuff there. This directory should
4923 4926 be used for all special-purpose extensions.
4924 4927
4925 4928 * File renaming:
4926 4929 ipythonlib --> ipmaker
4927 4930 ipplib --> iplib
4928 4931 This makes a bit more sense in terms of what these files actually do.
4929 4932
4930 4933 * Moved all the classes and functions in ipythonlib to ipplib, so
4931 4934 now ipythonlib only has make_IPython(). This will ease up its
4932 4935 splitting in smaller functional chunks later.
4933 4936
4934 4937 * Cleaned up (done, I think) output of @whos. Better column
4935 4938 formatting, and now shows str(var) for as much as it can, which is
4936 4939 typically what one gets with a 'print var'.
4937 4940
4938 4941 2001-12-04 Fernando Perez <fperez@colorado.edu>
4939 4942
4940 4943 * Fixed namespace problems. Now builtin/IPyhton/user names get
4941 4944 properly reported in their namespace. Internal namespace handling
4942 4945 is finally getting decent (not perfect yet, but much better than
4943 4946 the ad-hoc mess we had).
4944 4947
4945 4948 * Removed -exit option. If people just want to run a python
4946 4949 script, that's what the normal interpreter is for. Less
4947 4950 unnecessary options, less chances for bugs.
4948 4951
4949 4952 * Added a crash handler which generates a complete post-mortem if
4950 4953 IPython crashes. This will help a lot in tracking bugs down the
4951 4954 road.
4952 4955
4953 4956 * Fixed nasty bug in auto-evaluation part of prefilter(). Names
4954 4957 which were boud to functions being reassigned would bypass the
4955 4958 logger, breaking the sync of _il with the prompt counter. This
4956 4959 would then crash IPython later when a new line was logged.
4957 4960
4958 4961 2001-12-02 Fernando Perez <fperez@colorado.edu>
4959 4962
4960 4963 * Made IPython a package. This means people don't have to clutter
4961 4964 their sys.path with yet another directory. Changed the INSTALL
4962 4965 file accordingly.
4963 4966
4964 4967 * Cleaned up the output of @who_ls, @who and @whos. @who_ls now
4965 4968 sorts its output (so @who shows it sorted) and @whos formats the
4966 4969 table according to the width of the first column. Nicer, easier to
4967 4970 read. Todo: write a generic table_format() which takes a list of
4968 4971 lists and prints it nicely formatted, with optional row/column
4969 4972 separators and proper padding and justification.
4970 4973
4971 4974 * Released 0.1.20
4972 4975
4973 4976 * Fixed bug in @log which would reverse the inputcache list (a
4974 4977 copy operation was missing).
4975 4978
4976 4979 * Code cleanup. @config was changed to use page(). Better, since
4977 4980 its output is always quite long.
4978 4981
4979 4982 * Itpl is back as a dependency. I was having too many problems
4980 4983 getting the parametric aliases to work reliably, and it's just
4981 4984 easier to code weird string operations with it than playing %()s
4982 4985 games. It's only ~6k, so I don't think it's too big a deal.
4983 4986
4984 4987 * Found (and fixed) a very nasty bug with history. !lines weren't
4985 4988 getting cached, and the out of sync caches would crash
4986 4989 IPython. Fixed it by reorganizing the prefilter/handlers/logger
4987 4990 division of labor a bit better. Bug fixed, cleaner structure.
4988 4991
4989 4992 2001-12-01 Fernando Perez <fperez@colorado.edu>
4990 4993
4991 4994 * Released 0.1.19
4992 4995
4993 4996 * Added option -n to @hist to prevent line number printing. Much
4994 4997 easier to copy/paste code this way.
4995 4998
4996 4999 * Created global _il to hold the input list. Allows easy
4997 5000 re-execution of blocks of code by slicing it (inspired by Janko's
4998 5001 comment on 'macros').
4999 5002
5000 5003 * Small fixes and doc updates.
5001 5004
5002 5005 * Rewrote @history function (was @h). Renamed it to @hist, @h is
5003 5006 much too fragile with automagic. Handles properly multi-line
5004 5007 statements and takes parameters.
5005 5008
5006 5009 2001-11-30 Fernando Perez <fperez@colorado.edu>
5007 5010
5008 5011 * Version 0.1.18 released.
5009 5012
5010 5013 * Fixed nasty namespace bug in initial module imports.
5011 5014
5012 5015 * Added copyright/license notes to all code files (except
5013 5016 DPyGetOpt). For the time being, LGPL. That could change.
5014 5017
5015 5018 * Rewrote a much nicer README, updated INSTALL, cleaned up
5016 5019 ipythonrc-* samples.
5017 5020
5018 5021 * Overall code/documentation cleanup. Basically ready for
5019 5022 release. Only remaining thing: licence decision (LGPL?).
5020 5023
5021 5024 * Converted load_config to a class, ConfigLoader. Now recursion
5022 5025 control is better organized. Doesn't include the same file twice.
5023 5026
5024 5027 2001-11-29 Fernando Perez <fperez@colorado.edu>
5025 5028
5026 5029 * Got input history working. Changed output history variables from
5027 5030 _p to _o so that _i is for input and _o for output. Just cleaner
5028 5031 convention.
5029 5032
5030 5033 * Implemented parametric aliases. This pretty much allows the
5031 5034 alias system to offer full-blown shell convenience, I think.
5032 5035
5033 5036 * Version 0.1.17 released, 0.1.18 opened.
5034 5037
5035 5038 * dot_ipython/ipythonrc (alias): added documentation.
5036 5039 (xcolor): Fixed small bug (xcolors -> xcolor)
5037 5040
5038 5041 * Changed the alias system. Now alias is a magic command to define
5039 5042 aliases just like the shell. Rationale: the builtin magics should
5040 5043 be there for things deeply connected to IPython's
5041 5044 architecture. And this is a much lighter system for what I think
5042 5045 is the really important feature: allowing users to define quickly
5043 5046 magics that will do shell things for them, so they can customize
5044 5047 IPython easily to match their work habits. If someone is really
5045 5048 desperate to have another name for a builtin alias, they can
5046 5049 always use __IP.magic_newname = __IP.magic_oldname. Hackish but
5047 5050 works.
5048 5051
5049 5052 2001-11-28 Fernando Perez <fperez@colorado.edu>
5050 5053
5051 5054 * Changed @file so that it opens the source file at the proper
5052 5055 line. Since it uses less, if your EDITOR environment is
5053 5056 configured, typing v will immediately open your editor of choice
5054 5057 right at the line where the object is defined. Not as quick as
5055 5058 having a direct @edit command, but for all intents and purposes it
5056 5059 works. And I don't have to worry about writing @edit to deal with
5057 5060 all the editors, less does that.
5058 5061
5059 5062 * Version 0.1.16 released, 0.1.17 opened.
5060 5063
5061 5064 * Fixed some nasty bugs in the page/page_dumb combo that could
5062 5065 crash IPython.
5063 5066
5064 5067 2001-11-27 Fernando Perez <fperez@colorado.edu>
5065 5068
5066 5069 * Version 0.1.15 released, 0.1.16 opened.
5067 5070
5068 5071 * Finally got ? and ?? to work for undefined things: now it's
5069 5072 possible to type {}.get? and get information about the get method
5070 5073 of dicts, or os.path? even if only os is defined (so technically
5071 5074 os.path isn't). Works at any level. For example, after import os,
5072 5075 os?, os.path?, os.path.abspath? all work. This is great, took some
5073 5076 work in _ofind.
5074 5077
5075 5078 * Fixed more bugs with logging. The sanest way to do it was to add
5076 5079 to @log a 'mode' parameter. Killed two in one shot (this mode
5077 5080 option was a request of Janko's). I think it's finally clean
5078 5081 (famous last words).
5079 5082
5080 5083 * Added a page_dumb() pager which does a decent job of paging on
5081 5084 screen, if better things (like less) aren't available. One less
5082 5085 unix dependency (someday maybe somebody will port this to
5083 5086 windows).
5084 5087
5085 5088 * Fixed problem in magic_log: would lock of logging out if log
5086 5089 creation failed (because it would still think it had succeeded).
5087 5090
5088 5091 * Improved the page() function using curses to auto-detect screen
5089 5092 size. Now it can make a much better decision on whether to print
5090 5093 or page a string. Option screen_length was modified: a value 0
5091 5094 means auto-detect, and that's the default now.
5092 5095
5093 5096 * Version 0.1.14 released, 0.1.15 opened. I think this is ready to
5094 5097 go out. I'll test it for a few days, then talk to Janko about
5095 5098 licences and announce it.
5096 5099
5097 5100 * Fixed the length of the auto-generated ---> prompt which appears
5098 5101 for auto-parens and auto-quotes. Getting this right isn't trivial,
5099 5102 with all the color escapes, different prompt types and optional
5100 5103 separators. But it seems to be working in all the combinations.
5101 5104
5102 5105 2001-11-26 Fernando Perez <fperez@colorado.edu>
5103 5106
5104 5107 * Wrote a regexp filter to get option types from the option names
5105 5108 string. This eliminates the need to manually keep two duplicate
5106 5109 lists.
5107 5110
5108 5111 * Removed the unneeded check_option_names. Now options are handled
5109 5112 in a much saner manner and it's easy to visually check that things
5110 5113 are ok.
5111 5114
5112 5115 * Updated version numbers on all files I modified to carry a
5113 5116 notice so Janko and Nathan have clear version markers.
5114 5117
5115 5118 * Updated docstring for ultraTB with my changes. I should send
5116 5119 this to Nathan.
5117 5120
5118 5121 * Lots of small fixes. Ran everything through pychecker again.
5119 5122
5120 5123 * Made loading of deep_reload an cmd line option. If it's not too
5121 5124 kosher, now people can just disable it. With -nodeep_reload it's
5122 5125 still available as dreload(), it just won't overwrite reload().
5123 5126
5124 5127 * Moved many options to the no| form (-opt and -noopt
5125 5128 accepted). Cleaner.
5126 5129
5127 5130 * Changed magic_log so that if called with no parameters, it uses
5128 5131 'rotate' mode. That way auto-generated logs aren't automatically
5129 5132 over-written. For normal logs, now a backup is made if it exists
5130 5133 (only 1 level of backups). A new 'backup' mode was added to the
5131 5134 Logger class to support this. This was a request by Janko.
5132 5135
5133 5136 * Added @logoff/@logon to stop/restart an active log.
5134 5137
5135 5138 * Fixed a lot of bugs in log saving/replay. It was pretty
5136 5139 broken. Now special lines (!@,/) appear properly in the command
5137 5140 history after a log replay.
5138 5141
5139 5142 * Tried and failed to implement full session saving via pickle. My
5140 5143 idea was to pickle __main__.__dict__, but modules can't be
5141 5144 pickled. This would be a better alternative to replaying logs, but
5142 5145 seems quite tricky to get to work. Changed -session to be called
5143 5146 -logplay, which more accurately reflects what it does. And if we
5144 5147 ever get real session saving working, -session is now available.
5145 5148
5146 5149 * Implemented color schemes for prompts also. As for tracebacks,
5147 5150 currently only NoColor and Linux are supported. But now the
5148 5151 infrastructure is in place, based on a generic ColorScheme
5149 5152 class. So writing and activating new schemes both for the prompts
5150 5153 and the tracebacks should be straightforward.
5151 5154
5152 5155 * Version 0.1.13 released, 0.1.14 opened.
5153 5156
5154 5157 * Changed handling of options for output cache. Now counter is
5155 5158 hardwired starting at 1 and one specifies the maximum number of
5156 5159 entries *in the outcache* (not the max prompt counter). This is
5157 5160 much better, since many statements won't increase the cache
5158 5161 count. It also eliminated some confusing options, now there's only
5159 5162 one: cache_size.
5160 5163
5161 5164 * Added 'alias' magic function and magic_alias option in the
5162 5165 ipythonrc file. Now the user can easily define whatever names he
5163 5166 wants for the magic functions without having to play weird
5164 5167 namespace games. This gives IPython a real shell-like feel.
5165 5168
5166 5169 * Fixed doc/?/?? for magics. Now all work, in all forms (explicit
5167 5170 @ or not).
5168 5171
5169 5172 This was one of the last remaining 'visible' bugs (that I know
5170 5173 of). I think if I can clean up the session loading so it works
5171 5174 100% I'll release a 0.2.0 version on c.p.l (talk to Janko first
5172 5175 about licensing).
5173 5176
5174 5177 2001-11-25 Fernando Perez <fperez@colorado.edu>
5175 5178
5176 5179 * Rewrote somewhat oinfo (?/??). Nicer, now uses page() and
5177 5180 there's a cleaner distinction between what ? and ?? show.
5178 5181
5179 5182 * Added screen_length option. Now the user can define his own
5180 5183 screen size for page() operations.
5181 5184
5182 5185 * Implemented magic shell-like functions with automatic code
5183 5186 generation. Now adding another function is just a matter of adding
5184 5187 an entry to a dict, and the function is dynamically generated at
5185 5188 run-time. Python has some really cool features!
5186 5189
5187 5190 * Renamed many options to cleanup conventions a little. Now all
5188 5191 are lowercase, and only underscores where needed. Also in the code
5189 5192 option name tables are clearer.
5190 5193
5191 5194 * Changed prompts a little. Now input is 'In [n]:' instead of
5192 5195 'In[n]:='. This allows it the numbers to be aligned with the
5193 5196 Out[n] numbers, and removes usage of ':=' which doesn't exist in
5194 5197 Python (it was a Mathematica thing). The '...' continuation prompt
5195 5198 was also changed a little to align better.
5196 5199
5197 5200 * Fixed bug when flushing output cache. Not all _p<n> variables
5198 5201 exist, so their deletion needs to be wrapped in a try:
5199 5202
5200 5203 * Figured out how to properly use inspect.formatargspec() (it
5201 5204 requires the args preceded by *). So I removed all the code from
5202 5205 _get_pdef in Magic, which was just replicating that.
5203 5206
5204 5207 * Added test to prefilter to allow redefining magic function names
5205 5208 as variables. This is ok, since the @ form is always available,
5206 5209 but whe should allow the user to define a variable called 'ls' if
5207 5210 he needs it.
5208 5211
5209 5212 * Moved the ToDo information from README into a separate ToDo.
5210 5213
5211 5214 * General code cleanup and small bugfixes. I think it's close to a
5212 5215 state where it can be released, obviously with a big 'beta'
5213 5216 warning on it.
5214 5217
5215 5218 * Got the magic function split to work. Now all magics are defined
5216 5219 in a separate class. It just organizes things a bit, and now
5217 5220 Xemacs behaves nicer (it was choking on InteractiveShell b/c it
5218 5221 was too long).
5219 5222
5220 5223 * Changed @clear to @reset to avoid potential confusions with
5221 5224 the shell command clear. Also renamed @cl to @clear, which does
5222 5225 exactly what people expect it to from their shell experience.
5223 5226
5224 5227 Added a check to the @reset command (since it's so
5225 5228 destructive, it's probably a good idea to ask for confirmation).
5226 5229 But now reset only works for full namespace resetting. Since the
5227 5230 del keyword is already there for deleting a few specific
5228 5231 variables, I don't see the point of having a redundant magic
5229 5232 function for the same task.
5230 5233
5231 5234 2001-11-24 Fernando Perez <fperez@colorado.edu>
5232 5235
5233 5236 * Updated the builtin docs (esp. the ? ones).
5234 5237
5235 5238 * Ran all the code through pychecker. Not terribly impressed with
5236 5239 it: lots of spurious warnings and didn't really find anything of
5237 5240 substance (just a few modules being imported and not used).
5238 5241
5239 5242 * Implemented the new ultraTB functionality into IPython. New
5240 5243 option: xcolors. This chooses color scheme. xmode now only selects
5241 5244 between Plain and Verbose. Better orthogonality.
5242 5245
5243 5246 * Large rewrite of ultraTB. Much cleaner now, with a separation of
5244 5247 mode and color scheme for the exception handlers. Now it's
5245 5248 possible to have the verbose traceback with no coloring.
5246 5249
5247 5250 2001-11-23 Fernando Perez <fperez@colorado.edu>
5248 5251
5249 5252 * Version 0.1.12 released, 0.1.13 opened.
5250 5253
5251 5254 * Removed option to set auto-quote and auto-paren escapes by
5252 5255 user. The chances of breaking valid syntax are just too high. If
5253 5256 someone *really* wants, they can always dig into the code.
5254 5257
5255 5258 * Made prompt separators configurable.
5256 5259
5257 5260 2001-11-22 Fernando Perez <fperez@colorado.edu>
5258 5261
5259 5262 * Small bugfixes in many places.
5260 5263
5261 5264 * Removed the MyCompleter class from ipplib. It seemed redundant
5262 5265 with the C-p,C-n history search functionality. Less code to
5263 5266 maintain.
5264 5267
5265 5268 * Moved all the original ipython.py code into ipythonlib.py. Right
5266 5269 now it's just one big dump into a function called make_IPython, so
5267 5270 no real modularity has been gained. But at least it makes the
5268 5271 wrapper script tiny, and since ipythonlib is a module, it gets
5269 5272 compiled and startup is much faster.
5270 5273
5271 5274 This is a reasobably 'deep' change, so we should test it for a
5272 5275 while without messing too much more with the code.
5273 5276
5274 5277 2001-11-21 Fernando Perez <fperez@colorado.edu>
5275 5278
5276 5279 * Version 0.1.11 released, 0.1.12 opened for further work.
5277 5280
5278 5281 * Removed dependency on Itpl. It was only needed in one place. It
5279 5282 would be nice if this became part of python, though. It makes life
5280 5283 *a lot* easier in some cases.
5281 5284
5282 5285 * Simplified the prefilter code a bit. Now all handlers are
5283 5286 expected to explicitly return a value (at least a blank string).
5284 5287
5285 5288 * Heavy edits in ipplib. Removed the help system altogether. Now
5286 5289 obj?/?? is used for inspecting objects, a magic @doc prints
5287 5290 docstrings, and full-blown Python help is accessed via the 'help'
5288 5291 keyword. This cleans up a lot of code (less to maintain) and does
5289 5292 the job. Since 'help' is now a standard Python component, might as
5290 5293 well use it and remove duplicate functionality.
5291 5294
5292 5295 Also removed the option to use ipplib as a standalone program. By
5293 5296 now it's too dependent on other parts of IPython to function alone.
5294 5297
5295 5298 * Fixed bug in genutils.pager. It would crash if the pager was
5296 5299 exited immediately after opening (broken pipe).
5297 5300
5298 5301 * Trimmed down the VerboseTB reporting a little. The header is
5299 5302 much shorter now and the repeated exception arguments at the end
5300 5303 have been removed. For interactive use the old header seemed a bit
5301 5304 excessive.
5302 5305
5303 5306 * Fixed small bug in output of @whos for variables with multi-word
5304 5307 types (only first word was displayed).
5305 5308
5306 5309 2001-11-17 Fernando Perez <fperez@colorado.edu>
5307 5310
5308 5311 * Version 0.1.10 released, 0.1.11 opened for further work.
5309 5312
5310 5313 * Modified dirs and friends. dirs now *returns* the stack (not
5311 5314 prints), so one can manipulate it as a variable. Convenient to
5312 5315 travel along many directories.
5313 5316
5314 5317 * Fixed bug in magic_pdef: would only work with functions with
5315 5318 arguments with default values.
5316 5319
5317 5320 2001-11-14 Fernando Perez <fperez@colorado.edu>
5318 5321
5319 5322 * Added the PhysicsInput stuff to dot_ipython so it ships as an
5320 5323 example with IPython. Various other minor fixes and cleanups.
5321 5324
5322 5325 * Version 0.1.9 released, 0.1.10 opened for further work.
5323 5326
5324 5327 * Added sys.path to the list of directories searched in the
5325 5328 execfile= option. It used to be the current directory and the
5326 5329 user's IPYTHONDIR only.
5327 5330
5328 5331 2001-11-13 Fernando Perez <fperez@colorado.edu>
5329 5332
5330 5333 * Reinstated the raw_input/prefilter separation that Janko had
5331 5334 initially. This gives a more convenient setup for extending the
5332 5335 pre-processor from the outside: raw_input always gets a string,
5333 5336 and prefilter has to process it. We can then redefine prefilter
5334 5337 from the outside and implement extensions for special
5335 5338 purposes.
5336 5339
5337 5340 Today I got one for inputting PhysicalQuantity objects
5338 5341 (from Scientific) without needing any function calls at
5339 5342 all. Extremely convenient, and it's all done as a user-level
5340 5343 extension (no IPython code was touched). Now instead of:
5341 5344 a = PhysicalQuantity(4.2,'m/s**2')
5342 5345 one can simply say
5343 5346 a = 4.2 m/s**2
5344 5347 or even
5345 5348 a = 4.2 m/s^2
5346 5349
5347 5350 I use this, but it's also a proof of concept: IPython really is
5348 5351 fully user-extensible, even at the level of the parsing of the
5349 5352 command line. It's not trivial, but it's perfectly doable.
5350 5353
5351 5354 * Added 'add_flip' method to inclusion conflict resolver. Fixes
5352 5355 the problem of modules being loaded in the inverse order in which
5353 5356 they were defined in
5354 5357
5355 5358 * Version 0.1.8 released, 0.1.9 opened for further work.
5356 5359
5357 5360 * Added magics pdef, source and file. They respectively show the
5358 5361 definition line ('prototype' in C), source code and full python
5359 5362 file for any callable object. The object inspector oinfo uses
5360 5363 these to show the same information.
5361 5364
5362 5365 * Version 0.1.7 released, 0.1.8 opened for further work.
5363 5366
5364 5367 * Separated all the magic functions into a class called Magic. The
5365 5368 InteractiveShell class was becoming too big for Xemacs to handle
5366 5369 (de-indenting a line would lock it up for 10 seconds while it
5367 5370 backtracked on the whole class!)
5368 5371
5369 5372 FIXME: didn't work. It can be done, but right now namespaces are
5370 5373 all messed up. Do it later (reverted it for now, so at least
5371 5374 everything works as before).
5372 5375
5373 5376 * Got the object introspection system (magic_oinfo) working! I
5374 5377 think this is pretty much ready for release to Janko, so he can
5375 5378 test it for a while and then announce it. Pretty much 100% of what
5376 5379 I wanted for the 'phase 1' release is ready. Happy, tired.
5377 5380
5378 5381 2001-11-12 Fernando Perez <fperez@colorado.edu>
5379 5382
5380 5383 * Version 0.1.6 released, 0.1.7 opened for further work.
5381 5384
5382 5385 * Fixed bug in printing: it used to test for truth before
5383 5386 printing, so 0 wouldn't print. Now checks for None.
5384 5387
5385 5388 * Fixed bug where auto-execs increase the prompt counter by 2 (b/c
5386 5389 they have to call len(str(sys.ps1)) ). But the fix is ugly, it
5387 5390 reaches by hand into the outputcache. Think of a better way to do
5388 5391 this later.
5389 5392
5390 5393 * Various small fixes thanks to Nathan's comments.
5391 5394
5392 5395 * Changed magic_pprint to magic_Pprint. This way it doesn't
5393 5396 collide with pprint() and the name is consistent with the command
5394 5397 line option.
5395 5398
5396 5399 * Changed prompt counter behavior to be fully like
5397 5400 Mathematica's. That is, even input that doesn't return a result
5398 5401 raises the prompt counter. The old behavior was kind of confusing
5399 5402 (getting the same prompt number several times if the operation
5400 5403 didn't return a result).
5401 5404
5402 5405 * Fixed Nathan's last name in a couple of places (Gray, not Graham).
5403 5406
5404 5407 * Fixed -Classic mode (wasn't working anymore).
5405 5408
5406 5409 * Added colored prompts using Nathan's new code. Colors are
5407 5410 currently hardwired, they can be user-configurable. For
5408 5411 developers, they can be chosen in file ipythonlib.py, at the
5409 5412 beginning of the CachedOutput class def.
5410 5413
5411 5414 2001-11-11 Fernando Perez <fperez@colorado.edu>
5412 5415
5413 5416 * Version 0.1.5 released, 0.1.6 opened for further work.
5414 5417
5415 5418 * Changed magic_env to *return* the environment as a dict (not to
5416 5419 print it). This way it prints, but it can also be processed.
5417 5420
5418 5421 * Added Verbose exception reporting to interactive
5419 5422 exceptions. Very nice, now even 1/0 at the prompt gives a verbose
5420 5423 traceback. Had to make some changes to the ultraTB file. This is
5421 5424 probably the last 'big' thing in my mental todo list. This ties
5422 5425 in with the next entry:
5423 5426
5424 5427 * Changed -Xi and -Xf to a single -xmode option. Now all the user
5425 5428 has to specify is Plain, Color or Verbose for all exception
5426 5429 handling.
5427 5430
5428 5431 * Removed ShellServices option. All this can really be done via
5429 5432 the magic system. It's easier to extend, cleaner and has automatic
5430 5433 namespace protection and documentation.
5431 5434
5432 5435 2001-11-09 Fernando Perez <fperez@colorado.edu>
5433 5436
5434 5437 * Fixed bug in output cache flushing (missing parameter to
5435 5438 __init__). Other small bugs fixed (found using pychecker).
5436 5439
5437 5440 * Version 0.1.4 opened for bugfixing.
5438 5441
5439 5442 2001-11-07 Fernando Perez <fperez@colorado.edu>
5440 5443
5441 5444 * Version 0.1.3 released, mainly because of the raw_input bug.
5442 5445
5443 5446 * Fixed NASTY bug in raw_input: input line wasn't properly parsed
5444 5447 and when testing for whether things were callable, a call could
5445 5448 actually be made to certain functions. They would get called again
5446 5449 once 'really' executed, with a resulting double call. A disaster
5447 5450 in many cases (list.reverse() would never work!).
5448 5451
5449 5452 * Removed prefilter() function, moved its code to raw_input (which
5450 5453 after all was just a near-empty caller for prefilter). This saves
5451 5454 a function call on every prompt, and simplifies the class a tiny bit.
5452 5455
5453 5456 * Fix _ip to __ip name in magic example file.
5454 5457
5455 5458 * Changed 'tar -x -f' to 'tar xvf' in auto-installer. This should
5456 5459 work with non-gnu versions of tar.
5457 5460
5458 5461 2001-11-06 Fernando Perez <fperez@colorado.edu>
5459 5462
5460 5463 * Version 0.1.2. Just to keep track of the recent changes.
5461 5464
5462 5465 * Fixed nasty bug in output prompt routine. It used to check 'if
5463 5466 arg != None...'. Problem is, this fails if arg implements a
5464 5467 special comparison (__cmp__) which disallows comparing to
5465 5468 None. Found it when trying to use the PhysicalQuantity module from
5466 5469 ScientificPython.
5467 5470
5468 5471 2001-11-05 Fernando Perez <fperez@colorado.edu>
5469 5472
5470 5473 * Also added dirs. Now the pushd/popd/dirs family functions
5471 5474 basically like the shell, with the added convenience of going home
5472 5475 when called with no args.
5473 5476
5474 5477 * pushd/popd slightly modified to mimic shell behavior more
5475 5478 closely.
5476 5479
5477 5480 * Added env,pushd,popd from ShellServices as magic functions. I
5478 5481 think the cleanest will be to port all desired functions from
5479 5482 ShellServices as magics and remove ShellServices altogether. This
5480 5483 will provide a single, clean way of adding functionality
5481 5484 (shell-type or otherwise) to IP.
5482 5485
5483 5486 2001-11-04 Fernando Perez <fperez@colorado.edu>
5484 5487
5485 5488 * Added .ipython/ directory to sys.path. This way users can keep
5486 5489 customizations there and access them via import.
5487 5490
5488 5491 2001-11-03 Fernando Perez <fperez@colorado.edu>
5489 5492
5490 5493 * Opened version 0.1.1 for new changes.
5491 5494
5492 5495 * Changed version number to 0.1.0: first 'public' release, sent to
5493 5496 Nathan and Janko.
5494 5497
5495 5498 * Lots of small fixes and tweaks.
5496 5499
5497 5500 * Minor changes to whos format. Now strings are shown, snipped if
5498 5501 too long.
5499 5502
5500 5503 * Changed ShellServices to work on __main__ so they show up in @who
5501 5504
5502 5505 * Help also works with ? at the end of a line:
5503 5506 ?sin and sin?
5504 5507 both produce the same effect. This is nice, as often I use the
5505 5508 tab-complete to find the name of a method, but I used to then have
5506 5509 to go to the beginning of the line to put a ? if I wanted more
5507 5510 info. Now I can just add the ? and hit return. Convenient.
5508 5511
5509 5512 2001-11-02 Fernando Perez <fperez@colorado.edu>
5510 5513
5511 5514 * Python version check (>=2.1) added.
5512 5515
5513 5516 * Added LazyPython documentation. At this point the docs are quite
5514 5517 a mess. A cleanup is in order.
5515 5518
5516 5519 * Auto-installer created. For some bizarre reason, the zipfiles
5517 5520 module isn't working on my system. So I made a tar version
5518 5521 (hopefully the command line options in various systems won't kill
5519 5522 me).
5520 5523
5521 5524 * Fixes to Struct in genutils. Now all dictionary-like methods are
5522 5525 protected (reasonably).
5523 5526
5524 5527 * Added pager function to genutils and changed ? to print usage
5525 5528 note through it (it was too long).
5526 5529
5527 5530 * Added the LazyPython functionality. Works great! I changed the
5528 5531 auto-quote escape to ';', it's on home row and next to '. But
5529 5532 both auto-quote and auto-paren (still /) escapes are command-line
5530 5533 parameters.
5531 5534
5532 5535
5533 5536 2001-11-01 Fernando Perez <fperez@colorado.edu>
5534 5537
5535 5538 * Version changed to 0.0.7. Fairly large change: configuration now
5536 5539 is all stored in a directory, by default .ipython. There, all
5537 5540 config files have normal looking names (not .names)
5538 5541
5539 5542 * Version 0.0.6 Released first to Lucas and Archie as a test
5540 5543 run. Since it's the first 'semi-public' release, change version to
5541 5544 > 0.0.6 for any changes now.
5542 5545
5543 5546 * Stuff I had put in the ipplib.py changelog:
5544 5547
5545 5548 Changes to InteractiveShell:
5546 5549
5547 5550 - Made the usage message a parameter.
5548 5551
5549 5552 - Require the name of the shell variable to be given. It's a bit
5550 5553 of a hack, but allows the name 'shell' not to be hardwire in the
5551 5554 magic (@) handler, which is problematic b/c it requires
5552 5555 polluting the global namespace with 'shell'. This in turn is
5553 5556 fragile: if a user redefines a variable called shell, things
5554 5557 break.
5555 5558
5556 5559 - magic @: all functions available through @ need to be defined
5557 5560 as magic_<name>, even though they can be called simply as
5558 5561 @<name>. This allows the special command @magic to gather
5559 5562 information automatically about all existing magic functions,
5560 5563 even if they are run-time user extensions, by parsing the shell
5561 5564 instance __dict__ looking for special magic_ names.
5562 5565
5563 5566 - mainloop: added *two* local namespace parameters. This allows
5564 5567 the class to differentiate between parameters which were there
5565 5568 before and after command line initialization was processed. This
5566 5569 way, later @who can show things loaded at startup by the
5567 5570 user. This trick was necessary to make session saving/reloading
5568 5571 really work: ideally after saving/exiting/reloading a session,
5569 5572 *everythin* should look the same, including the output of @who. I
5570 5573 was only able to make this work with this double namespace
5571 5574 trick.
5572 5575
5573 5576 - added a header to the logfile which allows (almost) full
5574 5577 session restoring.
5575 5578
5576 5579 - prepend lines beginning with @ or !, with a and log
5577 5580 them. Why? !lines: may be useful to know what you did @lines:
5578 5581 they may affect session state. So when restoring a session, at
5579 5582 least inform the user of their presence. I couldn't quite get
5580 5583 them to properly re-execute, but at least the user is warned.
5581 5584
5582 5585 * Started ChangeLog.
General Comments 0
You need to be logged in to leave comments. Login now