mirror of https://gitlab.com/basile.b/dexed.git
add option to auto close a few pair of symbols, close #85
This commit is contained in:
parent
2c7f681c58
commit
5931ce7ca9
|
@ -61,6 +61,7 @@ type
|
||||||
fAutoCLoseCurlyBrace: TBraceAutoCloseStyle;
|
fAutoCLoseCurlyBrace: TBraceAutoCloseStyle;
|
||||||
fPhobosDocRoot: TCEPathname;
|
fPhobosDocRoot: TCEPathname;
|
||||||
fAlwaysAdvancedFeatures: boolean;
|
fAlwaysAdvancedFeatures: boolean;
|
||||||
|
fAutoClosedPairs: TAutoClosePairs;
|
||||||
//
|
//
|
||||||
procedure setPhobosDocRoot(value: TCEPathname);
|
procedure setPhobosDocRoot(value: TCEPathname);
|
||||||
procedure setFont(value: TFont);
|
procedure setFont(value: TFont);
|
||||||
|
@ -80,6 +81,7 @@ type
|
||||||
published
|
published
|
||||||
property alwaysAdvancedFeatures: boolean read fAlwaysAdvancedFeatures write fAlwaysAdvancedFeatures;
|
property alwaysAdvancedFeatures: boolean read fAlwaysAdvancedFeatures write fAlwaysAdvancedFeatures;
|
||||||
property autoCloseCurlyBrace: TBraceAutoCloseStyle read fAutoCLoseCurlyBrace write fAutoCLoseCurlyBrace default TBraceAutoCloseStyle.autoCloseNever;
|
property autoCloseCurlyBrace: TBraceAutoCloseStyle read fAutoCLoseCurlyBrace write fAutoCLoseCurlyBrace default TBraceAutoCloseStyle.autoCloseNever;
|
||||||
|
property autoClosedPairs: TAutoClosePairs read fAutoClosedPairs write fAutoClosedPairs default[];
|
||||||
property autoDotDelay: integer read fAutoDotDelay write SetautoDotDelay;
|
property autoDotDelay: integer read fAutoDotDelay write SetautoDotDelay;
|
||||||
property background: TColor read fBackground write fBackground default clWhite;
|
property background: TColor read fBackground write fBackground default clWhite;
|
||||||
property blockIndentation: Integer read fBlockIdent write fBlockIdent default 4;
|
property blockIndentation: Integer read fBlockIdent write fBlockIdent default 4;
|
||||||
|
@ -273,7 +275,8 @@ begin
|
||||||
//
|
//
|
||||||
fAlwaysAdvancedFeatures:=srcopt.fAlwaysAdvancedFeatures;
|
fAlwaysAdvancedFeatures:=srcopt.fAlwaysAdvancedFeatures;
|
||||||
fResetFontSize:=srcopt.fResetFontSize;
|
fResetFontSize:=srcopt.fResetFontSize;
|
||||||
fAutoCLoseCurlyBrace := srcopt.fAutoCLoseCurlyBrace;
|
fAutoCloseCurlyBrace := srcopt.fAutoCloseCurlyBrace;
|
||||||
|
fAutoClosedPairs := srcopt.fAutoClosedPairs;
|
||||||
fCompletionMenuWidth:=srcopt.fCompletionMenuWidth;
|
fCompletionMenuWidth:=srcopt.fCompletionMenuWidth;
|
||||||
fCompletionMenuLines:=srcopt.fCompletionMenuLines;
|
fCompletionMenuLines:=srcopt.fCompletionMenuLines;
|
||||||
fCompletionMenuCaseCare:=srcopt.fCompletionMenuCaseCare;
|
fCompletionMenuCaseCare:=srcopt.fCompletionMenuCaseCare;
|
||||||
|
@ -629,6 +632,7 @@ begin
|
||||||
anEditor.Font.Size := savedSize;
|
anEditor.Font.Size := savedSize;
|
||||||
|
|
||||||
anEditor.autoCloseCurlyBrace := fAutoCLoseCurlyBrace;
|
anEditor.autoCloseCurlyBrace := fAutoCLoseCurlyBrace;
|
||||||
|
anEditor.autoClosedPairs := fAutoClosedPairs;
|
||||||
anEditor.completionMenu.TheForm.Width := fCompletionMenuWidth;
|
anEditor.completionMenu.TheForm.Width := fCompletionMenuWidth;
|
||||||
anEditor.completionMenu.LinesInWindow := fCompletionMenuLines;
|
anEditor.completionMenu.LinesInWindow := fCompletionMenuLines;
|
||||||
anEditor.completionMenu.CaseSensitive := fCompletionMenuCaseCare;
|
anEditor.completionMenu.CaseSensitive := fCompletionMenuCaseCare;
|
||||||
|
|
|
@ -32,6 +32,21 @@ type
|
||||||
autoCloseOnNewLineLexically
|
autoCloseOnNewLineLexically
|
||||||
);
|
);
|
||||||
|
|
||||||
|
TAutoClosedPair = (
|
||||||
|
autoCloseSingleQuote,
|
||||||
|
autoCloseDoubleQuote,
|
||||||
|
autoCloseBackTick,
|
||||||
|
autoCloseSquareBracket
|
||||||
|
);
|
||||||
|
|
||||||
|
TAutoClosePairs = set of TAutoClosedPair;
|
||||||
|
|
||||||
|
const
|
||||||
|
|
||||||
|
autoClosePair2Char: array[TAutoClosedPair] of char = (#39, '"', '`', ']');
|
||||||
|
|
||||||
|
type
|
||||||
|
|
||||||
TIdentifierMatchOptions = set of TIdentifierMatchOption;
|
TIdentifierMatchOptions = set of TIdentifierMatchOption;
|
||||||
|
|
||||||
TBreakPointModification = (bpAdded, bpRemoved);
|
TBreakPointModification = (bpAdded, bpRemoved);
|
||||||
|
@ -149,6 +164,7 @@ type
|
||||||
fPhobosDocRoot: string;
|
fPhobosDocRoot: string;
|
||||||
fAlwaysAdvancedFeatures: boolean;
|
fAlwaysAdvancedFeatures: boolean;
|
||||||
fIsProjectDescription: boolean;
|
fIsProjectDescription: boolean;
|
||||||
|
fAutoClosedPairs: TAutoClosePairs;
|
||||||
procedure decCallTipsLvl;
|
procedure decCallTipsLvl;
|
||||||
procedure setMatchOpts(value: TIdentifierMatchOptions);
|
procedure setMatchOpts(value: TIdentifierMatchOptions);
|
||||||
function getMouseFileBytePos: Integer;
|
function getMouseFileBytePos: Integer;
|
||||||
|
@ -178,6 +194,7 @@ type
|
||||||
function lexCanCloseBrace: boolean;
|
function lexCanCloseBrace: boolean;
|
||||||
procedure handleStatusChanged(Sender: TObject; Changes: TSynStatusChanges);
|
procedure handleStatusChanged(Sender: TObject; Changes: TSynStatusChanges);
|
||||||
procedure gotoToChangedArea(next: boolean);
|
procedure gotoToChangedArea(next: boolean);
|
||||||
|
procedure autoClosePair(value: TAutoClosedPair);
|
||||||
protected
|
protected
|
||||||
procedure DoEnter; override;
|
procedure DoEnter; override;
|
||||||
procedure DoExit; override;
|
procedure DoExit; override;
|
||||||
|
@ -247,6 +264,7 @@ type
|
||||||
property ddocDelay: Integer read fDDocDelay write setDDocDelay;
|
property ddocDelay: Integer read fDDocDelay write setDDocDelay;
|
||||||
property autoDotDelay: Integer read fAutoDotDelay write setAutoDotDelay;
|
property autoDotDelay: Integer read fAutoDotDelay write setAutoDotDelay;
|
||||||
property autoCloseCurlyBrace: TBraceAutoCloseStyle read fAutoCloseCurlyBrace write fAutoCloseCurlyBrace;
|
property autoCloseCurlyBrace: TBraceAutoCloseStyle read fAutoCloseCurlyBrace write fAutoCloseCurlyBrace;
|
||||||
|
property autoClosedPairs: TAutoClosePairs read fAutoClosedPairs write fAutoClosedPairs;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure SetDefaultCoeditKeystrokes(ed: TSynEdit);
|
procedure SetDefaultCoeditKeystrokes(ed: TSynEdit);
|
||||||
|
@ -1332,6 +1350,31 @@ begin
|
||||||
true: result := mainYes;
|
true: result := mainYes;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TCESynMemo.autoClosePair(value: TAutoClosedPair);
|
||||||
|
var
|
||||||
|
i, p: integer;
|
||||||
|
tk0, tk1: PLexToken;
|
||||||
|
begin
|
||||||
|
// TODO: editor SelStart doesnt match exactly, see why, also a problem in lexCanCloseBrace().
|
||||||
|
if value <> autoCloseSquareBracket then
|
||||||
|
begin
|
||||||
|
p := selStart;
|
||||||
|
lex(Lines.Text, fLexToks);
|
||||||
|
for i:=0 to fLexToks.Count-2 do
|
||||||
|
begin
|
||||||
|
tk0 := fLexToks[i];
|
||||||
|
tk1 := fLexToks[i+1];
|
||||||
|
if (tk0^.offset+1 <= p) and (tk1^.offset+1 > p) then
|
||||||
|
if tk0^.kind = TLexTokenKind.ltkString then
|
||||||
|
exit;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
BeginUndoBlock;
|
||||||
|
ExecuteCommand(ecChar, autoClosePair2Char[value], nil);
|
||||||
|
ExecuteCommand(ecLeft, #0, nil);
|
||||||
|
EndUndoBlock;
|
||||||
|
end;
|
||||||
{$ENDREGION}
|
{$ENDREGION}
|
||||||
|
|
||||||
{$REGION DDoc & CallTip --------------------------------------------------------}
|
{$REGION DDoc & CallTip --------------------------------------------------------}
|
||||||
|
@ -1896,6 +1939,14 @@ begin
|
||||||
c := Key;
|
c := Key;
|
||||||
inherited;
|
inherited;
|
||||||
case c of
|
case c of
|
||||||
|
#39: if autoCloseSingleQuote in fAutoClosedPairs then
|
||||||
|
autoClosePair(autoCloseSingleQuote);
|
||||||
|
'"': if autoCloseDoubleQuote in fAutoClosedPairs then
|
||||||
|
autoClosePair(autoCloseDoubleQuote);
|
||||||
|
'`': if autoCloseBackTick in fAutoClosedPairs then
|
||||||
|
autoClosePair(autoCloseBackTick);
|
||||||
|
'[': if autoCloseSquareBracket in fAutoClosedPairs then
|
||||||
|
autoClosePair(autoCloseSquareBracket);
|
||||||
'(': showCallTips(false);
|
'(': showCallTips(false);
|
||||||
')': if fCallTipWin.Visible then decCallTipsLvl;
|
')': if fCallTipWin.Visible then decCallTipsLvl;
|
||||||
'{':
|
'{':
|
||||||
|
|
|
@ -87,6 +87,8 @@ or `chmod a+x` the file in a console.
|
||||||
|
|
||||||
## Build the sources
|
## Build the sources
|
||||||
|
|
||||||
|
_warning, these instructions are not valid for the development version. Instead [follow these](https://github.com/BBasile/Coedit/wiki/Building-the-development-version)_
|
||||||
|
|
||||||
Download and setup the tools:
|
Download and setup the tools:
|
||||||
|
|
||||||
* [Download](http://lazarus.freepascal.org/index.php?page=downloads) and setup the latest Lazarus version (1.6) and FPC + FPC sources (3.0.0) for your platform.
|
* [Download](http://lazarus.freepascal.org/index.php?page=downloads) and setup the latest Lazarus version (1.6) and FPC + FPC sources (3.0.0) for your platform.
|
||||||
|
|
Loading…
Reference in New Issue