mirror of
https://github.com/notepad-plus-plus/notepad-plus-plus.git
synced 2025-07-29 00:34:24 +02:00
Add ability to open/copy selected files from Search-results
Add ability to open/copy selected files from Search-results, not always ALL files. Fix #15741, close #15763
This commit is contained in:
parent
796b3a40b7
commit
b8224808bd
@ -1719,9 +1719,9 @@ Find in all files but exclude all folders log or logs recursively:
|
||||
<finder-collapse-all value="Fold all"/>
|
||||
<finder-uncollapse-all value="Unfold all"/>
|
||||
<finder-copy value="Copy Selected Line(s)"/>
|
||||
<finder-copy-paths value="Copy Pathname(s)"/>
|
||||
<finder-copy-paths value="Copy Selected Pathname(s)"/>
|
||||
<finder-clear-all value="Clear all"/>
|
||||
<finder-open-all value="Open all"/>
|
||||
<finder-open-all value="Open Selected Pathname(s)"/>
|
||||
<finder-purge-for-every-search value="Purge for every search"/>
|
||||
<finder-wrap-long-lines value="Word wrap long lines"/>
|
||||
<common-ok value="OK"/>
|
||||
|
@ -1717,9 +1717,9 @@ Find in all files but exclude all folders log or logs recursively:
|
||||
<finder-collapse-all value="Fold all"/>
|
||||
<finder-uncollapse-all value="Unfold all"/>
|
||||
<finder-copy value="Copy Selected Line(s)"/>
|
||||
<finder-copy-paths value="Copy Pathname(s)"/>
|
||||
<finder-copy-paths value="Copy Selected Pathname(s)"/>
|
||||
<finder-clear-all value="Clear all"/>
|
||||
<finder-open-all value="Open all"/>
|
||||
<finder-open-all value="Open Selected Pathname(s)"/>
|
||||
<finder-purge-for-every-search value="Purge for every search"/>
|
||||
<finder-wrap-long-lines value="Word wrap long lines"/>
|
||||
<common-ok value="OK"/>
|
||||
|
@ -2055,7 +2055,7 @@ bool Notepad_plus::findInFinderFiles(FindersInfo *findInFolderInfo)
|
||||
_pEditView = &_invisibleEditView;
|
||||
Document oldDoc = _invisibleEditView.execute(SCI_GETDOCPOINTER);
|
||||
|
||||
vector<wstring> fileNames = findInFolderInfo->_pSourceFinder->getResultFilePaths();
|
||||
vector<wstring> fileNames = findInFolderInfo->_pSourceFinder->getResultFilePaths(false);
|
||||
|
||||
findInFolderInfo->_pDestFinder->beginNewFilesSearch();
|
||||
findInFolderInfo->_pDestFinder->addSearchLine(findInFolderInfo->_findOption._str2Search.c_str());
|
||||
|
@ -682,24 +682,45 @@ void Finder::deleteResult()
|
||||
assert(size_t(_scintView.execute(SCI_GETLINECOUNT)) == _pMainFoundInfos->size() + 1);
|
||||
}
|
||||
|
||||
vector<wstring> Finder::getResultFilePaths() const
|
||||
vector<wstring> Finder::getResultFilePaths(bool onlyInSelectedText) const
|
||||
{
|
||||
vector<wstring> paths;
|
||||
size_t len = _pMainFoundInfos->size();
|
||||
for (size_t i = 0; i < len; ++i)
|
||||
{
|
||||
// make sure that path is not already in
|
||||
wstring & path2add = (*_pMainFoundInfos)[i]._fullPath;
|
||||
bool found = path2add.empty();
|
||||
for (size_t j = 0; j < paths.size() && !found; ++j)
|
||||
{
|
||||
if (paths[j] == path2add)
|
||||
found = true;
|
||||
std::vector<wstring> paths;
|
||||
size_t fromLine = 0, toLine = 0;
|
||||
|
||||
}
|
||||
if (!found)
|
||||
paths.push_back(path2add);
|
||||
if (onlyInSelectedText)
|
||||
{
|
||||
const pair<size_t, size_t> lineRange = _scintView.getSelectionLinesRange();
|
||||
fromLine = lineRange.first;
|
||||
toLine = lineRange.second;
|
||||
}
|
||||
else
|
||||
{
|
||||
toLine = _scintView.execute(SCI_GETLINECOUNT) - 1;
|
||||
}
|
||||
|
||||
for (size_t line = fromLine; line <= toLine; ++line)
|
||||
{
|
||||
const int lineFoldLevel = _scintView.execute(SCI_GETFOLDLEVEL, line) & SC_FOLDLEVELNUMBERMASK;
|
||||
if (lineFoldLevel == fileHeaderLevel)
|
||||
{
|
||||
wstring lineStr = _scintView.getLine(line);
|
||||
|
||||
// fileHeaderLevel line format examples:
|
||||
// spacespaceD:\folder\file.ext (2 hits)
|
||||
// spacespacenew 1 (1 hit)
|
||||
const size_t startIndex = 2; // for number of leading spaces
|
||||
auto endIndex = lineStr.find_last_of(L'(');
|
||||
--endIndex; // adjust for space in front of (
|
||||
wstring path = lineStr.substr(startIndex, endIndex - startIndex);
|
||||
|
||||
// make sure that path is not already in before adding
|
||||
if (std::find(paths.begin(), paths.end(), path) == paths.end())
|
||||
{
|
||||
paths.push_back(path);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return paths;
|
||||
}
|
||||
|
||||
@ -5350,7 +5371,7 @@ void Finder::removeAll()
|
||||
|
||||
void Finder::openAll()
|
||||
{
|
||||
for (auto&& path : getResultFilePaths())
|
||||
for (auto&& path : getResultFilePaths(true))
|
||||
{
|
||||
::SendMessage(_hParent, WM_DOOPEN, 0, reinterpret_cast<LPARAM>(path.c_str()));
|
||||
}
|
||||
@ -5359,7 +5380,7 @@ void Finder::openAll()
|
||||
void Finder::copyPathnames()
|
||||
{
|
||||
wstring toClipboard;
|
||||
for (auto&& path : getResultFilePaths())
|
||||
for (auto&& path : getResultFilePaths(true))
|
||||
{
|
||||
toClipboard += path + L"\r\n";
|
||||
}
|
||||
@ -5710,12 +5731,12 @@ intptr_t CALLBACK Finder::run_dlgProc(UINT message, WPARAM wParam, LPARAM lParam
|
||||
wstring copyLines = pNativeSpeaker->getLocalizedStrFromID("finder-copy", L"Copy Selected Line(s)");
|
||||
wstring copyVerbatim = pNativeSpeaker->getNativeLangMenuString(IDM_EDIT_COPY, L"Copy", true);
|
||||
copyVerbatim += L"\tCtrl+C";
|
||||
wstring copyPaths = pNativeSpeaker->getLocalizedStrFromID("finder-copy-paths", L"Copy Pathname(s)");
|
||||
wstring copyPaths = pNativeSpeaker->getLocalizedStrFromID("finder-copy-paths", L"Copy Selected Pathname(s)");
|
||||
wstring selectAll = pNativeSpeaker->getNativeLangMenuString(IDM_EDIT_SELECTALL, L"Select all", true);
|
||||
selectAll += L"\tCtrl+A";
|
||||
wstring clearAll = pNativeSpeaker->getLocalizedStrFromID("finder-clear-all", L"Clear all");
|
||||
wstring purgeForEverySearch = pNativeSpeaker->getLocalizedStrFromID("finder-purge-for-every-search", L"Purge for every search");
|
||||
wstring openAll = pNativeSpeaker->getLocalizedStrFromID("finder-open-all", L"Open all");
|
||||
wstring openAll = pNativeSpeaker->getLocalizedStrFromID("finder-open-all", L"Open Selected Pathname(s)");
|
||||
wstring wrapLongLines = pNativeSpeaker->getLocalizedStrFromID("finder-wrap-long-lines", L"Word wrap long lines");
|
||||
|
||||
tmp.push_back(MenuItemUnit(NPPM_INTERNAL_FINDINFINDERDLG, findInFinder));
|
||||
|
@ -143,7 +143,7 @@ public:
|
||||
void gotoNextFoundResult(int direction);
|
||||
std::pair<intptr_t, intptr_t> gotoFoundLine(size_t nOccurrence = 0); // value 0 means this argument is not used
|
||||
void deleteResult();
|
||||
std::vector<std::wstring> getResultFilePaths() const;
|
||||
std::vector<std::wstring> getResultFilePaths(bool onlyInSelectedText) const;
|
||||
bool canFind(const wchar_t *fileName, size_t lineNumber, size_t* indexToStartFrom) const;
|
||||
void setVolatiled(bool val) { _canBeVolatiled = val; };
|
||||
std::wstring getHitsString(int count) const;
|
||||
|
@ -2801,7 +2801,7 @@ void ScintillaEditView::showCallTip(size_t startPos, const wchar_t * def)
|
||||
execute(SCI_CALLTIPSHOW, startPos, reinterpret_cast<LPARAM>(defA));
|
||||
}
|
||||
|
||||
wstring ScintillaEditView::getLine(size_t lineNumber)
|
||||
wstring ScintillaEditView::getLine(size_t lineNumber) const
|
||||
{
|
||||
size_t lineLen = execute(SCI_LINELENGTH, lineNumber);
|
||||
const size_t bufSize = lineLen + 1;
|
||||
@ -2810,7 +2810,7 @@ wstring ScintillaEditView::getLine(size_t lineNumber)
|
||||
return buf.get();
|
||||
}
|
||||
|
||||
void ScintillaEditView::getLine(size_t lineNumber, wchar_t * line, size_t lineBufferLen)
|
||||
void ScintillaEditView::getLine(size_t lineNumber, wchar_t * line, size_t lineBufferLen) const
|
||||
{
|
||||
// make sure the buffer length is enough to get the whole line
|
||||
size_t lineLen = execute(SCI_LINELENGTH, lineNumber);
|
||||
|
@ -476,8 +476,8 @@ public:
|
||||
intptr_t replaceTargetRegExMode(const wchar_t * re, intptr_t fromTargetPos = -1, intptr_t toTargetPos = -1) const;
|
||||
void showAutoComletion(size_t lenEntered, const wchar_t * list);
|
||||
void showCallTip(size_t startPos, const wchar_t * def);
|
||||
std::wstring getLine(size_t lineNumber);
|
||||
void getLine(size_t lineNumber, wchar_t * line, size_t lineBufferLen);
|
||||
std::wstring getLine(size_t lineNumber) const;
|
||||
void getLine(size_t lineNumber, wchar_t * line, size_t lineBufferLen) const;
|
||||
void addText(size_t length, const char *buf);
|
||||
|
||||
void insertNewLineAboveCurrentLine();
|
||||
|
Loading…
x
Reference in New Issue
Block a user