diff --git a/language/common_res.h b/language/common_res.h index 13576a254..2f1d33073 100644 --- a/language/common_res.h +++ b/language/common_res.h @@ -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 diff --git a/language/np3_en_gb/menu_en_gb.rc b/language/np3_en_gb/menu_en_gb.rc index 9efd476d2..00bc804ae 100644 --- a/language/np3_en_gb/menu_en_gb.rc +++ b/language/np3_en_gb/menu_en_gb.rc @@ -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 diff --git a/language/np3_en_us/menu_en_us.rc b/language/np3_en_us/menu_en_us.rc index 256840411..e034b47b6 100644 --- a/language/np3_en_us/menu_en_us.rc +++ b/language/np3_en_us/menu_en_us.rc @@ -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 diff --git a/language/np3_it_it/menu_it_it.rc b/language/np3_it_it/menu_it_it.rc index ee2cf3ecf..5a0886407 100644 --- a/language/np3_it_it/menu_it_it.rc +++ b/language/np3_it_it/menu_it_it.rc @@ -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 diff --git a/src/Config/Config.cpp b/src/Config/Config.cpp index 3273f4a53..456fe6dcf 100644 --- a/src/Config/Config.cpp +++ b/src/Config/Config.cpp @@ -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); diff --git a/src/Notepad3.c b/src/Notepad3.c index 5db8ccdb0..4c2777200 100644 --- a/src/Notepad3.c +++ b/src/Notepad3.c @@ -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; diff --git a/src/TypeDefs.h b/src/TypeDefs.h index c616b02e5..a637810e6 100644 --- a/src/TypeDefs.h +++ b/src/TypeDefs.h @@ -581,6 +581,7 @@ typedef struct SETTINGS_T { bool DocReadOnlyMode; bool MatchBraces; bool AutoCloseTags; + bool AutoCloseBrackets; int HighlightCurrentLine; int ChangeHistoryMode; bool ChangeHistoryMargin;