##// END OF EJS Templates
Small docstring/usage message cleanups.
Fernando Perez -
Show More
@@ -1,800 +1,800 b''
1 """ History related magics and functionality """
1 """ History related magics and functionality """
2 #-----------------------------------------------------------------------------
2 #-----------------------------------------------------------------------------
3 # Copyright (C) 2010 The IPython Development Team.
3 # Copyright (C) 2010 The IPython Development Team.
4 #
4 #
5 # Distributed under the terms of the BSD License.
5 # Distributed under the terms of the BSD License.
6 #
6 #
7 # The full license is in the file COPYING.txt, distributed with this software.
7 # The full license is in the file COPYING.txt, distributed with this software.
8 #-----------------------------------------------------------------------------
8 #-----------------------------------------------------------------------------
9
9
10 #-----------------------------------------------------------------------------
10 #-----------------------------------------------------------------------------
11 # Imports
11 # Imports
12 #-----------------------------------------------------------------------------
12 #-----------------------------------------------------------------------------
13 from __future__ import print_function
13 from __future__ import print_function
14
14
15 # Stdlib imports
15 # Stdlib imports
16 import atexit
16 import atexit
17 import datetime
17 import datetime
18 import os
18 import os
19 import re
19 import re
20 import sqlite3
20 import sqlite3
21 import threading
21 import threading
22
22
23 # Our own packages
23 # Our own packages
24 from IPython.config.configurable import Configurable
24 from IPython.config.configurable import Configurable
25
25
26 from IPython.testing.skipdoctest import skip_doctest
26 from IPython.testing.skipdoctest import skip_doctest
27 from IPython.utils import io
27 from IPython.utils import io
28 from IPython.utils.traitlets import Bool, Dict, Instance, Int, List, Unicode
28 from IPython.utils.traitlets import Bool, Dict, Instance, Int, List, Unicode
29 from IPython.utils.warn import warn
29 from IPython.utils.warn import warn
30
30
31 #-----------------------------------------------------------------------------
31 #-----------------------------------------------------------------------------
32 # Classes and functions
32 # Classes and functions
33 #-----------------------------------------------------------------------------
33 #-----------------------------------------------------------------------------
34
34
35 class HistoryManager(Configurable):
35 class HistoryManager(Configurable):
36 """A class to organize all history-related functionality in one place.
36 """A class to organize all history-related functionality in one place.
37 """
37 """
38 # Public interface
38 # Public interface
39
39
40 # An instance of the IPython shell we are attached to
40 # An instance of the IPython shell we are attached to
41 shell = Instance('IPython.core.interactiveshell.InteractiveShellABC')
41 shell = Instance('IPython.core.interactiveshell.InteractiveShellABC')
42 # Lists to hold processed and raw history. These start with a blank entry
42 # Lists to hold processed and raw history. These start with a blank entry
43 # so that we can index them starting from 1
43 # so that we can index them starting from 1
44 input_hist_parsed = List([""])
44 input_hist_parsed = List([""])
45 input_hist_raw = List([""])
45 input_hist_raw = List([""])
46 # A list of directories visited during session
46 # A list of directories visited during session
47 dir_hist = List()
47 dir_hist = List()
48 def _dir_hist_default(self):
48 def _dir_hist_default(self):
49 try:
49 try:
50 return [os.getcwdu()]
50 return [os.getcwdu()]
51 except OSError:
51 except OSError:
52 return []
52 return []
53
53
54 # A dict of output history, keyed with ints from the shell's
54 # A dict of output history, keyed with ints from the shell's
55 # execution count.
55 # execution count.
56 output_hist = Dict()
56 output_hist = Dict()
57 # The text/plain repr of outputs.
57 # The text/plain repr of outputs.
58 output_hist_reprs = Dict()
58 output_hist_reprs = Dict()
59
59
60 # String holding the path to the history file
60 # String holding the path to the history file
61 hist_file = Unicode(config=True)
61 hist_file = Unicode(config=True)
62
62
63 # The SQLite database
63 # The SQLite database
64 db = Instance(sqlite3.Connection)
64 db = Instance(sqlite3.Connection)
65 # The number of the current session in the history database
65 # The number of the current session in the history database
66 session_number = Int()
66 session_number = Int()
67 # Should we log output to the database? (default no)
67 # Should we log output to the database? (default no)
68 db_log_output = Bool(False, config=True)
68 db_log_output = Bool(False, config=True)
69 # Write to database every x commands (higher values save disk access & power)
69 # Write to database every x commands (higher values save disk access & power)
70 # Values of 1 or less effectively disable caching.
70 # Values of 1 or less effectively disable caching.
71 db_cache_size = Int(0, config=True)
71 db_cache_size = Int(0, config=True)
72 # The input and output caches
72 # The input and output caches
73 db_input_cache = List()
73 db_input_cache = List()
74 db_output_cache = List()
74 db_output_cache = List()
75
75
76 # History saving in separate thread
76 # History saving in separate thread
77 save_thread = Instance('IPython.core.history.HistorySavingThread')
77 save_thread = Instance('IPython.core.history.HistorySavingThread')
78 # N.B. Event is a function returning an instance of _Event.
78 # N.B. Event is a function returning an instance of _Event.
79 save_flag = Instance(threading._Event)
79 save_flag = Instance(threading._Event)
80
80
81 # Private interface
81 # Private interface
82 # Variables used to store the three last inputs from the user. On each new
82 # Variables used to store the three last inputs from the user. On each new
83 # history update, we populate the user's namespace with these, shifted as
83 # history update, we populate the user's namespace with these, shifted as
84 # necessary.
84 # necessary.
85 _i00 = Unicode(u'')
85 _i00 = Unicode(u'')
86 _i = Unicode(u'')
86 _i = Unicode(u'')
87 _ii = Unicode(u'')
87 _ii = Unicode(u'')
88 _iii = Unicode(u'')
88 _iii = Unicode(u'')
89
89
90 # A regex matching all forms of the exit command, so that we don't store
90 # A regex matching all forms of the exit command, so that we don't store
91 # them in the history (it's annoying to rewind the first entry and land on
91 # them in the history (it's annoying to rewind the first entry and land on
92 # an exit call).
92 # an exit call).
93 _exit_re = re.compile(r"(exit|quit)(\s*\(.*\))?$")
93 _exit_re = re.compile(r"(exit|quit)(\s*\(.*\))?$")
94
94
95 def __init__(self, shell, config=None, **traits):
95 def __init__(self, shell, config=None, **traits):
96 """Create a new history manager associated with a shell instance.
96 """Create a new history manager associated with a shell instance.
97 """
97 """
98 # We need a pointer back to the shell for various tasks.
98 # We need a pointer back to the shell for various tasks.
99 super(HistoryManager, self).__init__(shell=shell, config=config,
99 super(HistoryManager, self).__init__(shell=shell, config=config,
100 **traits)
100 **traits)
101
101
102 if self.hist_file == u'':
102 if self.hist_file == u'':
103 # No one has set the hist_file, yet.
103 # No one has set the hist_file, yet.
104 histfname = 'history'
104 histfname = 'history'
105 self.hist_file = os.path.join(shell.profile_dir.location, histfname + '.sqlite')
105 self.hist_file = os.path.join(shell.profile_dir.location, histfname + '.sqlite')
106
106
107 try:
107 try:
108 self.init_db()
108 self.init_db()
109 except sqlite3.DatabaseError:
109 except sqlite3.DatabaseError:
110 if os.path.isfile(self.hist_file):
110 if os.path.isfile(self.hist_file):
111 # Try to move the file out of the way.
111 # Try to move the file out of the way.
112 newpath = os.path.join(self.shell.profile_dir.location, "hist-corrupt.sqlite")
112 newpath = os.path.join(self.shell.profile_dir.location, "hist-corrupt.sqlite")
113 os.rename(self.hist_file, newpath)
113 os.rename(self.hist_file, newpath)
114 print("ERROR! History file wasn't a valid SQLite database.",
114 print("ERROR! History file wasn't a valid SQLite database.",
115 "It was moved to %s" % newpath, "and a new file created.")
115 "It was moved to %s" % newpath, "and a new file created.")
116 self.init_db()
116 self.init_db()
117 else:
117 else:
118 # The hist_file is probably :memory: or something else.
118 # The hist_file is probably :memory: or something else.
119 raise
119 raise
120
120
121 self.save_flag = threading.Event()
121 self.save_flag = threading.Event()
122 self.db_input_cache_lock = threading.Lock()
122 self.db_input_cache_lock = threading.Lock()
123 self.db_output_cache_lock = threading.Lock()
123 self.db_output_cache_lock = threading.Lock()
124 self.save_thread = HistorySavingThread(self)
124 self.save_thread = HistorySavingThread(self)
125 self.save_thread.start()
125 self.save_thread.start()
126
126
127 self.new_session()
127 self.new_session()
128
128
129
129
130 def init_db(self):
130 def init_db(self):
131 """Connect to the database, and create tables if necessary."""
131 """Connect to the database, and create tables if necessary."""
132 self.db = sqlite3.connect(self.hist_file)
132 self.db = sqlite3.connect(self.hist_file)
133 self.db.execute("""CREATE TABLE IF NOT EXISTS sessions (session integer
133 self.db.execute("""CREATE TABLE IF NOT EXISTS sessions (session integer
134 primary key autoincrement, start timestamp,
134 primary key autoincrement, start timestamp,
135 end timestamp, num_cmds integer, remark text)""")
135 end timestamp, num_cmds integer, remark text)""")
136 self.db.execute("""CREATE TABLE IF NOT EXISTS history
136 self.db.execute("""CREATE TABLE IF NOT EXISTS history
137 (session integer, line integer, source text, source_raw text,
137 (session integer, line integer, source text, source_raw text,
138 PRIMARY KEY (session, line))""")
138 PRIMARY KEY (session, line))""")
139 # Output history is optional, but ensure the table's there so it can be
139 # Output history is optional, but ensure the table's there so it can be
140 # enabled later.
140 # enabled later.
141 self.db.execute("""CREATE TABLE IF NOT EXISTS output_history
141 self.db.execute("""CREATE TABLE IF NOT EXISTS output_history
142 (session integer, line integer, output text,
142 (session integer, line integer, output text,
143 PRIMARY KEY (session, line))""")
143 PRIMARY KEY (session, line))""")
144 self.db.commit()
144 self.db.commit()
145
145
146 def new_session(self, conn=None):
146 def new_session(self, conn=None):
147 """Get a new session number."""
147 """Get a new session number."""
148 if conn is None:
148 if conn is None:
149 conn = self.db
149 conn = self.db
150
150
151 with conn:
151 with conn:
152 cur = conn.execute("""INSERT INTO sessions VALUES (NULL, ?, NULL,
152 cur = conn.execute("""INSERT INTO sessions VALUES (NULL, ?, NULL,
153 NULL, "") """, (datetime.datetime.now(),))
153 NULL, "") """, (datetime.datetime.now(),))
154 self.session_number = cur.lastrowid
154 self.session_number = cur.lastrowid
155
155
156 def end_session(self):
156 def end_session(self):
157 """Close the database session, filling in the end time and line count."""
157 """Close the database session, filling in the end time and line count."""
158 self.writeout_cache()
158 self.writeout_cache()
159 with self.db:
159 with self.db:
160 self.db.execute("""UPDATE sessions SET end=?, num_cmds=? WHERE
160 self.db.execute("""UPDATE sessions SET end=?, num_cmds=? WHERE
161 session==?""", (datetime.datetime.now(),
161 session==?""", (datetime.datetime.now(),
162 len(self.input_hist_parsed)-1, self.session_number))
162 len(self.input_hist_parsed)-1, self.session_number))
163 self.session_number = 0
163 self.session_number = 0
164
164
165 def name_session(self, name):
165 def name_session(self, name):
166 """Give the current session a name in the history database."""
166 """Give the current session a name in the history database."""
167 with self.db:
167 with self.db:
168 self.db.execute("UPDATE sessions SET remark=? WHERE session==?",
168 self.db.execute("UPDATE sessions SET remark=? WHERE session==?",
169 (name, self.session_number))
169 (name, self.session_number))
170
170
171 def reset(self, new_session=True):
171 def reset(self, new_session=True):
172 """Clear the session history, releasing all object references, and
172 """Clear the session history, releasing all object references, and
173 optionally open a new session."""
173 optionally open a new session."""
174 self.output_hist.clear()
174 self.output_hist.clear()
175 # The directory history can't be completely empty
175 # The directory history can't be completely empty
176 self.dir_hist[:] = [os.getcwdu()]
176 self.dir_hist[:] = [os.getcwdu()]
177
177
178 if new_session:
178 if new_session:
179 if self.session_number:
179 if self.session_number:
180 self.end_session()
180 self.end_session()
181 self.input_hist_parsed[:] = [""]
181 self.input_hist_parsed[:] = [""]
182 self.input_hist_raw[:] = [""]
182 self.input_hist_raw[:] = [""]
183 self.new_session()
183 self.new_session()
184
184
185 ## -------------------------------
185 ## -------------------------------
186 ## Methods for retrieving history:
186 ## Methods for retrieving history:
187 ## -------------------------------
187 ## -------------------------------
188 def _run_sql(self, sql, params, raw=True, output=False):
188 def _run_sql(self, sql, params, raw=True, output=False):
189 """Prepares and runs an SQL query for the history database.
189 """Prepares and runs an SQL query for the history database.
190
190
191 Parameters
191 Parameters
192 ----------
192 ----------
193 sql : str
193 sql : str
194 Any filtering expressions to go after SELECT ... FROM ...
194 Any filtering expressions to go after SELECT ... FROM ...
195 params : tuple
195 params : tuple
196 Parameters passed to the SQL query (to replace "?")
196 Parameters passed to the SQL query (to replace "?")
197 raw, output : bool
197 raw, output : bool
198 See :meth:`get_range`
198 See :meth:`get_range`
199
199
200 Returns
200 Returns
201 -------
201 -------
202 Tuples as :meth:`get_range`
202 Tuples as :meth:`get_range`
203 """
203 """
204 toget = 'source_raw' if raw else 'source'
204 toget = 'source_raw' if raw else 'source'
205 sqlfrom = "history"
205 sqlfrom = "history"
206 if output:
206 if output:
207 sqlfrom = "history LEFT JOIN output_history USING (session, line)"
207 sqlfrom = "history LEFT JOIN output_history USING (session, line)"
208 toget = "history.%s, output_history.output" % toget
208 toget = "history.%s, output_history.output" % toget
209 cur = self.db.execute("SELECT session, line, %s FROM %s " %\
209 cur = self.db.execute("SELECT session, line, %s FROM %s " %\
210 (toget, sqlfrom) + sql, params)
210 (toget, sqlfrom) + sql, params)
211 if output: # Regroup into 3-tuples, and parse JSON
211 if output: # Regroup into 3-tuples, and parse JSON
212 return ((ses, lin, (inp, out)) for ses, lin, inp, out in cur)
212 return ((ses, lin, (inp, out)) for ses, lin, inp, out in cur)
213 return cur
213 return cur
214
214
215
215
216 def get_tail(self, n=10, raw=True, output=False, include_latest=False):
216 def get_tail(self, n=10, raw=True, output=False, include_latest=False):
217 """Get the last n lines from the history database.
217 """Get the last n lines from the history database.
218
218
219 Parameters
219 Parameters
220 ----------
220 ----------
221 n : int
221 n : int
222 The number of lines to get
222 The number of lines to get
223 raw, output : bool
223 raw, output : bool
224 See :meth:`get_range`
224 See :meth:`get_range`
225 include_latest : bool
225 include_latest : bool
226 If False (default), n+1 lines are fetched, and the latest one
226 If False (default), n+1 lines are fetched, and the latest one
227 is discarded. This is intended to be used where the function
227 is discarded. This is intended to be used where the function
228 is called by a user command, which it should not return.
228 is called by a user command, which it should not return.
229
229
230 Returns
230 Returns
231 -------
231 -------
232 Tuples as :meth:`get_range`
232 Tuples as :meth:`get_range`
233 """
233 """
234 self.writeout_cache()
234 self.writeout_cache()
235 if not include_latest:
235 if not include_latest:
236 n += 1
236 n += 1
237 cur = self._run_sql("ORDER BY session DESC, line DESC LIMIT ?",
237 cur = self._run_sql("ORDER BY session DESC, line DESC LIMIT ?",
238 (n,), raw=raw, output=output)
238 (n,), raw=raw, output=output)
239 if not include_latest:
239 if not include_latest:
240 return reversed(list(cur)[1:])
240 return reversed(list(cur)[1:])
241 return reversed(list(cur))
241 return reversed(list(cur))
242
242
243 def search(self, pattern="*", raw=True, search_raw=True,
243 def search(self, pattern="*", raw=True, search_raw=True,
244 output=False):
244 output=False):
245 """Search the database using unix glob-style matching (wildcards
245 """Search the database using unix glob-style matching (wildcards
246 * and ?).
246 * and ?).
247
247
248 Parameters
248 Parameters
249 ----------
249 ----------
250 pattern : str
250 pattern : str
251 The wildcarded pattern to match when searching
251 The wildcarded pattern to match when searching
252 search_raw : bool
252 search_raw : bool
253 If True, search the raw input, otherwise, the parsed input
253 If True, search the raw input, otherwise, the parsed input
254 raw, output : bool
254 raw, output : bool
255 See :meth:`get_range`
255 See :meth:`get_range`
256
256
257 Returns
257 Returns
258 -------
258 -------
259 Tuples as :meth:`get_range`
259 Tuples as :meth:`get_range`
260 """
260 """
261 tosearch = "source_raw" if search_raw else "source"
261 tosearch = "source_raw" if search_raw else "source"
262 if output:
262 if output:
263 tosearch = "history." + tosearch
263 tosearch = "history." + tosearch
264 self.writeout_cache()
264 self.writeout_cache()
265 return self._run_sql("WHERE %s GLOB ?" % tosearch, (pattern,),
265 return self._run_sql("WHERE %s GLOB ?" % tosearch, (pattern,),
266 raw=raw, output=output)
266 raw=raw, output=output)
267
267
268 def _get_range_session(self, start=1, stop=None, raw=True, output=False):
268 def _get_range_session(self, start=1, stop=None, raw=True, output=False):
269 """Get input and output history from the current session. Called by
269 """Get input and output history from the current session. Called by
270 get_range, and takes similar parameters."""
270 get_range, and takes similar parameters."""
271 input_hist = self.input_hist_raw if raw else self.input_hist_parsed
271 input_hist = self.input_hist_raw if raw else self.input_hist_parsed
272
272
273 n = len(input_hist)
273 n = len(input_hist)
274 if start < 0:
274 if start < 0:
275 start += n
275 start += n
276 if not stop:
276 if not stop:
277 stop = n
277 stop = n
278 elif stop < 0:
278 elif stop < 0:
279 stop += n
279 stop += n
280
280
281 for i in range(start, stop):
281 for i in range(start, stop):
282 if output:
282 if output:
283 line = (input_hist[i], self.output_hist_reprs.get(i))
283 line = (input_hist[i], self.output_hist_reprs.get(i))
284 else:
284 else:
285 line = input_hist[i]
285 line = input_hist[i]
286 yield (0, i, line)
286 yield (0, i, line)
287
287
288 def get_range(self, session=0, start=1, stop=None, raw=True,output=False):
288 def get_range(self, session=0, start=1, stop=None, raw=True,output=False):
289 """Retrieve input by session.
289 """Retrieve input by session.
290
290
291 Parameters
291 Parameters
292 ----------
292 ----------
293 session : int
293 session : int
294 Session number to retrieve. The current session is 0, and negative
294 Session number to retrieve. The current session is 0, and negative
295 numbers count back from current session, so -1 is previous session.
295 numbers count back from current session, so -1 is previous session.
296 start : int
296 start : int
297 First line to retrieve.
297 First line to retrieve.
298 stop : int
298 stop : int
299 End of line range (excluded from output itself). If None, retrieve
299 End of line range (excluded from output itself). If None, retrieve
300 to the end of the session.
300 to the end of the session.
301 raw : bool
301 raw : bool
302 If True, return untranslated input
302 If True, return untranslated input
303 output : bool
303 output : bool
304 If True, attempt to include output. This will be 'real' Python
304 If True, attempt to include output. This will be 'real' Python
305 objects for the current session, or text reprs from previous
305 objects for the current session, or text reprs from previous
306 sessions if db_log_output was enabled at the time. Where no output
306 sessions if db_log_output was enabled at the time. Where no output
307 is found, None is used.
307 is found, None is used.
308
308
309 Returns
309 Returns
310 -------
310 -------
311 An iterator over the desired lines. Each line is a 3-tuple, either
311 An iterator over the desired lines. Each line is a 3-tuple, either
312 (session, line, input) if output is False, or
312 (session, line, input) if output is False, or
313 (session, line, (input, output)) if output is True.
313 (session, line, (input, output)) if output is True.
314 """
314 """
315 if session == 0 or session==self.session_number: # Current session
315 if session == 0 or session==self.session_number: # Current session
316 return self._get_range_session(start, stop, raw, output)
316 return self._get_range_session(start, stop, raw, output)
317 if session < 0:
317 if session < 0:
318 session += self.session_number
318 session += self.session_number
319
319
320 if stop:
320 if stop:
321 lineclause = "line >= ? AND line < ?"
321 lineclause = "line >= ? AND line < ?"
322 params = (session, start, stop)
322 params = (session, start, stop)
323 else:
323 else:
324 lineclause = "line>=?"
324 lineclause = "line>=?"
325 params = (session, start)
325 params = (session, start)
326
326
327 return self._run_sql("WHERE session==? AND %s""" % lineclause,
327 return self._run_sql("WHERE session==? AND %s""" % lineclause,
328 params, raw=raw, output=output)
328 params, raw=raw, output=output)
329
329
330 def get_range_by_str(self, rangestr, raw=True, output=False):
330 def get_range_by_str(self, rangestr, raw=True, output=False):
331 """Get lines of history from a string of ranges, as used by magic
331 """Get lines of history from a string of ranges, as used by magic
332 commands %hist, %save, %macro, etc.
332 commands %hist, %save, %macro, etc.
333
333
334 Parameters
334 Parameters
335 ----------
335 ----------
336 rangestr : str
336 rangestr : str
337 A string specifying ranges, e.g. "5 ~2/1-4". See
337 A string specifying ranges, e.g. "5 ~2/1-4". See
338 :func:`magic_history` for full details.
338 :func:`magic_history` for full details.
339 raw, output : bool
339 raw, output : bool
340 As :meth:`get_range`
340 As :meth:`get_range`
341
341
342 Returns
342 Returns
343 -------
343 -------
344 Tuples as :meth:`get_range`
344 Tuples as :meth:`get_range`
345 """
345 """
346 for sess, s, e in extract_hist_ranges(rangestr):
346 for sess, s, e in extract_hist_ranges(rangestr):
347 for line in self.get_range(sess, s, e, raw=raw, output=output):
347 for line in self.get_range(sess, s, e, raw=raw, output=output):
348 yield line
348 yield line
349
349
350 ## ----------------------------
350 ## ----------------------------
351 ## Methods for storing history:
351 ## Methods for storing history:
352 ## ----------------------------
352 ## ----------------------------
353 def store_inputs(self, line_num, source, source_raw=None):
353 def store_inputs(self, line_num, source, source_raw=None):
354 """Store source and raw input in history and create input cache
354 """Store source and raw input in history and create input cache
355 variables _i*.
355 variables _i*.
356
356
357 Parameters
357 Parameters
358 ----------
358 ----------
359 line_num : int
359 line_num : int
360 The prompt number of this input.
360 The prompt number of this input.
361
361
362 source : str
362 source : str
363 Python input.
363 Python input.
364
364
365 source_raw : str, optional
365 source_raw : str, optional
366 If given, this is the raw input without any IPython transformations
366 If given, this is the raw input without any IPython transformations
367 applied to it. If not given, ``source`` is used.
367 applied to it. If not given, ``source`` is used.
368 """
368 """
369 if source_raw is None:
369 if source_raw is None:
370 source_raw = source
370 source_raw = source
371 source = source.rstrip('\n')
371 source = source.rstrip('\n')
372 source_raw = source_raw.rstrip('\n')
372 source_raw = source_raw.rstrip('\n')
373
373
374 # do not store exit/quit commands
374 # do not store exit/quit commands
375 if self._exit_re.match(source_raw.strip()):
375 if self._exit_re.match(source_raw.strip()):
376 return
376 return
377
377
378 self.input_hist_parsed.append(source)
378 self.input_hist_parsed.append(source)
379 self.input_hist_raw.append(source_raw)
379 self.input_hist_raw.append(source_raw)
380
380
381 with self.db_input_cache_lock:
381 with self.db_input_cache_lock:
382 self.db_input_cache.append((line_num, source, source_raw))
382 self.db_input_cache.append((line_num, source, source_raw))
383 # Trigger to flush cache and write to DB.
383 # Trigger to flush cache and write to DB.
384 if len(self.db_input_cache) >= self.db_cache_size:
384 if len(self.db_input_cache) >= self.db_cache_size:
385 self.save_flag.set()
385 self.save_flag.set()
386
386
387 # update the auto _i variables
387 # update the auto _i variables
388 self._iii = self._ii
388 self._iii = self._ii
389 self._ii = self._i
389 self._ii = self._i
390 self._i = self._i00
390 self._i = self._i00
391 self._i00 = source_raw
391 self._i00 = source_raw
392
392
393 # hackish access to user namespace to create _i1,_i2... dynamically
393 # hackish access to user namespace to create _i1,_i2... dynamically
394 new_i = '_i%s' % line_num
394 new_i = '_i%s' % line_num
395 to_main = {'_i': self._i,
395 to_main = {'_i': self._i,
396 '_ii': self._ii,
396 '_ii': self._ii,
397 '_iii': self._iii,
397 '_iii': self._iii,
398 new_i : self._i00 }
398 new_i : self._i00 }
399 self.shell.user_ns.update(to_main)
399 self.shell.user_ns.update(to_main)
400
400
401 def store_output(self, line_num):
401 def store_output(self, line_num):
402 """If database output logging is enabled, this saves all the
402 """If database output logging is enabled, this saves all the
403 outputs from the indicated prompt number to the database. It's
403 outputs from the indicated prompt number to the database. It's
404 called by run_cell after code has been executed.
404 called by run_cell after code has been executed.
405
405
406 Parameters
406 Parameters
407 ----------
407 ----------
408 line_num : int
408 line_num : int
409 The line number from which to save outputs
409 The line number from which to save outputs
410 """
410 """
411 if (not self.db_log_output) or (line_num not in self.output_hist_reprs):
411 if (not self.db_log_output) or (line_num not in self.output_hist_reprs):
412 return
412 return
413 output = self.output_hist_reprs[line_num]
413 output = self.output_hist_reprs[line_num]
414
414
415 with self.db_output_cache_lock:
415 with self.db_output_cache_lock:
416 self.db_output_cache.append((line_num, output))
416 self.db_output_cache.append((line_num, output))
417 if self.db_cache_size <= 1:
417 if self.db_cache_size <= 1:
418 self.save_flag.set()
418 self.save_flag.set()
419
419
420 def _writeout_input_cache(self, conn):
420 def _writeout_input_cache(self, conn):
421 with conn:
421 with conn:
422 for line in self.db_input_cache:
422 for line in self.db_input_cache:
423 conn.execute("INSERT INTO history VALUES (?, ?, ?, ?)",
423 conn.execute("INSERT INTO history VALUES (?, ?, ?, ?)",
424 (self.session_number,)+line)
424 (self.session_number,)+line)
425
425
426 def _writeout_output_cache(self, conn):
426 def _writeout_output_cache(self, conn):
427 with conn:
427 with conn:
428 for line in self.db_output_cache:
428 for line in self.db_output_cache:
429 conn.execute("INSERT INTO output_history VALUES (?, ?, ?)",
429 conn.execute("INSERT INTO output_history VALUES (?, ?, ?)",
430 (self.session_number,)+line)
430 (self.session_number,)+line)
431
431
432 def writeout_cache(self, conn=None):
432 def writeout_cache(self, conn=None):
433 """Write any entries in the cache to the database."""
433 """Write any entries in the cache to the database."""
434 if conn is None:
434 if conn is None:
435 conn = self.db
435 conn = self.db
436
436
437 with self.db_input_cache_lock:
437 with self.db_input_cache_lock:
438 try:
438 try:
439 self._writeout_input_cache(conn)
439 self._writeout_input_cache(conn)
440 except sqlite3.IntegrityError:
440 except sqlite3.IntegrityError:
441 self.new_session(conn)
441 self.new_session(conn)
442 print("ERROR! Session/line number was not unique in",
442 print("ERROR! Session/line number was not unique in",
443 "database. History logging moved to new session",
443 "database. History logging moved to new session",
444 self.session_number)
444 self.session_number)
445 try: # Try writing to the new session. If this fails, don't recurse
445 try: # Try writing to the new session. If this fails, don't recurse
446 self._writeout_input_cache(conn)
446 self._writeout_input_cache(conn)
447 except sqlite3.IntegrityError:
447 except sqlite3.IntegrityError:
448 pass
448 pass
449 finally:
449 finally:
450 self.db_input_cache = []
450 self.db_input_cache = []
451
451
452 with self.db_output_cache_lock:
452 with self.db_output_cache_lock:
453 try:
453 try:
454 self._writeout_output_cache(conn)
454 self._writeout_output_cache(conn)
455 except sqlite3.IntegrityError:
455 except sqlite3.IntegrityError:
456 print("!! Session/line number for output was not unique",
456 print("!! Session/line number for output was not unique",
457 "in database. Output will not be stored.")
457 "in database. Output will not be stored.")
458 finally:
458 finally:
459 self.db_output_cache = []
459 self.db_output_cache = []
460
460
461
461
462 class HistorySavingThread(threading.Thread):
462 class HistorySavingThread(threading.Thread):
463 """This thread takes care of writing history to the database, so that
463 """This thread takes care of writing history to the database, so that
464 the UI isn't held up while that happens.
464 the UI isn't held up while that happens.
465
465
466 It waits for the HistoryManager's save_flag to be set, then writes out
466 It waits for the HistoryManager's save_flag to be set, then writes out
467 the history cache. The main thread is responsible for setting the flag when
467 the history cache. The main thread is responsible for setting the flag when
468 the cache size reaches a defined threshold."""
468 the cache size reaches a defined threshold."""
469 daemon = True
469 daemon = True
470 stop_now = False
470 stop_now = False
471 def __init__(self, history_manager):
471 def __init__(self, history_manager):
472 super(HistorySavingThread, self).__init__()
472 super(HistorySavingThread, self).__init__()
473 self.history_manager = history_manager
473 self.history_manager = history_manager
474 atexit.register(self.stop)
474 atexit.register(self.stop)
475
475
476 def run(self):
476 def run(self):
477 # We need a separate db connection per thread:
477 # We need a separate db connection per thread:
478 try:
478 try:
479 self.db = sqlite3.connect(self.history_manager.hist_file)
479 self.db = sqlite3.connect(self.history_manager.hist_file)
480 while True:
480 while True:
481 self.history_manager.save_flag.wait()
481 self.history_manager.save_flag.wait()
482 if self.stop_now:
482 if self.stop_now:
483 return
483 return
484 self.history_manager.save_flag.clear()
484 self.history_manager.save_flag.clear()
485 self.history_manager.writeout_cache(self.db)
485 self.history_manager.writeout_cache(self.db)
486 except Exception as e:
486 except Exception as e:
487 print(("The history saving thread hit an unexpected error (%s)."
487 print(("The history saving thread hit an unexpected error (%s)."
488 "History will not be written to the database.") % repr(e))
488 "History will not be written to the database.") % repr(e))
489
489
490 def stop(self):
490 def stop(self):
491 """This can be called from the main thread to safely stop this thread.
491 """This can be called from the main thread to safely stop this thread.
492
492
493 Note that it does not attempt to write out remaining history before
493 Note that it does not attempt to write out remaining history before
494 exiting. That should be done by calling the HistoryManager's
494 exiting. That should be done by calling the HistoryManager's
495 end_session method."""
495 end_session method."""
496 self.stop_now = True
496 self.stop_now = True
497 self.history_manager.save_flag.set()
497 self.history_manager.save_flag.set()
498 self.join()
498 self.join()
499
499
500
500
501 # To match, e.g. ~5/8-~2/3
501 # To match, e.g. ~5/8-~2/3
502 range_re = re.compile(r"""
502 range_re = re.compile(r"""
503 ((?P<startsess>~?\d+)/)?
503 ((?P<startsess>~?\d+)/)?
504 (?P<start>\d+) # Only the start line num is compulsory
504 (?P<start>\d+) # Only the start line num is compulsory
505 ((?P<sep>[\-:])
505 ((?P<sep>[\-:])
506 ((?P<endsess>~?\d+)/)?
506 ((?P<endsess>~?\d+)/)?
507 (?P<end>\d+))?
507 (?P<end>\d+))?
508 $""", re.VERBOSE)
508 $""", re.VERBOSE)
509
509
510 def extract_hist_ranges(ranges_str):
510 def extract_hist_ranges(ranges_str):
511 """Turn a string of history ranges into 3-tuples of (session, start, stop).
511 """Turn a string of history ranges into 3-tuples of (session, start, stop).
512
512
513 Examples
513 Examples
514 --------
514 --------
515 list(extract_input_ranges("~8/5-~7/4 2"))
515 list(extract_input_ranges("~8/5-~7/4 2"))
516 [(-8, 5, None), (-7, 1, 4), (0, 2, 3)]
516 [(-8, 5, None), (-7, 1, 4), (0, 2, 3)]
517 """
517 """
518 for range_str in ranges_str.split():
518 for range_str in ranges_str.split():
519 rmatch = range_re.match(range_str)
519 rmatch = range_re.match(range_str)
520 if not rmatch:
520 if not rmatch:
521 continue
521 continue
522 start = int(rmatch.group("start"))
522 start = int(rmatch.group("start"))
523 end = rmatch.group("end")
523 end = rmatch.group("end")
524 end = int(end) if end else start+1 # If no end specified, get (a, a+1)
524 end = int(end) if end else start+1 # If no end specified, get (a, a+1)
525 if rmatch.group("sep") == "-": # 1-3 == 1:4 --> [1, 2, 3]
525 if rmatch.group("sep") == "-": # 1-3 == 1:4 --> [1, 2, 3]
526 end += 1
526 end += 1
527 startsess = rmatch.group("startsess") or "0"
527 startsess = rmatch.group("startsess") or "0"
528 endsess = rmatch.group("endsess") or startsess
528 endsess = rmatch.group("endsess") or startsess
529 startsess = int(startsess.replace("~","-"))
529 startsess = int(startsess.replace("~","-"))
530 endsess = int(endsess.replace("~","-"))
530 endsess = int(endsess.replace("~","-"))
531 assert endsess >= startsess
531 assert endsess >= startsess
532
532
533 if endsess == startsess:
533 if endsess == startsess:
534 yield (startsess, start, end)
534 yield (startsess, start, end)
535 continue
535 continue
536 # Multiple sessions in one range:
536 # Multiple sessions in one range:
537 yield (startsess, start, None)
537 yield (startsess, start, None)
538 for sess in range(startsess+1, endsess):
538 for sess in range(startsess+1, endsess):
539 yield (sess, 1, None)
539 yield (sess, 1, None)
540 yield (endsess, 1, end)
540 yield (endsess, 1, end)
541
541
542 def _format_lineno(session, line):
542 def _format_lineno(session, line):
543 """Helper function to format line numbers properly."""
543 """Helper function to format line numbers properly."""
544 if session == 0:
544 if session == 0:
545 return str(line)
545 return str(line)
546 return "%s#%s" % (session, line)
546 return "%s#%s" % (session, line)
547
547
548 @skip_doctest
548 @skip_doctest
549 def magic_history(self, parameter_s = ''):
549 def magic_history(self, parameter_s = ''):
550 """Print input history (_i<n> variables), with most recent last.
550 """Print input history (_i<n> variables), with most recent last.
551
551
552 %history -> print at most 40 inputs (some may be multi-line)\\
552 %history -> print at most 40 inputs (some may be multi-line)\\
553 %history n -> print at most n inputs\\
553 %history n -> print at most n inputs\\
554 %history n1 n2 -> print inputs between n1 and n2 (n2 not included)\\
554 %history n1 n2 -> print inputs between n1 and n2 (n2 not included)\\
555
555
556 By default, input history is printed without line numbers so it can be
556 By default, input history is printed without line numbers so it can be
557 directly pasted into an editor. Use -n to show them.
557 directly pasted into an editor. Use -n to show them.
558
558
559 Ranges of history can be indicated using the syntax:
559 Ranges of history can be indicated using the syntax:
560 4 : Line 4, current session
560 4 : Line 4, current session
561 4-6 : Lines 4-6, current session
561 4-6 : Lines 4-6, current session
562 243/1-5: Lines 1-5, session 243
562 243/1-5: Lines 1-5, session 243
563 ~2/7 : Line 7, session 2 before current
563 ~2/7 : Line 7, session 2 before current
564 ~8/1-~6/5 : From the first line of 8 sessions ago, to the fifth line
564 ~8/1-~6/5 : From the first line of 8 sessions ago, to the fifth line
565 of 6 sessions ago.
565 of 6 sessions ago.
566 Multiple ranges can be entered, separated by spaces
566 Multiple ranges can be entered, separated by spaces
567
567
568 The same syntax is used by %macro, %save, %edit, %rerun
568 The same syntax is used by %macro, %save, %edit, %rerun
569
569
570 Options:
570 Options:
571
571
572 -n: print line numbers for each input.
572 -n: print line numbers for each input.
573 This feature is only available if numbered prompts are in use.
573 This feature is only available if numbered prompts are in use.
574
574
575 -o: also print outputs for each input.
575 -o: also print outputs for each input.
576
576
577 -p: print classic '>>>' python prompts before each input. This is useful
577 -p: print classic '>>>' python prompts before each input. This is useful
578 for making documentation, and in conjunction with -o, for producing
578 for making documentation, and in conjunction with -o, for producing
579 doctest-ready output.
579 doctest-ready output.
580
580
581 -r: (default) print the 'raw' history, i.e. the actual commands you typed.
581 -r: (default) print the 'raw' history, i.e. the actual commands you typed.
582
582
583 -t: print the 'translated' history, as IPython understands it. IPython
583 -t: print the 'translated' history, as IPython understands it. IPython
584 filters your input and converts it all into valid Python source before
584 filters your input and converts it all into valid Python source before
585 executing it (things like magics or aliases are turned into function
585 executing it (things like magics or aliases are turned into function
586 calls, for example). With this option, you'll see the native history
586 calls, for example). With this option, you'll see the native history
587 instead of the user-entered version: '%cd /' will be seen as
587 instead of the user-entered version: '%cd /' will be seen as
588 'get_ipython().magic("%cd /")' instead of '%cd /'.
588 'get_ipython().magic("%cd /")' instead of '%cd /'.
589
589
590 -g: treat the arg as a pattern to grep for in (full) history.
590 -g: treat the arg as a pattern to grep for in (full) history.
591 This includes the saved history (almost all commands ever written).
591 This includes the saved history (almost all commands ever written).
592 Use '%hist -g' to show full saved history (may be very long).
592 Use '%hist -g' to show full saved history (may be very long).
593
593
594 -l: get the last n lines from all sessions. Specify n as a single arg, or
594 -l: get the last n lines from all sessions. Specify n as a single arg, or
595 the default is the last 10 lines.
595 the default is the last 10 lines.
596
596
597 -f FILENAME: instead of printing the output to the screen, redirect it to
597 -f FILENAME: instead of printing the output to the screen, redirect it to
598 the given file. The file is always overwritten, though IPython asks for
598 the given file. The file is always overwritten, though IPython asks for
599 confirmation first if it already exists.
599 confirmation first if it already exists.
600
600
601 Examples
601 Examples
602 --------
602 --------
603 ::
603 ::
604
604
605 In [6]: %hist -n 4 6
605 In [6]: %hist -n 4 6
606 4:a = 12
606 4:a = 12
607 5:print a**2
607 5:print a**2
608
608
609 """
609 """
610
610
611 if not self.shell.displayhook.do_full_cache:
611 if not self.shell.displayhook.do_full_cache:
612 print('This feature is only available if numbered prompts are in use.')
612 print('This feature is only available if numbered prompts are in use.')
613 return
613 return
614 opts,args = self.parse_options(parameter_s,'noprtglf:',mode='string')
614 opts,args = self.parse_options(parameter_s,'noprtglf:',mode='string')
615
615
616 # For brevity
616 # For brevity
617 history_manager = self.shell.history_manager
617 history_manager = self.shell.history_manager
618
618
619 def _format_lineno(session, line):
619 def _format_lineno(session, line):
620 """Helper function to format line numbers properly."""
620 """Helper function to format line numbers properly."""
621 if session in (0, history_manager.session_number):
621 if session in (0, history_manager.session_number):
622 return str(line)
622 return str(line)
623 return "%s/%s" % (session, line)
623 return "%s/%s" % (session, line)
624
624
625 # Check if output to specific file was requested.
625 # Check if output to specific file was requested.
626 try:
626 try:
627 outfname = opts['f']
627 outfname = opts['f']
628 except KeyError:
628 except KeyError:
629 outfile = io.stdout # default
629 outfile = io.stdout # default
630 # We don't want to close stdout at the end!
630 # We don't want to close stdout at the end!
631 close_at_end = False
631 close_at_end = False
632 else:
632 else:
633 if os.path.exists(outfname):
633 if os.path.exists(outfname):
634 if not io.ask_yes_no("File %r exists. Overwrite?" % outfname):
634 if not io.ask_yes_no("File %r exists. Overwrite?" % outfname):
635 print('Aborting.')
635 print('Aborting.')
636 return
636 return
637
637
638 outfile = open(outfname,'w')
638 outfile = open(outfname,'w')
639 close_at_end = True
639 close_at_end = True
640
640
641 print_nums = 'n' in opts
641 print_nums = 'n' in opts
642 get_output = 'o' in opts
642 get_output = 'o' in opts
643 pyprompts = 'p' in opts
643 pyprompts = 'p' in opts
644 # Raw history is the default
644 # Raw history is the default
645 raw = not('t' in opts)
645 raw = not('t' in opts)
646
646
647 default_length = 40
647 default_length = 40
648 pattern = None
648 pattern = None
649
649
650 if 'g' in opts: # Glob search
650 if 'g' in opts: # Glob search
651 pattern = "*" + args + "*" if args else "*"
651 pattern = "*" + args + "*" if args else "*"
652 hist = history_manager.search(pattern, raw=raw, output=get_output)
652 hist = history_manager.search(pattern, raw=raw, output=get_output)
653 print_nums = True
653 print_nums = True
654 elif 'l' in opts: # Get 'tail'
654 elif 'l' in opts: # Get 'tail'
655 try:
655 try:
656 n = int(args)
656 n = int(args)
657 except ValueError, IndexError:
657 except ValueError, IndexError:
658 n = 10
658 n = 10
659 hist = history_manager.get_tail(n, raw=raw, output=get_output)
659 hist = history_manager.get_tail(n, raw=raw, output=get_output)
660 else:
660 else:
661 if args: # Get history by ranges
661 if args: # Get history by ranges
662 hist = history_manager.get_range_by_str(args, raw, get_output)
662 hist = history_manager.get_range_by_str(args, raw, get_output)
663 else: # Just get history for the current session
663 else: # Just get history for the current session
664 hist = history_manager.get_range(raw=raw, output=get_output)
664 hist = history_manager.get_range(raw=raw, output=get_output)
665
665
666 # We could be displaying the entire history, so let's not try to pull it
666 # We could be displaying the entire history, so let's not try to pull it
667 # into a list in memory. Anything that needs more space will just misalign.
667 # into a list in memory. Anything that needs more space will just misalign.
668 width = 4
668 width = 4
669
669
670 for session, lineno, inline in hist:
670 for session, lineno, inline in hist:
671 # Print user history with tabs expanded to 4 spaces. The GUI clients
671 # Print user history with tabs expanded to 4 spaces. The GUI clients
672 # use hard tabs for easier usability in auto-indented code, but we want
672 # use hard tabs for easier usability in auto-indented code, but we want
673 # to produce PEP-8 compliant history for safe pasting into an editor.
673 # to produce PEP-8 compliant history for safe pasting into an editor.
674 if get_output:
674 if get_output:
675 inline, output = inline
675 inline, output = inline
676 inline = inline.expandtabs(4).rstrip()
676 inline = inline.expandtabs(4).rstrip()
677
677
678 multiline = "\n" in inline
678 multiline = "\n" in inline
679 line_sep = '\n' if multiline else ' '
679 line_sep = '\n' if multiline else ' '
680 if print_nums:
680 if print_nums:
681 print('%s:%s' % (_format_lineno(session, lineno).rjust(width),
681 print('%s:%s' % (_format_lineno(session, lineno).rjust(width),
682 line_sep), file=outfile, end='')
682 line_sep), file=outfile, end='')
683 if pyprompts:
683 if pyprompts:
684 print(">>> ", end="", file=outfile)
684 print(">>> ", end="", file=outfile)
685 if multiline:
685 if multiline:
686 inline = "\n... ".join(inline.splitlines()) + "\n..."
686 inline = "\n... ".join(inline.splitlines()) + "\n..."
687 print(inline, file=outfile)
687 print(inline, file=outfile)
688 if get_output and output:
688 if get_output and output:
689 print(output, file=outfile)
689 print(output, file=outfile)
690
690
691 if close_at_end:
691 if close_at_end:
692 outfile.close()
692 outfile.close()
693
693
694
694
695 def magic_rep(self, arg):
695 def magic_rep(self, arg):
696 r""" Repeat a command, or get command to input line for editing
696 r"""Repeat a command, or get command to input line for editing
697
697
698 - %rep (no arguments):
698 - %rep (no arguments):
699
699
700 Place a string version of last computation result (stored in the special '_'
700 Place a string version of last computation result (stored in the special '_'
701 variable) to the next input prompt. Allows you to create elaborate command
701 variable) to the next input prompt. Allows you to create elaborate command
702 lines without using copy-paste::
702 lines without using copy-paste::
703
703
704 In[1]: l = ["hei", "vaan"]
704 In[1]: l = ["hei", "vaan"]
705 In[2]: "".join(l)
705 In[2]: "".join(l)
706 Out[2]: heivaan
706 Out[2]: heivaan
707 In[3]: %rep
707 In[3]: %rep
708 In[4]: heivaan_ <== cursor blinking
708 In[4]: heivaan_ <== cursor blinking
709
709
710 %rep 45
710 %rep 45
711
711
712 Place history line 45 on the next input prompt. Use %hist to find
712 Place history line 45 on the next input prompt. Use %hist to find
713 out the number.
713 out the number.
714
714
715 %rep 1-4
715 %rep 1-4
716
716
717 Combine the specified lines into one cell, and place it on the next
717 Combine the specified lines into one cell, and place it on the next
718 input prompt. See %history for the slice syntax.
718 input prompt. See %history for the slice syntax.
719
719
720 %rep foo+bar
720 %rep foo+bar
721
721
722 If foo+bar can be evaluated in the user namespace, the result is
722 If foo+bar can be evaluated in the user namespace, the result is
723 placed at the next input prompt. Otherwise, the history is searched
723 placed at the next input prompt. Otherwise, the history is searched
724 for lines which contain that substring, and the most recent one is
724 for lines which contain that substring, and the most recent one is
725 placed at the next input prompt.
725 placed at the next input prompt.
726 """
726 """
727 if not arg: # Last output
727 if not arg: # Last output
728 self.set_next_input(str(self.shell.user_ns["_"]))
728 self.set_next_input(str(self.shell.user_ns["_"]))
729 return
729 return
730 # Get history range
730 # Get history range
731 histlines = self.history_manager.get_range_by_str(arg)
731 histlines = self.history_manager.get_range_by_str(arg)
732 cmd = "\n".join(x[2] for x in histlines)
732 cmd = "\n".join(x[2] for x in histlines)
733 if cmd:
733 if cmd:
734 self.set_next_input(cmd.rstrip())
734 self.set_next_input(cmd.rstrip())
735 return
735 return
736
736
737 try: # Variable in user namespace
737 try: # Variable in user namespace
738 cmd = str(eval(arg, self.shell.user_ns))
738 cmd = str(eval(arg, self.shell.user_ns))
739 except Exception: # Search for term in history
739 except Exception: # Search for term in history
740 histlines = self.history_manager.search("*"+arg+"*")
740 histlines = self.history_manager.search("*"+arg+"*")
741 for h in reversed([x[2] for x in histlines]):
741 for h in reversed([x[2] for x in histlines]):
742 if 'rep' in h:
742 if 'rep' in h:
743 continue
743 continue
744 self.set_next_input(h.rstrip())
744 self.set_next_input(h.rstrip())
745 return
745 return
746 else:
746 else:
747 self.set_next_input(cmd.rstrip())
747 self.set_next_input(cmd.rstrip())
748 print("Couldn't evaluate or find in history:", arg)
748 print("Couldn't evaluate or find in history:", arg)
749
749
750 def magic_rerun(self, parameter_s=''):
750 def magic_rerun(self, parameter_s=''):
751 """Re-run previous input
751 """Re-run previous input
752
752
753 By default, you can specify ranges of input history to be repeated
753 By default, you can specify ranges of input history to be repeated
754 (as with %history). With no arguments, it will repeat the last line.
754 (as with %history). With no arguments, it will repeat the last line.
755
755
756 Options:
756 Options:
757
757
758 -l <n> : Repeat the last n lines of input, not including the
758 -l <n> : Repeat the last n lines of input, not including the
759 current command.
759 current command.
760
760
761 -g foo : Repeat the most recent line which contains foo
761 -g foo : Repeat the most recent line which contains foo
762 """
762 """
763 opts, args = self.parse_options(parameter_s, 'l:g:', mode='string')
763 opts, args = self.parse_options(parameter_s, 'l:g:', mode='string')
764 if "l" in opts: # Last n lines
764 if "l" in opts: # Last n lines
765 n = int(opts['l'])
765 n = int(opts['l'])
766 hist = self.history_manager.get_tail(n)
766 hist = self.history_manager.get_tail(n)
767 elif "g" in opts: # Search
767 elif "g" in opts: # Search
768 p = "*"+opts['g']+"*"
768 p = "*"+opts['g']+"*"
769 hist = list(self.history_manager.search(p))
769 hist = list(self.history_manager.search(p))
770 for l in reversed(hist):
770 for l in reversed(hist):
771 if "rerun" not in l[2]:
771 if "rerun" not in l[2]:
772 hist = [l] # The last match which isn't a %rerun
772 hist = [l] # The last match which isn't a %rerun
773 break
773 break
774 else:
774 else:
775 hist = [] # No matches except %rerun
775 hist = [] # No matches except %rerun
776 elif args: # Specify history ranges
776 elif args: # Specify history ranges
777 hist = self.history_manager.get_range_by_str(args)
777 hist = self.history_manager.get_range_by_str(args)
778 else: # Last line
778 else: # Last line
779 hist = self.history_manager.get_tail(1)
779 hist = self.history_manager.get_tail(1)
780 hist = [x[2] for x in hist]
780 hist = [x[2] for x in hist]
781 if not hist:
781 if not hist:
782 print("No lines in history match specification")
782 print("No lines in history match specification")
783 return
783 return
784 histlines = "\n".join(hist)
784 histlines = "\n".join(hist)
785 print("=== Executing: ===")
785 print("=== Executing: ===")
786 print(histlines)
786 print(histlines)
787 print("=== Output: ===")
787 print("=== Output: ===")
788 self.run_cell("\n".join(hist), store_history=False)
788 self.run_cell("\n".join(hist), store_history=False)
789
789
790
790
791 def init_ipython(ip):
791 def init_ipython(ip):
792 ip.define_magic("rep", magic_rep)
792 ip.define_magic("rep", magic_rep)
793 ip.define_magic("recall", magic_rep)
793 ip.define_magic("recall", magic_rep)
794 ip.define_magic("rerun", magic_rerun)
794 ip.define_magic("rerun", magic_rerun)
795 ip.define_magic("hist",magic_history) # Alternative name
795 ip.define_magic("hist",magic_history) # Alternative name
796 ip.define_magic("history",magic_history)
796 ip.define_magic("history",magic_history)
797
797
798 # XXX - ipy_completers are in quarantine, need to be updated to new apis
798 # XXX - ipy_completers are in quarantine, need to be updated to new apis
799 #import ipy_completers
799 #import ipy_completers
800 #ipy_completers.quick_completer('%hist' ,'-g -t -r -n')
800 #ipy_completers.quick_completer('%hist' ,'-g -t -r -n')
@@ -1,525 +1,524 b''
1 # -*- coding: utf-8 -*-
1 # -*- coding: utf-8 -*-
2 """Usage information for the main IPython applications.
2 """Usage information for the main IPython applications.
3 """
3 """
4 #-----------------------------------------------------------------------------
4 #-----------------------------------------------------------------------------
5 # Copyright (C) 2008-2010 The IPython Development Team
5 # Copyright (C) 2008-2010 The IPython Development Team
6 # Copyright (C) 2001-2007 Fernando Perez. <fperez@colorado.edu>
6 # Copyright (C) 2001-2007 Fernando Perez. <fperez@colorado.edu>
7 #
7 #
8 # Distributed under the terms of the BSD License. The full license is in
8 # Distributed under the terms of the BSD License. The full license is in
9 # the file COPYING, distributed as part of this software.
9 # the file COPYING, distributed as part of this software.
10 #-----------------------------------------------------------------------------
10 #-----------------------------------------------------------------------------
11
11
12 import sys
12 import sys
13 from IPython.core import release
13 from IPython.core import release
14
14
15 cl_usage = """\
15 cl_usage = """\
16 =========
16 =========
17 IPython
17 IPython
18 =========
18 =========
19
19
20 Tools for Interactive Computing in Python
20 Tools for Interactive Computing in Python
21 =========================================
21 =========================================
22
22
23 A Python shell with automatic history (input and output), dynamic object
23 A Python shell with automatic history (input and output), dynamic object
24 introspection, easier configuration, command completion, access to the
24 introspection, easier configuration, command completion, access to the
25 system shell and more. IPython can also be embedded in running programs.
25 system shell and more. IPython can also be embedded in running programs.
26
26
27
27
28 Usage
28 Usage
29 -----
30
29
31 ipython [subcommand] [options] [files]
30 ipython [subcommand] [options] [files]
32
31
33 If invoked with no options, it executes all the files listed in sequence
32 If invoked with no options, it executes all the files listed in sequence
34 and exits, use -i to enter interactive mode after running the files. Files
33 and exits, use -i to enter interactive mode after running the files. Files
35 ending in .py will be treated as normal Python, but files ending in .ipy
34 ending in .py will be treated as normal Python, but files ending in .ipy
36 can contain special IPython syntax (magic commands, shell expansions, etc.)
35 can contain special IPython syntax (magic commands, shell expansions, etc.)
37
36
38 Almost all configuration in IPython is available via the command-line. Do
37 Almost all configuration in IPython is available via the command-line. Do
39 `ipython --help-all` to see all available options. For persistent
38 `ipython --help-all` to see all available options. For persistent
40 configuration, look into your `ipython_config.py` configuration file for
39 configuration, look into your `ipython_config.py` configuration file for
41 details.
40 details.
42
41
43 This file is typically installed in the `IPYTHON_DIR` directory, and there
42 This file is typically installed in the `IPYTHON_DIR` directory, and there
44 is a separate configuration directory for each profile. The default profile
43 is a separate configuration directory for each profile. The default profile
45 directory will be located in $IPYTHON_DIR/profile_default. For Linux users,
44 directory will be located in $IPYTHON_DIR/profile_default. For Linux users,
46 IPYTHON_DIR defaults to `$HOME/.config/ipython`, and for other Unix systems
45 IPYTHON_DIR defaults to `$HOME/.config/ipython`, and for other Unix systems
47 to `$HOME/.ipython`. For Windows users, $HOME resolves to C:\\Documents
46 to `$HOME/.ipython`. For Windows users, $HOME resolves to C:\\Documents
48 and Settings\\YourUserName in most instances.
47 and Settings\\YourUserName in most instances.
49
48
50 To initialize a profile with the default configuration file, do::
49 To initialize a profile with the default configuration file, do::
51
50
52 $> ipython profile create
51 $> ipython profile create
53
52
54 and start editing `IPYTHON_DIR/profile_default/ipython_config.py`
53 and start editing `IPYTHON_DIR/profile_default/ipython_config.py`
55
54
56 In IPython's documentation, we will refer to this directory as
55 In IPython's documentation, we will refer to this directory as
57 `IPYTHON_DIR`, you can change its default location by creating an
56 `IPYTHON_DIR`, you can change its default location by creating an
58 environment variable with this name and setting it to the desired path.
57 environment variable with this name and setting it to the desired path.
59
58
60 For more information, see the manual available in HTML and PDF in your
59 For more information, see the manual available in HTML and PDF in your
61 installation, or online at http://ipython.org/documentation.html.
60 installation, or online at http://ipython.org/documentation.html.
62 """
61 """
63
62
64 interactive_usage = """
63 interactive_usage = """
65 IPython -- An enhanced Interactive Python
64 IPython -- An enhanced Interactive Python
66 =========================================
65 =========================================
67
66
68 IPython offers a combination of convenient shell features, special commands
67 IPython offers a combination of convenient shell features, special commands
69 and a history mechanism for both input (command history) and output (results
68 and a history mechanism for both input (command history) and output (results
70 caching, similar to Mathematica). It is intended to be a fully compatible
69 caching, similar to Mathematica). It is intended to be a fully compatible
71 replacement for the standard Python interpreter, while offering vastly
70 replacement for the standard Python interpreter, while offering vastly
72 improved functionality and flexibility.
71 improved functionality and flexibility.
73
72
74 At your system command line, type 'ipython -h' to see the command line
73 At your system command line, type 'ipython -h' to see the command line
75 options available. This document only describes interactive features.
74 options available. This document only describes interactive features.
76
75
77 MAIN FEATURES
76 MAIN FEATURES
78
77
79 * Access to the standard Python help. As of Python 2.1, a help system is
78 * Access to the standard Python help. As of Python 2.1, a help system is
80 available with access to object docstrings and the Python manuals. Simply
79 available with access to object docstrings and the Python manuals. Simply
81 type 'help' (no quotes) to access it.
80 type 'help' (no quotes) to access it.
82
81
83 * Magic commands: type %magic for information on the magic subsystem.
82 * Magic commands: type %magic for information on the magic subsystem.
84
83
85 * System command aliases, via the %alias command or the ipythonrc config file.
84 * System command aliases, via the %alias command or the ipythonrc config file.
86
85
87 * Dynamic object information:
86 * Dynamic object information:
88
87
89 Typing ?word or word? prints detailed information about an object. If
88 Typing ?word or word? prints detailed information about an object. If
90 certain strings in the object are too long (docstrings, code, etc.) they get
89 certain strings in the object are too long (docstrings, code, etc.) they get
91 snipped in the center for brevity.
90 snipped in the center for brevity.
92
91
93 Typing ??word or word?? gives access to the full information without
92 Typing ??word or word?? gives access to the full information without
94 snipping long strings. Long strings are sent to the screen through the less
93 snipping long strings. Long strings are sent to the screen through the less
95 pager if longer than the screen, printed otherwise.
94 pager if longer than the screen, printed otherwise.
96
95
97 The ?/?? system gives access to the full source code for any object (if
96 The ?/?? system gives access to the full source code for any object (if
98 available), shows function prototypes and other useful information.
97 available), shows function prototypes and other useful information.
99
98
100 If you just want to see an object's docstring, type '%pdoc object' (without
99 If you just want to see an object's docstring, type '%pdoc object' (without
101 quotes, and without % if you have automagic on).
100 quotes, and without % if you have automagic on).
102
101
103 Both %pdoc and ?/?? give you access to documentation even on things which are
102 Both %pdoc and ?/?? give you access to documentation even on things which are
104 not explicitely defined. Try for example typing {}.get? or after import os,
103 not explicitely defined. Try for example typing {}.get? or after import os,
105 type os.path.abspath??. The magic functions %pdef, %source and %file operate
104 type os.path.abspath??. The magic functions %pdef, %source and %file operate
106 similarly.
105 similarly.
107
106
108 * Completion in the local namespace, by typing TAB at the prompt.
107 * Completion in the local namespace, by typing TAB at the prompt.
109
108
110 At any time, hitting tab will complete any available python commands or
109 At any time, hitting tab will complete any available python commands or
111 variable names, and show you a list of the possible completions if there's
110 variable names, and show you a list of the possible completions if there's
112 no unambiguous one. It will also complete filenames in the current directory.
111 no unambiguous one. It will also complete filenames in the current directory.
113
112
114 This feature requires the readline and rlcomplete modules, so it won't work
113 This feature requires the readline and rlcomplete modules, so it won't work
115 if your Python lacks readline support (such as under Windows).
114 if your Python lacks readline support (such as under Windows).
116
115
117 * Search previous command history in two ways (also requires readline):
116 * Search previous command history in two ways (also requires readline):
118
117
119 - Start typing, and then use Ctrl-p (previous,up) and Ctrl-n (next,down) to
118 - Start typing, and then use Ctrl-p (previous,up) and Ctrl-n (next,down) to
120 search through only the history items that match what you've typed so
119 search through only the history items that match what you've typed so
121 far. If you use Ctrl-p/Ctrl-n at a blank prompt, they just behave like
120 far. If you use Ctrl-p/Ctrl-n at a blank prompt, they just behave like
122 normal arrow keys.
121 normal arrow keys.
123
122
124 - Hit Ctrl-r: opens a search prompt. Begin typing and the system searches
123 - Hit Ctrl-r: opens a search prompt. Begin typing and the system searches
125 your history for lines that match what you've typed so far, completing as
124 your history for lines that match what you've typed so far, completing as
126 much as it can.
125 much as it can.
127
126
128 - %hist: search history by index (this does *not* require readline).
127 - %hist: search history by index (this does *not* require readline).
129
128
130 * Persistent command history across sessions.
129 * Persistent command history across sessions.
131
130
132 * Logging of input with the ability to save and restore a working session.
131 * Logging of input with the ability to save and restore a working session.
133
132
134 * System escape with !. Typing !ls will run 'ls' in the current directory.
133 * System escape with !. Typing !ls will run 'ls' in the current directory.
135
134
136 * The reload command does a 'deep' reload of a module: changes made to the
135 * The reload command does a 'deep' reload of a module: changes made to the
137 module since you imported will actually be available without having to exit.
136 module since you imported will actually be available without having to exit.
138
137
139 * Verbose and colored exception traceback printouts. See the magic xmode and
138 * Verbose and colored exception traceback printouts. See the magic xmode and
140 xcolor functions for details (just type %magic).
139 xcolor functions for details (just type %magic).
141
140
142 * Input caching system:
141 * Input caching system:
143
142
144 IPython offers numbered prompts (In/Out) with input and output caching. All
143 IPython offers numbered prompts (In/Out) with input and output caching. All
145 input is saved and can be retrieved as variables (besides the usual arrow
144 input is saved and can be retrieved as variables (besides the usual arrow
146 key recall).
145 key recall).
147
146
148 The following GLOBAL variables always exist (so don't overwrite them!):
147 The following GLOBAL variables always exist (so don't overwrite them!):
149 _i: stores previous input.
148 _i: stores previous input.
150 _ii: next previous.
149 _ii: next previous.
151 _iii: next-next previous.
150 _iii: next-next previous.
152 _ih : a list of all input _ih[n] is the input from line n.
151 _ih : a list of all input _ih[n] is the input from line n.
153
152
154 Additionally, global variables named _i<n> are dynamically created (<n>
153 Additionally, global variables named _i<n> are dynamically created (<n>
155 being the prompt counter), such that _i<n> == _ih[<n>]
154 being the prompt counter), such that _i<n> == _ih[<n>]
156
155
157 For example, what you typed at prompt 14 is available as _i14 and _ih[14].
156 For example, what you typed at prompt 14 is available as _i14 and _ih[14].
158
157
159 You can create macros which contain multiple input lines from this history,
158 You can create macros which contain multiple input lines from this history,
160 for later re-execution, with the %macro function.
159 for later re-execution, with the %macro function.
161
160
162 The history function %hist allows you to see any part of your input history
161 The history function %hist allows you to see any part of your input history
163 by printing a range of the _i variables. Note that inputs which contain
162 by printing a range of the _i variables. Note that inputs which contain
164 magic functions (%) appear in the history with a prepended comment. This is
163 magic functions (%) appear in the history with a prepended comment. This is
165 because they aren't really valid Python code, so you can't exec them.
164 because they aren't really valid Python code, so you can't exec them.
166
165
167 * Output caching system:
166 * Output caching system:
168
167
169 For output that is returned from actions, a system similar to the input
168 For output that is returned from actions, a system similar to the input
170 cache exists but using _ instead of _i. Only actions that produce a result
169 cache exists but using _ instead of _i. Only actions that produce a result
171 (NOT assignments, for example) are cached. If you are familiar with
170 (NOT assignments, for example) are cached. If you are familiar with
172 Mathematica, IPython's _ variables behave exactly like Mathematica's %
171 Mathematica, IPython's _ variables behave exactly like Mathematica's %
173 variables.
172 variables.
174
173
175 The following GLOBAL variables always exist (so don't overwrite them!):
174 The following GLOBAL variables always exist (so don't overwrite them!):
176 _ (one underscore): previous output.
175 _ (one underscore): previous output.
177 __ (two underscores): next previous.
176 __ (two underscores): next previous.
178 ___ (three underscores): next-next previous.
177 ___ (three underscores): next-next previous.
179
178
180 Global variables named _<n> are dynamically created (<n> being the prompt
179 Global variables named _<n> are dynamically created (<n> being the prompt
181 counter), such that the result of output <n> is always available as _<n>.
180 counter), such that the result of output <n> is always available as _<n>.
182
181
183 Finally, a global dictionary named _oh exists with entries for all lines
182 Finally, a global dictionary named _oh exists with entries for all lines
184 which generated output.
183 which generated output.
185
184
186 * Directory history:
185 * Directory history:
187
186
188 Your history of visited directories is kept in the global list _dh, and the
187 Your history of visited directories is kept in the global list _dh, and the
189 magic %cd command can be used to go to any entry in that list.
188 magic %cd command can be used to go to any entry in that list.
190
189
191 * Auto-parentheses and auto-quotes (adapted from Nathan Gray's LazyPython)
190 * Auto-parentheses and auto-quotes (adapted from Nathan Gray's LazyPython)
192
191
193 1. Auto-parentheses
192 1. Auto-parentheses
194 Callable objects (i.e. functions, methods, etc) can be invoked like
193 Callable objects (i.e. functions, methods, etc) can be invoked like
195 this (notice the commas between the arguments):
194 this (notice the commas between the arguments):
196 >>> callable_ob arg1, arg2, arg3
195 >>> callable_ob arg1, arg2, arg3
197 and the input will be translated to this:
196 and the input will be translated to this:
198 --> callable_ob(arg1, arg2, arg3)
197 --> callable_ob(arg1, arg2, arg3)
199 You can force auto-parentheses by using '/' as the first character
198 You can force auto-parentheses by using '/' as the first character
200 of a line. For example:
199 of a line. For example:
201 >>> /globals # becomes 'globals()'
200 >>> /globals # becomes 'globals()'
202 Note that the '/' MUST be the first character on the line! This
201 Note that the '/' MUST be the first character on the line! This
203 won't work:
202 won't work:
204 >>> print /globals # syntax error
203 >>> print /globals # syntax error
205
204
206 In most cases the automatic algorithm should work, so you should
205 In most cases the automatic algorithm should work, so you should
207 rarely need to explicitly invoke /. One notable exception is if you
206 rarely need to explicitly invoke /. One notable exception is if you
208 are trying to call a function with a list of tuples as arguments (the
207 are trying to call a function with a list of tuples as arguments (the
209 parenthesis will confuse IPython):
208 parenthesis will confuse IPython):
210 In [1]: zip (1,2,3),(4,5,6) # won't work
209 In [1]: zip (1,2,3),(4,5,6) # won't work
211 but this will work:
210 but this will work:
212 In [2]: /zip (1,2,3),(4,5,6)
211 In [2]: /zip (1,2,3),(4,5,6)
213 ------> zip ((1,2,3),(4,5,6))
212 ------> zip ((1,2,3),(4,5,6))
214 Out[2]= [(1, 4), (2, 5), (3, 6)]
213 Out[2]= [(1, 4), (2, 5), (3, 6)]
215
214
216 IPython tells you that it has altered your command line by
215 IPython tells you that it has altered your command line by
217 displaying the new command line preceded by -->. e.g.:
216 displaying the new command line preceded by -->. e.g.:
218 In [18]: callable list
217 In [18]: callable list
219 -------> callable (list)
218 -------> callable (list)
220
219
221 2. Auto-Quoting
220 2. Auto-Quoting
222 You can force auto-quoting of a function's arguments by using ',' as
221 You can force auto-quoting of a function's arguments by using ',' as
223 the first character of a line. For example:
222 the first character of a line. For example:
224 >>> ,my_function /home/me # becomes my_function("/home/me")
223 >>> ,my_function /home/me # becomes my_function("/home/me")
225
224
226 If you use ';' instead, the whole argument is quoted as a single
225 If you use ';' instead, the whole argument is quoted as a single
227 string (while ',' splits on whitespace):
226 string (while ',' splits on whitespace):
228 >>> ,my_function a b c # becomes my_function("a","b","c")
227 >>> ,my_function a b c # becomes my_function("a","b","c")
229 >>> ;my_function a b c # becomes my_function("a b c")
228 >>> ;my_function a b c # becomes my_function("a b c")
230
229
231 Note that the ',' MUST be the first character on the line! This
230 Note that the ',' MUST be the first character on the line! This
232 won't work:
231 won't work:
233 >>> x = ,my_function /home/me # syntax error
232 >>> x = ,my_function /home/me # syntax error
234 """
233 """
235
234
236 interactive_usage_min = """\
235 interactive_usage_min = """\
237 An enhanced console for Python.
236 An enhanced console for Python.
238 Some of its features are:
237 Some of its features are:
239 - Readline support if the readline library is present.
238 - Readline support if the readline library is present.
240 - Tab completion in the local namespace.
239 - Tab completion in the local namespace.
241 - Logging of input, see command-line options.
240 - Logging of input, see command-line options.
242 - System shell escape via ! , eg !ls.
241 - System shell escape via ! , eg !ls.
243 - Magic commands, starting with a % (like %ls, %pwd, %cd, etc.)
242 - Magic commands, starting with a % (like %ls, %pwd, %cd, etc.)
244 - Keeps track of locally defined variables via %who, %whos.
243 - Keeps track of locally defined variables via %who, %whos.
245 - Show object information with a ? eg ?x or x? (use ?? for more info).
244 - Show object information with a ? eg ?x or x? (use ?? for more info).
246 """
245 """
247
246
248 quick_reference = r"""
247 quick_reference = r"""
249 IPython -- An enhanced Interactive Python - Quick Reference Card
248 IPython -- An enhanced Interactive Python - Quick Reference Card
250 ================================================================
249 ================================================================
251
250
252 obj?, obj?? : Get help, or more help for object (also works as
251 obj?, obj?? : Get help, or more help for object (also works as
253 ?obj, ??obj).
252 ?obj, ??obj).
254 ?foo.*abc* : List names in 'foo' containing 'abc' in them.
253 ?foo.*abc* : List names in 'foo' containing 'abc' in them.
255 %magic : Information about IPython's 'magic' % functions.
254 %magic : Information about IPython's 'magic' % functions.
256
255
257 Magic functions are prefixed by %, and typically take their arguments without
256 Magic functions are prefixed by %, and typically take their arguments without
258 parentheses, quotes or even commas for convenience.
257 parentheses, quotes or even commas for convenience.
259
258
260 Example magic function calls:
259 Example magic function calls:
261
260
262 %alias d ls -F : 'd' is now an alias for 'ls -F'
261 %alias d ls -F : 'd' is now an alias for 'ls -F'
263 alias d ls -F : Works if 'alias' not a python name
262 alias d ls -F : Works if 'alias' not a python name
264 alist = %alias : Get list of aliases to 'alist'
263 alist = %alias : Get list of aliases to 'alist'
265 cd /usr/share : Obvious. cd -<tab> to choose from visited dirs.
264 cd /usr/share : Obvious. cd -<tab> to choose from visited dirs.
266 %cd?? : See help AND source for magic %cd
265 %cd?? : See help AND source for magic %cd
267
266
268 System commands:
267 System commands:
269
268
270 !cp a.txt b/ : System command escape, calls os.system()
269 !cp a.txt b/ : System command escape, calls os.system()
271 cp a.txt b/ : after %rehashx, most system commands work without !
270 cp a.txt b/ : after %rehashx, most system commands work without !
272 cp ${f}.txt $bar : Variable expansion in magics and system commands
271 cp ${f}.txt $bar : Variable expansion in magics and system commands
273 files = !ls /usr : Capture sytem command output
272 files = !ls /usr : Capture sytem command output
274 files.s, files.l, files.n: "a b c", ['a','b','c'], 'a\nb\nc'
273 files.s, files.l, files.n: "a b c", ['a','b','c'], 'a\nb\nc'
275
274
276 History:
275 History:
277
276
278 _i, _ii, _iii : Previous, next previous, next next previous input
277 _i, _ii, _iii : Previous, next previous, next next previous input
279 _i4, _ih[2:5] : Input history line 4, lines 2-4
278 _i4, _ih[2:5] : Input history line 4, lines 2-4
280 exec _i81 : Execute input history line #81 again
279 exec _i81 : Execute input history line #81 again
281 %rep 81 : Edit input history line #81
280 %rep 81 : Edit input history line #81
282 _, __, ___ : previous, next previous, next next previous output
281 _, __, ___ : previous, next previous, next next previous output
283 _dh : Directory history
282 _dh : Directory history
284 _oh : Output history
283 _oh : Output history
285 %hist : Command history. '%hist -g foo' search history for 'foo'
284 %hist : Command history. '%hist -g foo' search history for 'foo'
286
285
287 Autocall:
286 Autocall:
288
287
289 f 1,2 : f(1,2)
288 f 1,2 : f(1,2)
290 /f 1,2 : f(1,2) (forced autoparen)
289 /f 1,2 : f(1,2) (forced autoparen)
291 ,f 1 2 : f("1","2")
290 ,f 1 2 : f("1","2")
292 ;f 1 2 : f("1 2")
291 ;f 1 2 : f("1 2")
293
292
294 Remember: TAB completion works in many contexts, not just file names
293 Remember: TAB completion works in many contexts, not just file names
295 or python names.
294 or python names.
296
295
297 The following magic functions are currently available:
296 The following magic functions are currently available:
298
297
299 """
298 """
300
299
301 gui_reference = """\
300 gui_reference = """\
302 ===============================
301 ===============================
303 The graphical IPython console
302 The graphical IPython console
304 ===============================
303 ===============================
305
304
306 This console is designed to emulate the look, feel and workflow of a terminal
305 This console is designed to emulate the look, feel and workflow of a terminal
307 environment, while adding a number of enhancements that are simply not possible
306 environment, while adding a number of enhancements that are simply not possible
308 in a real terminal, such as inline syntax highlighting, true multiline editing,
307 in a real terminal, such as inline syntax highlighting, true multiline editing,
309 inline graphics and much more.
308 inline graphics and much more.
310
309
311 This quick reference document contains the basic information you'll need to
310 This quick reference document contains the basic information you'll need to
312 know to make the most efficient use of it. For the various command line
311 know to make the most efficient use of it. For the various command line
313 options available at startup, type ``ipython qtconsole --help`` at the command line.
312 options available at startup, type ``ipython qtconsole --help`` at the command line.
314
313
315
314
316 Multiline editing
315 Multiline editing
317 =================
316 =================
318
317
319 The graphical console is capable of true multiline editing, but it also tries
318 The graphical console is capable of true multiline editing, but it also tries
320 to behave intuitively like a terminal when possible. If you are used to
319 to behave intuitively like a terminal when possible. If you are used to
321 IPyhton's old terminal behavior, you should find the transition painless, and
320 IPyhton's old terminal behavior, you should find the transition painless, and
322 once you learn a few basic keybindings it will be a much more efficient
321 once you learn a few basic keybindings it will be a much more efficient
323 environment.
322 environment.
324
323
325 For single expressions or indented blocks, the console behaves almost like the
324 For single expressions or indented blocks, the console behaves almost like the
326 terminal IPython: single expressions are immediately evaluated, and indented
325 terminal IPython: single expressions are immediately evaluated, and indented
327 blocks are evaluated once a single blank line is entered::
326 blocks are evaluated once a single blank line is entered::
328
327
329 In [1]: print "Hello IPython!" # Enter was pressed at the end of the line
328 In [1]: print "Hello IPython!" # Enter was pressed at the end of the line
330 Hello IPython!
329 Hello IPython!
331
330
332 In [2]: for i in range(10):
331 In [2]: for i in range(10):
333 ...: print i,
332 ...: print i,
334 ...:
333 ...:
335 0 1 2 3 4 5 6 7 8 9
334 0 1 2 3 4 5 6 7 8 9
336
335
337 If you want to enter more than one expression in a single input block
336 If you want to enter more than one expression in a single input block
338 (something not possible in the terminal), you can use ``Control-Enter`` at the
337 (something not possible in the terminal), you can use ``Control-Enter`` at the
339 end of your first line instead of ``Enter``. At that point the console goes
338 end of your first line instead of ``Enter``. At that point the console goes
340 into 'cell mode' and even if your inputs are not indented, it will continue
339 into 'cell mode' and even if your inputs are not indented, it will continue
341 accepting arbitrarily many lines until either you enter an extra blank line or
340 accepting arbitrarily many lines until either you enter an extra blank line or
342 you hit ``Shift-Enter`` (the key binding that forces execution). When a
341 you hit ``Shift-Enter`` (the key binding that forces execution). When a
343 multiline cell is entered, IPython analyzes it and executes its code producing
342 multiline cell is entered, IPython analyzes it and executes its code producing
344 an ``Out[n]`` prompt only for the last expression in it, while the rest of the
343 an ``Out[n]`` prompt only for the last expression in it, while the rest of the
345 cell is executed as if it was a script. An example should clarify this::
344 cell is executed as if it was a script. An example should clarify this::
346
345
347 In [3]: x=1 # Hit C-Enter here
346 In [3]: x=1 # Hit C-Enter here
348 ...: y=2 # from now on, regular Enter is sufficient
347 ...: y=2 # from now on, regular Enter is sufficient
349 ...: z=3
348 ...: z=3
350 ...: x**2 # This does *not* produce an Out[] value
349 ...: x**2 # This does *not* produce an Out[] value
351 ...: x+y+z # Only the last expression does
350 ...: x+y+z # Only the last expression does
352 ...:
351 ...:
353 Out[3]: 6
352 Out[3]: 6
354
353
355 The behavior where an extra blank line forces execution is only active if you
354 The behavior where an extra blank line forces execution is only active if you
356 are actually typing at the keyboard each line, and is meant to make it mimic
355 are actually typing at the keyboard each line, and is meant to make it mimic
357 the IPython terminal behavior. If you paste a long chunk of input (for example
356 the IPython terminal behavior. If you paste a long chunk of input (for example
358 a long script copied form an editor or web browser), it can contain arbitrarily
357 a long script copied form an editor or web browser), it can contain arbitrarily
359 many intermediate blank lines and they won't cause any problems. As always,
358 many intermediate blank lines and they won't cause any problems. As always,
360 you can then make it execute by appending a blank line *at the end* or hitting
359 you can then make it execute by appending a blank line *at the end* or hitting
361 ``Shift-Enter`` anywhere within the cell.
360 ``Shift-Enter`` anywhere within the cell.
362
361
363 With the up arrow key, you can retrieve previous blocks of input that contain
362 With the up arrow key, you can retrieve previous blocks of input that contain
364 multiple lines. You can move inside of a multiline cell like you would in any
363 multiple lines. You can move inside of a multiline cell like you would in any
365 text editor. When you want it executed, the simplest thing to do is to hit the
364 text editor. When you want it executed, the simplest thing to do is to hit the
366 force execution key, ``Shift-Enter`` (though you can also navigate to the end
365 force execution key, ``Shift-Enter`` (though you can also navigate to the end
367 and append a blank line by using ``Enter`` twice).
366 and append a blank line by using ``Enter`` twice).
368
367
369 If you've edited a multiline cell and accidentally navigate out of it with the
368 If you've edited a multiline cell and accidentally navigate out of it with the
370 up or down arrow keys, IPython will clear the cell and replace it with the
369 up or down arrow keys, IPython will clear the cell and replace it with the
371 contents of the one above or below that you navigated to. If this was an
370 contents of the one above or below that you navigated to. If this was an
372 accident and you want to retrieve the cell you were editing, use the Undo
371 accident and you want to retrieve the cell you were editing, use the Undo
373 keybinding, ``Control-z``.
372 keybinding, ``Control-z``.
374
373
375
374
376 Key bindings
375 Key bindings
377 ============
376 ============
378
377
379 The IPython console supports most of the basic Emacs line-oriented keybindings,
378 The IPython console supports most of the basic Emacs line-oriented keybindings,
380 in addition to some of its own.
379 in addition to some of its own.
381
380
382 The keybinding prefixes mean:
381 The keybinding prefixes mean:
383
382
384 - ``C``: Control
383 - ``C``: Control
385 - ``S``: Shift
384 - ``S``: Shift
386 - ``M``: Meta (typically the Alt key)
385 - ``M``: Meta (typically the Alt key)
387
386
388 The keybindings themselves are:
387 The keybindings themselves are:
389
388
390 - ``Enter``: insert new line (may cause execution, see above).
389 - ``Enter``: insert new line (may cause execution, see above).
391 - ``C-Enter``: force new line, *never* causes execution.
390 - ``C-Enter``: force new line, *never* causes execution.
392 - ``S-Enter``: *force* execution regardless of where cursor is, no newline added.
391 - ``S-Enter``: *force* execution regardless of where cursor is, no newline added.
393 - ``C-c``: copy highlighted text to clipboard (prompts are automatically stripped).
392 - ``C-c``: copy highlighted text to clipboard (prompts are automatically stripped).
394 - ``C-S-c``: copy highlighted text to clipboard (prompts are not stripped).
393 - ``C-S-c``: copy highlighted text to clipboard (prompts are not stripped).
395 - ``C-v``: paste text from clipboard.
394 - ``C-v``: paste text from clipboard.
396 - ``C-z``: undo (retrieves lost text if you move out of a cell with the arrows).
395 - ``C-z``: undo (retrieves lost text if you move out of a cell with the arrows).
397 - ``C-S-z``: redo.
396 - ``C-S-z``: redo.
398 - ``C-o``: move to 'other' area, between pager and terminal.
397 - ``C-o``: move to 'other' area, between pager and terminal.
399 - ``C-l``: clear terminal.
398 - ``C-l``: clear terminal.
400 - ``C-a``: go to beginning of line.
399 - ``C-a``: go to beginning of line.
401 - ``C-e``: go to end of line.
400 - ``C-e``: go to end of line.
402 - ``C-k``: kill from cursor to the end of the line.
401 - ``C-k``: kill from cursor to the end of the line.
403 - ``C-y``: yank (paste)
402 - ``C-y``: yank (paste)
404 - ``C-p``: previous line (like up arrow)
403 - ``C-p``: previous line (like up arrow)
405 - ``C-n``: next line (like down arrow)
404 - ``C-n``: next line (like down arrow)
406 - ``C-f``: forward (like right arrow)
405 - ``C-f``: forward (like right arrow)
407 - ``C-b``: back (like left arrow)
406 - ``C-b``: back (like left arrow)
408 - ``C-d``: delete next character.
407 - ``C-d``: delete next character.
409 - ``M-<``: move to the beginning of the input region.
408 - ``M-<``: move to the beginning of the input region.
410 - ``M->``: move to the end of the input region.
409 - ``M->``: move to the end of the input region.
411 - ``M-d``: delete next word.
410 - ``M-d``: delete next word.
412 - ``M-Backspace``: delete previous word.
411 - ``M-Backspace``: delete previous word.
413 - ``C-.``: force a kernel restart (a confirmation dialog appears).
412 - ``C-.``: force a kernel restart (a confirmation dialog appears).
414 - ``C-+``: increase font size.
413 - ``C-+``: increase font size.
415 - ``C--``: decrease font size.
414 - ``C--``: decrease font size.
416
415
417 The IPython pager
416 The IPython pager
418 =================
417 =================
419
418
420 IPython will show long blocks of text from many sources using a builtin pager.
419 IPython will show long blocks of text from many sources using a builtin pager.
421 You can control where this pager appears with the ``--paging`` command-line
420 You can control where this pager appears with the ``--paging`` command-line
422 flag:
421 flag:
423
422
424 - ``inside`` [default]: the pager is overlaid on top of the main terminal. You
423 - ``inside`` [default]: the pager is overlaid on top of the main terminal. You
425 must quit the pager to get back to the terminal (similar to how a pager such
424 must quit the pager to get back to the terminal (similar to how a pager such
426 as ``less`` or ``more`` works).
425 as ``less`` or ``more`` works).
427
426
428 - ``vsplit``: the console is made double-tall, and the pager appears on the
427 - ``vsplit``: the console is made double-tall, and the pager appears on the
429 bottom area when needed. You can view its contents while using the terminal.
428 bottom area when needed. You can view its contents while using the terminal.
430
429
431 - ``hsplit``: the console is made double-wide, and the pager appears on the
430 - ``hsplit``: the console is made double-wide, and the pager appears on the
432 right area when needed. You can view its contents while using the terminal.
431 right area when needed. You can view its contents while using the terminal.
433
432
434 - ``none``: the console never pages output.
433 - ``none``: the console never pages output.
435
434
436 If you use the vertical or horizontal paging modes, you can navigate between
435 If you use the vertical or horizontal paging modes, you can navigate between
437 terminal and pager as follows:
436 terminal and pager as follows:
438
437
439 - Tab key: goes from pager to terminal (but not the other way around).
438 - Tab key: goes from pager to terminal (but not the other way around).
440 - Control-o: goes from one to another always.
439 - Control-o: goes from one to another always.
441 - Mouse: click on either.
440 - Mouse: click on either.
442
441
443 In all cases, the ``q`` or ``Escape`` keys quit the pager (when used with the
442 In all cases, the ``q`` or ``Escape`` keys quit the pager (when used with the
444 focus on the pager area).
443 focus on the pager area).
445
444
446 Running subprocesses
445 Running subprocesses
447 ====================
446 ====================
448
447
449 The graphical IPython console uses the ``pexpect`` module to run subprocesses
448 The graphical IPython console uses the ``pexpect`` module to run subprocesses
450 when you type ``!command``. This has a number of advantages (true asynchronous
449 when you type ``!command``. This has a number of advantages (true asynchronous
451 output from subprocesses as well as very robust termination of rogue
450 output from subprocesses as well as very robust termination of rogue
452 subprocesses with ``Control-C``), as well as some limitations. The main
451 subprocesses with ``Control-C``), as well as some limitations. The main
453 limitation is that you can *not* interact back with the subprocess, so anything
452 limitation is that you can *not* interact back with the subprocess, so anything
454 that invokes a pager or expects you to type input into it will block and hang
453 that invokes a pager or expects you to type input into it will block and hang
455 (you can kill it with ``Control-C``).
454 (you can kill it with ``Control-C``).
456
455
457 We have provided as magics ``%less`` to page files (aliased to ``%more``),
456 We have provided as magics ``%less`` to page files (aliased to ``%more``),
458 ``%clear`` to clear the terminal, and ``%man`` on Linux/OSX. These cover the
457 ``%clear`` to clear the terminal, and ``%man`` on Linux/OSX. These cover the
459 most common commands you'd want to call in your subshell and that would cause
458 most common commands you'd want to call in your subshell and that would cause
460 problems if invoked via ``!cmd``, but you need to be aware of this limitation.
459 problems if invoked via ``!cmd``, but you need to be aware of this limitation.
461
460
462 Display
461 Display
463 =======
462 =======
464
463
465 The IPython console can now display objects in a variety of formats, including
464 The IPython console can now display objects in a variety of formats, including
466 HTML, PNG and SVG. This is accomplished using the display functions in
465 HTML, PNG and SVG. This is accomplished using the display functions in
467 ``IPython.core.display``::
466 ``IPython.core.display``::
468
467
469 In [4]: from IPython.core.display import display, display_html
468 In [4]: from IPython.core.display import display, display_html
470
469
471 In [5]: from IPython.core.display import display_png, display_svg
470 In [5]: from IPython.core.display import display_png, display_svg
472
471
473 Python objects can simply be passed to these functions and the appropriate
472 Python objects can simply be passed to these functions and the appropriate
474 representations will be displayed in the console as long as the objects know
473 representations will be displayed in the console as long as the objects know
475 how to compute those representations. The easiest way of teaching objects how
474 how to compute those representations. The easiest way of teaching objects how
476 to format themselves in various representations is to define special methods
475 to format themselves in various representations is to define special methods
477 such as: ``_repr_html_``, ``_repr_svg_`` and ``_repr_png_``. IPython's display formatters
476 such as: ``_repr_html_``, ``_repr_svg_`` and ``_repr_png_``. IPython's display formatters
478 can also be given custom formatter functions for various types::
477 can also be given custom formatter functions for various types::
479
478
480 In [6]: ip = get_ipython()
479 In [6]: ip = get_ipython()
481
480
482 In [7]: html_formatter = ip.display_formatter.formatters['text/html']
481 In [7]: html_formatter = ip.display_formatter.formatters['text/html']
483
482
484 In [8]: html_formatter.for_type(Foo, foo_to_html)
483 In [8]: html_formatter.for_type(Foo, foo_to_html)
485
484
486 For further details, see ``IPython.core.formatters``.
485 For further details, see ``IPython.core.formatters``.
487
486
488 Inline matplotlib graphics
487 Inline matplotlib graphics
489 ==========================
488 ==========================
490
489
491 The IPython console is capable of displaying matplotlib figures inline, in SVG
490 The IPython console is capable of displaying matplotlib figures inline, in SVG
492 or PNG format. If started with the ``pylab=inline``, then all figures are
491 or PNG format. If started with the ``pylab=inline``, then all figures are
493 rendered inline automatically (PNG by default). If started with ``--pylab``
492 rendered inline automatically (PNG by default). If started with ``--pylab``
494 or ``pylab=<your backend>``, then a GUI backend will be used, but IPython's
493 or ``pylab=<your backend>``, then a GUI backend will be used, but IPython's
495 ``display()`` and ``getfigs()`` functions can be used to view plots inline::
494 ``display()`` and ``getfigs()`` functions can be used to view plots inline::
496
495
497 In [9]: display(*getfigs()) # display all figures inline
496 In [9]: display(*getfigs()) # display all figures inline
498
497
499 In[10]: display(*getfigs(1,2)) # display figures 1 and 2 inline
498 In[10]: display(*getfigs(1,2)) # display figures 1 and 2 inline
500 """
499 """
501
500
502
501
503 quick_guide = """\
502 quick_guide = """\
504 ? -> Introduction and overview of IPython's features.
503 ? -> Introduction and overview of IPython's features.
505 %quickref -> Quick reference.
504 %quickref -> Quick reference.
506 help -> Python's own help system.
505 help -> Python's own help system.
507 object? -> Details about 'object', use 'object??' for extra details.
506 object? -> Details about 'object', use 'object??' for extra details.
508 """
507 """
509
508
510 gui_note = """\
509 gui_note = """\
511 %guiref -> A brief reference about the graphical user interface.
510 %guiref -> A brief reference about the graphical user interface.
512 """
511 """
513
512
514 default_banner_parts = [
513 default_banner_parts = [
515 'Python %s\n' % (sys.version.split('\n')[0],),
514 'Python %s\n' % (sys.version.split('\n')[0],),
516 'Type "copyright", "credits" or "license" for more information.\n\n',
515 'Type "copyright", "credits" or "license" for more information.\n\n',
517 'IPython %s -- An enhanced Interactive Python.\n' % (release.version,),
516 'IPython %s -- An enhanced Interactive Python.\n' % (release.version,),
518 quick_guide
517 quick_guide
519 ]
518 ]
520
519
521 default_gui_banner_parts = default_banner_parts + [gui_note]
520 default_gui_banner_parts = default_banner_parts + [gui_note]
522
521
523 default_banner = ''.join(default_banner_parts)
522 default_banner = ''.join(default_banner_parts)
524
523
525 default_gui_banner = ''.join(default_gui_banner_parts)
524 default_gui_banner = ''.join(default_gui_banner_parts)
General Comments 0
You need to be logged in to leave comments. Login now