From 1094f7f4581a9c0074294004bbd8c934593a54d5 Mon Sep 17 00:00:00 2001 From: Stefan Huber Date: Mon, 9 Jun 2008 14:13:04 +0200 Subject: [PATCH] adding first vim code+ --- DbgTerminal.py | 2 +- GdbTerminal.py | 3 +- MainControlWindow.py | 5 +- StatusWindow.py | 6 +- pygdb.py | 1 - pygdb.vim | 161 +++++++++++++++++++++++++++++++++++++++++++ 6 files changed, 170 insertions(+), 8 deletions(-) create mode 100644 pygdb.vim diff --git a/DbgTerminal.py b/DbgTerminal.py index 8cdc932..89659d0 100644 --- a/DbgTerminal.py +++ b/DbgTerminal.py @@ -42,9 +42,9 @@ class DbgTerminal (vte.Terminal): def initialize(self): - #Launch debugger self.fork_command( self.getCommand(), self.getArgv()) self.setPty(self.client_ptyslave) + self.waitForActivation() def contents_changed(self, term): diff --git a/GdbTerminal.py b/GdbTerminal.py index 496e7c3..bc5d1e7 100755 --- a/GdbTerminal.py +++ b/GdbTerminal.py @@ -103,7 +103,6 @@ class GdbTerminal (DbgTerminal.DbgTerminal): line = bplines[i] if not rxbp1.search(line): - print "Warning GdbTerminal.getBreakpoints at line", line i += 1 continue @@ -143,7 +142,7 @@ class GdbTerminal (DbgTerminal.DbgTerminal): return string.join(split[1:], "=").strip() - def waitForActivation(self, his): + def waitForActivation(self, his=None): self.setActive(False) rx = re.compile("^\(gdb\) $") diff --git a/MainControlWindow.py b/MainControlWindow.py index 0a24f4c..4866134 100644 --- a/MainControlWindow.py +++ b/MainControlWindow.py @@ -19,11 +19,12 @@ class MainControlWindow (gtk.Window): #Callbacks for new positions newPosCbs = [] - def __init__(self, dbgterm): + def __init__(self, dbgterm, quitonclose=True): #Set up GTK stuff gtk.Window.__init__(self) - self.connect("destroy", lambda *w: gtk.main_quit()) + if quitonclose: + self.connect("destroy", lambda *w: gtk.main_quit() ) #Set terminals self.dbgterm = dbgterm diff --git a/StatusWindow.py b/StatusWindow.py index 8614788..e1f4db9 100644 --- a/StatusWindow.py +++ b/StatusWindow.py @@ -13,7 +13,7 @@ import BreakpointsFrame class StatusWindow (gtk.Window): - def __init__(self, mainctrlwnd, debugger): + def __init__(self, mainctrlwnd, debugger, quitonclose=True): gtk.Window.__init__(self) self.set_screen(mainctrlwnd.get_screen()) @@ -21,7 +21,9 @@ class StatusWindow (gtk.Window): self.set_border_width(5) self.set_title("Status") self.set_default_size(400,600) - self.connect("destroy", lambda *w: gtk.main_quit()) + + if quitonclose: + self.connect("destroy", lambda *w: gtk.main_quit()) #Register callback function for new positions diff --git a/pygdb.py b/pygdb.py index be9ecb0..66fe634 100755 --- a/pygdb.py +++ b/pygdb.py @@ -21,7 +21,6 @@ def launchDebugger(clientCmd): statusWnd = StatusWindow.StatusWindow(mainCtrlWnd, dbgterm) dbgterm.initialize() - print "run" gtk.main() diff --git a/pygdb.vim b/pygdb.vim new file mode 100644 index 0000000..b38a173 --- /dev/null +++ b/pygdb.vim @@ -0,0 +1,161 @@ +"shuber, 2008-06-08 + +if ! exists("g:pygdb") + +let g:pygdb = 1 +let s:ScriptLocation = expand("") + + +python << >> + +import gtk +import string +import sys +import threading + +import vim + +#Do not use a ~ for home directory +sys.path.append("/home/shuber/projekte/pygdb/") + +import GdbTerminal +import MainControlWindow +import StatusWindow + + +#Breakpoint positions: List of dictionaries of form {"signnum" : , "file" : , "lineno":, "cond" : } +gdbBps = [] +signnum = 0 +clientcmd = "" + +gdbterm = None +mainctrlwnd = None +statuswnd = None +gdbthread = None + + + +def gdbLaunch(): + global gdbterm, mainctrlwnd, statuswnd, gdbBps, clientcmd, gdbthread + + if gdbterm == None: + + clientcmd = vim.eval("input('Client commando: ', '%s')" % clientcmd) + gdbterm = GdbTerminal.GdbTerminal(clientcmd) + mainctrlwnd = MainControlWindow.MainControlWindow(gdbterm, quitonclose=False) + statuswnd = StatusWindow.StatusWindow(mainctrlwnd, gdbterm, quitonclose=False) + gdbterm.initialize() + + + for bp in gdbBps: + statuswnd.breakpointsFrame.addBreakpoint(bp["file"], bp["lineno"], bp["cond"]) + + gtk.main() + gtk.main() + print "hello" + #mainctrlwnd.hide() + #statuswnd.hide() + + +def gdbToggleBreakpoint(lineno=None, file=None): + global gdbBps + + #Set lineno and file if not already set + if lineno==None: + lineno = vim.current.window.cursor[0] + if file==None: + file = vim.current.window.buffer.name + + #Determine index of breakpoint + bpidx = gdbGetBreakpoint( file, lineno ) + + #Remove the breakpoint + if bpidx != None: + vim.command("sign unplace %(signnum)d" % gdbBps[bpidx]) + del gdbBps[bpidx] + + #Create the breakpoint + else: + #Determine a sign number + signnum = gdbNewSignnum() + + #Create breakpoint and add sign + b = {"signnum" : signnum, "lineno" : lineno, "file" : file, "cond" : None} + vim.command("sign place %(signnum)d line=%(lineno)d name=BreakPoint file=%(file)s" % b) + gdbBps += [b] + + +def gdbBreakpointCond(lineno=None, file=None, cond=None): + global gdbBps + + #Set lineno and file if not already set + if lineno==None: + lineno = vim.current.window.cursor[0] + if file==None: + file = vim.current.window.buffer.name + + #Determine index of breakpoint + bpidx = gdbGetBreakpoint( file, lineno ) + + #Remove the breakpoint + if bpidx != None: + if cond == None: + cond = vim.eval("input('Breakpoint condition: ', '%s')" % gdbBps[bpidx]["cond"]) + gdbBps[bpidx]["cond"] = cond + + else: + #Determine a sign number + signnum = gdbNewSignnum() + + #Get condition + if cond == None: + cond = vim.eval("input('Breakpoint condition: ', '')") + + #Create breakpoint and add sign + b = {"signnum" : signnum, "lineno" : lineno, "file" : file, "cond" : cond} + vim.command("sign place %(signnum)d line=%(lineno)d name=CondBreakPoint file=%(file)s" % b) + gdbBps += [b] + + +def gdbNewSignnum(): + global signnum + signnum += 1 + return signnum + + +def gdbGetBreakpoint(file, lineno): + for i in range(len(gdbBps)): + if [gdbBps[i]["file"], gdbBps[i]["lineno"]] == [file,lineno]: + return i + return None + + +>> + + +highlight ExecutionLine term=bold ctermbg=DarkGreen ctermfg=White +highlight BreakPoint term=inverse ctermbg=DarkCyan ctermfg=Black + +sign define ExecutionLine text==> texthl=ExecutionLine linehl=ExecutionLine +sign define BreakPoint text=! texthl=BreakPoint linehl=BreakPoint +sign define CondBreakPoint text=? texthl=BreakPoint linehl=BreakPoint + + + +command! GDBLaunch :python gdbLaunch() +command! GDBToggleBreakpoint :python gdbToggleBreakpoint() +command! GDBBreakpointCond :python gdbBreakpointCond() + + + +function! GDBMapDefaults() + nmap :GDBLaunch + nmap :GDBToggleBreakpoint + nmap :GDBBreakpointCond +endfunction + + + +endif + + -- 2.30.2