##// END OF EJS Templates
Put togehter the few win32 call into some functions (sleep, runCommand, restoreConsoleFocus) to ease the port to other platforms.
Put togehter the few win32 call into some functions (sleep, runCommand, restoreConsoleFocus) to ease the port to other platforms.

File last commit:

r1284:2fef15a8
r1284:2fef15a8
Show More
ipy_synchronize_with.py
212 lines | 6.1 KiB | text/x-python | PythonLexer
/ IPython / Extensions / ipy_synchronize_with.py
vds
new version of the synchronization hooks closer to the ipy_editors style
r1265 import IPython.ipapi
ip = IPython.ipapi.get()
import win32api
import win32ui
import win32console
import dde
import os
import scitedirector
def setHook(synchronize_with_editor):
ip.set_hook("synchronize_with_editor", synchronize_with_editor)
def findFilename(filename):
if not os.path.isabs(filename):
filename = os.path.join(os.getcwd(), filename)
if os.path.isfile(filename):
return filename
return ""
vds
Put togehter the few win32 call into some functions (sleep, runCommand, restoreConsoleFocus) to ease the port to other platforms.
r1284 def runCommand(path, command, arguments, asynchronous = True):
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):
win32api.Sleep(milliseconds)
vds
new version of the synchronization hooks closer to the ipy_editors style
r1265 def restoreConsoleFocus():
h = win32console.GetConsoleWindow()
console_window = win32ui.CreateWindowFromHandle(h)
console_window.SetForegroundWindow()
vds
Put togehter the few win32 call into some functions (sleep, runCommand, restoreConsoleFocus) to ease the port to other platforms.
r1284
vds
new version of the synchronization hooks closer to the ipy_editors style
r1265
# 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 = findFilename(filename)
if not filename:
return
vds
Put togehter the few win32 call into some functions (sleep, runCommand, restoreConsoleFocus) to ease the port to other platforms.
r1284 runCommand(self.path, 'gvim', '--remote-silent +%d "%s"' % (lineno, filename))
vds
new version of the synchronization hooks closer to the ipy_editors style
r1265
vds
Put togehter the few win32 call into some functions (sleep, runCommand, restoreConsoleFocus) to ease the port to other platforms.
r1284 sleep(self.wakeup_duration)
vds
new version of the synchronization hooks closer to the ipy_editors style
r1265
restoreConsoleFocus()
def gvim(path = r"C:\Program Files\vim\vim71", wakeup_duration = 100):
synchronize_with_editor = GVimHook(path, wakeup_duration)
setHook(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 = findFilename(filename)
if not filename:
return
vds
Put togehter the few win32 call into some functions (sleep, runCommand, restoreConsoleFocus) to ease the port to other platforms.
r1284 r = runCommand(self.path, "emacsclient", '-n +%d:%d "%s" 2>nul' % (lineno, columnno, filename), False)
vds
new version of the synchronization hooks closer to the ipy_editors style
r1265 if r != 0:
vds
Put togehter the few win32 call into some functions (sleep, runCommand, restoreConsoleFocus) to ease the port to other platforms.
r1284 runCommand(self.path, 'runemacs', '--quick -f server-start +%d:%d "%s"' % (lineno, columnno, filename))
sleep(self.start_duration)
vds
new version of the synchronization hooks closer to the ipy_editors style
r1265 else:
vds
Put togehter the few win32 call into some functions (sleep, runCommand, restoreConsoleFocus) to ease the port to other platforms.
r1284 sleep(self.wakeup_duration)
vds
new version of the synchronization hooks closer to the ipy_editors style
r1265
restoreConsoleFocus()
def emacs(path = r"C:\Program Files\emacs\bin", wakeup_duration = 100, start_duration = 2000):
synchronize_with_editor = EmacsHook(path, wakeup_duration, start_duration)
setHook(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 = findFilename(filename)
if not filename:
return
scites = scitedirector.findWindows()
if not scites:
vds
Put togehter the few win32 call into some functions (sleep, runCommand, restoreConsoleFocus) to ease the port to other platforms.
r1284 runCommand(self.path, "scite", '"-open:%s" -goto:%d' % (filename.replace("\\", "/"), lineno))
vds
new version of the synchronization hooks closer to the ipy_editors style
r1265
vds
Put togehter the few win32 call into some functions (sleep, runCommand, restoreConsoleFocus) to ease the port to other platforms.
r1284 sleep(self.start_duration)
vds
new version of the synchronization hooks closer to the ipy_editors style
r1265 restoreConsoleFocus()
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)
setHook(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 = findFilename(filename)
if not filename:
return
vds
Put togehter the few win32 call into some functions (sleep, runCommand, restoreConsoleFocus) to ease the port to other platforms.
r1284 runCommand(self.path, "notepad++", '"%s" -n%d' % (filename, lineno))
vds
new version of the synchronization hooks closer to the ipy_editors style
r1265
vds
Put togehter the few win32 call into some functions (sleep, runCommand, restoreConsoleFocus) to ease the port to other platforms.
r1284 sleep(self.wakeup_duration)
vds
new version of the synchronization hooks closer to the ipy_editors style
r1265
restoreConsoleFocus()
def notepadplusplus(path = r"C:\Program Files\Notepad++", wakeup_duration = 100):
synchronize_with_editor = NodePadPlusPlusHook(path, wakeup_duration)
setHook(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 = findFilename(filename)
if not filename:
return
vds
Put togehter the few win32 call into some functions (sleep, runCommand, restoreConsoleFocus) to ease the port to other platforms.
r1284 runCommand(self.path, "pspad", '"%s" -%d' % (filename, lineno))
vds
new version of the synchronization hooks closer to the ipy_editors style
r1265
vds
Put togehter the few win32 call into some functions (sleep, runCommand, restoreConsoleFocus) to ease the port to other platforms.
r1284 sleep(self.wakeup_duration)
vds
new version of the synchronization hooks closer to the ipy_editors style
r1265
restoreConsoleFocus()
def pspad(path = r"C:\Program Files\PSPad editor", wakeup_duration = 100):
synchronize_with_editor = PsPadHook(path, wakeup_duration)
setHook(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 = findFilename(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))
vds
Put togehter the few win32 call into some functions (sleep, runCommand, restoreConsoleFocus) to ease the port to other platforms.
r1284
sleep(self.wakeup_duration)
vds
new version of the synchronization hooks closer to the ipy_editors style
r1265 except:
vds
Put togehter the few win32 call into some functions (sleep, runCommand, restoreConsoleFocus) to ease the port to other platforms.
r1284 runCommand(self.path, 'uedit32', '"%s/%d"' % (filename, lineno))
sleep(self.start_duration)
vds
new version of the synchronization hooks closer to the ipy_editors style
r1265
server.Shutdown()
restoreConsoleFocus()
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)
vds
Put togehter the few win32 call into some functions (sleep, runCommand, restoreConsoleFocus) to ease the port to other platforms.
r1284 setHook(synchronize_with_editor)