##// END OF EJS Templates
Add narrative docs for customizing enter behavior....
Matthias Bussonnier -
Show More
@@ -228,3 +228,45 b' a :ref:`startup file <startup_files>`::'
228 For more information on filters and what you can do with the ``event`` object,
228 For more information on filters and what you can do with the ``event`` object,
229 `see the prompt_toolkit docs
229 `see the prompt_toolkit docs
230 <http://python-prompt-toolkit.readthedocs.io/en/latest/pages/building_prompts.html#adding-custom-key-bindings>`__.
230 <http://python-prompt-toolkit.readthedocs.io/en/latest/pages/building_prompts.html#adding-custom-key-bindings>`__.
231
232
233 Enter to execute
234 ----------------
235
236 In the Terminal IPython shell – which by default use the ``prompt_toolkit``
237 interface, the semantic of pressing the :kbd:`Enter` key can be ambiguous, in
238 some case :kbd:`Enter` should execute code, and in others it should add a new
239 line. IPython is using some heuristics to decide whether to execute or insert a
240 new line at cursor position. For example, if we detect that the current code is
241 not valid Python, then the user is likely editing code and the right behavior is
242 to likely to insert a new line. If the current code is a simple statement like
243 `ord('*')`, then the right behavior is likely to execute. Though the exact
244 desired semantics often varies from users to users.
245
246 As the exact behavior of :kbd:`Enter` is subject to disagreement, it has been
247 special cased in order for users to completely configure the behavior they like.
248 Hence you can have enter to simply alway execute code, if you prefer more fancy
249 behavior : start your coffee machine on even days of odd month. You'll have to
250 get your hands dirty and read prompt_toolkit and IPython documentation though.
251 See :ghpull:`10500`, set the `c.TerminalInteractiveShell.handle_return` option
252 and get inspiration from the following example that insert new lines only after
253 a pipe (``|``). Place the following in your configuration to do so::
254
255 def new_line_after_pipe(shell):
256 # shell is the same as get_ipython()
257 def insert(event):
258 """When the user presses return, insert"""
259 b = event.current_buffer
260 d = b.document
261
262 # if character before cursor is `|`
263 if d.text[d.cursor_position-1] == '|':
264 # insert a new line
265 b.insert_text('\n')
266 else:
267 # otherwise execute.
268 b.accept_action.validate_and_handle(event.cli, b)
269 return insert
270
271 # set the heuristic to our new function
272 c.TerminalInteractiveShell.handle_return = new_line_after_pipe
General Comments 0
You need to be logged in to leave comments. Login now