##// END OF EJS Templates
Move most readline code from InteractiveShell to terminal subclass...
Move most readline code from InteractiveShell to terminal subclass This is the first stage of my effort to use prompt_toolkit for the terminal interface. My plan is to create a new subclass of InteractiveShell which deals with the terminal using prompt_toolkit instead of readline. To facilitate this, I am first trying to separate as much of the readline code as possible out of InteractiveShell to the TerminalInteractiveShell subclass (I don't intend the new subclass to inherit from TIS). I haven't moved any of the config options relating to readline yet, because moving them will break some people's existing config files. But if we're switching to prompt_toolkit by default, readline related config is going to be broken anyway.

File last commit:

r21229:80c619a1
r21846:5f823782
Show More
ipython_win_post_install.py
138 lines | 4.5 KiB | text/x-python | PythonLexer
/ scripts / ipython_win_post_install.py
#!python
"""Distutils post installation script for Windows.
http://docs.python.org/2/distutils/builtdist.html#the-postinstallation-script
"""
from __future__ import print_function
import os
import sys
import shutil
try:
import setuptools
have_setuptools = True
except ImportError:
have_setuptools = False
pjoin = os.path.join
# suffix for start menu folder names
pyver = "(Py%i.%i %i bit)" % (sys.version_info[0], sys.version_info[1],
(32, 64)[sys.maxsize > 2**32])
def mkshortcut(target, description, linkdir, arguments="", iconpath='',
workdir="%HOMEDRIVE%%HOMEPATH%", iconindex=0):
"""Make a shortcut if it doesn't exist and register its creation."""
filename = pjoin(linkdir, description + '.lnk')
description = "%s %s" % (description, pyver)
create_shortcut(target, description, filename, arguments, workdir,
iconpath, iconindex)
file_created(filename)
def arguments(scriptsdir, script, scriptargs=''):
"""Return command line arguments to be passed to the python executable."""
cmdbase = suffix(pjoin(scriptsdir, script))
if have_setuptools:
cmdbase += '-script.py'
return '"%s" %s' % (cmdbase, scriptargs)
def suffix(s):
"""Add '3' suffix to programs for Python 3."""
if sys.version_info[0] == 3:
s = s + '3'
return s
def install():
"""Routine to be run by the win32 installer with the -install switch."""
# Get some system constants
python = pjoin(sys.prefix, 'python.exe')
pythonw = pjoin(sys.prefix, 'pythonw.exe')
if not have_setuptools:
# This currently doesn't work without setuptools,
# so don't bother making broken links
print("Setuptools is required to"
" create Start Menu items.", file=sys.stderr)
print("Re-run this installer after installing"
" Setuptools to get Start Menu items.", file=sys.stderr)
return
# Lookup path to common startmenu ...
ip_start_menu = pjoin(get_special_folder_path('CSIDL_COMMON_PROGRAMS'),
'IPython %s' % pyver)
# Create IPython entry ...
if not os.path.isdir(ip_start_menu):
os.mkdir(ip_start_menu)
directory_created(ip_start_menu)
# Create .py and .bat files to make things available from
# the Windows command line. Thanks to the Twisted project
# for this logic!
programs = [
'ipython',
'iptest',
]
programs = [suffix(p) for p in programs]
scripts = pjoin(sys.prefix, 'scripts')
if not have_setuptools:
# only create .bat files if we don't have setuptools
for program in programs:
raw = pjoin(scripts, program)
bat = raw + '.bat'
py = raw + '.py'
# Create .py versions of the scripts
shutil.copy(raw, py)
# Create .bat files for each of the scripts
bat_file = file(bat, 'w')
bat_file.write("@%s %s %%*" % (python, py))
bat_file.close()
# Create Start Menu shortcuts
iconpath = pjoin(scripts, 'ipython.ico')
mkshortcut(python, 'IPython', ip_start_menu,
arguments(scripts, 'ipython'), iconpath)
mkshortcut(python, 'IPython (pylab mode)', ip_start_menu,
arguments(scripts, 'ipython', '--pylab'), iconpath)
iconpath = pjoin(scripts, 'ipython_nb.ico')
mkshortcut(python, 'IPython Notebook', ip_start_menu,
arguments(scripts, 'ipython', 'notebook'), iconpath)
mkshortcut(pythonw, 'IPython Documentation', ip_start_menu,
'-m webbrowser -t "http://ipython.org/documentation.html',
iconpath='url.dll')
# Disable pysh Start item until the profile restores functionality
# Most of this code is in IPython/deathrow, and needs to be updated
# to 0.11 APIs
#mkshortcut(python, 'IPython%s (command prompt mode)', ip_start_menu,
# arguments(scripts, 'ipython', 'profile=pysh --init'))
def remove():
"""Routine to be run by the win32 installer with the -remove switch."""
pass
# main()
if len(sys.argv) > 1:
if sys.argv[1] == '-install':
try:
install()
except OSError:
print("Failed to create Start Menu items, try running the"
" installer as administrator.", file=sys.stderr)
elif sys.argv[1] == '-remove':
remove()
else:
print("Script was called with option %s" % sys.argv[1],
file=sys.stderr)