mirror of
https://github.com/rizonesoft/Notepad3.git
synced 2026-06-11 21:03:05 +08:00
+ chg: "Recent Files" History handling
+ chg: "Open 7-bit ASCII files in UTF-8 mode": encoding detection fallback UTF-8 or local ANSI CP
This commit is contained in:
parent
6c5e67644f
commit
da286cb054
@ -1725,13 +1725,17 @@ bool MRU_Delete(LPMRULIST pmru, int iIndex)
|
||||
if (pmru->pszBookMarks[iIndex]) {
|
||||
LocalFree(pmru->pszBookMarks[iIndex]); // StrDup()
|
||||
}
|
||||
for (i = iIndex; i < pmru->iSize - 1; i++) {
|
||||
bool bZeroMoved = false;
|
||||
for (i = iIndex; (i < pmru->iSize - 1) && !bZeroMoved; i++)
|
||||
{
|
||||
pmru->pszItems[i] = pmru->pszItems[i + 1];
|
||||
pmru->iEncoding[i] = pmru->iEncoding[i + 1];
|
||||
pmru->iCaretPos[i] = pmru->iCaretPos[i + 1];
|
||||
pmru->iSelAnchPos[i] = pmru->iSelAnchPos[i + 1];
|
||||
pmru->pszBookMarks[i] = pmru->pszBookMarks[i + 1];
|
||||
|
||||
bZeroMoved = (NULL == pmru->pszItems[i + 1]);
|
||||
|
||||
pmru->pszItems[i + 1] = NULL;
|
||||
pmru->iEncoding[i + 1] = 0;
|
||||
pmru->iCaretPos[i + 1] = -1;
|
||||
@ -1830,10 +1834,13 @@ bool MRU_Load(LPMRULIST pmru)
|
||||
}
|
||||
|
||||
|
||||
bool MRU_Save(LPMRULIST pmru)
|
||||
void MRU_Save(LPMRULIST pmru)
|
||||
{
|
||||
if (s_bSettingsIniFileOpend) {
|
||||
if (pmru) {
|
||||
if (pmru) {
|
||||
|
||||
bool const bOpendByMe = !s_bSettingsIniFileOpend ? OpenSettingsFile() : false;
|
||||
|
||||
if (s_bSettingsIniFileOpend) {
|
||||
WCHAR tchName[32] = { L'\0' };
|
||||
WCHAR tchItem[2048] = { L'\0' };
|
||||
|
||||
@ -1866,42 +1873,51 @@ bool MRU_Save(LPMRULIST pmru)
|
||||
}
|
||||
}
|
||||
}
|
||||
if (bOpendByMe) {
|
||||
CloseSettingsFile();
|
||||
}
|
||||
}
|
||||
return s_bSettingsIniFileOpend;
|
||||
}
|
||||
|
||||
|
||||
bool MRU_MergeSave(LPMRULIST pmru, bool bAddFiles, bool bRelativePath, bool bUnexpandMyDocs)
|
||||
{
|
||||
if (pmru) {
|
||||
int i;
|
||||
LPMRULIST pmruBase;
|
||||
|
||||
pmruBase = MRU_Create(pmru->szRegKey, pmru->iFlags, pmru->iSize);
|
||||
MRU_Load(pmruBase);
|
||||
bool const bOpendByMe = !s_bSettingsIniFileOpend ? OpenSettingsFile() : false;
|
||||
|
||||
if (bAddFiles) {
|
||||
for (i = pmru->iSize - 1; i >= 0; i--) {
|
||||
if (pmru->pszItems[i]) {
|
||||
WCHAR wchItem[MAX_PATH] = { L'\0' };
|
||||
PathAbsoluteFromApp(pmru->pszItems[i], wchItem, COUNTOF(wchItem), true);
|
||||
MRU_AddFile(pmruBase, wchItem, bRelativePath, bUnexpandMyDocs,
|
||||
pmru->iEncoding[i], pmru->iCaretPos[i], pmru->iSelAnchPos[i], pmru->pszBookMarks[i]);
|
||||
if (s_bSettingsIniFileOpend) {
|
||||
|
||||
LPMRULIST pmruBase = MRU_Create(pmru->szRegKey, pmru->iFlags, pmru->iSize);
|
||||
MRU_Load(pmruBase);
|
||||
|
||||
if (bAddFiles) {
|
||||
for (int i = pmru->iSize - 1; i >= 0; i--) {
|
||||
if (pmru->pszItems[i]) {
|
||||
WCHAR wchItem[MAX_PATH] = { L'\0' };
|
||||
PathAbsoluteFromApp(pmru->pszItems[i], wchItem, COUNTOF(wchItem), true);
|
||||
MRU_AddFile(pmruBase, wchItem, bRelativePath, bUnexpandMyDocs,
|
||||
pmru->iEncoding[i], pmru->iCaretPos[i], pmru->iSelAnchPos[i], pmru->pszBookMarks[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
for (i = pmru->iSize - 1; i >= 0; i--) {
|
||||
if (pmru->pszItems[i])
|
||||
MRU_Add(pmruBase, pmru->pszItems[i],
|
||||
pmru->iEncoding[i], pmru->iCaretPos[i], pmru->iSelAnchPos[i], pmru->pszBookMarks[i]);
|
||||
else {
|
||||
for (int i = pmru->iSize - 1; i >= 0; i--) {
|
||||
if (pmru->pszItems[i])
|
||||
MRU_Add(pmruBase, pmru->pszItems[i],
|
||||
pmru->iEncoding[i], pmru->iCaretPos[i], pmru->iSelAnchPos[i], pmru->pszBookMarks[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
MRU_Save(pmruBase);
|
||||
MRU_Destroy(pmruBase);
|
||||
pmruBase = NULL;
|
||||
return true;
|
||||
MRU_Save(pmruBase);
|
||||
MRU_Destroy(pmruBase);
|
||||
pmruBase = NULL;
|
||||
|
||||
if (bOpendByMe) {
|
||||
CloseSettingsFile();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -127,7 +127,7 @@ bool MRU_Delete(LPMRULIST pmru, int iIndex);
|
||||
bool MRU_Empty(LPMRULIST pmru);
|
||||
int MRU_Enum(LPMRULIST pmru, int iIndex, LPWSTR pszItem, int cchItem);
|
||||
bool MRU_Load(LPMRULIST pmru);
|
||||
bool MRU_Save(LPMRULIST pmru);
|
||||
void MRU_Save(LPMRULIST pmru);
|
||||
bool MRU_MergeSave(LPMRULIST pmru, bool, bool, bool);
|
||||
#define MRU_Count(pmru) MRU_Enum((pmru), 0, NULL, 0)
|
||||
|
||||
|
||||
@ -1904,9 +1904,13 @@ static INT_PTR CALLBACK FileMRUDlgProc(HWND hwnd,UINT umsg,WPARAM wParam,LPARAM
|
||||
case LVN_ITEMCHANGED:
|
||||
case LVN_DELETEITEM:
|
||||
{
|
||||
UINT cnt = ListView_GetSelectedCount(GetDlgItem(hwnd, IDC_FILEMRU));
|
||||
UINT const cnt = ListView_GetSelectedCount(GetDlgItem(hwnd, IDC_FILEMRU));
|
||||
DialogEnableControl(hwnd, IDOK, (cnt > 0));
|
||||
DialogEnableControl(hwnd, IDC_REMOVE, (cnt > 0));
|
||||
// can't discard current file (myself)
|
||||
int iCur = 0;
|
||||
if (!MRU_FindFile(Globals.pFileMRU, Globals.CurrentFile, &iCur)) { iCur = -1; }
|
||||
int const item = ListView_GetNextItem(GetDlgItem(hwnd, IDC_FILEMRU), -1, LVNI_ALL | LVNI_SELECTED);
|
||||
DialogEnableControl(hwnd, IDC_REMOVE, (cnt > 0) && (iCur != item));
|
||||
}
|
||||
break;
|
||||
}
|
||||
@ -2032,12 +2036,15 @@ static INT_PTR CALLBACK FileMRUDlgProc(HWND hwnd,UINT umsg,WPARAM wParam,LPARAM
|
||||
DialogEnableControl(hwnd, IDC_REMOVE, (cnt > 0));
|
||||
}
|
||||
}
|
||||
|
||||
else {
|
||||
StringCchCopy((LPWSTR)GetWindowLongPtr(hwnd,DWLP_USER),MAX_PATH,tchFileName);
|
||||
EndDialog(hwnd,IDOK);
|
||||
}
|
||||
}
|
||||
|
||||
if (Settings.SaveRecentFiles && !StrIsEmpty(Globals.IniFile)) {
|
||||
MRU_MergeSave(Globals.pFileMRU, true, Flags.RelativeFileMRU, Flags.PortableMyDocs);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
@ -1074,7 +1074,7 @@ bool EditLoadFile(
|
||||
bool const bValidUTF8 = IsValidUTF8(lpData, cbData);
|
||||
|
||||
cpi_enc_t const iAnalyzeFallback = Settings.UseDefaultForFileEncoding ? Settings.DefaultEncoding :
|
||||
(bValidUTF8 ? CPI_UTF8 : CPI_ANSI_DEFAULT);
|
||||
((bValidUTF8 && Settings.LoadASCIIasUTF8) ? CPI_UTF8 : CPI_ANSI_DEFAULT);
|
||||
|
||||
ENC_DET_T encDetection = Encoding_DetectEncoding(pszFile, lpData, cbData, iAnalyzeFallback,
|
||||
bSkipUTFDetection, bSkipANSICPDetection, bForceEncDetection);
|
||||
|
||||
@ -1678,35 +1678,22 @@ bool SaveAllSettings(bool bSaveSettingsNow)
|
||||
|
||||
if (ok) {
|
||||
|
||||
ok = SaveSettings(bSaveSettingsNow);
|
||||
SaveSettings(bSaveSettingsNow);
|
||||
|
||||
if (StrIsNotEmpty(Globals.IniFile))
|
||||
{
|
||||
// Cleanup unwanted MRU'selEmpty
|
||||
if (!Settings.SaveRecentFiles) {
|
||||
MRU_Empty(Globals.pFileMRU);
|
||||
MRU_Save(Globals.pFileMRU);
|
||||
}
|
||||
else {
|
||||
MRU_MergeSave(Globals.pFileMRU, true, Flags.RelativeFileMRU, Flags.PortableMyDocs);
|
||||
}
|
||||
MRU_Destroy(Globals.pFileMRU);
|
||||
Globals.pFileMRU = NULL;
|
||||
MRU_Save(Globals.pFileMRU);
|
||||
|
||||
if (!Settings.SaveFindReplace) {
|
||||
MRU_Empty(Globals.pMRUfind);
|
||||
MRU_Empty(Globals.pMRUreplace);
|
||||
MRU_Save(Globals.pMRUfind);
|
||||
MRU_Save(Globals.pMRUreplace);
|
||||
}
|
||||
else {
|
||||
MRU_MergeSave(Globals.pMRUfind, false, false, false);
|
||||
MRU_MergeSave(Globals.pMRUreplace, false, false, false);
|
||||
}
|
||||
MRU_Destroy(Globals.pMRUfind);
|
||||
Globals.pMRUfind = NULL;
|
||||
MRU_Destroy(Globals.pMRUreplace);
|
||||
Globals.pMRUreplace = NULL;
|
||||
MRU_Save(Globals.pMRUfind);
|
||||
MRU_Save(Globals.pMRUreplace);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -1,6 +1,5 @@
|
||||
Apache on Windows:
|
||||
==================
|
||||
é
|
||||
|
||||
* Which distribution?
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user