From dc6ca9faad504f3f126d28d53813989e14a270bc Mon Sep 17 00:00:00 2001 From: "METANEOCORTEX\\Kotti" Date: Tue, 14 Mar 2023 20:31:28 +0100 Subject: [PATCH] +enh: option to fill empty search text in F/R dialog --- language/common_res.h | 3 ++- language/np3_de_de/strings_de_de.rc | 4 +++- language/np3_en_us/strings_en_us.rc | 4 +++- src/Config/Config.cpp | 2 ++ src/Edit.c | 25 +++++++++++++++++-------- src/TypeDefs.h | 1 + src/resource.h | 3 ++- 7 files changed, 30 insertions(+), 12 deletions(-) diff --git a/language/common_res.h b/language/common_res.h index fa398ca5d..279797e5d 100644 --- a/language/common_res.h +++ b/language/common_res.h @@ -230,7 +230,8 @@ #define IDS_MUI_CLEAR_REPL_HISTORY 15043 #define IDS_MUI_WRAPSEARCH_FWD 15044 #define IDS_MUI_WRAPSEARCH_BCK 15045 -#define IDS_MUI_REPLCLIPTAG 15046 +#define IDS_MUI_SEARCHCLIPIFEMPTY 15046 +#define IDS_MUI_REPLCLIPTAG 15047 #define IDS_MUI_TRANSL_AUTHOR 15050 #define IDS_MUI_ASSOCIATED_EXT 15051 diff --git a/language/np3_de_de/strings_de_de.rc b/language/np3_de_de/strings_de_de.rc index e9e8dad77..543c718c0 100644 --- a/language/np3_de_de/strings_de_de.rc +++ b/language/np3_de_de/strings_de_de.rc @@ -273,7 +273,9 @@ BEGIN "Suchen-Historie löschen" IDS_MUI_CLEAR_REPL_HISTORY "Ersetzen-Historie löschen" - IDS_MUI_REPLCLIPTAG "Ersetzen durch Clipboard Shortcut [^c]" + IDS_MUI_SEARCHCLIPIFEMPTY + "Suche Clipboardinhalt wenn keine Selektion" + IDS_MUI_REPLCLIPTAG "Ersetzen durch Clipboard mittels Shortcut [^c]" IDS_MUI_WRAPSEARCH_FWD "Wrap-Around Fund von Oben" IDS_MUI_WRAPSEARCH_BCK "Wrap-Around Fund von Unten" END diff --git a/language/np3_en_us/strings_en_us.rc b/language/np3_en_us/strings_en_us.rc index 7fdd75a0f..fc27ddfa6 100644 --- a/language/np3_en_us/strings_en_us.rc +++ b/language/np3_en_us/strings_en_us.rc @@ -273,7 +273,9 @@ BEGIN "Clear Find History" IDS_MUI_CLEAR_REPL_HISTORY "Clear Replace History" - IDS_MUI_REPLCLIPTAG "Replace by Clipboard Shortcut [^c]" + IDS_MUI_SEARCHCLIPIFEMPTY + "Search by Clipboard if empty selection" + IDS_MUI_REPLCLIPTAG "Replace by Clipboard on Shortcut [^c]" IDS_MUI_WRAPSEARCH_FWD "Wrap-Around match from top" IDS_MUI_WRAPSEARCH_BCK "Wrap-Around match from bottom" END diff --git a/src/Config/Config.cpp b/src/Config/Config.cpp index c04d368b9..cd464accc 100644 --- a/src/Config/Config.cpp +++ b/src/Config/Config.cpp @@ -1692,6 +1692,7 @@ void LoadSettings() GET_BOOL_VALUE_FROM_INISECTION(EditLayoutRTL, false); GET_BOOL_VALUE_FROM_INISECTION(DialogsLayoutRTL, false); GET_BOOL_VALUE_FROM_INISECTION(PreferredLocale4DateFmt, false); + GET_BOOL_VALUE_FROM_INISECTION(SearchByClipboardIfEmpty, true); GET_BOOL_VALUE_FROM_INISECTION(ReplaceByClipboardTag, true); #ifdef D_NP3_WIN10_DARK_MODE @@ -2117,6 +2118,7 @@ static bool _SaveSettings(bool bForceSaveSettings) SAVE_VALUE_IF_NOT_EQ_DEFAULT(Bool, EditLayoutRTL); SAVE_VALUE_IF_NOT_EQ_DEFAULT(Bool, DialogsLayoutRTL); SAVE_VALUE_IF_NOT_EQ_DEFAULT(Bool, PreferredLocale4DateFmt); + SAVE_VALUE_IF_NOT_EQ_DEFAULT(Bool, SearchByClipboardIfEmpty); SAVE_VALUE_IF_NOT_EQ_DEFAULT(Bool, ReplaceByClipboardTag); #ifdef D_NP3_WIN10_DARK_MODE diff --git a/src/Edit.c b/src/Edit.c index eab5e657d..056084126 100644 --- a/src/Edit.c +++ b/src/Edit.c @@ -5813,13 +5813,13 @@ static LPCWSTR _EditGetFindStrg(HWND hwnd, const LPEDITFINDREPLACE lpefr, bool b } // 2nd: try get clipboard content - if (StrgIsEmpty(hfind) && bFillEmpty) { + if (StrgIsEmpty(hfind) && bFillEmpty && Settings.SearchByClipboardIfEmpty) { LPWSTR const buf = StrgWriteAccessBuf(hfind, FNDRPL_BUFFER); EditGetClipboardW(buf, StrgGetAllocLength(hfind)); StrgSanitize(hfind); } - // 3rd: try get most recently used find pattern + // 3nd: try get most recently used find pattern if (StrgIsEmpty(hfind) && bFillEmpty) { LPWSTR const buf = StrgWriteAccessBuf(hfind, FNDRPL_BUFFER); MRU_Enum(Globals.pMRUfind, 0, buf, (int)StrgGetAllocLength(hfind)); @@ -5860,8 +5860,7 @@ static LPCWSTR _EditGetFindStrg(HWND hwnd, const LPEDITFINDREPLACE lpefr, bool b static char* _GetReplaceString(HWND hwnd, CLPCEDITFINDREPLACE lpefr, int* iReplaceMsg) { char* pszReplace = NULL; // replace text of arbitrary size - if (Settings.ReplaceByClipboardTag && - (StringCchCompareXW(StrgGet(lpefr->chReplaceTemplate), L"^c")) == 0) + if (Settings.ReplaceByClipboardTag && (StringCchCompareXW(StrgGet(lpefr->chReplaceTemplate), L"^c")) == 0) { *iReplaceMsg = SciCall_GetChangeHistory() ? SCI_REPLACETARGETMINIMAL : SCI_REPLACETARGET; pszReplace = EditGetClipboardText(hwnd, true, NULL, NULL); @@ -6280,10 +6279,13 @@ static INT_PTR CALLBACK EditFindReplaceDlgProc(HWND hwnd, UINT umsg, WPARAM wPar GetLngString(IDS_MUI_CLEAR_REPL_HISTORY, wchMenuBuf, COUNTOF(wchMenuBuf)); InsertMenu(hmenu, 4, MF_BYPOSITION | MF_STRING | MF_ENABLED, IDS_MUI_CLEAR_REPL_HISTORY, wchMenuBuf); InsertMenu(hmenu, 5, MF_BYPOSITION | MF_SEPARATOR, 0, NULL); + GetLngString(IDS_MUI_SEARCHCLIPIFEMPTY, wchMenuBuf, COUNTOF(wchMenuBuf)); + InsertMenu(hmenu, 6, MF_BYPOSITION | MF_STRING | MF_ENABLED, IDS_MUI_SEARCHCLIPIFEMPTY, wchMenuBuf); GetLngString(IDS_MUI_REPLCLIPTAG, wchMenuBuf, COUNTOF(wchMenuBuf)); - InsertMenu(hmenu, 6, MF_BYPOSITION | MF_STRING | MF_ENABLED, IDS_MUI_REPLCLIPTAG, wchMenuBuf); - InsertMenu(hmenu, 7, MF_BYPOSITION | MF_SEPARATOR, 0, NULL); + InsertMenu(hmenu, 7, MF_BYPOSITION | MF_STRING | MF_ENABLED, IDS_MUI_REPLCLIPTAG, wchMenuBuf); + InsertMenu(hmenu, 8, MF_BYPOSITION | MF_SEPARATOR, 0, NULL); + CheckCmd(hmenu, IDS_MUI_SEARCHCLIPIFEMPTY, Settings.SearchByClipboardIfEmpty); CheckCmd(hmenu, IDS_MUI_REPLCLIPTAG, Settings.ReplaceByClipboardTag); @@ -6923,10 +6925,14 @@ static INT_PTR CALLBACK EditFindReplaceDlgProc(HWND hwnd, UINT umsg, WPARAM wPar SetDlgItemText(hwnd, IDC_REPLACETEXT, L""); break; + case IDACC_SEARCHCLIPIFEMPTY: + Settings.SearchByClipboardIfEmpty = !Settings.SearchByClipboardIfEmpty; + CheckCmd(GetSystemMenu(hwnd, FALSE), IDS_MUI_SEARCHCLIPIFEMPTY, Settings.SearchByClipboardIfEmpty); + break; + case IDACC_REPLCLIPTAG: Settings.ReplaceByClipboardTag = !Settings.ReplaceByClipboardTag; - HMENU hmenu = GetSystemMenu(hwnd, FALSE); - CheckCmd(hmenu, IDS_MUI_REPLCLIPTAG, Settings.ReplaceByClipboardTag); + CheckCmd(GetSystemMenu(hwnd, FALSE), IDS_MUI_REPLCLIPTAG, Settings.ReplaceByClipboardTag); break; case IDACC_FINDNEXT: @@ -6979,6 +6985,9 @@ static INT_PTR CALLBACK EditFindReplaceDlgProc(HWND hwnd, UINT umsg, WPARAM wPar } else if (wParam == IDS_MUI_CLEAR_REPL_HISTORY) { PostWMCommand(hwnd, IDACC_CLEAR_REPL_HISTORY); return TRUE; + } else if (wParam == IDS_MUI_SEARCHCLIPIFEMPTY) { + PostWMCommand(hwnd, IDACC_SEARCHCLIPIFEMPTY); + return TRUE; } else if (wParam == IDS_MUI_REPLCLIPTAG) { PostWMCommand(hwnd, IDACC_REPLCLIPTAG); return TRUE; diff --git a/src/TypeDefs.h b/src/TypeDefs.h index 0719e2476..d378c63d6 100644 --- a/src/TypeDefs.h +++ b/src/TypeDefs.h @@ -669,6 +669,7 @@ typedef struct SETTINGS_T { int FocusViewMarkerMode; bool PreferredLocale4DateFmt; int AutoSaveInterval; + bool SearchByClipboardIfEmpty; bool ReplaceByClipboardTag; AutoSaveBackupOptions AutoSaveOptions; diff --git a/src/resource.h b/src/resource.h index 6de21e1b6..e86e7af72 100644 --- a/src/resource.h +++ b/src/resource.h @@ -98,7 +98,8 @@ #define IDACC_PREVIEW 313 #define IDACC_CLEAR_FIND_HISTORY 314 #define IDACC_CLEAR_REPL_HISTORY 315 -#define IDACC_REPLCLIPTAG 316 +#define IDACC_SEARCHCLIPIFEMPTY 316 +#define IDACC_REPLCLIPTAG 317 #define IDC_SETCURLEXERTV 402