Merge pull request #1463 from RaiKoHoff/Dev_NF

Disable "NewLine" for AutoComplete fill-up
This commit is contained in:
Rainer Kottenhoff 2019-07-25 13:01:37 +02:00 committed by GitHub
commit f4bb56a1a3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
12 changed files with 139 additions and 61 deletions

View File

@ -39,6 +39,7 @@ SettingsVersion=4
;WebTemplate2=https://en.wikipedia.org/w/index.php?search=%s
;ExtendedWhiteSpaceChars=:
;AutoCompleteWordCharSet=
;AutoCompleteFillUpChars=
;UpdateDelayMarkAllOccurrences=50
;CurrentLineHorizontalSlop=40
;CurrentLineVerticalSlop=5

View File

@ -1 +1 @@
2405
2406

View File

@ -3,7 +3,7 @@
<assemblyIdentity
name="Notepad3"
processorArchitecture="*"
version="5.19.725.2405"
version="5.19.725.2406"
type="win32"
/>
<description>Notepad3 BETA</description>

View File

@ -728,6 +728,10 @@ void LoadSettings()
IniSectionGetString(Settings2_Section, L"AutoCompleteWordCharSet", Defaults2.AutoCompleteWordCharSet,
Settings2.AutoCompleteWordCharSet, COUNTOF(Settings2.AutoCompleteWordCharSet));
Defaults2.AutoCompleteFillUpChars[0] = L'\0';
IniSectionGetString(Settings2_Section, L"AutoCompleteFillUpChars", Defaults2.AutoCompleteFillUpChars,
Settings2.AutoCompleteFillUpChars, COUNTOF(Settings2.AutoCompleteFillUpChars));
StringCchCopyW(Defaults2.TimeStamp, COUNTOF(Defaults2.TimeStamp), L"\\$Date:[^\\$]+\\$ | $Date: %Y/%m/%d %H:%M:%S $");
IniSectionGetString(Settings2_Section, L"TimeStamp", Defaults2.TimeStamp, Settings2.TimeStamp, COUNTOF(Settings2.TimeStamp));
@ -743,7 +747,6 @@ void LoadSettings()
StringCchCopyW(Defaults2.WebTemplate2, COUNTOF(Defaults2.WebTemplate2), L"https://en.wikipedia.org/w/index.php?search=%s");
IniSectionGetString(Settings2_Section, L"WebTemplate2", Defaults2.WebTemplate2, Settings2.WebTemplate2, COUNTOF(Settings2.WebTemplate2));
// --------------------------------------------------------------------------
const WCHAR* const Settings_Section = L"Settings";
// --------------------------------------------------------------------------

View File

