diff --git a/src/Dialogs.c b/src/Dialogs.c index 778c7740d..8b7104114 100644 --- a/src/Dialogs.c +++ b/src/Dialogs.c @@ -55,6 +55,7 @@ extern WCHAR g_wchCurFile[]; extern WCHAR g_wchAppUserModelID[]; extern DWORD dwLastIOError; +extern BOOL bUseDefaultForFileEncoding; extern BOOL bSkipUnicodeDetection; extern BOOL bLoadASCIIasUTF8; extern BOOL bLoadNFOasOEM; @@ -2094,6 +2095,9 @@ INT_PTR CALLBACK SelectDefEncodingDlgProc(HWND hwnd,UINT umsg,WPARAM wParam,LPAR Encoding_AddToComboboxEx(GetDlgItem(hwnd,IDC_ENCODINGLIST),pdd->idEncoding,0); + if (bUseDefaultForFileEncoding) + CheckDlgButton(hwnd, IDC_USEASREADINGFALLBACK, BST_CHECKED); + if (bSkipUnicodeDetection) CheckDlgButton(hwnd,IDC_NOUNICODEDETECTION,BST_CHECKED); @@ -2121,6 +2125,7 @@ INT_PTR CALLBACK SelectDefEncodingDlgProc(HWND hwnd,UINT umsg,WPARAM wParam,LPAR EndDialog(hwnd,IDCANCEL); } else { + bUseDefaultForFileEncoding = (IsDlgButtonChecked(hwnd, IDC_USEASREADINGFALLBACK) == BST_CHECKED) ? 1 : 0; bSkipUnicodeDetection = (IsDlgButtonChecked(hwnd,IDC_NOUNICODEDETECTION) == BST_CHECKED) ? 1 : 0; bLoadASCIIasUTF8 = (IsDlgButtonChecked(hwnd,IDC_ASCIIASUTF8) == BST_CHECKED) ? 1 : 0; bLoadNFOasOEM = (IsDlgButtonChecked(hwnd,IDC_NFOASOEM) == BST_CHECKED) ? 1 : 0; diff --git a/src/Edit.c b/src/Edit.c index 21799bc8c..2f8bb26ae 100644 --- a/src/Edit.c +++ b/src/Edit.c @@ -64,6 +64,7 @@ extern DWORD dwLastIOError; extern UINT cpLastFind; extern BOOL bReplaceInitialized; extern BOOL bUseOldStyleBraceMatching; +extern BOOL bUseDefaultForFileEncoding; extern BOOL bSkipUnicodeDetection; extern BOOL bFindReplCopySelOrClip; @@ -81,7 +82,7 @@ extern BOOL bFixLineEndings; extern BOOL bAutoStripBlanks; // Default Codepage and Character Set -extern int g_iDefaultEncoding; +extern int g_iDefaultNewFileEncoding; extern int g_iDefaultCharSet; extern BOOL bLoadASCIIasUTF8; extern BOOL bLoadNFOasOEM; @@ -193,8 +194,8 @@ HWND EditCreate(HWND hwndParent) g_hInstance, NULL); - Encoding_Current(g_iDefaultEncoding); - Encoding_SciSetCodePage(hwnd,g_iDefaultEncoding); + Encoding_Current(g_iDefaultNewFileEncoding); + Encoding_SciSetCodePage(hwnd,g_iDefaultNewFileEncoding); SendMessage(hwnd,SCI_SETEOLMODE,SC_EOL_CRLF,0); SendMessage(hwnd,SCI_SETPASTECONVERTENDINGS,TRUE,0); SendMessage(hwnd,SCI_SETMODEVENTMASK,/*SC_MODEVENTMASKALL*/SC_MOD_INSERTTEXT|SC_MOD_DELETETEXT|SC_MOD_CONTAINER,0); @@ -1061,9 +1062,9 @@ BOOL EditLoadFile( } const int iFileEncoding = Encoding_SrcCmdLn(CPI_GET); - const int iPreferedEncoding = (bPreferOEM) ? g_DOSEncoding : - (Encoding_IsValid(Encoding_SrcWeak(CPI_GET)) ? Encoding_SrcWeak(CPI_GET) : g_iDefaultEncoding); - + const int iFileEncWeak = (Encoding_SrcWeak(CPI_GET) != CPI_NONE) ? Encoding_SrcWeak(CPI_GET) : CPI_ANSI_DEFAULT; + const int iPreferedEncoding = (bPreferOEM) ? g_DOSEncoding : (bUseDefaultForFileEncoding ? g_iDefaultNewFileEncoding : iFileEncWeak); + //@@@(g_Encodings[iFileEncWeak].uFlags & NCP_INTERNAL) ? g_iDefaultNewFileEncoding : iFileEncWeak; BOOL bBOM = FALSE; BOOL bReverse = FALSE; @@ -1176,6 +1177,7 @@ BOOL EditLoadFile( } else { + if (iFileEncoding != CPI_NONE) *iEncoding = iFileEncoding; else { @@ -1184,16 +1186,7 @@ BOOL EditLoadFile( if (fvCurFile.mask & FV_ENCODING) *iEncoding = CPI_ANSI_DEFAULT; else { - int iEncWeak = Encoding_SrcWeak(CPI_GET); - switch (iEncWeak) { - case CPI_NONE: - *iEncoding = iPreferedEncoding; - break; - default: - *iEncoding = (g_Encodings[iEncWeak].uFlags & NCP_INTERNAL) ? g_iDefaultEncoding : - (Encoding_IsValid(iEncWeak) ? iEncWeak : iPreferedEncoding); - break; - } + *iEncoding = iPreferedEncoding; } } } @@ -1236,7 +1229,7 @@ BOOL EditLoadFile( } } else { - *iEncoding = Encoding_IsValid(iFileEncoding) ? iFileEncoding : g_iDefaultEncoding; + *iEncoding = Encoding_IsValid(iFileEncoding) ? iFileEncoding : iPreferedEncoding; Encoding_SciSetCodePage(hwnd,*iEncoding); EditSetNewText(hwnd,"",0); EditSetNewText(hwnd,lpData,cbData); diff --git a/src/Helpers.c b/src/Helpers.c index e8d4271e9..a78275a89 100644 --- a/src/Helpers.c +++ b/src/Helpers.c @@ -42,8 +42,6 @@ extern HINSTANCE g_hInstance; -extern BOOL bSkipUnicodeDetection; -extern BOOL bPreserveCaretPos; //============================================================================= @@ -1824,6 +1822,8 @@ UINT CharSetFromCodePage(UINT uCodePage) { } +extern BOOL bPreserveCaretPos; + //============================================================================= // // MRU functions @@ -3405,6 +3405,7 @@ void Encoding_SciSetCodePage(HWND hwnd,int iEncoding) { */ } +extern BOOL bSkipUnicodeDetection; BOOL IsUnicode(const char* pBuffer,int cb,LPBOOL lpbBOM,LPBOOL lpbReverse) { int i = 0xFFFF; diff --git a/src/Notepad3.c b/src/Notepad3.c index 5abe671df..b77badf03 100644 --- a/src/Notepad3.c +++ b/src/Notepad3.c @@ -174,6 +174,7 @@ BOOL g_bCodeFoldingAvailable; BOOL g_bShowCodeFolding; BOOL bViewWhiteSpace; BOOL bViewEOLs; +BOOL bUseDefaultForFileEncoding; BOOL bSkipUnicodeDetection; BOOL bLoadASCIIasUTF8; BOOL bLoadNFOasOEM; @@ -254,7 +255,7 @@ LPMRULIST mruReplace; DWORD dwLastIOError; -int g_iDefaultEncoding; +int g_iDefaultNewFileEncoding; int g_iDefaultCharSet; int g_iEOLMode; @@ -2731,7 +2732,7 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam) case IDM_ENCODING_SETDEFAULT: - SelectDefEncodingDlg(hwnd,&g_iDefaultEncoding); + SelectDefEncodingDlg(hwnd,&g_iDefaultNewFileEncoding); break; @@ -4466,7 +4467,7 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam) { WCHAR tchCurFile2[MAX_PATH] = { L'\0' }; if (StringCchLenW(g_wchCurFile,COUNTOF(g_wchCurFile))) { - Encoding_SrcCmdLn(Encoding_MapUnicode(g_iDefaultEncoding)); + Encoding_SrcCmdLn(Encoding_MapUnicode(g_iDefaultNewFileEncoding)); StringCchCopy(tchCurFile2,COUNTOF(tchCurFile2),g_wchCurFile); FileLoad(FALSE,FALSE,TRUE,TRUE,tchCurFile2); } @@ -5796,10 +5797,12 @@ void LoadSettings() bViewEOLs = IniSectionGetBool(pIniSection,L"ViewEOLs", FALSE); - g_iDefaultEncoding = IniSectionGetInt(pIniSection,L"DefaultEncoding", CPI_NONE); + g_iDefaultNewFileEncoding = IniSectionGetInt(pIniSection,L"DefaultEncoding", CPI_NONE); // if DefaultEncoding is not defined set to system's current code-page - g_iDefaultEncoding = (g_iDefaultEncoding == CPI_NONE) ? - Encoding_MapIniSetting(TRUE,(int)GetACP()) : Encoding_MapIniSetting(TRUE,g_iDefaultEncoding); + g_iDefaultNewFileEncoding = (g_iDefaultNewFileEncoding == CPI_NONE) ? + Encoding_MapIniSetting(TRUE,(int)GetACP()) : Encoding_MapIniSetting(TRUE,g_iDefaultNewFileEncoding); + + bUseDefaultForFileEncoding = IniSectionGetBool(pIniSection, L"UseDefaultForFileEncoding", FALSE); bSkipUnicodeDetection = IniSectionGetBool(pIniSection, L"SkipUnicodeDetection", FALSE); @@ -6003,19 +6006,19 @@ void LoadSettings() // remove internal support for Chinese, Japan, Korean DBCS use UTF-8 instead /* - if (g_iDefaultEncoding == CPI_ANSI_DEFAULT) + if (g_iDefaultNewFileEncoding == CPI_ANSI_DEFAULT) { // check for Chinese, Japan, Korean DBCS code pages and switch accordingly int acp = (int)GetACP(); if (acp == 932 || acp == 936 || acp == 949 || acp == 950) { iSciDefaultCodePage = acp; } - g_iDefaultEncoding = Encoding_GetByCodePage(iSciDefaultCodePage); + g_iDefaultNewFileEncoding = Encoding_GetByCodePage(iSciDefaultCodePage); } */ // set flag for encoding default - g_Encodings[g_iDefaultEncoding].uFlags |= NCP_DEFAULT; + g_Encodings[g_iDefaultNewFileEncoding].uFlags |= NCP_DEFAULT; // define default charset g_iDefaultCharSet = (int)CharSetFromCodePage((UINT)iSciDefaultCodePage); @@ -6101,7 +6104,8 @@ void SaveSettings(BOOL bSaveSettingsNow) { IniSectionSetBool(pIniSection, L"MarkOccurrencesCurrentWord", bMarkOccurrencesCurrentWord); IniSectionSetBool(pIniSection, L"ViewWhiteSpace", bViewWhiteSpace); IniSectionSetBool(pIniSection, L"ViewEOLs", bViewEOLs); - IniSectionSetInt(pIniSection, L"DefaultEncoding", Encoding_MapIniSetting(FALSE, g_iDefaultEncoding)); + IniSectionSetInt(pIniSection, L"DefaultEncoding", Encoding_MapIniSetting(FALSE, g_iDefaultNewFileEncoding)); + IniSectionSetBool(pIniSection, L"UseDefaultForFileEncoding", bUseDefaultForFileEncoding); IniSectionSetBool(pIniSection, L"SkipUnicodeDetection", bSkipUnicodeDetection); IniSectionSetInt(pIniSection, L"LoadASCIIasUTF8", bLoadASCIIasUTF8); IniSectionSetBool(pIniSection, L"LoadNFOasOEM", bLoadNFOasOEM); @@ -7435,9 +7439,9 @@ BOOL FileLoad(BOOL bDontSave,BOOL bNew,BOOL bReload,BOOL bNoEncDetect,LPCWSTR lp g_iEOLMode = iLineEndings[g_iDefaultEOLMode]; SendMessage(g_hwndEdit,SCI_SETEOLMODE,iLineEndings[g_iDefaultEOLMode],0); - Encoding_Current(g_iDefaultEncoding); - Encoding_HasChanged(g_iDefaultEncoding); - Encoding_SciSetCodePage(g_hwndEdit,g_iDefaultEncoding); + Encoding_Current(g_iDefaultNewFileEncoding); + Encoding_HasChanged(g_iDefaultNewFileEncoding); + Encoding_SciSetCodePage(g_hwndEdit,g_iDefaultNewFileEncoding); EditSetNewText(g_hwndEdit,"",0); bReadOnly = FALSE; @@ -7511,8 +7515,8 @@ BOOL FileLoad(BOOL bDontSave,BOOL bNew,BOOL bReload,BOOL bNoEncDetect,LPCWSTR lp Encoding_HasChanged(fileEncoding); } else { - Encoding_Current(g_iDefaultEncoding); - Encoding_HasChanged(g_iDefaultEncoding); + Encoding_Current(g_iDefaultNewFileEncoding); + Encoding_HasChanged(g_iDefaultNewFileEncoding); } Encoding_SciSetCodePage(g_hwndEdit,Encoding_Current(CPI_GET)); bReadOnly = FALSE; diff --git a/src/Notepad3.rc b/src/Notepad3.rc index 73590ecdd..3a796c651 100644 --- a/src/Notepad3.rc +++ b/src/Notepad3.rc @@ -25,10 +25,10 @@ LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US // Icon with lowest ID value placed first to ensure application icon // remains consistent on all systems. -IDI_RUN ICON "..\\res\\Run.ico" - IDR_MAINWND ICON "..\\res\\Notepad3.ico" +IDI_RUN ICON "..\\res\\Run.ico" + IDR_MAINWND128 ICON "..\\res\\Notepad3_128.ico" IDI_STYLES ICON "..\\res\\Styles.ico" @@ -486,7 +486,7 @@ BEGIN "M", IDM_VIEW_MARGIN, VIRTKEY, SHIFT, CONTROL, NOINVERT "N", IDM_FILE_NEW, VIRTKEY, CONTROL, NOINVERT "N", IDM_FILE_NEWWINDOW, VIRTKEY, ALT, NOINVERT - "N", IDM_FILE_NEWWINDOW2, VIRTKEY, ALT, SHIFT, NOINVERT + "N", IDM_FILE_NEWWINDOW2, VIRTKEY, SHIFT, ALT, NOINVERT "N", IDM_VIEW_LINENUMBERS, VIRTKEY, SHIFT, CONTROL, NOINVERT "O", IDM_FILE_OPEN, VIRTKEY, CONTROL, NOINVERT "O", IDM_EDIT_SORTLINES, VIRTKEY, ALT, NOINVERT @@ -744,23 +744,25 @@ BEGIN SCROLLBAR IDC_RESIZEGRIP3,7,112,10,10 END -IDD_DEFENCODING DIALOGEX 0, 0, 180, 118 +IDD_DEFENCODING DIALOGEX 0, 0, 181, 122 STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Encoding" FONT 8, "MS Shell Dlg", 400, 0, 0x1 BEGIN - LTEXT "&Default encoding:",IDC_STATIC,7,7,58,8 - CONTROL "",IDC_ENCODINGLIST,"ComboBoxEx32",CBS_DROPDOWNLIST | WS_CLIPSIBLINGS | WS_VSCROLL | WS_TABSTOP,7,20,166,128 + LTEXT "&Default encoding (new file):",IDC_STATIC,7,7,90,8 + CONTROL "",IDC_ENCODINGLIST,"ComboBoxEx32",CBS_DROPDOWNLIST | WS_CLIPSIBLINGS | WS_VSCROLL | WS_TABSTOP,7,20,167,128 + CONTROL "Fallback on detection failure.", IDC_USEASREADINGFALLBACK, + "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 7, 40, 108, 10 CONTROL "Skip automatic &Unicode detection.",IDC_NOUNICODEDETECTION, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,43,124,10 + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,51,124,10 CONTROL "Open 7-bit &ASCII files in UTF-8 mode.",IDC_ASCIIASUTF8, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,53,136,10 + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,62,136,10 CONTROL "Open 8-bit *.&nfo/diz files in DOS-437 mode.",IDC_NFOASOEM, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,63,166,10 + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,73,167,10 CONTROL "Don't parse encoding &tags.",IDC_ENCODINGFROMFILEVARS, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,73,102,10 - DEFPUSHBUTTON "OK",IDOK,68,97,50,14 - PUSHBUTTON "Cancel",IDCANCEL,123,97,50,14 + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,84,102,10 + DEFPUSHBUTTON "OK",IDOK,68,101,50,14 + PUSHBUTTON "Cancel",IDCANCEL,124,101,50,14 END IDD_DEFEOLMODE DIALOGEX 0, 0, 180, 78 @@ -1209,9 +1211,9 @@ BEGIN IDD_DEFENCODING, DIALOG BEGIN LEFTMARGIN, 7 - RIGHTMARGIN, 173 + RIGHTMARGIN, 174 TOPMARGIN, 7 - BOTTOMMARGIN, 101 + BOTTOMMARGIN, 115 END IDD_DEFEOLMODE, DIALOG diff --git a/src/resource.h b/src/resource.h index 60ad0f250..5e611296e 100644 --- a/src/resource.h +++ b/src/resource.h @@ -134,6 +134,7 @@ #define IDC_SWAPSTRG 230 #define IDC_CHECK_OCC 231 #define IDC_PRINTER 232 +#define IDC_USEASREADINGFALLBACK 233 #define IDACC_FIND 302 #define IDACC_REPLACE 303 #define IDACC_SAVEPOS 304