From Free Pascal wiki



About me:

  • Name: Martin Friebe.
  • Location: London, UK
  • Nationality: German

My role in Lazarus

  • Joined 2008
  • Main fields: SynEdit, Debugger

I first discovered Lazarus in late 2007. At this time it was version 0.9.24.

Having worked mainly on Code and little on visual design (Forms) SynEdit and the debugger had been the 2 areas of Lazarus I have used the most. Which was the main reason for me getting involved with those two.

My first patch was to make stack-frames selectable and allow showing watches/locals from each frame. Marc applied this patch on 9 Jan 2008. A few more debugger related patches followed. In Summer 2008 I made my first patch for SynEdit. It was committed on 13 June by Mattias. After that my work concentrated on SynEdit, and it was going to be more than a year, before I would return to the debugger. A series of small patches for SynEdit followed.

Then in November 2008 I was offered write access to the Lazarus SVN.

It was also then when I committed my first bigger contribution: The rewrite of major parts of the code folding. Code folding has developed ever since, and is still receiving new features from time to time.

Following this was work on highlighting (e.g. highlight of all occurrences of the word under caret), Syncro Edit (Summer 2009) and many other things.

In November 2009 yet another huge piece of work started: Multiple Editor windows, with the ability to edit the same file, in many views. It took several month, and was finally working in March 2010.

In October 2010 I finally included the debugger in my work again. 2011 saw a lot of time and work going into the debugger.


Order is not specific to any priority


  • More folding
    • Multi-Line fold header: Currently only the line with the fold keyword (e.g. "procedure" is kept visible.
      For multi-line procedure declaration, the whole procedure declaration may be wanted visible. Folding only local var, type and code
    • Save with session for comments and other none keyword folds
  • Split view: Divide Edit into 2 (or more) sections, using a splitter.
  • WordWrap
  • Multi-Caret
  • Pascal syntax check as you write
  • spell check for string/comment as you write
  • Highlight of none active code (IFDEF)
  • Highlight IFDEF/ENDIF like begin/end
  • Vertical indent guidelines
    • Colored highlight of pascal blocks [[1]].
      e.g. Highlight all keywords in IF...THEN[...ELSE], and draw horizontal guideline to end to statement(";")/block(begin end)
  • Gutter for error overview (compilation or codetool errors). The gutter shows the full file, mapping the locations like the slider on a scrollbar.
  • Clean up and refactor.
  • Configurable highlighter (grammar from config file)


  • Attach/Detach
  • Thread support
    • Live update of thread window
    • Pause/continue selected thread
  • Persistent configuration for all dbg windows (Watches/stack)
  • Improve History
  • Debug Windows
    • Memory Viewer
    • Allow multiply instances of Inspector, (Memory), maybe others (watches for diff stackframes/history)
  • Run Without Debugger (Menu entry / via separate package)
  • Refactor
    • Move to dedicated package
    • Avoid ProcessMessages / Event or thread driven
    • internal queuing / Improve Speed by sending next gdb command, before reading result
  • Build in dwarf reader
    • Detect type info without "ptype","whatis" gdb commands (Improve Speed)
    • Read Memory without GDB
    • ...
  • Review new GDB features
    • Function calls (ONLY IF supported by gdb)
    • Skip Methods on step (e.g. fpc_string_ref_count, ...)
    • Reverse execution (depends on gdb supported platforms)


  • Features
  • More folding
  • Class and Class sections (public,private,...) in the Interface Part [|Bug 12139]
  • Full Procedure/function at "Procedure xxx;" line
  • var/const/type sections
  • maybe IFDEF
  • User-defined { $REGION}
  • All kind of comments {} (**) //
  • Hide-Fold: Collapse to 0 lines. E.g Fold/Hide single line comment
  • Multi-Line fold header: Currently only the line with the fold keyword (e.g. "procedure" is kept visible.
  • Folding: The ability of copy and past code, that contains folded blocks, and keeps them folded when inserted
  • Folding, save with session
  • Handle DoubleWidth char (Chinese, ...)
  • User definable Mouse Actions / Configuration
  • interactive parms forcode-templates example
  • Sync Edit: Edit one word in more than one location, updating all locations at the same timeexample
  • Persistent Blocks
  • Allow to have multiple editors open in Lazarus, and have more than one view of the same document.
  • Writing TestCases
  • Clean up and refactor.
Someone already put up some ideas here Redesign of the SynEdit component. And there is more
  • Move all gutter code into a structure of Classes (Needs clean up)
TGutterManager: To Represent to act as an interface and represent the whole Gutter
TGutterLineNumbers, TGutterFoldInfo, TGutterMarks, TGutterBrkPoints: To draw the individual columns of the Gutter.
  • Move drawing the Text To it's own class (like the gutter)
  • Create classes for Caret, BlockSelection, ViewPort (Topline,LeftChar, LinesInWindow, WindowWidthInChar)
This will help to more clearly define interactions between them (Via OnChangeNotify callbacks)
  • Reduce the Calculation overhead. There currently is some internal Data that SynEedit keeps recalculating more often than needed. (This should benefit from The caret and Viewpoint classes)
  • Defer the calculation of some of the internal data. Calculate either OnIdle, or OnRequest
  • Debugger ...


  • Fixed Bugs
  • Various debugger patches sent to Marc
  • Refactored CodeFolding: A majority of the folding code has been moved into it's own classes
  • Refactored TrimTrailingSpaces: Moved into it's own class, which acts as a "view" (virtual TextBuffer, between SynEdit, and SynEditTextBuffer)