@ -64,6 +64,9 @@ static char WordCharsAccelerated[ANSI_CHAR_BUFFER] = { '\0' };
static char WhiteSpaceCharsAccelerated[ANSI_CHAR_BUFFER] = { '\0' };
static char PunctuationCharsAccelerated[1] = { '\0' }; // empty!
static char AutoCompleteFillUpChars[64] = { '\0' };
static bool s_ACFillUpCharsHaveNewLn = false;
// Default Codepage and Character Set
#define W_AUTOC_WORD_ANSI1252 L"#$%&@0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyzÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿ"
static char AutoCompleteWordCharSet[ANSI_CHAR_BUFFER] = { L'\0' };
@ -255,6 +258,22 @@ void EditInitWordDelimiter(HWND hwnd)
StringCchCopyA(DelimCharsAccel, COUNTOF(DelimCharsAccel), WhiteSpaceCharsDefault);
StringCchCatA(DelimCharsAccel, COUNTOF(DelimCharsAccel), lineEnds);
if (StrIsNotEmpty(Settings2.AutoCompleteFillUpChars))
{
WideCharToMultiByte(Encoding_SciCP, 0, Settings2.AutoCompleteFillUpChars, -1, AutoCompleteFillUpChars, COUNTOF(AutoCompleteFillUpChars), NULL, NULL);
UnSlash(AutoCompleteFillUpChars, Encoding_SciCP);
s_ACFillUpCharsHaveNewLn = false;
int i = 0;
while (AutoCompleteFillUpChars[i]) {
if ((AutoCompleteFillUpChars[i] == '\r') || (AutoCompleteFillUpChars[i] == '\n')) {
s_ACFillUpCharsHaveNewLn = true;
break;
}
++i;
}
}
if (StrIsNotEmpty(Settings2.AutoCompleteWordCharSet))
{
WideCharToMultiByte(Encoding_SciCP, 0, Settings2.AutoCompleteWordCharSet, -1, AutoCompleteWordCharSet, COUNTOF(AutoCompleteWordCharSet), NULL, NULL);
@ -741,8 +760,8 @@ bool EditCopyAppend(HWND hwnd, bool bAppend)
HANDLE const hOld = GetClipboardData(CF_UNICODETEXT);
const WCHAR* pszOld = GlobalLock(hOld);
int const _eol_mode = SciCall_GetEOLMode();
const WCHAR *pszSep = ((_eol_mode == SC_EOL_CRLF) ? L"\r\n" : ((_eol_mode == SC_EOL_CR) ? L"\r" : L"\n"));
WCHAR pszSep[3] = { L'\0' };
Sci_GetCurrentEOL_W(pszSep);
size_t cchNewText = cchTextW;
if (pszOld && *pszOld) {
@ -3903,14 +3922,8 @@ void EditWrapToColumn(HWND hwnd,DocPos nColumn/*,int nTabWidth*/)
return;
}
int cchEOL = 2;
WCHAR wszEOL[] = L"\r\n";
int const cEOLMode = SciCall_GetEOLMode();
if (cEOLMode == SC_EOL_CR)
cchEOL = 1;
else if (cEOLMode == SC_EOL_LF) {
cchEOL = 1; wszEOL[0] = L'\n';
}
WCHAR wszEOL[3] = { L'\0' };
int const cchEOL = Sci_GetCurrentEOL_W(wszEOL);
int cchConvW = 0;
DocPos iLineLength = 0;
@ -4065,23 +4078,8 @@ void EditJoinLinesEx(HWND hwnd, bool bPreserveParagraphs, bool bCRLF2Space)
return;
}
char szEOL[] = "\r\n";
int cchEOL = 2;
switch (SciCall_GetEOLMode())
{
case SC_EOL_LF:
szEOL[0] = '\n';
szEOL[1] = '\0';
cchEOL = 1;
break;
case SC_EOL_CR:
szEOL[1] = '\0';
cchEOL = 1;
break;
case SC_EOL_CRLF:
default:
break;
}
char szEOL[3] = { '\0' };
int const cchEOL = Sci_GetCurrentEOL_A(szEOL);
for (int i = 0; i < iSelLength; ++i)
{
@ -4208,15 +4206,8 @@ void EditSortLines(HWND hwnd, int iSortFlags)
DocLn const iLineCount = iLineEnd - iLineStart + 1;
int const cEOLMode = SciCall_GetEOLMode();
char mszEOL[] = "\r\n";
if (cEOLMode == SC_EOL_CR) {
mszEOL[1] = '\0';
}
else if (cEOLMode == SC_EOL_LF) {
mszEOL[0] = '\n';
mszEOL[1] = '\0';
}
char mszEOL[3] = { '\0' };
Sci_GetCurrentEOL_A(mszEOL);
int const _iTabWidth = SciCall_GetTabWidth();
@ -6705,6 +6696,16 @@ void EditMarkAll(HWND hwnd, char* pszFind, int flags, DocPos rangeStart, DocPos
}
//=============================================================================
//
// EditCheckNewLineInACFillUps()
//
bool EditCheckNewLineInACFillUps()
{
return s_ACFillUpCharsHaveNewLn;
}
//=============================================================================
//
// EditAutoCompleteWord()
@ -6901,9 +6902,8 @@ bool EditAutoCompleteWord(HWND hwnd, bool autoInsert)
SciCall_AutoCSetIgnoreCase(true);
//SendMessage(hwnd, SCI_AUTOCSETCASEINSENSITIVEBEHAVIOUR, (WPARAM)SC_CASEINSENSITIVEBEHAVIOUR_IGNORECASE, 0);
SciCall_AutoCSetChooseSingle(autoInsert);
//SciCall_AutoCSetOrder(SC_ORDER_PERFORMSORT); // already sorted
SciCall_AutoCSetFillups("\t\n\r");
//SciCall_AutoCSetFillups(Settings.AccelWordNavigation ? WhiteSpaceCharsDefault : WhiteSpaceCharsAccelerated);
//~SciCall_AutoCSetOrder(SC_ORDER_PERFORMSORT); // already sorted
SciCall_AutoCSetFillups(AutoCompleteFillUpChars);
++iWListSize; // zero termination
char* const pList = AllocMem(iWListSize, HEAP_ZERO_MEMORY);

View File

@ -110,6 +110,7 @@ void EditFinalizeStyling(HWND hwnd, DocPos iEndPos);
void EditUpdateIndicators(HWND hwnd, DocPos startPos, DocPos endPos, bool bClearOnly);
void EditSetAccelWordNav(HWND hwnd,bool);
bool EditAutoCompleteWord(HWND hwnd,bool);
bool EditCheckNewLineInACFillUps();
void EditShowZeroLengthCallTip(HWND hwnd, DocPos iPosition);
void EditGetBookmarkList(HWND hwnd,LPWSTR pszBookMarks,int cchLength);
void EditSetBookmarkList(HWND hwnd,LPCWSTR pszBookMarks);

View File

@ -347,6 +347,7 @@ bool MRU_MergeSave(LPMRULIST pmru,bool,bool,bool);
#define MRU_Count(pmru) MRU_Enum((pmru), 0, NULL, 0)
//==== UnSlash Functions ======================================================
unsigned int UnSlash(char* s, UINT cpEdit);
void TransformBackslashes(char* pszInput,bool,UINT cpEdit,int* iReplaceMsg);
void TransformMetaChars(char* pszInput,bool,int iEOLMode);

View File

@ -3091,11 +3091,11 @@ LRESULT MsgInitMenu(HWND hwnd, WPARAM wParam, LPARAM lParam)
}
CheckMenuRadioItem(hmenu,IDM_ENCODING_ANSI,IDM_ENCODING_UTF8SIGN,i,MF_BYCOMMAND);
int const _eol_mode = SciCall_GetEOLMode();
if (_eol_mode == SC_EOL_CRLF) {
int const eol_mode = SciCall_GetEOLMode();
if (eol_mode == SC_EOL_CRLF) {
i = IDM_LINEENDINGS_CRLF;
}
else if (_eol_mode == SC_EOL_CR) {
else if (eol_mode == SC_EOL_CR) {
i = IDM_LINEENDINGS_CR;
}
else {
@ -6787,8 +6787,8 @@ static void _HandleAutoIndent(int const charAdded)
{
// TODO: handle indent after '{' and un-indent on '}' in C/C++ ?
// in CRLF mode handle LF only...
int const _eol_mode = SciCall_GetEOLMode();
if (((SC_EOL_CRLF == _eol_mode) && (charAdded != '\r')) || (SC_EOL_CRLF != _eol_mode))
int const eol_mode = SciCall_GetEOLMode();
if (((SC_EOL_CRLF == eol_mode) && (charAdded != '\r')) || (SC_EOL_CRLF != eol_mode))
{
DocPos const iCurPos = SciCall_GetCurrentPos();
DocLn const iCurLine = SciCall_LineFromPosition(iCurPos);
@ -7015,6 +7015,33 @@ static LRESULT _MsgNotifyFromEdit(HWND hwnd, const LPNMHDR pnmh, const SCNotific
case SCN_CALLTIPCLICK:
return 0;
case SCN_AUTOCSELECTION:
{
switch (scn->listCompletionMethod)
{
case SC_AC_TAB:
case SC_AC_COMMAND:
case SC_AC_DOUBLECLICK:
// accepted
break;
case SC_AC_FILLUP:
// see: SciCall_AutoCSetFillups() -> accepted
break;
case SC_AC_NEWLINE:
if (!EditCheckNewLineInACFillUps()) {
SciCall_AutoCCancel(); // rejected
PostMessage(Globals.hwndEdit, SCI_NEWLINE, 0, 0);
}
break;
default:
SciCall_AutoCCancel(); // rejected
break;
}
}
break;
case SCN_MODIFIED:
{
@ -7394,10 +7421,10 @@ LRESULT MsgNotify(HWND hwnd, WPARAM wParam, LPARAM lParam)
case STATUS_EOLMODE:
{
int i;
int const _eol_mode = SciCall_GetEOLMode();
if (_eol_mode == SC_EOL_CRLF)
int const eol_mode = SciCall_GetEOLMode();
if (eol_mode == SC_EOL_CRLF)
i = IDM_LINEENDINGS_CRLF;
else if (_eol_mode == SC_EOL_CR)
else if (eol_mode == SC_EOL_CR)
i = IDM_LINEENDINGS_CR;
else
i = IDM_LINEENDINGS_LF;
@ -8632,17 +8659,17 @@ static void _UpdateStatusbarDelayed(bool bForceRedraw)
if (s_iStatusbarVisible[STATUS_EOLMODE])
{
static int s_iEOLMode = -1;
int const _eol_mode = SciCall_GetEOLMode();
int const eol_mode = SciCall_GetEOLMode();
if (bForceRedraw || (s_iEOLMode != _eol_mode))
if (bForceRedraw || (s_iEOLMode != eol_mode))
{
static WCHAR tchEOL[16] = { L'\0' };
if (_eol_mode == SC_EOL_LF)
if (eol_mode == SC_EOL_LF)
{
StringCchPrintf(tchStatusBar[STATUS_EOLMODE], txtWidth, (Globals.bDocHasInconsistentEOLs ? _LFi_f : _LF_f),
s_mxSBPrefix[STATUS_EOLMODE], s_mxSBPostfix[STATUS_EOLMODE]);
}
else if (_eol_mode == SC_EOL_CR)
else if (eol_mode == SC_EOL_CR)
{
StringCchPrintf(tchStatusBar[STATUS_EOLMODE], txtWidth, (Globals.bDocHasInconsistentEOLs ? _CRi_f : _CR_f),
s_mxSBPrefix[STATUS_EOLMODE], s_mxSBPostfix[STATUS_EOLMODE]);
@ -8651,7 +8678,7 @@ static void _UpdateStatusbarDelayed(bool bForceRedraw)
StringCchPrintf(tchStatusBar[STATUS_EOLMODE], txtWidth, (Globals.bDocHasInconsistentEOLs ? _CRLFi_f : _CRLF_f),
s_mxSBPrefix[STATUS_EOLMODE], s_mxSBPostfix[STATUS_EOLMODE]);
}
s_iEOLMode = _eol_mode;
s_iEOLMode = eol_mode;
bIsUpdateNeeded = true;
}
}

View File

@ -539,8 +539,6 @@ DeclareSciCallR0(IsSelectionRectangle, SELECTIONISRECTANGLE, bool)
#define Sci_HaveUndoRedoHistory() (SciCall_CanUndo() || SciCall_CanRedo())
#define Sci_GetEOLLen() ((SciCall_GetEOLMode() == SC_EOL_CRLF) ? 2 : 1)
#define Sci_GetCurrentLineNumber() SciCall_LineFromPosition(SciCall_GetCurrentPos())
#define Sci_GetLastDocLineNumber() (SciCall_GetLineCount() - 1)
@ -569,6 +567,46 @@ inline DocPos Sci_GetRangeMaxLineLength(DocLn iBeginLine, DocLn iEndLine) {
#define Sci_DisableMouseDWellNotification() SciCall_SetMouseDWellTime(SC_TIME_FOREVER)
// ----------------------------------------------------------------------------
#define Sci_GetEOLLen() ((SciCall_GetEOLMode() == SC_EOL_CRLF) ? 2 : 1)
inline int Sci_GetCurrentEOL_A(LPCH eol) {
switch (SciCall_GetEOLMode()) {
case SC_EOL_CRLF:
eol[0] = '\r'; eol[1] = '\n'; eol[2] = '\0';
return 2;
case SC_EOL_CR:
eol[0] = '\r'; eol[1] = '\0';
return 1;
case SC_EOL_LF:
eol[0] = '\n'; eol[1] = '\0';
return 1;
default:
return 0;
}
}
// ----------------------------------------------------------------------------
inline int Sci_GetCurrentEOL_W(LPWCH eol) {
switch (SciCall_GetEOLMode()) {
case SC_EOL_CRLF:
eol[0] = L'\r'; eol[1] = L'\n'; eol[2] = L'\0';
return 2;
case SC_EOL_CR:
eol[0] = L'\r'; eol[1] = L'\0';
return 1;
case SC_EOL_LF:
eol[0] = L'\n'; eol[1] = L'\0';
return 1;
default:
return 0;
}
}
// ----------------------------------------------------------------------------
//=============================================================================
#endif //_NP3_SCICALL_H_

View File

@ -502,6 +502,7 @@ typedef struct _settings2_t
WCHAR FileBrowserPath[MAX_PATH];
WCHAR AppUserModelID[32];
WCHAR AutoCompleteFillUpChars[64];
WCHAR ExtendedWhiteSpaceChars[ANSI_CHAR_BUFFER + 1];
WCHAR AutoCompleteWordCharSet[ANSI_CHAR_BUFFER + 1];
WCHAR TimeStamp[128];

View File

@ -66,10 +66,16 @@
// Compiler specific
#if defined(_MSC_VER)
#if (_MSC_VER >= 1920)
#if(_MSC_FULL_VER >= 192127702)
#if (_MSC_VER >= 1922)
#if(_MSC_FULL_VER >= 192227905)
#define VER_CPL MS Visual C++ 2019 v16.2.0
#endif
#elif (_MSC_VER >= 1921)
#if(_MSC_FULL_VER >= 192127702)
#define VER_CPL MS Visual C++ 2019 v16.1.(0-6)
#elif(_MSC_FULL_VER >= 192027508)
#endif
#elif (_MSC_VER >= 1920)
#if(_MSC_FULL_VER >= 192027508)
#define VER_CPL MS Visual C++ 2019 v16.0.(0-4)
#elif(_MSC_FULL_VER >= 192027027)
#define VER_CPL MS Visual C++ 2019 v16.0.Prev(1-4)

View File

@ -8,7 +8,7 @@
#define VERSION_MAJOR 5
#define VERSION_MINOR 19
#define VERSION_REV 725
#define VERSION_BUILD 2405
#define VERSION_BUILD 2406
#define SCINTILLA_VER 420
#define ONIGURUMA_REGEX_VER 6.9.3
#define VERSION_PATCH BETA