Implementation of automatic parenthesis closure

Inserted an item in the menu allowing this to be done.
At the moment I have only modified the English and Italian .rc files. If the functionality is implemented I can edit all other rc files with the English string.
This commit is contained in:
Matteo Nigro 2022-11-23 11:24:00 +01:00
parent 2c75ac827b
commit 8bd083877d
7 changed files with 42 additions and 0 deletions

View File

@ -824,6 +824,7 @@
#define IDM_SET_NOPRESERVECARET 42039
#define IDM_SET_MUTE_MESSAGEBEEP 42040
#define IDM_SET_EVALTINYEXPRONSEL 42041
#define IDM_SET_AUTOCLOSEBRACKETS 42042
#define IDM_HELP_ABOUT 43000
#define IDM_HELP_CMD 43001

View File

@ -469,6 +469,7 @@ BEGIN
MENUITEM "&Word Wrap Settings...", IDM_SET_WORDWRAPSETTINGS
MENUITEM "L&ong Line Settings...", IDM_SET_LONGLINESETTINGS
MENUITEM "Auto In&dent Text", IDM_SET_AUTOINDENTTEXT
MENUITEM "Auto Close Brackets", IDM_SET_AUTOCLOSEBRACKETS
MENUITEM "Auto Close &HTML/XML\tCtrl+Shift+H", IDM_SET_AUTOCLOSETAGS
MENUITEM "A&uto Complete Words", IDM_SET_AUTOCOMPLETEWORDS
MENUITEM "Auto Complete Lexer-&Key-Words", IDM_SET_AUTOCLEXKEYWORDS

View File

@ -469,6 +469,7 @@ BEGIN
MENUITEM "&Word Wrap Settings...", IDM_SET_WORDWRAPSETTINGS
MENUITEM "L&ong Line Settings...", IDM_SET_LONGLINESETTINGS
MENUITEM "Auto In&dent Text", IDM_SET_AUTOINDENTTEXT
MENUITEM "Auto Close Brackets", IDM_SET_AUTOCLOSEBRACKETS
MENUITEM "Auto Close &HTML/XML\tCtrl+Shift+H", IDM_SET_AUTOCLOSETAGS
MENUITEM "A&uto Complete Words", IDM_SET_AUTOCOMPLETEWORDS
MENUITEM "Auto Complete Lexer-&Key-Words", IDM_SET_AUTOCLEXKEYWORDS

View File

@ -469,6 +469,7 @@ BEGIN
MENUITEM "Impostazioni &A capo automatico...", IDM_SET_WORDWRAPSETTINGS
MENUITEM "Impostazioni &Righe lunghe...", IDM_SET_LONGLINESETTINGS
MENUITEM "In&dentazione automatica", IDM_SET_AUTOINDENTTEXT
MENUITEM "Chiusura automatica Parentesi", IDM_SET_AUTOCLOSEBRACKETS
MENUITEM "Chiusura automatica &HTML/XML\tCtrl+Shift+H", IDM_SET_AUTOCLOSETAGS
MENUITEM "&Autocompletamento delle parole", IDM_SET_AUTOCOMPLETEWORDS
MENUITEM "Autocompletamento &keywords lexer", IDM_SET_AUTOCLEXKEYWORDS

View File

