.. _idle:

IDLE
====

.. moduleauthor:: Guido van Rossum <guido@Python.org>

.. index::
   single: IDLE
   single: Python Editor
   single: Integrated Development Environment

IDLE is the Python IDE built with the :mod:`Tkinter` GUI toolkit.

IDLE has the following features:

* coded in 100% pure Python, using the :mod:`Tkinter` GUI toolkit

* cross-platform: works on Windows and Unix (on Mac OS, there are currently
  problems with Tcl/Tk)

* multi-window text editor with multiple undo, Python colorizing and many other
  features, e.g. smart indent and call tips

* Python shell window (a.k.a. interactive interpreter)

* debugger (not complete, but you can set breakpoints, view  and step)


Menus
-----


File menu
^^^^^^^^^

New window
   create a new editing window

Open...
   open an existing file

Open module...
   open an existing module (searches sys.path)

Class browser
   show classes and methods in current file

Path browser
   show sys.path directories, modules, classes and methods

.. index::
   single: Class browser
   single: Path browser

Save
   save current window to the associated file (unsaved windows have a \* before and
   after the window title)

Save As...
   save current window to new file, which becomes the associated file

Save Copy As...
   save current window to different file without changing the associated file

Close
   close current window (asks to save if unsaved)

Exit
   close all windows and quit IDLE (asks to save if unsaved)


Edit menu
^^^^^^^^^

Undo
   Undo last change to current window (max 1000 changes)

Redo
   Redo last undone change to current window

Cut
   Copy selection into system-wide clipboard; then delete selection

Copy
   Copy selection into system-wide clipboard

Paste
   Insert system-wide clipboard into window

Select All
   Select the entire contents of the edit buffer

Find...
   Open a search dialog box with many options

Find again
   Repeat last search

Find selection
   Search for the string in the selection

Find in Files...
   Open a search dialog box for searching files

Replace...
   Open a search-and-replace dialog box

Go to line
   Ask for a line number and show that line

Indent region
   Shift selected lines right 4 spaces

Dedent region
   Shift selected lines left 4 spaces

Comment out region
   Insert ## in front of selected lines

Uncomment region
   Remove leading # or ## from selected lines

Tabify region
   Turns *leading* stretches of spaces into tabs

Untabify region
   Turn *all* tabs into the right number of spaces

Expand word
   Expand the word you have typed to match another word in the same buffer; repeat
   to get a different expansion

Format Paragraph
   Reformat the current blank-line-separated paragraph

Import module
   Import or reload the current module

Run script
   Execute the current file in the __main__ namespace

.. index::
   single: Import module
   single: Run script


Windows menu
^^^^^^^^^^^^

Zoom Height
   toggles the window between normal size (24x80) and maximum height.

The rest of this menu lists the names of all open windows; select one to bring
it to the foreground (deiconifying it if necessary).


Debug menu (in the Python Shell window only)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Go to file/line
   look around the insert point for a filename and linenumber, open the file, and
   show the line.

Open stack viewer
   show the stack traceback of the last exception

Debugger toggle
   Run commands in the shell under the debugger

JIT Stack viewer toggle
   Open stack viewer on traceback

.. index::
   single: stack viewer
   single: debugger


Basic editing and navigation
----------------------------

* :kbd:`Backspace` deletes to the left; :kbd:`Del` deletes to the right

* Arrow keys and :kbd:`Page Up`/:kbd:`Page Down` to move around

* :kbd:`Home`/:kbd:`End` go to begin/end of line

* :kbd:`C-Home`/:kbd:`C-End` go to begin/end of file

* Some :program:`Emacs` bindings may also work, including :kbd:`C-B`,
  :kbd:`C-P`, :kbd:`C-A`, :kbd:`C-E`, :kbd:`C-D`, :kbd:`C-L`


Automatic indentation
^^^^^^^^^^^^^^^^^^^^^

After a block-opening statement, the next line is indented by 4 spaces (in the
Python Shell window by one tab).  After certain keywords (break, return etc.)
the next line is dedented.  In leading indentation, :kbd:`Backspace` deletes up
to 4 spaces if they are there. :kbd:`Tab` inserts 1-4 spaces (in the Python
Shell window one tab). See also the indent/dedent region commands in the edit
menu.


Python Shell window
^^^^^^^^^^^^^^^^^^^

* :kbd:`C-C` interrupts executing command

* :kbd:`C-D` sends end-of-file; closes window if typed at a ``>>>`` prompt

* :kbd:`Alt-p` retrieves previous command matching what you have typed

* :kbd:`Alt-n` retrieves next

* :kbd:`Return` while on any previous command retrieves that command

* :kbd:`Alt-/` (Expand word) is also useful here

.. index:: single: indentation


Syntax colors
-------------

The coloring is applied in a background "thread," so you may occasionally see
uncolorized text.  To change the color scheme, edit the ``[Colors]`` section in
:file:`config.txt`.

Python syntax colors:
   Keywords
      orange

   Strings 
      green

   Comments
      red

   Definitions
      blue

Shell colors:
   Console output
      brown

   stdout
      blue

   stderr
      dark green

   stdin
      black


Command line usage
^^^^^^^^^^^^^^^^^^

::

   idle.py [-c command] [-d] [-e] [-s] [-t title] [arg] ...

   -c command  run this command
   -d          enable debugger
   -e          edit mode; arguments are files to be edited
   -s          run $IDLESTARTUP or $PYTHONSTARTUP first
   -t title    set title of shell window

If there are arguments:

#. If :option:`-e` is used, arguments are files opened for editing and
   ``sys.argv`` reflects the arguments passed to IDLE itself.

#. Otherwise, if :option:`-c` is used, all arguments are placed in
   ``sys.argv[1:...]``, with ``sys.argv[0]`` set to ``'-c'``.

#. Otherwise, if neither :option:`-e` nor :option:`-c` is used, the first
   argument is a script which is executed with the remaining arguments in
   ``sys.argv[1:...]``  and ``sys.argv[0]`` set to the script name.  If the script
   name is '-', no script is executed but an interactive Python session is started;
   the arguments are still available in ``sys.argv``.


