From 6a3a0297c8744d1eebeebff1c81997979ed11f4f 2008-06-12 03:31:35 From: vds Date: 2008-06-12 03:31:35 Subject: [PATCH] new version of the synchronization hooks closer to the ipy_editors style --- diff --git a/IPython/Extensions/ip_synchronize_with_emacs.py b/IPython/Extensions/ip_synchronize_with_emacs.py deleted file mode 100644 index 86b80e6..0000000 --- a/IPython/Extensions/ip_synchronize_with_emacs.py +++ /dev/null @@ -1,33 +0,0 @@ -import IPython.ipapi -ip = IPython.ipapi.get() - -import win32api -import win32ui -import win32console -import os - -path = r"C:\Program Files\emacs\bin" - -def synchronize_with_editor(ip, filename, lineno, columnno): - if not os.path.isabs(filename): - filename = os.path.join(os.getcwd(), filename) - if not os.path.isfile(filename): - print "couldn't find file:", file - return - - h = win32console.GetConsoleWindow() - w = win32ui.CreateWindowFromHandle(h) - w.SetWindowText("%s %d" % (filename, lineno)) - - command = r'%s -n +%d:%d "%s" 2>nul' % (win32api.GetShortPathName(os.path.join(path, "emacsclient.exe")), lineno, columnno, filename) - r = os.system(command) - if r != 0: - command = r'start %s --quick -f server-start +%d:%d "%s"' % (win32api.GetShortPathName(os.path.join(path, "runemacs.exe")), lineno, columnno, filename) - os.system(command) - win32api.Sleep(500) - else: - win32api.Sleep(100) - - w.SetForegroundWindow() - -ip.set_hook("synchronize_with_editor", synchronize_with_editor) diff --git a/IPython/Extensions/ip_synchronize_with_gvim.py b/IPython/Extensions/ip_synchronize_with_gvim.py deleted file mode 100644 index 20f2978..0000000 --- a/IPython/Extensions/ip_synchronize_with_gvim.py +++ /dev/null @@ -1,28 +0,0 @@ -import IPython.ipapi -ip = IPython.ipapi.get() - -import win32api -import win32ui -import win32console -import os - -path = r"C:\Program Files\vim\vim71" - -def synchronize_with_editor(ip, filename, lineno, columnno): - if not os.path.isabs(filename): - filename = os.path.join(os.getcwd(), filename) - if not os.path.isfile(filename): - print "couldn't find file:", file - return - - h = win32console.GetConsoleWindow() - w = win32ui.CreateWindowFromHandle(h) - w.SetWindowText("%s %d" % (filename, lineno)) - - command = r'start %s --remote-silent +%d "%s"' % (win32api.GetShortPathName(os.path.join(path, "gvim.exe")), lineno, filename) - os.system(command) - - win32api.Sleep(500) - w.SetForegroundWindow() - -ip.set_hook("synchronize_with_editor", synchronize_with_editor) diff --git a/IPython/Extensions/ip_synchronize_with_nppp.py b/IPython/Extensions/ip_synchronize_with_nppp.py deleted file mode 100644 index 2c76369..0000000 --- a/IPython/Extensions/ip_synchronize_with_nppp.py +++ /dev/null @@ -1,28 +0,0 @@ -import IPython.ipapi -ip = IPython.ipapi.get() - -import win32api -import win32ui -import win32console -import os - -path = r"C:\Program Files\Notepad++" - -def synchronize_with_editor(ip, filename, lineno, columnno): - if not os.path.isabs(filename): - filename = os.path.join(os.getcwd(), filename) - if not os.path.isfile(filename): - print "couldn't find file:", file - return - - h = win32console.GetConsoleWindow() - w = win32ui.CreateWindowFromHandle(h) - w.SetWindowText("%s %d" % (filename, lineno)) - - command = r'start %s "%s" -n%d' % (win32api.GetShortPathName(os.path.join(path, "notepad++.exe")), filename, lineno) - os.system(command) - - win32api.Sleep(100) - w.SetForegroundWindow() - -ip.set_hook("synchronize_with_editor", synchronize_with_editor) diff --git a/IPython/Extensions/ip_synchronize_with_pspad.py b/IPython/Extensions/ip_synchronize_with_pspad.py deleted file mode 100644 index 11b8691..0000000 --- a/IPython/Extensions/ip_synchronize_with_pspad.py +++ /dev/null @@ -1,28 +0,0 @@ -import IPython.ipapi -ip = IPython.ipapi.get() - -import win32api -import win32ui -import win32console -import os - -path = r"C:\Program Files\PSPad editor" - -def synchronize_with_editor(ip, filename, lineno, columnno): - if not os.path.isabs(filename): - filename = os.path.join(os.getcwd(), filename) - if not os.path.isfile(filename): - print "couldn't find file:", file - return - - h = win32console.GetConsoleWindow() - w = win32ui.CreateWindowFromHandle(h) - w.SetWindowText("%s %d" % (filename, lineno)) - - command = r'start %s "%s" -%d ' % (win32api.GetShortPathName(os.path.join(path, "pspad.exe")), filename, lineno) - os.system(command) - - win32api.Sleep(100) - w.SetForegroundWindow() - -ip.set_hook("synchronize_with_editor", synchronize_with_editor) diff --git a/IPython/Extensions/ip_synchronize_with_scite.py b/IPython/Extensions/ip_synchronize_with_scite.py deleted file mode 100644 index 6ca307b..0000000 --- a/IPython/Extensions/ip_synchronize_with_scite.py +++ /dev/null @@ -1,36 +0,0 @@ -import IPython.ipapi -ip = IPython.ipapi.get() - -import win32api -import win32ui -import win32console -import os - -import scitedirector - -path = r"C:\Program Files\SciTE Source Code Editor" - -def synchronize_with_editor(ip, filename, lineno, columnno): - if not os.path.isabs(filename): - filename = os.path.join(os.getcwd(), filename) - if not os.path.isfile(filename): - print "couldn't find file:", file - return - - scites = scitedirector.findWindows() - if not scites: - h = win32console.GetConsoleWindow() - w = win32ui.CreateWindowFromHandle(h) - w.SetWindowText("%s %d" % (filename, lineno)) - - command = r'start %s "-open:%s" -goto:%d' % (win32api.GetShortPathName(os.path.join(path, "scite.exe")), filename.replace("\\", "/"), lineno) - os.system(command) - - win32api.Sleep(100) - w.SetForegroundWindow() - else: - scite = scites[0] - scitedirector.sendCommand(scite, 'open:%s' % filename.replace("\\", "/")) - scitedirector.sendCommand(scite, "goto:%d" % lineno) - -ip.set_hook("synchronize_with_editor", synchronize_with_editor) diff --git a/IPython/Extensions/ip_synchronize_with_ue.py b/IPython/Extensions/ip_synchronize_with_ue.py deleted file mode 100644 index 8bcea17..0000000 --- a/IPython/Extensions/ip_synchronize_with_ue.py +++ /dev/null @@ -1,38 +0,0 @@ -import IPython.ipapi -ip = IPython.ipapi.get() - -import win32api -import win32ui -import win32console -import dde -import os - -path = r"C:\Program Files\IDM Computer Solutions\UltraEdit-32" - -def synchronize_with_editor(ip, filename, lineno, columnno): - if not os.path.isabs(filename): - filename = os.path.join(os.getcwd(), filename) - if not os.path.isfile(filename): - print "couldn't find file:", file - return - - h = win32console.GetConsoleWindow() - w = win32ui.CreateWindowFromHandle(h) - w.SetWindowText("%s %d" % (filename, lineno)) - - server = dde.CreateServer() - server.Create("myddeserver") - conversation = dde.CreateConversation(server) - try: - conversation.ConnectTo("uedit32", "System") - conversation.Exec(r'[open("%s/%d"])' % (filename, lineno)) - win32api.Sleep(10) - except: - command = r'start %s "%s/%d"' % (win32api.GetShortPathName(os.path.join(path, "uedit32.exe")), filename, lineno) - os.system(command) - win32api.Sleep(2000) - - w.SetForegroundWindow() - server.Shutdown() - -ip.set_hook("synchronize_with_editor", synchronize_with_editor) diff --git a/IPython/Extensions/ipy_synchronize_with.py b/IPython/Extensions/ipy_synchronize_with.py new file mode 100644 index 0000000..f832bc1 --- /dev/null +++ b/IPython/Extensions/ipy_synchronize_with.py @@ -0,0 +1,196 @@ +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 "" + + +def restoreConsoleFocus(): + 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 = findFilename(filename) + + if not filename: + return + + command = r'start %s --remote-silent +%d "%s"' % (win32api.GetShortPathName(os.path.join(self.path, "gvim.exe")), lineno, filename) + os.system(command) + + win32api.Sleep(self.wakeup_duration) + + 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 + + command = r'%s -n +%d:%d "%s" 2>nul' % (win32api.GetShortPathName(os.path.join(self.path, "emacsclient.exe")), lineno, columnno, filename) + r = os.system(command) + if r != 0: + command = r'start %s --quick -f server-start +%d:%d "%s"' % (win32api.GetShortPathName(os.path.join(self.path, "runemacs.exe")), lineno, columnno, filename) + os.system(command) + win32api.Sleep(self.start_duration) + else: + win32api.Sleep(self.wakeup_duration) + + 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: + command = r'start %s "-open:%s" -goto:%d' % (win32api.GetShortPathName(os.path.join(self.path, "scite.exe")), filename.replace("\\", "/"), lineno) + os.system(command) + + win32api.Sleep(self.start_duration) + 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 + + command = r'start %s "%s" -n%d' % (win32api.GetShortPathName(os.path.join(self.path, "notepad++.exe")), filename, lineno) + os.system(command) + + win32api.Sleep(self.wakeup_duration) + + 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 + + command = r'start %s "%s" -%d ' % (win32api.GetShortPathName(os.path.join(self.path, "pspad.exe")), filename, lineno) + os.system(command) + + win32api.Sleep(self.wakeup_duration) + + 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)) + win32api.Sleep(self.wakeup_duration) + except: + command = r'start %s "%s/%d"' % (win32api.GetShortPathName(os.path.join(self.path, "uedit32.exe")), filename, lineno) + os.system(command) + win32api.Sleep(self.start_duration) + + 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) + setHook(synchronize_with_editor) \ No newline at end of file