##// END OF EJS Templates
Merge pull request #1399 from asmeurer/sympyprinting...
Merge pull request #1399 from asmeurer/sympyprinting Use LaTeX to display, on output, various built-in types with the SymPy printing extension. SymPy's latex() function supports printing lists, tuples, and dicts using latex notation (it uses bmatrix, pmatrix, and Bmatrix, respectively). This provides a more unified experience with SymPy functions that return these types (such as solve()). Also display ints, longs, and floats using LaTeX, to get a more unified printing experience (so that, e.g., x/x will print the same as just 1). The string form can always be obtained by manually calling the actual print function, or 2d unicode printing using pprint(). SymPy's latex() function doesn't treat set() or frosenset() correctly presently (see http://code.google.com/p/sympy/issues /detail?id=3062), so for the present, we leave those alone.

File last commit:

r4208:b4b4ede0
r6482:ba882bf7 merge
Show More
ipy_synchronize_with.py
241 lines | 7.1 KiB | text/x-python | PythonLexer
/ IPython / quarantine / ipy_synchronize_with.py
Darren Dale
normalize line endings in repo
r3218 from IPython.core import ipapi
ip = ipapi.get()
import win32api
import win32ui
import win32console
import dde
import os
import scitedirector
# test to write.
def set_hook(synchronize_with_editor):
"""Set the synchronize with editor hook with a callable object.
The callable object will be called with the following arguments when
IPython wants to synchronize with you favorite editor:
- ip: a running IPython instance.
- filename: the path of the file the editor is supposed to display.
- lineno : the line number of the line the editor is supposed to
highlight.
- columnno : the column number of the character the editor is supposed
to highlight.
"""
ip.set_hook("synchronize_with_editor", synchronize_with_editor)
def find_filename(filename):
"""Return the filename to synchronize with based on """
filename = os.path.splitext(filename)
if filename[1] == ".pyc":
filename = (filename[0], ".py")
filename = "".join(filename)
if not os.path.isabs(filename):
Jörgen Stenarson
Search of getcwd and replace with getcwdu. Ignoring core/prompts.py
r4208 filename = os.path.join(os.getcwdu(), filename)
Darren Dale
normalize line endings in repo
r3218
if os.path.isfile(filename):
return filename
return ""
def run_command(path, command, arguments, asynchronous = True):
"""Run a shell command and return the exit code of the command"""
# This is a thin wrapper around os.system that:
# - Let you run command asynchronously.
# - Accept spaces in command path.
# - Dont throw exception if the command don't exist.
line = ''
if asynchronous:
line += 'start '
try:
line += win32api.GetShortPathName(os.path.join(path, command) + ".exe") + " "
except:
print 'could not find: "%s"' % (os.path.join(path, command) + ".exe")
return -1
line += arguments
r = os.system(line)
return r
def sleep(milliseconds):
"""Wait some milliseconds."""
# This is used to make sure the editor did its job before we reset the focus on the console.
win32api.Sleep(milliseconds)
def restore_console_focus():
"""Restore the focus to the IPython console."""
h = win32console.GetConsoleWindow()
console_window = win32ui.CreateWindowFromHandle(h)
console_window.SetForegroundWindow()
# This is the most simple example of hook:
class GVimHook:
def __init__(self, path, wakeup_duration):
self.path = path
self.wakeup_duration = wakeup_duration
def __call__(self, ip, filename, lineno, columnno):
filename = find_filename(filename)
if not filename:
return
run_command(self.path, 'gvim', '--remote-silent +%d "%s"' % (lineno, filename))
sleep(self.wakeup_duration)
restore_console_focus()
def gvim(path = r"C:\Program Files\vim\vim71", wakeup_duration = 100):
synchronize_with_editor = GVimHook(path, wakeup_duration)
set_hook(synchronize_with_editor)
class EmacsHook:
def __init__(self, path, wakeup_duration, start_duration):
self.path = path
self.wakeup_duration = wakeup_duration
self.start_duration = start_duration
def __call__(self, ip, filename, lineno, columnno):
filename = find_filename(filename)
if not filename:
return
r = run_command(self.path, "emacsclient", '-n +%d:%d "%s" 2>nul' % (lineno, columnno, filename), False)
if r != 0:
run_command(self.path, 'runemacs', '--quick -f server-start +%d:%d "%s"' % (lineno, columnno, filename))
sleep(self.start_duration)
else:
sleep(self.wakeup_duration)
restore_console_focus()
def emacs(path = r"C:\Program Files\emacs\bin", wakeup_duration = 100, start_duration = 2000):
synchronize_with_editor = EmacsHook(path, wakeup_duration, start_duration)
set_hook(synchronize_with_editor)
class SciteHook:
def __init__(self, path, wakeup_duration, start_duration):
self.path = path
self.wakeup_duration = wakeup_duration
self.start_duration = start_duration
def __call__(self, ip, filename, lineno, columnno):
filename = find_filename(filename)
if not filename:
return
scites = scitedirector.findWindows()
if not scites:
run_command(self.path, "scite", '"-open:%s" -goto:%d' % (filename.replace("\\", "/"), lineno))
sleep(self.start_duration)
restore_console_focus()
else:
scite = scites[0]
scitedirector.sendCommand(scite, 'open:%s' % filename.replace("\\", "/"))
scitedirector.sendCommand(scite, "goto:%d" % lineno)
def scite(path = r"C:\Program Files\SciTE Source Code Editor", wakeup_duration = 100, start_duration = 500):
synchronize_with_editor = SciteHook(path, wakeup_duration, start_duration)
set_hook(synchronize_with_editor)
class NodePadPlusPlusHook:
def __init__(self, path, wakeup_duration):
self.path = path
self.wakeup_duration = wakeup_duration
def __call__(self, ip, filename, lineno, columnno):
filename = find_filename(filename)
if not filename:
return
run_command(self.path, "notepad++", '"%s" -n%d' % (filename, lineno))
sleep(self.wakeup_duration)
restore_console_focus()
def notepadplusplus(path = r"C:\Program Files\Notepad++", wakeup_duration = 100):
synchronize_with_editor = NodePadPlusPlusHook(path, wakeup_duration)
set_hook(synchronize_with_editor)
class PsPadHook:
def __init__(self, path, wakeup_duration):
self.path = path
self.wakeup_duration = wakeup_duration
def __call__(self, ip, filename, lineno, columnno):
filename = find_filename(filename)
if not filename:
return
run_command(self.path, "pspad", '"%s" -%d' % (filename, lineno))
sleep(self.wakeup_duration)
restore_console_focus()
def pspad(path = r"C:\Program Files\PSPad editor", wakeup_duration = 100):
synchronize_with_editor = PsPadHook(path, wakeup_duration)
set_hook(synchronize_with_editor)
# This is an example of DDE hook:
class UltraEditHook:
def __init__(self, path, wakeup_duration, start_duration):
self.path = path
self.wakeup_duration = wakeup_duration
self.start_duration = start_duration
def __call__(self, ip, filename, lineno, columnno):
filename = find_filename(filename)
if not filename:
return
server = dde.CreateServer()
server.Create("myddeserver")
conversation = dde.CreateConversation(server)
try:
conversation.ConnectTo("uedit32", "System")
conversation.Exec(r'[open("%s/%d"])' % (filename, lineno))
sleep(self.wakeup_duration)
except:
run_command(self.path, 'uedit32', '"%s/%d"' % (filename, lineno))
sleep(self.start_duration)
server.Shutdown()
restore_console_focus()
def ultraedit(path = r"C:\Program Files\IDM Computer Solutions\UltraEdit-32", wakeup_duration = 10, start_duration = 2000):
synchronize_with_editor = UltraEditHook(path, wakeup_duration, start_duration)
set_hook(synchronize_with_editor)
vds
Put togehter the few win32 call into some functions (sleep, runCommand, restoreConsoleFocus) to ease the port to other platforms.
r1284