+ 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:
RaiKoHoff 2020-01-15 16:24:16 +01:00
parent 6c5e67644f
commit da286cb054
6 changed files with 59 additions and 50 deletions

View File

@ -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;
}

View File

@ -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)

View File

@ -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;

View File

@ -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);

View File

@ -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);
}
}

View File

@ -1,6 +1,5 @@
Apache on Windows:
==================
é
* Which distribution?