diff --git a/IPython/frontend/html/notebook/notebookapp.py b/IPython/frontend/html/notebook/notebookapp.py
index 8fc6e3f..49132ec 100644
--- a/IPython/frontend/html/notebook/notebookapp.py
+++ b/IPython/frontend/html/notebook/notebookapp.py
@@ -52,7 +52,7 @@ from .handlers import (LoginHandler, LogoutHandler,
)
from .notebookmanager import NotebookManager
-from IPython.config.application import catch_config_error
+from IPython.config.application import catch_config_error, boolean_flag
from IPython.core.application import BaseIPythonApplication
from IPython.core.profiledir import ProfileDir
from IPython.lib.kernel import swallow_argv
@@ -157,10 +157,15 @@ flags['read-only'] = (
"""
)
+# Add notebook manager flags
+flags.update(boolean_flag('script', 'NotebookManager.save_script',
+ 'Auto-save a .py script everytime the .ipynb notebook is saved',
+ 'Do not auto-save .py scripts for every notebook'))
+
# the flags that are specific to the frontend
# these must be scrubbed before being passed to the kernel,
# or it will raise an error on unrecognized flags
-notebook_flags = ['no-browser', 'no-mathjax', 'read-only']
+notebook_flags = ['no-browser', 'no-mathjax', 'read-only', 'script', 'no-script']
aliases = dict(ipkernel_aliases)
diff --git a/IPython/frontend/html/notebook/notebookmanager.py b/IPython/frontend/html/notebook/notebookmanager.py
index f95b7c4..02295c4 100644
--- a/IPython/frontend/html/notebook/notebookmanager.py
+++ b/IPython/frontend/html/notebook/notebookmanager.py
@@ -27,12 +27,10 @@ from IPython.config.configurable import LoggingConfigurable
from IPython.nbformat import current
from IPython.utils.traitlets import Unicode, List, Dict, Bool
-
#-----------------------------------------------------------------------------
-# Code
+# Classes
#-----------------------------------------------------------------------------
-
class NotebookManager(LoggingConfigurable):
notebook_dir = Unicode(os.getcwd(), config=True, help="""
@@ -40,10 +38,12 @@ class NotebookManager(LoggingConfigurable):
""")
save_script = Bool(False, config=True,
- help="""Also save notebooks as a Python script.
+ help="""Automatically create a Python script when saving the notebook.
- For easier use of import/%loadpy across notebooks, a .py
- script will be created next to any .ipynb on each save.
+ For easier use of import, %run and %loadpy across notebooks, a
+ .py script will be created next to any
+ .ipynb on each save. This can also be set with the
+ short `--script` flag.
"""
)
diff --git a/docs/source/interactive/htmlnotebook.txt b/docs/source/interactive/htmlnotebook.txt
index b1b6849..a829419 100644
--- a/docs/source/interactive/htmlnotebook.txt
+++ b/docs/source/interactive/htmlnotebook.txt
@@ -187,15 +187,7 @@ entire contents of the file will be loaded into a single code cell. But if
prior to import, you manually add the ``# 2`` marker at
the start and then add separators for text/code cells, you can get a cleaner
import with the file broken into individual cells.
-
-If you want use notebooks as scripts a lot, then you can set::
-
- c.NotebookManager.save_script=True
-
-which will instruct the notebook server to save the ``.py`` export of each
-notebook adjacent to the ``.ipynb`` at every save. Then these can be ``%run``
-or imported from regular IPython sessions or other notebooks.
-
+
.. warning::
While in simple cases you can roundtrip a notebook to Python, edit the
@@ -209,6 +201,48 @@ or imported from regular IPython sessions or other notebooks.
notebook started. But the Python version is *not* an alternate notebook
format.
+
+Importing or executing a notebook as a normal Python file
+---------------------------------------------------------
+
+The native format of the notebook, a file with a ``.ipynb`` extension, is a
+JSON container of all the input and output of the notebook, and therefore not
+valid Python by itself. This means that by default, you can not import a
+notebook or execute it as a normal python script. But if you want use
+notebooks as regular Python files, you can start the notebook server with::
+
+ ipython notebook --script
+
+or you can set this option permanently in your configuration file with::
+
+ c.NotebookManager.save_script=True
+
+This will instruct the notebook server to save the ``.py`` export of each
+notebook adjacent to the ``.ipynb`` at every save. These files can be
+``%run``, imported from regular IPython sessions or other notebooks, or
+executed at the command-line as normal Python files. Since we export the raw
+code you have typed, for these files to be importable from other code you will
+have to avoid using syntax such as ``%magics`` and other IPython-specific
+extensions to the language.
+
+In regular practice, the standard way to differentiate importable code from the
+'executable' part of a script is to put at the bottom::
+
+ if __name__ == '__main__':
+ # rest of the code...
+
+Since all cells in the notebook are run as top-level code, you'll need to
+similarly protect *all* cells that you do not want executed when other scripts
+try to import your notebook. A convenient shortand for this is to define early
+on::
+
+ script = __name__ == '__main__':
+
+and then on any cell that you need to protect, use::
+
+ if script:
+ # rest of the cell...
+
Keyboard use
------------