Difference between revisions of "Editor Macros PascalScript"

From Free Pascal wiki
Jump to navigationJump to search
Line 23: Line 23:
 
The following methods and properties are available:
 
The following methods and properties are available:
  
 +
;Caret:
 
     property CaretX: Integer;
 
     property CaretX: Integer;
 
     property CaretY: Integer;
 
     property CaretY: Integer;
Line 31: Line 32:
 
     procedure MoveLogicalCaretIgnoreEOL(const NewLogCaret: TPoint);
 
     procedure MoveLogicalCaretIgnoreEOL(const NewLogCaret: TPoint);
  
 +
;Selection:
 
     property BlockBegin: TPoint;
 
     property BlockBegin: TPoint;
 
     property BlockEnd: TPoint;
 
     property BlockEnd: TPoint;
Line 37: Line 39:
 
     property SelectionMode: TSynSelectionMode;
 
     property SelectionMode: TSynSelectionMode;
  
    property Lines[Index: Integer]: string; // read only
+
;Search/Replace:
    property LineAtCaret: string;  // read only
 
 
 
 
     function SearchReplace(const ASearch, AReplace: string; AOptions: TSynSearchOptions): integer;
 
     function SearchReplace(const ASearch, AReplace: string; AOptions: TSynSearchOptions): integer;
 
     function SearchReplaceEx(const ASearch, AReplace: string; AOptions: TSynSearchOptions; AStart: TPoint): integer;
 
     function SearchReplaceEx(const ASearch, AReplace: string; AOptions: TSynSearchOptions; AStart: TPoint): integer;
Line 61: Line 61:
 
   end;
 
   end;
  
 +
;Text:
 +
    property Lines[Index: Integer]: string; // read only
 +
    property LineAtCaret: string;  // read only
 
     procedure InsertTextAtCaret(aText: String; aCaretMode : TSynCaretAdjustMode);
 
     procedure InsertTextAtCaret(aText: String; aCaretMode : TSynCaretAdjustMode);
  

Revision as of 02:50, 28 August 2012

General

This feature is available in Lazarus 1.1. To use the feature the package EditorMacroScript must be installed.

This includes the PascalScript package. PascalScript is provided by REM Objects. A minimum package is provided with the Lazarus 1.1 distribution.

See also IDE_Window:_Editor_Macros

Simple actions

All simple Keyboard actions are represented as follows.

ecLeft;
Move Caret one to the left (in the editor that invoked the macro)
ecChar('a');
Inserts an 'a'

See the unit SynEditKeyCmds in pacckage SynEdit, and IDECommands in IDEIntf for a full list. Or use the Recorder to get the names of actions.

Objects provided

Scripts can refer to the invoking SynEdit via the identifier "Caller".

Caller: TSynEdit

The following methods and properties are available:

Caret
   property CaretX: Integer;
   property CaretY: Integer;
   property CaretXY: TPoint;
   property LogicalCaretXY: TPoint;
   property LogicalCaretX: TPoint;
   procedure MoveCaretIgnoreEOL(const NewCaret: TPoint);
   procedure MoveLogicalCaretIgnoreEOL(const NewLogCaret: TPoint);
Selection
   property BlockBegin: TPoint;
   property BlockEnd: TPoint;
   property SelAvail: Boolean; // read only
   property SelText: string;
   property SelectionMode: TSynSelectionMode;
Search/Replace
   function SearchReplace(const ASearch, AReplace: string; AOptions: TSynSearchOptions): integer;
   function SearchReplaceEx(const ASearch, AReplace: string; AOptions: TSynSearchOptions; AStart: TPoint): integer;
   TSynSearchOptions = set of
   ( ssoMatchCase, ssoWholeWord,
     ssoBackwards,
     ssoEntireScope, ssoSelectedOnly,  // Default is From Caret to End-of-text (or begin-of-text if backward) 
     ssoReplace, ssoReplaceAll,        // Otherwise the function does a search only
     ssoPrompt,                        // Show the prompt, before replacing
     ssoSearchInReplacement,           // continue search-replace in replacement (with ssoReplaceAll) // replace recursive
     ssoRegExpr, ssoRegExprMultiLine,
     ssoFindContinue                   // Assume the current selection is the last match, and start search behind selection
                                       // (before if ssoBackward) // Default is to start at caret (Only SearchReplace / SearchReplaceEx has start/end param)
   );

Returns the number of replacements done. When Searching, returns 1 if found, 0 if not found. If found the match will be selected (use BlockBegin/End).

 if Caller.SearchReplace('FindMe', ' ', []) > 0 then begin
   // Selection is set to the first occurrence of FindMe (searched from position of caret)
 end;
Text
   property Lines[Index: Integer]: string; // read only
   property LineAtCaret: string;  // read only
   procedure InsertTextAtCaret(aText: String; aCaretMode : TSynCaretAdjustMode);

ClipBoard: TClipBoard

   property AsText: String;