mirror of
https://github.com/rizonesoft/Notepad3.git
synced 2026-06-14 21:09:05 +08:00
+ prepare file history extension (caret position and encoding settings)
This commit is contained in:
parent
729daeeea5
commit
53f092a570
@ -5460,13 +5460,13 @@ INT_PTR CALLBACK EditFindReplaceDlgProcW(HWND hwnd,UINT umsg,WPARAM wParam,LPARA
|
||||
if (StringCchLenA(lpefr->szFind)) {
|
||||
if (GetDlgItemTextA2W(CP_UTF8,hwnd,IDC_FINDTEXT,lpefr->szFindUTF8,COUNTOF(lpefr->szFindUTF8))) {
|
||||
GetDlgItemText(hwnd,IDC_FINDTEXT,tch,COUNTOF(tch));
|
||||
MRU_Add(mruFind,tch);
|
||||
MRU_Add(mruFind,tch,0,0);
|
||||
}
|
||||
}
|
||||
if (StringCchLenA(lpefr->szReplace)) {
|
||||
if (GetDlgItemTextA2W(CP_UTF8,hwnd,IDC_REPLACETEXT,lpefr->szReplaceUTF8,COUNTOF(lpefr->szReplaceUTF8))) {
|
||||
GetDlgItemText(hwnd,IDC_REPLACETEXT,tch,COUNTOF(tch));
|
||||
MRU_Add(mruReplace,tch);
|
||||
MRU_Add(mruReplace,tch,0,0);
|
||||
}
|
||||
}
|
||||
else
|
||||
|
||||
140
src/Helpers.c
140
src/Helpers.c
@ -1733,7 +1733,7 @@ BOOL MRU_Destroy(LPMRULIST pmru)
|
||||
}
|
||||
ZeroMemory(pmru,sizeof(MRULIST));
|
||||
LocalFree(pmru);
|
||||
return(1);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
int MRU_Compare(LPMRULIST pmru,LPCWSTR psz1,LPCWSTR psz2)
|
||||
@ -1744,7 +1744,7 @@ int MRU_Compare(LPMRULIST pmru,LPCWSTR psz1,LPCWSTR psz2)
|
||||
return(StringCchCompareX(psz1,psz2));
|
||||
}
|
||||
|
||||
BOOL MRU_Add(LPMRULIST pmru,LPCWSTR pszNew)
|
||||
BOOL MRU_Add(LPMRULIST pmru,LPCWSTR pszNew, int iEnc, int iPos)
|
||||
{
|
||||
int i;
|
||||
for (i = 0; i < pmru->iSize; i++) {
|
||||
@ -1754,71 +1754,101 @@ BOOL MRU_Add(LPMRULIST pmru,LPCWSTR pszNew)
|
||||
}
|
||||
}
|
||||
i = min(i,pmru->iSize-1);
|
||||
for (; i > 0; i--)
|
||||
pmru->pszItems[i] = pmru->pszItems[i-1];
|
||||
for (; i > 0; i--) {
|
||||
pmru->pszItems[i] = pmru->pszItems[i - 1];
|
||||
pmru->iEncoding[i] = pmru->iEncoding[i - 1];
|
||||
pmru->iCaretPos[i] = pmru->iCaretPos[i - 1];
|
||||
}
|
||||
pmru->pszItems[0] = StrDup(pszNew);
|
||||
return(1);
|
||||
|
||||
pmru->iEncoding[0] = iEnc;
|
||||
pmru->iCaretPos[0] = iPos;
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
BOOL MRU_AddFile(LPMRULIST pmru,LPCWSTR pszFile,BOOL bRelativePath,BOOL bUnexpandMyDocs) {
|
||||
|
||||
BOOL MRU_FindFile(LPMRULIST pmru,LPCWSTR pszFile,int* iIndex) {
|
||||
WCHAR wchItem[MAX_PATH] = { L'\0' };
|
||||
int i;
|
||||
for (i = 0; i < pmru->iSize; i++) {
|
||||
if (pmru->pszItems[i] == NULL) {
|
||||
break;
|
||||
*iIndex = i;
|
||||
return FALSE;
|
||||
}
|
||||
else if (StringCchCompareIX(pmru->pszItems[i],pszFile) == 0) {
|
||||
LocalFree(pmru->pszItems[i]);
|
||||
break;
|
||||
*iIndex = i;
|
||||
return TRUE;
|
||||
}
|
||||
else {
|
||||
WCHAR wchItem[MAX_PATH] = { L'\0' };
|
||||
PathAbsoluteFromApp(pmru->pszItems[i],wchItem,COUNTOF(wchItem),TRUE);
|
||||
if (StringCchCompareIN(wchItem,COUNTOF(wchItem),pszFile,-1) == 0) {
|
||||
LocalFree(pmru->pszItems[i]);
|
||||
break;
|
||||
*iIndex = i;
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
}
|
||||
i = min(i,pmru->iSize-1);
|
||||
for (; i > 0; i--)
|
||||
pmru->pszItems[i] = pmru->pszItems[i-1];
|
||||
*iIndex = i;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
BOOL MRU_AddFile(LPMRULIST pmru,LPCWSTR pszFile,BOOL bRelativePath,BOOL bUnexpandMyDocs,int iEnc,int iPos) {
|
||||
|
||||
int i;
|
||||
if (MRU_FindFile(pmru,pszFile,&i)) {
|
||||
LocalFree(pmru->pszItems[i]);
|
||||
}
|
||||
else {
|
||||
i = (i < pmru->iSize) ? i : (pmru->iSize - 1);
|
||||
}
|
||||
for (; i > 0; i--) {
|
||||
pmru->pszItems[i] = pmru->pszItems[i - 1];
|
||||
pmru->iEncoding[i] = pmru->iEncoding[i - 1];
|
||||
pmru->iCaretPos[i] = pmru->iCaretPos[i - 1];
|
||||
}
|
||||
if (bRelativePath) {
|
||||
WCHAR wchFile[MAX_PATH] = { L'\0' };
|
||||
PathRelativeToApp((LPWSTR)pszFile,wchFile,COUNTOF(wchFile),TRUE,TRUE,bUnexpandMyDocs);
|
||||
pmru->pszItems[0] = StrDup(wchFile);
|
||||
}
|
||||
else
|
||||
else {
|
||||
pmru->pszItems[0] = StrDup(pszFile);
|
||||
}
|
||||
pmru->iEncoding[0] = iEnc;
|
||||
pmru->iCaretPos[0] = iPos;
|
||||
|
||||
return(1);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
BOOL MRU_Delete(LPMRULIST pmru,int iIndex) {
|
||||
|
||||
int i;
|
||||
if (iIndex < 0 || iIndex > pmru->iSize-1)
|
||||
return(0);
|
||||
if (pmru->pszItems[iIndex])
|
||||
if (iIndex < 0 || iIndex > pmru->iSize - 1) {
|
||||
return FALSE;
|
||||
}
|
||||
if (pmru->pszItems[iIndex]) {
|
||||
LocalFree(pmru->pszItems[iIndex]);
|
||||
}
|
||||
for (i = iIndex; i < pmru->iSize-1; i++) {
|
||||
pmru->pszItems[i] = pmru->pszItems[i+1];
|
||||
pmru->pszItems[i] = pmru->pszItems[i + 1];
|
||||
pmru->iEncoding[i] = pmru->iEncoding[i + 1];
|
||||
pmru->iCaretPos[i] = pmru->iCaretPos[i + 1];
|
||||
|
||||
pmru->pszItems[i+1] = NULL;
|
||||
}
|
||||
return(1);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
BOOL MRU_DeleteFileFromStore(LPMRULIST pmru,LPCWSTR pszFile) {
|
||||
|
||||
int i = 0;
|
||||
LPMRULIST pmruStore;
|
||||
WCHAR wchItem[256] = { L'\0' };
|
||||
WCHAR wchItem[MAX_PATH] = { L'\0' };
|
||||
|
||||
pmruStore = MRU_Create(pmru->szRegKey,pmru->iFlags,pmru->iSize);
|
||||
MRU_Load(pmruStore);
|
||||
|
||||
while (MRU_Enum(pmruStore,i,wchItem,COUNTOF(wchItem)) != -1) {
|
||||
while (MRU_Enum(pmruStore,i,wchItem,COUNTOF(wchItem)) != -1)
|
||||
{
|
||||
PathAbsoluteFromApp(wchItem,wchItem,COUNTOF(wchItem),TRUE);
|
||||
if (StringCchCompareIN(wchItem,COUNTOF(wchItem),pszFile,-1) == 0)
|
||||
MRU_Delete(pmruStore,i);
|
||||
@ -1828,7 +1858,7 @@ BOOL MRU_DeleteFileFromStore(LPMRULIST pmru,LPCWSTR pszFile) {
|
||||
|
||||
MRU_Save(pmruStore);
|
||||
MRU_Destroy(pmruStore);
|
||||
return(1);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
BOOL MRU_Empty(LPMRULIST pmru) {
|
||||
@ -1838,9 +1868,11 @@ BOOL MRU_Empty(LPMRULIST pmru) {
|
||||
if (pmru->pszItems[i]) {
|
||||
LocalFree(pmru->pszItems[i]);
|
||||
pmru->pszItems[i] = NULL;
|
||||
pmru->iEncoding[i] = 0;
|
||||
pmru->iCaretPos[i] = 0;
|
||||
}
|
||||
}
|
||||
return(1);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
int MRU_Enum(LPMRULIST pmru,int iIndex,LPWSTR pszItem,int cchItem) {
|
||||
@ -1863,7 +1895,6 @@ int MRU_Enum(LPMRULIST pmru,int iIndex,LPWSTR pszItem,int cchItem) {
|
||||
|
||||
BOOL MRU_Load(LPMRULIST pmru) {
|
||||
|
||||
int i,n = 0;
|
||||
WCHAR tchName[32] = { L'\0' };
|
||||
WCHAR tchItem[1024] = { L'\0' };
|
||||
WCHAR *pIniSection = LocalAlloc(LPTR,sizeof(WCHAR)*32*1024);
|
||||
@ -1871,21 +1902,28 @@ BOOL MRU_Load(LPMRULIST pmru) {
|
||||
MRU_Empty(pmru);
|
||||
LoadIniSection(pmru->szRegKey,pIniSection,(int)LocalSize(pIniSection)/sizeof(WCHAR));
|
||||
|
||||
for (i = 0; i < pmru->iSize; i++) {
|
||||
int n = 0;
|
||||
for (int i = 0; i < pmru->iSize; i++) {
|
||||
StringCchPrintf(tchName,COUNTOF(tchName),L"%.2i",i+1);
|
||||
if (IniSectionGetString(pIniSection,tchName,L"",tchItem,COUNTOF(tchItem))) {
|
||||
/*if (pmru->iFlags & MRU_UTF8) {
|
||||
WCHAR wchItem[1024];
|
||||
int cbw = MultiByteToWideCharStrg(CP_UTF7,tchItem,wchItem);
|
||||
WideCharToMultiByte(CP_UTF8,0,wchItem,cbw,tchItem,COUNTOF(tchItem),NULL,NULL);
|
||||
pmru->pszItems[n++] = StrDup(tchItem);
|
||||
pmru->pszItems[n] = StrDup(tchItem);
|
||||
}
|
||||
else*/
|
||||
pmru->pszItems[n++] = StrDup(tchItem);
|
||||
pmru->pszItems[n] = StrDup(tchItem);
|
||||
|
||||
StringCchPrintf(tchName,COUNTOF(tchName),L"ENC%.2i",i + 1);
|
||||
pmru->iEncoding[n] = IniSectionGetInt(pIniSection,tchName,0);
|
||||
StringCchPrintf(tchName,COUNTOF(tchName),L"POS%.2i",i + 1);
|
||||
pmru->iCaretPos[n] = IniSectionGetInt(pIniSection,tchName,0);
|
||||
++n;
|
||||
}
|
||||
}
|
||||
LocalFree(pIniSection);
|
||||
return(1);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
BOOL MRU_Save(LPMRULIST pmru) {
|
||||
@ -1898,7 +1936,7 @@ BOOL MRU_Save(LPMRULIST pmru) {
|
||||
|
||||
for (i = 0; i < pmru->iSize; i++) {
|
||||
if (pmru->pszItems[i]) {
|
||||
StringCchPrintf(tchName,COUNTOF(tchName),L"%.2i",i+1);
|
||||
StringCchPrintf(tchName,COUNTOF(tchName),L"%.2i",i + 1);
|
||||
/*if (pmru->iFlags & MRU_UTF8) {
|
||||
WCHAR tchItem[1024];
|
||||
WCHAR wchItem[1024];
|
||||
@ -1908,11 +1946,20 @@ BOOL MRU_Save(LPMRULIST pmru) {
|
||||
}
|
||||
else*/
|
||||
IniSectionSetString(pIniSection,tchName,pmru->pszItems[i]);
|
||||
|
||||
if (pmru->iEncoding[i] > 0) {
|
||||
StringCchPrintf(tchName,COUNTOF(tchName),L"ENC%.2i",i + 1);
|
||||
IniSectionSetInt(pIniSection,tchName,pmru->iEncoding[i]);
|
||||
}
|
||||
if (pmru->iCaretPos[i] > 0) {
|
||||
StringCchPrintf(tchName,COUNTOF(tchName),L"POS%.2i",i + 1);
|
||||
IniSectionSetInt(pIniSection,tchName,pmru->iCaretPos[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
SaveIniSection(pmru->szRegKey,pIniSection);
|
||||
LocalFree(pIniSection);
|
||||
return(1);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
@ -1929,7 +1976,7 @@ BOOL MRU_MergeSave(LPMRULIST pmru,BOOL bAddFiles,BOOL bRelativePath,BOOL bUnexpa
|
||||
if (pmru->pszItems[i]) {
|
||||
WCHAR wchItem[MAX_PATH] = { L'\0' };
|
||||
PathAbsoluteFromApp(pmru->pszItems[i],wchItem,COUNTOF(wchItem),TRUE);
|
||||
MRU_AddFile(pmruBase,wchItem,bRelativePath,bUnexpandMyDocs);
|
||||
MRU_AddFile(pmruBase,wchItem,bRelativePath,bUnexpandMyDocs,pmru->iEncoding[i],pmru->iCaretPos[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1937,16 +1984,35 @@ BOOL MRU_MergeSave(LPMRULIST pmru,BOOL bAddFiles,BOOL bRelativePath,BOOL bUnexpa
|
||||
else {
|
||||
for (i = pmru->iSize-1; i >= 0; i--) {
|
||||
if (pmru->pszItems[i])
|
||||
MRU_Add(pmruBase,pmru->pszItems[i]);
|
||||
MRU_Add(pmruBase,pmru->pszItems[i],pmru->iEncoding[i],pmru->iCaretPos[i]);
|
||||
}
|
||||
}
|
||||
|
||||
MRU_Save(pmruBase);
|
||||
MRU_Destroy(pmruBase);
|
||||
return(1);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
BOOL MRU_SetEnc(LPMRULIST pmru,int iIndex,int iEnc) {
|
||||
|
||||
if (iIndex < 0 || iIndex > pmru->iSize - 1)
|
||||
return FALSE;
|
||||
|
||||
pmru->iEncoding[iIndex] = iEnc;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
BOOL MRU_SetPos(LPMRULIST pmru,int iIndex,int iPos) {
|
||||
|
||||
if (iIndex < 0 || iIndex > pmru->iSize - 1)
|
||||
return FALSE;
|
||||
|
||||
pmru->iCaretPos[iIndex] = iPos;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
Themed Dialogs
|
||||
|
||||
@ -205,16 +205,19 @@ UINT CharSetFromCodePage(UINT);
|
||||
typedef struct _mrulist {
|
||||
|
||||
WCHAR szRegKey[256];
|
||||
int iFlags;
|
||||
int iSize;
|
||||
int iFlags;
|
||||
int iSize;
|
||||
LPWSTR pszItems[MRU_MAXITEMS];
|
||||
int iEncoding[MRU_MAXITEMS];
|
||||
int iCaretPos[MRU_MAXITEMS];
|
||||
|
||||
} MRULIST, *PMRULIST, *LPMRULIST;
|
||||
|
||||
LPMRULIST MRU_Create(LPCWSTR,int,int);
|
||||
BOOL MRU_Destroy(LPMRULIST);
|
||||
BOOL MRU_Add(LPMRULIST,LPCWSTR);
|
||||
BOOL MRU_AddFile(LPMRULIST,LPCWSTR,BOOL,BOOL);
|
||||
BOOL MRU_Add(LPMRULIST,LPCWSTR,int,int);
|
||||
BOOL MRU_FindFile(LPMRULIST,LPCWSTR,int*);
|
||||
BOOL MRU_AddFile(LPMRULIST,LPCWSTR,BOOL,BOOL,int,int);
|
||||
BOOL MRU_Delete(LPMRULIST,int);
|
||||
BOOL MRU_DeleteFileFromStore(LPMRULIST,LPCWSTR);
|
||||
BOOL MRU_Empty(LPMRULIST);
|
||||
@ -222,6 +225,9 @@ int MRU_Enum(LPMRULIST,int,LPWSTR,int);
|
||||
BOOL MRU_Load(LPMRULIST);
|
||||
BOOL MRU_Save(LPMRULIST);
|
||||
BOOL MRU_MergeSave(LPMRULIST,BOOL,BOOL,BOOL);
|
||||
BOOL MRU_SetEnc(LPMRULIST,int,int);
|
||||
BOOL MRU_SetPos(LPMRULIST,int,int);
|
||||
|
||||
|
||||
|
||||
//==== Themed Dialogs =========================================================
|
||||
|
||||
@ -7605,7 +7605,7 @@ BOOL FileLoad(BOOL bDontSave,BOOL bNew,BOOL bReload,BOOL bNoEncDetect,LPCWSTR lp
|
||||
bModified = FALSE;
|
||||
//bReadOnly = FALSE;
|
||||
SendMessage(hwndEdit,SCI_SETEOLMODE,iEOLMode,0);
|
||||
MRU_AddFile(pFileMRU,szFileName,flagRelativeFileMRU,flagPortableMyDocs);
|
||||
MRU_AddFile(pFileMRU,szFileName,flagRelativeFileMRU,flagPortableMyDocs,0,0);
|
||||
if (flagUseSystemMRU == 2)
|
||||
SHAddToRecentDocs(SHARD_PATHW,szFileName);
|
||||
|
||||
@ -7761,8 +7761,10 @@ BOOL FileSave(BOOL bSaveAlways,BOOL bAsk,BOOL bSaveAs,BOOL bSaveCopy)
|
||||
if (!bSaveCopy)
|
||||
{
|
||||
bModified = FALSE;
|
||||
Encoding_HasChanged(Encoding_Current(CPI_GET));
|
||||
MRU_AddFile(pFileMRU,szCurFile,flagRelativeFileMRU,flagPortableMyDocs);
|
||||
int iCurrEnc = Encoding_Current(CPI_GET);
|
||||
Encoding_HasChanged(iCurrEnc);
|
||||
int mpEnc = Encoding_MapIniSetting(FALSE,iCurrEnc);
|
||||
MRU_AddFile(pFileMRU,szCurFile,flagRelativeFileMRU,flagPortableMyDocs,mpEnc,0);
|
||||
if (flagUseSystemMRU == 2)
|
||||
SHAddToRecentDocs(SHARD_PATHW,szCurFile);
|
||||
UpdateToolbar();
|
||||
@ -7772,7 +7774,6 @@ BOOL FileSave(BOOL bSaveAlways,BOOL bAsk,BOOL bSaveAs,BOOL bSaveCopy)
|
||||
InstallFileWatching(szCurFile);
|
||||
}
|
||||
}
|
||||
|
||||
else if (!bCancelDataLoss)
|
||||
{
|
||||
if (StringCchLen(szCurFile) > 0) {
|
||||
@ -7788,6 +7789,11 @@ BOOL FileSave(BOOL bSaveAlways,BOOL bAsk,BOOL bSaveAs,BOOL bSaveCopy)
|
||||
if (GetTempPath(MAX_PATH,lpTempPathBuffer) &&
|
||||
GetTempFileName(lpTempPathBuffer,TEXT("NP3"),0,szTempFileName)) {
|
||||
int fileEncoding = Encoding_Current(CPI_GET);
|
||||
int idx;
|
||||
if (MRU_FindFile(pFileMRU,tchFile,&idx)) {
|
||||
MRU_SetEnc(pFileMRU,idx,Encoding_MapIniSetting(FALSE,fileEncoding));
|
||||
MRU_SetPos(pFileMRU,idx,(int)SendMessage(hwndEdit,SCI_GETCURRENTPOS,0,0));
|
||||
}
|
||||
if (FileIO(FALSE,szTempFileName,FALSE,&fileEncoding,&iEOLMode,NULL,NULL,&bCancelDataLoss,TRUE)) {
|
||||
//~Encoding_Current(fileEncoding); // save should not change encoding
|
||||
|
||||
|
||||
BIN
src/Notepad3.rc
BIN
src/Notepad3.rc
Binary file not shown.
Loading…
Reference in New Issue
Block a user