adding first vim code+
authorStefan Huber <shuber2@gmail.com>
Mon, 9 Jun 2008 12:13:04 +0000 (14:13 +0200)
committerStefan Huber <shuber2@gmail.com>
Mon, 9 Jun 2008 12:13:04 +0000 (14:13 +0200)
DbgTerminal.py
GdbTerminal.py
MainControlWindow.py
StatusWindow.py
pygdb.py
pygdb.vim [new file with mode: 0644]

index 8cdc932abfbeda71402a10a1d0ddd985582e9e75..89659d035628a9fe7a450bffc9e603ff905eceb7 100644 (file)
@@ -42,9 +42,9 @@ class DbgTerminal (vte.Terminal):
 
 
        def initialize(self):
 
 
        def initialize(self):
-               #Launch debugger
                self.fork_command( self.getCommand(), self.getArgv())
                self.setPty(self.client_ptyslave)
                self.fork_command( self.getCommand(), self.getArgv())
                self.setPty(self.client_ptyslave)
+               self.waitForActivation()
 
 
        def contents_changed(self, term):
 
 
        def contents_changed(self, term):
index 496e7c39ed2302c14ef9b83efd90fb7cb6400c89..bc5d1e7285935a934ccd4dea16c985241f12055b 100755 (executable)
@@ -103,7 +103,6 @@ class GdbTerminal (DbgTerminal.DbgTerminal):
                        line = bplines[i]
 
                        if not rxbp1.search(line):
                        line = bplines[i]
 
                        if not rxbp1.search(line):
-                               print "Warning GdbTerminal.getBreakpoints at line", line
                                i += 1
                                continue
 
                                i += 1
                                continue
 
@@ -143,7 +142,7 @@ class GdbTerminal (DbgTerminal.DbgTerminal):
                return string.join(split[1:], "=").strip()
 
 
                return string.join(split[1:], "=").strip()
 
 
-       def waitForActivation(self, his):
+       def waitForActivation(self, his=None):
 
                self.setActive(False)
                rx = re.compile("^\(gdb\) $")
 
                self.setActive(False)
                rx = re.compile("^\(gdb\) $")
index 0a24f4cfc9efa2894f157a75342caf880c935a1a..4866134766793687c48d1df1fcc6483c88990d01 100644 (file)
@@ -19,11 +19,12 @@ class MainControlWindow (gtk.Window):
        #Callbacks for new positions
        newPosCbs = []
 
        #Callbacks for new positions
        newPosCbs = []
 
-       def __init__(self, dbgterm):
+       def __init__(self, dbgterm, quitonclose=True):
 
                #Set up GTK stuff
                gtk.Window.__init__(self)
 
                #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
 
                #Set terminals
                self.dbgterm = dbgterm
index 8614788666d65b5adb2d71b02cb77720aed0d24d..e1f4db9a956d963fdb50024a537683a6f2ca485f 100644 (file)
@@ -13,7 +13,7 @@ import BreakpointsFrame
 
 class StatusWindow (gtk.Window):
 
 
 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())
 
                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.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
 
 
                #Register callback function for new positions
index be9ecb05444d1036c3fa9feaa35df6945f3e8daf..66fe63452f8f355adab3298b07b26b4c0455ea83 100755 (executable)
--- a/pygdb.py
+++ b/pygdb.py
@@ -21,7 +21,6 @@ def launchDebugger(clientCmd):
        statusWnd = StatusWindow.StatusWindow(mainCtrlWnd, dbgterm)
        dbgterm.initialize()
 
        statusWnd = StatusWindow.StatusWindow(mainCtrlWnd, dbgterm)
        dbgterm.initialize()
 
-       print "run"
        gtk.main()
 
 
        gtk.main()
 
 
diff --git a/pygdb.vim b/pygdb.vim
new file mode 100644 (file)
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("<sfile>")
+
+
+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 <silent> <F5>              :GDBLaunch<CR>
+       nmap <silent> <F8>              :GDBToggleBreakpoint<CR>
+       nmap <silent> <F9>              :GDBBreakpointCond<CR>
+endfunction
+
+
+
+endif
+
+