diff -Nru dreampie-1.1/debian/changelog dreampie-1.1.1/debian/changelog --- dreampie-1.1/debian/changelog 2010-07-17 13:02:51.000000000 +0000 +++ dreampie-1.1.1/debian/changelog 2011-03-21 21:45:08.000000000 +0000 @@ -1,3 +1,16 @@ +dreampie (1.1.1-1) unstable; urgency=low + + * New upstream release. + * Switch to dh_python2. + * debian/control: + - Bump Standards-Version to 3.9.1, no changes required. + * debian/copyright: + - Update copyright years. + * debian/rules: + - Delete unused .egg-info file. + + -- Luca Falavigna Mon, 21 Mar 2011 22:45:06 +0100 + dreampie (1.1-1) unstable; urgency=low * New upstream release. diff -Nru dreampie-1.1/debian/control dreampie-1.1.1/debian/control --- dreampie-1.1/debian/control 2010-07-07 07:40:53.000000000 +0000 +++ dreampie-1.1.1/debian/control 2011-01-28 23:45:34.000000000 +0000 @@ -4,9 +4,9 @@ Maintainer: Luca Falavigna Uploaders: Python Applications Packaging Team Build-Depends: debhelper (>= 7.0.50~) -Build-Depends-Indep: python (>= 2.5), python-support -Standards-Version: 3.9.0 -XS-Python-Version: >= 2.5 +Build-Depends-Indep: python (>= 2.6.6-11~) +Standards-Version: 3.9.1 +X-Python-Version: >= 2.5 Homepage: http://dreampie.sourceforge.net/ Vcs-Svn: svn://svn.debian.org/python-apps/packages/dreampie/trunk/ Vcs-Browser: http://svn.debian.org/viewsvn/python-apps/packages/dreampie/trunk/ diff -Nru dreampie-1.1/debian/copyright dreampie-1.1.1/debian/copyright --- dreampie-1.1/debian/copyright 2010-06-23 07:10:02.000000000 +0000 +++ dreampie-1.1.1/debian/copyright 2011-01-28 19:57:58.000000000 +0000 @@ -387,6 +387,6 @@ The Debian packaging is: - Copyright © 2010 Luca Falavigna + Copyright © 2010-2011 Luca Falavigna and is licensed under the GPL version 3, see above. diff -Nru dreampie-1.1/debian/rules dreampie-1.1.1/debian/rules --- dreampie-1.1/debian/rules 2010-07-07 07:46:39.000000000 +0000 +++ dreampie-1.1.1/debian/rules 2011-01-28 23:45:34.000000000 +0000 @@ -1,10 +1,11 @@ #!/usr/bin/make -f %: - dh $@ + dh $@ --with python2 override_dh_auto_install: dh_auto_install -- --install-lib=/usr/share/dreampie --install-scripts=/usr/share/dreampie + find debian/dreampie -name "*.egg-info" -delete -override_dh_pysupport: - dh_pysupport -X py3 +override_dh_python2: + dh_python2 -X .*/subp-py3 diff -Nru dreampie-1.1/dreampielib/gui/autocomplete.py dreampie-1.1.1/dreampielib/gui/autocomplete.py --- dreampie-1.1/dreampielib/gui/autocomplete.py 2010-07-08 17:06:14.000000000 +0000 +++ dreampie-1.1.1/dreampielib/gui/autocomplete.py 2010-09-03 05:56:34.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2009 Noam Yorav-Raphael +# Copyright 2010 Noam Yorav-Raphael # # This file is part of DreamPie. # @@ -64,7 +64,10 @@ if line.startswith('import '): res = self._complete_modules(line, is_auto) elif line.startswith('from '): - if ' import ' not in line: + if len((line+'x').split()) == 3: + # The third word should be "import". + res = self._complete_import(line) + elif ' import ' not in line: res = self._complete_modules(line, is_auto) else: res = self._complete_module_members(line, is_auto) @@ -163,6 +166,20 @@ is_case_insen = False return comp_prefix, public, private, is_case_insen + def _complete_import(self, line): + """ + Complete the word "import"... + """ + i = len(line) + while i and line[i-1] in ID_CHARS: + i -= 1 + comp_prefix = line[i:] + public = ['import'] + private = [] + is_case_insen = False + return comp_prefix, public, private, is_case_insen + + def _complete_modules(self, line, is_auto): """ line - the stripped line from its beginning to the cursor. diff -Nru dreampie-1.1/dreampielib/gui/autoparen.py dreampie-1.1.1/dreampielib/gui/autoparen.py --- dreampie-1.1/dreampielib/gui/autoparen.py 1970-01-01 00:00:00.000000000 +0000 +++ dreampie-1.1.1/dreampielib/gui/autoparen.py 2010-09-12 10:43:24.000000000 +0000 @@ -0,0 +1,105 @@ +# Copyright 2010 Noam Yorav-Raphael +# +# This file is part of DreamPie. +# +# DreamPie is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# DreamPie is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with DreamPie. If not, see . + +__all__ = ['Autoparen'] + +import string +from keyword import iskeyword + +from .hyper_parser import HyperParser + +# These are all the chars that may be before the parens +LAST_CHARS = set(string.ascii_letters + string.digits + "_)]") + +class Autoparen(object): + """ + Add parentheses if a space was pressed after a callable-only object. + """ + + def __init__(self, sourcebuffer, is_callable_only, get_expects_str, + show_call_tip, INDENT_WIDTH): + self.sourcebuffer = sb = sourcebuffer + self.is_callable_only = is_callable_only + self.get_expects_str = get_expects_str + self.show_call_tip = show_call_tip + self.INDENT_WIDTH = INDENT_WIDTH + + # We place this mark at the end of the expression we added parens to, + # so that if the user removes the paren and presses space, we won't + # interfere another time. + self.mark = sb.create_mark(None, sb.get_start_iter(), left_gravity=True) + + def add_parens(self): + """ + This is called if the user pressed space on the sourceview, and + the subprocess is not executing commands (so is_callable_only can work.) + Should return True if event-handling should stop, or False if it should + continue as usual. + + Should be called only when is_callable_only can be called safely. + """ + sb = self.sourcebuffer + + # Quickly discard some cases + insert = sb.get_iter_at_mark(sb.get_insert()) + mark_it = sb.get_iter_at_mark(self.mark) + if mark_it.equal(insert): + return False + it = insert.copy() + it.backward_char() + if it.get_char() not in LAST_CHARS: + return False + it.forward_char() + it.backward_word_start() + if iskeyword(it.get_text(insert).decode('utf8')): + return False + + text = sb.get_slice(sb.get_start_iter(), + sb.get_end_iter()).decode('utf8') + index = sb.get_iter_at_mark(sb.get_insert()).get_offset() + hp = HyperParser(text, index, self.INDENT_WIDTH) + + if not hp.is_in_code(): + return False + + expr = hp.get_expression() + if not expr: + return False + if '(' in expr: + # Don't evaluate expressions which may contain a function call. + return False + + is_callable_only, expects_str = self.is_callable_only(expr) + if not is_callable_only: + return False + + sb.move_mark(self.mark, insert) + + last_name = expr.rsplit('.', 1)[-1] + sb.begin_user_action() + if expects_str or last_name in self.get_expects_str(): + sb.insert(insert, '("")') + insert.backward_chars(2) + else: + sb.insert(insert, '()') + insert.backward_char() + sb.place_cursor(insert) + sb.end_user_action() + + self.show_call_tip() + + return True diff -Nru dreampie-1.1/dreampielib/gui/call_tip_window.py dreampie-1.1.1/dreampielib/gui/call_tip_window.py --- dreampie-1.1/dreampielib/gui/call_tip_window.py 2010-07-13 16:12:13.000000000 +0000 +++ dreampie-1.1.1/dreampielib/gui/call_tip_window.py 2010-09-08 06:33:00.000000000 +0000 @@ -233,6 +233,8 @@ vs = self.vscrollbar win = self.window + text = text.replace('\0', '') # Fixes bug #611513 + win.hide() tv.get_buffer().set_text(text) diff -Nru dreampie-1.1/dreampielib/gui/config_dialog.py dreampie-1.1.1/dreampielib/gui/config_dialog.py --- dreampie-1.1/dreampielib/gui/config_dialog.py 2010-07-07 11:05:23.000000000 +0000 +++ dreampie-1.1.1/dreampielib/gui/config_dialog.py 2010-09-12 10:53:34.000000000 +0000 @@ -58,13 +58,21 @@ self.viewer_entry.props.text = eval(config.get('viewer')) - self.expects_str_entry.props.text = eval(config.get('expects-str')) + self.autoparen_chk.props.active = config.get_bool('autoparen') + self.expects_str_entry.props.text = config.get('expects-str-2') self.leave_code_chk.props.active = config.get_bool('leave-code') self.hide_defs_chk.props.active = config.get_bool('hide-defs') - self.matplotlib_ia_warn_chk.props.active = config.get_bool('matplotlib-ia-warn') + switch = config.get_bool('matplotlib-ia-switch') + warn = config.get_bool('matplotlib-ia-warn') + if switch: + self.matplotlib_ia_switch_rad.props.active = True + elif warn: + self.matplotlib_ia_warn_rad.props.active = True + else: + self.matplotlib_ia_ignore_rad.props.active = True self.ask_on_quit_chk.props.active = config.get_bool('ask-on-quit') @@ -138,13 +146,23 @@ config.set('viewer', repr(self.viewer_entry.props.text.decode('utf8').strip())) - config.set('expects-str', repr(expects_str)) + config.set_bool('autoparen', self.autoparen_chk.props.active) + config.set('expects-str-2', expects_str) config.set_bool('leave-code', self.leave_code_chk.props.active) config.set_bool('hide-defs', self.hide_defs_chk.props.active) - config.set_bool('matplotlib-ia-warn', self.matplotlib_ia_warn_chk.props.active) + if self.matplotlib_ia_switch_rad.props.active: + switch = True + warn = False + elif self.matplotlib_ia_warn_rad.props.active: + switch = False + warn = True + else: + switch = warn = False + config.set_bool('matplotlib-ia-switch', switch) + config.set_bool('matplotlib-ia-warn', warn) config.set_bool('ask-on-quit', self.ask_on_quit_chk.props.active) @@ -427,4 +445,5 @@ def on_autofold_chk_toggled(self, _widget): self.autofold_spin.props.sensitive = self.autofold_chk.props.active - + def on_autoparen_chk_toggled(self, _widget): + self.expects_str_alignment.props.sensitive = self.autoparen_chk.props.active diff -Nru dreampie-1.1/dreampielib/gui/config.py dreampie-1.1.1/dreampielib/gui/config.py --- dreampie-1.1/dreampielib/gui/config.py 2010-07-07 10:13:52.000000000 +0000 +++ dreampie-1.1.1/dreampielib/gui/config.py 2010-09-12 10:58:06.000000000 +0000 @@ -24,6 +24,9 @@ from .odict import OrderedDict +# We use expects-str-2, because expects-str had a different format (uses repr) +# in DreamPie 1.1 + default_config = """ [DreamPie] show-getting-started = True @@ -36,8 +39,10 @@ autofold-numlines = 30 viewer = '' init-code = '' -expects-str = 'execfile chdir open run runeval' +autoparen = True +expects-str-2 = execfile chdir open run runeval ask-on-quit = True +matplotlib-ia-switch = False matplotlib-ia-warn = True recall-1-char-commands = False diff -Nru dreampie-1.1/dreampielib/gui/__init__.py dreampie-1.1.1/dreampielib/gui/__init__.py --- dreampie-1.1/dreampielib/gui/__init__.py 2010-07-13 16:25:33.000000000 +0000 +++ dreampie-1.1.1/dreampielib/gui/__init__.py 2010-09-12 13:53:14.000000000 +0000 @@ -110,12 +110,13 @@ from .hist_persist import HistPersist from .autocomplete import Autocomplete from .call_tips import CallTips +from .autoparen import Autoparen from .subprocess_handler import SubprocessHandler, StartError from .beep import beep from .file_dialogs import save_dialog from .tags import (OUTPUT, STDIN, STDOUT, STDERR, EXCEPTION, PROMPT, COMMAND, COMMAND_DEFS, COMMAND_SEP, MESSAGE, RESULT_IND, RESULT) -import tags +from . import tags INDENT_WIDTH = 4 @@ -141,6 +142,7 @@ def __init__(self, pyexec): SimpleGladeApp.__init__(self, gladefile, 'window_main') self.load_popup_menus() + self.set_mac_accelerators() self.config = Config() @@ -155,9 +157,6 @@ self.init_sourcebufferview() - # List of function names which expect a string argument - self.expects_str = [] - self.configure() self.output = Output(self.textview) @@ -198,6 +197,12 @@ self.call_tips = CallTips(self.sourceview, self.get_func_doc, INDENT_WIDTH) + + self.autoparen = Autoparen(self.sourcebuffer, + self.is_callable_only, + self.get_expects_str, + self.autoparen_show_call_tip, + INDENT_WIDTH) self.subp = SubprocessHandler( pyexec, data_dir, @@ -233,7 +238,7 @@ self.show_getting_started_dialog() self.config.set_bool('show-getting-started', False) self.config.save() - + def load_popup_menus(self): # Load popup menus from the glade file. Would not have been needed if # popup menus could be children of windows. @@ -248,6 +253,40 @@ self.copy_section_menu = xml.get_widget('copy_section_menu') self.view_section_menu = xml.get_widget('view_section_menu') self.save_section_menu = xml.get_widget('save_section_menu') + + def set_mac_accelerators(self): + # Set up accelerators suitable for the Mac. + # Ctrl-Up and Ctrl-Down are taken by the window manager, so we use + # Ctrl-PgUp and Ctrl-PgDn. + # We want it to be easy to switch, so both sets of keys are always + # active, but only one, most suitable for each platform, is displayed + # in the menu. + + accel_group = gtk.accel_groups_from_object(self.window_main)[0] + menu_up = self.menuitem_history_up + UP = gdk.keyval_from_name('Up') + PGUP = gdk.keyval_from_name('Prior') + menu_dn = self.menuitem_history_down + DN = gdk.keyval_from_name('Down') + PGDN = gdk.keyval_from_name('Next') + + if sys.platform != 'darwin': + menu_up.add_accelerator('activate', accel_group, PGUP, + gdk.CONTROL_MASK, 0) + menu_dn.add_accelerator('activate', accel_group, PGDN, + gdk.CONTROL_MASK, 0) + else: + menu_up.remove_accelerator(accel_group, UP, gdk.CONTROL_MASK) + menu_up.add_accelerator('activate', accel_group, PGUP, + gdk.CONTROL_MASK, gtk.ACCEL_VISIBLE) + menu_up.add_accelerator('activate', accel_group, UP, + gdk.CONTROL_MASK, 0) + + menu_dn.remove_accelerator(accel_group, DN, gdk.CONTROL_MASK) + menu_dn.add_accelerator('activate', accel_group, PGDN, + gdk.CONTROL_MASK, gtk.ACCEL_VISIBLE) + menu_dn.add_accelerator('activate', accel_group, DN, + gdk.CONTROL_MASK, 0) def on_cut(self, _widget): return self.selection.cut() @@ -487,47 +526,6 @@ return False - @sourceview_keyhandler('space', 0) - def on_sourceview_space(self): - """ - If a space was hit after a callable-only object, add parentheses. - """ - if self.is_executing: - return False - - sb = self.sourcebuffer - insert = sb.get_iter_at_mark(sb.get_insert()) - insert_linestart = sb.get_iter_at_line(insert.get_line()) - line = self.sb_get_text(insert_linestart, insert) - # Search for a sequence of identifiers separated by dots at the - # end of the line - m = re.search(r'[a-zA-Z_][a-zA-Z0-9_]*(?:\.[a-zA-Z_][a-zA-Z0-9_]*)*$', - line) - if not m: - return False - what = m.group() - if iskeyword(what): - # This is a common case, no need to ask the subprocess for it. - return False - - is_callable_only, expects_str = self.call_subp(u'is_callable_only', what) - if not is_callable_only: - return False - - last_name = what.rsplit('.', 1)[-1] - if expects_str or last_name in self.expects_str: - sb.insert(insert, '("")') - insert.backward_chars(2) - else: - sb.insert(insert, '()') - insert.backward_char() - sb.place_cursor(insert) - - # Show a call tip - self.call_tips.show(is_auto=True) - - return True - # The following 3 handlers are for characters which may trigger automatic # opening of the completion list. (slash and backslash depend on path.sep) # We leave the final decision whether to open the list to the autocompleter. @@ -566,6 +564,33 @@ def on_sourceview_keypress(self, _widget, event): return handle_keypress(self, event, sourceview_keyhandlers) + + # Autoparen + + @sourceview_keyhandler('space', 0) + def on_sourceview_space(self): + """ + If a space was hit after a callable-only object, add parentheses. + """ + if self.is_executing: + return False + if not self.config.get_bool('autoparen'): + return False + + return self.autoparen.add_parens() + + def is_callable_only(self, expr): + # This should be called only as a result of on_sourceview_space, which + # already checks that is_executing==False. + return self.call_subp(u'is_callable_only', expr) + + def get_expects_str(self): + return set(self.config.get('expects-str-2').split()) + + def autoparen_show_call_tip(self): + self.call_tips.show(is_auto=True) + + # History def on_textview_keypress(self, _widget, event): @@ -599,7 +624,8 @@ self.call_subp(u'set_pprint', config.get_bool('pprint')) - self.call_subp(u'set_matplotlib_ia_warn', + self.call_subp(u'set_matplotlib_ia', + config.get_bool('matplotlib-ia-switch'), config.get_bool('matplotlib-ia-warn')) def run_init_code(self): @@ -973,8 +999,6 @@ command_defs = self.textbuffer.get_tag_table().lookup(COMMAND_DEFS) command_defs.props.invisible = config.get_bool('hide-defs') - self.expects_str = set(eval(config.get('expects-str')).split()) - def on_preferences(self, _widget): cd = ConfigDialog(self.config, gladefile, self.window_main) r = cd.run() diff -Nru dreampie-1.1/dreampielib/__init__.py dreampie-1.1.1/dreampielib/__init__.py --- dreampie-1.1/dreampielib/__init__.py 2010-07-13 16:12:13.000000000 +0000 +++ dreampie-1.1.1/dreampielib/__init__.py 2010-09-14 10:06:13.000000000 +0000 @@ -1 +1 @@ -__version__ = "1.1" +__version__ = "1.1.1" diff -Nru dreampie-1.1/dreampielib/subprocess/__init__.py dreampie-1.1.1/dreampielib/subprocess/__init__.py --- dreampie-1.1/dreampielib/subprocess/__init__.py 2010-07-08 17:14:03.000000000 +0000 +++ dreampie-1.1.1/dreampielib/subprocess/__init__.py 2010-09-12 14:15:39.000000000 +0000 @@ -127,11 +127,12 @@ # Config self.is_pprint = False + self.is_matplotlib_ia_switch = False self.is_matplotlib_ia_warn = False self.reshist_size = 0 - # Did we already warn about matplotlib non-interactive mode? - self.matplotlib_ia_warned = False + # Did we already handle matplotlib in non-interactive mode? + self.matplotlib_ia_handled = False # The result history index of the next value to enter the history self.reshist_counter = 0 @@ -279,7 +280,7 @@ # which had no effect filename = '' % self.gid self.gid += 1 - lines = src.split("\n") + lines = [x+'\n' for x in src.split("\n")] linecache.cache[filename] = len(src)+1, None, lines, filename codeob = compile(src, filename, 'single', self.flags) self.flags = self.update_features(self.flags, codeob.co_flags) @@ -382,8 +383,9 @@ self.is_pprint = is_pprint @rpc_func - def set_matplotlib_ia_warn(self, is_matplotlib_ia_warn): - self.is_matplotlib_ia_warn = is_matplotlib_ia_warn + def set_matplotlib_ia(self, is_switch, is_warn): + self.is_matplotlib_ia_switch = is_switch + self.is_matplotlib_ia_warn = is_warn @rpc_func def set_reshist_size(self, new_reshist_size): @@ -630,14 +632,39 @@ obj = eval(expr, self.locs) except Exception: return None + if isinstance(obj, (types.BuiltinFunctionType, + types.BuiltinMethodType)): + # These don't have source code, and using pydoc will only + # add something like "execfile(...)" before the doc. + doc = inspect.getdoc(obj) + if doc is None: + return None + return unicodify(doc) + + # Check if obj.__doc__ is not in the code (was added after definition). + # If so, return pydoc's documentation. + # This test is CPython-specific. Another approach would be to look for + # the string in the source code. + co_consts = getattr(getattr(obj, 'func_code', None), 'co_consts', None) + __doc__ = getattr(obj, '__doc__', None) + if co_consts is not None and __doc__ is not None: + if __doc__ not in co_consts: + # Return pydoc's documentation + return unicodify(textdoc.document(obj).strip()) + try: source = inspect.getsource(obj) except (TypeError, IOError): + # If can't get the source, return pydoc's documentation return unicodify(textdoc.document(obj).strip()) else: + # If we can get the source, return it. + # cleandoc removes extra indentation. # We add a newline because it ignores indentation of first line... - return unicodify(inspect.cleandoc('\n'+source)) + # The next line is for Python 2.5 compatibility. + cleandoc = getattr(inspect, 'cleandoc', lambda s: s) + return unicodify(cleandoc('\n'+source)) @rpc_func def is_callable_only(self, what): @@ -670,30 +697,30 @@ return r, expects_str def check_matplotlib_ia(self): - """Warn if matplotlib is in non-interactive mode""" - if not self.is_matplotlib_ia_warn: + """Check if matplotlib is in non-interactive mode, and handle it.""" + if not self.is_matplotlib_ia_warn and not self.is_matplotlib_ia_switch: return - if self.matplotlib_ia_warned: + if self.matplotlib_ia_handled: return if 'matplotlib' not in sys.modules: return - self.matplotlib_ia_warned = True + self.matplotlib_ia_handled = True # From here we do this only once. matplotlib = sys.modules['matplotlib'] - if not hasattr(matplotlib, 'rcParams'): + if not hasattr(matplotlib, 'is_interactive'): return - rcParams = matplotlib.rcParams - if not isinstance(rcParams, dict): + if matplotlib.is_interactive(): return - if 'interactive' not in rcParams: - return - if not rcParams['interactive']: + if self.is_matplotlib_ia_switch: + if not hasattr(matplotlib, 'interactive'): + return + matplotlib.interactive(True) + else: sys.stderr.write( "Warning: matplotlib in non-interactive mode detected.\n" - "This will mean plots will appear only after you run show().\n" - "To fix this, set \"interactive : True\" in your matplotlibrc file.\n" - "To suppress this warning, disable the matplotlib warning in the\n" - "configuration window.\n") + "This means that plots will appear only after you run show().\n" + "Use Edit->Preferences->Shell to automatically switch to interactive mode \n" + "or to suppress this warning.\n") # Handle GUI events diff -Nru dreampie-1.1/dreampielib/subprocess/trunc_traceback.py dreampie-1.1.1/dreampielib/subprocess/trunc_traceback.py --- dreampie-1.1/dreampielib/subprocess/trunc_traceback.py 2010-05-23 19:38:46.000000000 +0000 +++ dreampie-1.1.1/dreampielib/subprocess/trunc_traceback.py 2010-09-14 10:04:56.000000000 +0000 @@ -76,7 +76,7 @@ def trunc_traceback((_typ, value, tb), source_file): """ - Format a traceback where entried before a frame from source_file are + Format a traceback where entries before a frame from source_file are omitted (unless the last frame is from source_file). Return the result as a unicode string. """ @@ -101,6 +101,10 @@ continue tbe = traceback.extract_tb(tb) + # This is a work around a really weird IronPython bug. + while len(tbe)>1 and 'split_to_singles' in tbe[-1][0]: + tbe.pop() + if canonical_fn(tbe[-1][0]) != source_file: # If the last entry is from this file, don't remove # anything. Otherwise, remove lines before the current diff -Nru dreampie-1.1/PKG-INFO dreampie-1.1.1/PKG-INFO --- dreampie-1.1/PKG-INFO 2010-07-13 17:23:13.000000000 +0000 +++ dreampie-1.1.1/PKG-INFO 2010-09-14 10:19:01.000000000 +0000 @@ -1,6 +1,6 @@ Metadata-Version: 1.0 Name: dreampie -Version: 1.1 +Version: 1.1.1 Summary: DreamPie - The interactive Python shell you've always dreamed about! Home-page: http://dreampie.sourceforge.net/ Author: Noam Yorav-Raphael diff -Nru dreampie-1.1/share/dreampie/dreampie.glade dreampie-1.1.1/share/dreampie/dreampie.glade --- dreampie-1.1/share/dreampie/dreampie.glade 2010-07-08 07:48:50.000000000 +0000 +++ dreampie-1.1.1/share/dreampie/dreampie.glade 2010-09-12 13:40:40.000000000 +0000 @@ -90,7 +90,7 @@ - + True Search the history upwards History Up @@ -100,7 +100,7 @@ - + True Search the history downwards History Down @@ -129,8 +129,8 @@ Unfold Last Folded Output True - + @@ -995,18 +995,76 @@ - - Warn if matplotlib in non-interactive mode is detected + True - True - False - True + 0 + When matplotlib in non-interactive mode is imported: False 4 + + + True + 22 + + + True + 9 + + + Switch to interactive mode + True + True + False + True + True + + + False + 0 + + + + + Warn + True + True + False + True + True + matplotlib_ia_switch_rad + + + False + 1 + + + + + Do nothing + True + True + False + True + True + matplotlib_ia_switch_rad + + + False + 2 + + + + + + + False + 5 + + @@ -1145,29 +1203,53 @@ - + + Automatically add parentheses when pressing space True - 0 - Automatically add quotes for these functions: + True + False + True + False - False 3 - + True + False 22 - + True - True - A list of function names, separated by spaces, that usually get a string literal as an argument. + + + True + 0 + Also add quotes for these functions: + + + False + False + 0 + + + + + True + True + A list of function names, separated by spaces, that usually get a string literal as an argument. If you type the name of a function of the list and then press the space key, parens and quotes will automatically be added - for example, 'execfile<space>' -> 'execfile("")'. You can also set the __expects_str__ attribute of a function to True to achieve the same effect. - + + + + False + 1 + +