Hi,
Is there any documentation how the setting "Don't show context menu for paths" should work?
I realised that to ignore my working copy c:\temp\wc\ completely, I had to set either
- "c:\temp\wc*"
- Both "c:\temp\wc" and "c:\temp\wc\*"
The first one also ignored c:\temp\wc2\.
The second being quite clumsy.
This is handled in ShellCache::IsContextPathAllowed(LPCWSTR path). If right-clicking the folder itself, path will be c:\temp\wc
I'm considering to check the list of ignored paths for a trailing \* as follows (adding the ternary operator to check for \\).
if (!I->empty() && I->at(I->size() - 1) == '*')
{
std::wstring str = I->substr(0, I->size() - (I->at(I->size() - 2) == '\\' ? 2 : 1));
Then c:\temp\wc\* would work, but it might crash on a single * (didn't check yet).
Or to check separately for trailing \:
else if (!I->empty() && I->at(I->size() - 1) == '\')
{
std::wstring str = I->substr(0, I->size() - 1);
if (_wcsnicmp(str.c_str(), path, str.size()) == 0)
return FALSE;
}
Basically treating \ as a wildcard character - then you could add c:\temp\wc\ as "ignore the wc folder and everything below".
What do you think? Any risk of regressions?
While I was at it, I'd suggest to remove the check for !I->empty() in the if statement. There is already a separate statement:
if (I->empty())
continue;
just above. So we KNOW that I->empty() is false. Do I miss something here? (For comparison, TortoiseGit don't have that !I->empty() check).
Kind regards,
Daniel