mirror of
https://github.com/notepad-plus-plus/notepad-plus-plus.git
synced 2025-07-30 01:04:57 +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-collapse-all value="Fold all"/>
|
||||||
<finder-uncollapse-all value="Unfold all"/>
|
<finder-uncollapse-all value="Unfold all"/>
|
||||||
<finder-copy value="Copy Selected Line(s)"/>
|
<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-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-purge-for-every-search value="Purge for every search"/>
|
||||||
<finder-wrap-long-lines value="Word wrap long lines"/>
|
<finder-wrap-long-lines value="Word wrap long lines"/>
|
||||||
<common-ok value="OK"/>
|
<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-collapse-all value="Fold all"/>
|
||||||
<finder-uncollapse-all value="Unfold all"/>
|
<finder-uncollapse-all value="Unfold all"/>
|
||||||
<finder-copy value="Copy Selected Line(s)"/>
|
<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-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-purge-for-every-search value="Purge for every search"/>
|
||||||
<finder-wrap-long-lines value="Word wrap long lines"/>
|
<finder-wrap-long-lines value="Word wrap long lines"/>
|
||||||
<common-ok value="OK"/>
|
<common-ok value="OK"/>
|
||||||
|
@ -2055,7 +2055,7 @@ bool Notepad_plus::findInFinderFiles(FindersInfo *findInFolderInfo)
|
|||||||
_pEditView = &_invisibleEditView;
|
_pEditView = &_invisibleEditView;
|
||||||
Document oldDoc = _invisibleEditView.execute(SCI_GETDOCPOINTER);
|
Document oldDoc = _invisibleEditView.execute(SCI_GETDOCPOINTER);
|
||||||
|
|
||||||
vector<wstring> fileNames = findInFolderInfo->_pSourceFinder->getResultFilePaths();
|
vector<wstring> fileNames = findInFolderInfo->_pSourceFinder->getResultFilePaths(false);
|
||||||
|
|
||||||
findInFolderInfo->_pDestFinder->beginNewFilesSearch();
|
findInFolderInfo->_pDestFinder->beginNewFilesSearch();
|
||||||
findInFolderInfo->_pDestFinder->addSearchLine(findInFolderInfo->_findOption._str2Search.c_str());
|
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);
|
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;
|
std::vector<wstring> paths;
|
||||||
size_t len = _pMainFoundInfos->size();
|
size_t fromLine = 0, toLine = 0;
|
||||||
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;
|
|
||||||
|
|
||||||
}
|
if (onlyInSelectedText)
|
||||||
if (!found)
|
{
|
||||||
paths.push_back(path2add);
|
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;
|
return paths;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -5350,7 +5371,7 @@ void Finder::removeAll()
|
|||||||
|
|
||||||
void Finder::openAll()
|
void Finder::openAll()
|
||||||
{
|
{
|
||||||
for (auto&& path : getResultFilePaths())
|
for (auto&& path : getResultFilePaths(true))
|
||||||
{
|
{
|
||||||
::SendMessage(_hParent, WM_DOOPEN, 0, reinterpret_cast<LPARAM>(path.c_str()));
|
::SendMessage(_hParent, WM_DOOPEN, 0, reinterpret_cast<LPARAM>(path.c_str()));
|
||||||
}
|
}
|
||||||
@ -5359,7 +5380,7 @@ void Finder::openAll()
|
|||||||
void Finder::copyPathnames()
|
void Finder::copyPathnames()
|
||||||
{
|
{
|
||||||
wstring toClipboard;
|
wstring toClipboard;
|
||||||
for (auto&& path : getResultFilePaths())
|
for (auto&& path : getResultFilePaths(true))
|
||||||
{
|
{
|
||||||
toClipboard += path + L"\r\n";
|
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 copyLines = pNativeSpeaker->getLocalizedStrFromID("finder-copy", L"Copy Selected Line(s)");
|
||||||
wstring copyVerbatim = pNativeSpeaker->getNativeLangMenuString(IDM_EDIT_COPY, L"Copy", true);
|
wstring copyVerbatim = pNativeSpeaker->getNativeLangMenuString(IDM_EDIT_COPY, L"Copy", true);
|
||||||
copyVerbatim += L"\tCtrl+C";
|
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);
|
wstring selectAll = pNativeSpeaker->getNativeLangMenuString(IDM_EDIT_SELECTALL, L"Select all", true);
|
||||||
selectAll += L"\tCtrl+A";
|
selectAll += L"\tCtrl+A";
|
||||||
wstring clearAll = pNativeSpeaker->getLocalizedStrFromID("finder-clear-all", L"Clear all");
|
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 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");
|
wstring wrapLongLines = pNativeSpeaker->getLocalizedStrFromID("finder-wrap-long-lines", L"Word wrap long lines");
|
||||||
|
|
||||||
tmp.push_back(MenuItemUnit(NPPM_INTERNAL_FINDINFINDERDLG, findInFinder));
|
tmp.push_back(MenuItemUnit(NPPM_INTERNAL_FINDINFINDERDLG, findInFinder));
|
||||||
|
@ -143,7 +143,7 @@ public:
|
|||||||
void gotoNextFoundResult(int direction);
|
void gotoNextFoundResult(int direction);
|
||||||
std::pair<intptr_t, intptr_t> gotoFoundLine(size_t nOccurrence = 0); // value 0 means this argument is not used
|
std::pair<intptr_t, intptr_t> gotoFoundLine(size_t nOccurrence = 0); // value 0 means this argument is not used
|
||||||
void deleteResult();
|
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;
|
bool canFind(const wchar_t *fileName, size_t lineNumber, size_t* indexToStartFrom) const;
|
||||||
void setVolatiled(bool val) { _canBeVolatiled = val; };
|
void setVolatiled(bool val) { _canBeVolatiled = val; };
|
||||||
std::wstring getHitsString(int count) const;
|
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));
|
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);
|
size_t lineLen = execute(SCI_LINELENGTH, lineNumber);
|
||||||
const size_t bufSize = lineLen + 1;
|
const size_t bufSize = lineLen + 1;
|
||||||
@ -2810,7 +2810,7 @@ wstring ScintillaEditView::getLine(size_t lineNumber)
|
|||||||
return buf.get();
|
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
|
// make sure the buffer length is enough to get the whole line
|
||||||
size_t lineLen = execute(SCI_LINELENGTH, lineNumber);
|
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;
|
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 showAutoComletion(size_t lenEntered, const wchar_t * list);
|
||||||
void showCallTip(size_t startPos, const wchar_t * def);
|
void showCallTip(size_t startPos, const wchar_t * def);
|
||||||
std::wstring getLine(size_t lineNumber);
|
std::wstring getLine(size_t lineNumber) const;
|
||||||
void getLine(size_t lineNumber, wchar_t * line, size_t lineBufferLen);
|
void getLine(size_t lineNumber, wchar_t * line, size_t lineBufferLen) const;
|
||||||
void addText(size_t length, const char *buf);
|
void addText(size_t length, const char *buf);
|
||||||
|
|
||||||
void insertNewLineAboveCurrentLine();
|
void insertNewLineAboveCurrentLine();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user