ipy_synchronize_with.py
212 lines
| 6.1 KiB
| text/x-python
|
PythonLexer
vds
|
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
|
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
|
r1265 | def restoreConsoleFocus(): | |
h = win32console.GetConsoleWindow() | |||
console_window = win32ui.CreateWindowFromHandle(h) | |||
console_window.SetForegroundWindow() | |||
vds
|
r1284 | ||
vds
|
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
|
r1284 | runCommand(self.path, 'gvim', '--remote-silent +%d "%s"' % (lineno, filename)) | |
vds
|
r1265 | ||
vds
|
r1284 | sleep(self.wakeup_duration) | |
vds
|
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
|
r1284 | r = runCommand(self.path, "emacsclient", '-n +%d:%d "%s" 2>nul' % (lineno, columnno, filename), False) | |
vds
|
r1265 | if r != 0: | |
vds
|
r1284 | runCommand(self.path, 'runemacs', '--quick -f server-start +%d:%d "%s"' % (lineno, columnno, filename)) | |
sleep(self.start_duration) | |||
vds
|
r1265 | else: | |
vds
|
r1284 | sleep(self.wakeup_duration) | |
vds
|
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
|
r1284 | runCommand(self.path, "scite", '"-open:%s" -goto:%d' % (filename.replace("\\", "/"), lineno)) | |
vds
|
r1265 | ||
vds
|
r1284 | sleep(self.start_duration) | |
vds
|
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
|
r1284 | runCommand(self.path, "notepad++", '"%s" -n%d' % (filename, lineno)) | |
vds
|
r1265 | ||
vds
|
r1284 | sleep(self.wakeup_duration) | |
vds
|
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
|
r1284 | runCommand(self.path, "pspad", '"%s" -%d' % (filename, lineno)) | |
vds
|
r1265 | ||
vds
|
r1284 | sleep(self.wakeup_duration) | |
vds
|
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
|
r1284 | ||
sleep(self.wakeup_duration) | |||
vds
|
r1265 | except: | |
vds
|
r1284 | runCommand(self.path, 'uedit32', '"%s/%d"' % (filename, lineno)) | |
sleep(self.start_duration) | |||
vds
|
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
|
r1284 | setHook(synchronize_with_editor) | |