Align --list-images output on a tab stop

Pad each name:tag with enough tabs (not spaces) to reach one 8-column
tab stop past the longest entry in the list, so filenames line up
regardless of how much shorter other names/tags are.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-20 15:49:26 +00:00
parent 94ae5b36a2
commit 4c58552ba6
+19 -1
View File
@@ -14,6 +14,7 @@
// with this program; if not, write to the Free Software Foundation, Inc.,
// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
#include <algorithm>
#include <array>
#include <cstdlib>
#include <filesystem>
@@ -216,8 +217,25 @@ int list_images_command(const std::filesystem::path& dir) {
if (!images) {
return 1;
}
std::vector<std::string> refs;
refs.reserve(images->size());
size_t max_len = 0;
for (const auto& ref : *images) {
fmt::print("{}:{}\t{}\n", ref.name, ref.tag, ref.path.filename().string());
refs.push_back(fmt::format("{}:{}", ref.name, ref.tag));
max_len = std::max(max_len, refs.back().size());
}
// Pad each entry with tabs (not spaces) so filenames line up on an 8-column tab
// stop past the longest name:tag, however long that is.
constexpr size_t kTabWidth = 8;
size_t target_tabs = max_len / kTabWidth + 1;
for (size_t i = 0; i < images->size(); ++i) {
size_t tabs_used = refs[i].size() / kTabWidth;
size_t tabs_needed = target_tabs > tabs_used ? target_tabs - tabs_used : 1;
fmt::print("{}{}{}\n", refs[i], std::string(tabs_needed, '\t'),
(*images)[i].path.filename().string());
}
return 0;
}