@ -1518,6 +1518,7 @@ void LoadSettings()
GET_BOOL_VALUE_FROM_INISECTION(ShowWordWrapSymbols, true);
GET_BOOL_VALUE_FROM_INISECTION(MatchBraces, true);
GET_BOOL_VALUE_FROM_INISECTION(AutoCloseTags, false);
GET_BOOL_VALUE_FROM_INISECTION(AutoCloseBrackets, false);
GET_INT_VALUE_FROM_INISECTION(HighlightCurrentLine, 1, 0, 2);
GET_INT_VALUE_FROM_INISECTION(ChangeHistoryMode, ChgHist_ON | ChgHist_MARGIN, ChgHist_NONE, ChgHist_ALL);
GET_BOOL_VALUE_FROM_INISECTION(ChangeHistoryMargin, true);
@ -1975,6 +1976,7 @@ static bool _SaveSettings(bool bForceSaveSettings)
SAVE_VALUE_IF_NOT_EQ_DEFAULT(Bool, ShowWordWrapSymbols);
SAVE_VALUE_IF_NOT_EQ_DEFAULT(Bool, MatchBraces);
SAVE_VALUE_IF_NOT_EQ_DEFAULT(Bool, AutoCloseTags);
SAVE_VALUE_IF_NOT_EQ_DEFAULT(Bool, AutoCloseBrackets);
SAVE_VALUE_IF_NOT_EQ_DEFAULT(Int, HighlightCurrentLine);
SAVE_VALUE_IF_NOT_EQ_DEFAULT(Int, ChangeHistoryMode);
SAVE_VALUE_IF_NOT_EQ_DEFAULT(Bool, HyperlinkHotspot);

View File

@ -4313,6 +4313,7 @@ LRESULT MsgInitMenu(HWND hwnd, WPARAM wParam, LPARAM lParam)
//i = SciCall_GetLexer();
//EnableCmd(hmenu,IDM_SET_AUTOCLOSETAGS,(i == SCLEX_HTML || i == SCLEX_XML));
CheckCmd(hmenu, IDM_SET_AUTOCLOSETAGS, Settings.AutoCloseTags /*&& (i == SCLEX_HTML || i == SCLEX_XML)*/);
CheckCmd(hmenu, IDM_SET_AUTOCLOSEBRACKETS, Settings.AutoCloseBrackets);
CheckCmd(hmenu, IDM_SET_REUSEWINDOW, Flags.bReuseWindow);
CheckCmd(hmenu, IDM_SET_SINGLEFILEINSTANCE, Flags.bSingleFileInstance);
@ -6014,6 +6015,10 @@ LRESULT MsgCommand(HWND hwnd, UINT umsg, WPARAM wParam, LPARAM lParam)
Settings.AutoCloseTags = !Settings.AutoCloseTags;
break;
case IDM_SET_AUTOCLOSEBRACKETS:
Settings.AutoCloseBrackets = !Settings.AutoCloseBrackets;
break;
case IDM_VIEW_TOGGLE_HILITCURLN:
case IDM_VIEW_HILITCURLN_NONE:
case IDM_VIEW_HILITCURLN_BACK:
@ -8145,6 +8150,31 @@ static void _HandleAutoCloseTags()
}
}
//=============================================================================
//
// _HandleAutoCloseBrackets()
//
static void _HandleAutoCloseBrackets(int const x)
{
DocPos const iCurPos = SciCall_GetCurrentPos();
DocPos const iStartPos = max_p(0, iCurPos - 1);
SciCall_SetSel(iStartPos, iCurPos);
switch(x){
case '[':
EditReplaceSelection("[]", false);
break;
case '{':
EditReplaceSelection("{}", false);
break;
case '(':
EditReplaceSelection("()", false);
break;
}
SciCall_SetSel(iCurPos, iCurPos);
}
#if 0
//=============================================================================
//
@ -8475,6 +8505,11 @@ static LRESULT _MsgNotifyFromEdit(HWND hwnd, const SCNotification* const scn)
_HandleAutoCloseTags();
}
break;
case '[':
case '{':
case '(':
_HandleAutoCloseBrackets(ich);
break;
case '?':
_EvalTinyExpr(true);
break;

View File

@ -581,6 +581,7 @@ typedef struct SETTINGS_T {
bool DocReadOnlyMode;
bool MatchBraces;
bool AutoCloseTags;
bool AutoCloseBrackets;
int HighlightCurrentLine;
int ChangeHistoryMode;
bool ChangeHistoryMargin;