From Lazarus wiki
Jump to navigationJump to search



About me:

  • Name: Martin Friebe.
  • Location: London, UK Back in Germany, Mainz
  • Nationality: German

My role in Lazarus

  • Joined 2008
  • Main fields: SynEdit, Debugger, Release builds for Windows

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

My typical workflow comprises mainly work on source code and then debugging that very code. Consequently those were and still are the areas of the IDE that I am most interested in improving. Hence my pick of SynEdit and the Debugger as work targets. Back in 0.9.24 lots of features did not exist. So when I needed a feature, I decided I might as well contribute it. And this is how it all started, one feature done leads to the next feature still to be done.

My first patch was to make stack-frames selectable (Indeed, back then even such simple features did not exist, it was after all pre version 1) and allow inspecting watches/locals from each frame. Marc applied it 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 I concentrated my work on SynEdit, and it took more than a year before I would return to the debugger.

Then in November 2008 I was invited to join the team, and offered full access to the Lazarus SVN. My first project as a team member concerned SynEdit again: 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 was finally working in March 2010.

Since then many features and fixes for both SynEdit and the Debugger have been done.

The big project now is FpDebug. The new debugger written in Pascal. Is a team effort, to which I am lucky to contribute.


Those are outdated, but this is what they once where...

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)