Release v0.6.45: fix Far snippets and ship portable Utilities folder
This commit is contained in:
1 parent
90b2e0841f
commit
c109408a98
16 files changed
+422
-34
No files matched your search
@@ -0,0 +1,41 @@
|
||||
#pragma once
|
||||
#include <algorithm>
|
||||
#include <cwchar>
|
||||
#include <filesystem>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
namespace ks
|
||||
{
|
||||
// Scan each time the menu opens, relative to the resident executable, not its working directory.
|
||||
inline std::vector<std::filesystem::path> discoverUtilities(const std::filesystem::path &folder,
|
||||
std::error_code &error)
|
||||
{
|
||||
error.clear();
|
||||
std::vector<std::filesystem::path> result;
|
||||
std::filesystem::directory_iterator it(folder, error), end;
|
||||
if (error == std::errc::no_such_file_or_directory) error.clear();
|
||||
while (!error && it != end)
|
||||
{
|
||||
std::error_code entryError;
|
||||
if (_wcsicmp(it->path().extension().c_str(), L".exe") == 0 && it->is_regular_file(entryError))
|
||||
result.push_back(it->path());
|
||||
it.increment(error);
|
||||
}
|
||||
if (error) result.clear();
|
||||
std::sort(result.begin(), result.end(), [](const auto &a, const auto &b) {
|
||||
return _wcsicmp(a.filename().c_str(), b.filename().c_str()) < 0;
|
||||
});
|
||||
return result;
|
||||
}
|
||||
inline std::wstring utilityMenuLabel(const std::filesystem::path &path)
|
||||
{
|
||||
std::wstring label;
|
||||
for (wchar_t ch : path.stem().wstring())
|
||||
{
|
||||
label += ch;
|
||||
if (ch == L'&') label += ch; // Win32 uses ampersands for access keys.
|
||||
}
|
||||
return label;
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user