1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146
|
#ifndef APT_PRIVATE_OUTPUT_H
#define APT_PRIVATE_OUTPUT_H
#include <apt-pkg/aptconfiguration.h>
#include <apt-pkg/cacheset.h>
#include <apt-pkg/configuration.h>
#include <apt-pkg/macros.h>
#include <apt-pkg/pkgcache.h>
#include <fstream>
#include <functional>
#include <iostream>
#include <string>
#include <vector>
// forward declaration
class pkgCacheFile;
class CacheFile;
class pkgDepCache;
class pkgRecords;
APT_PUBLIC extern std::ostream c0out;
APT_PUBLIC extern std::ostream c1out;
APT_PUBLIC extern std::ostream c2out;
APT_PUBLIC extern std::ofstream devnull;
APT_PUBLIC extern unsigned int ScreenWidth;
APT_PUBLIC bool InitOutput(std::basic_streambuf<char> * const out = std::cout.rdbuf());
[[nodiscard]] APT_PUBLIC bool InitOutputPager();
APT_PUBLIC bool IsStdoutAtty();
void ListSingleVersion(pkgCacheFile &CacheFile, pkgRecords &records,
pkgCache::VerIterator const &V, std::ostream &out,
std::string const &format);
// helper to describe global state
APT_PUBLIC void ShowBroken(std::ostream &out, CacheFile &Cache, bool const Now);
APT_PUBLIC void ShowBroken(std::ostream &out, pkgCacheFile &Cache, bool const Now);
APT_PUBLIC void ShowWithColumns(std::ostream &out, const std::vector<std::string> &List, size_t Indent, size_t ScreenWidth);
template<class Container, class PredicateC, class DisplayP, class DisplayV> bool ShowList(std::ostream &out, std::string const &Title,
Container const &cont,
PredicateC Predicate,
DisplayP PkgDisplay,
DisplayV VerboseDisplay,
std::string colorName = "",
std::string Note = "")
{
size_t const ScreenWidth = (::ScreenWidth > 3) ? ::ScreenWidth - 3 : 0;
int ScreenUsed = 0;
bool const ShowVersions = _config->FindB("APT::Get::Show-Versions", false);
bool const ListColumns = _config->FindB("APT::Get::List-Columns", _config->FindI("APT::Output-Version") >= 30);
bool printedTitle = false;
std::vector<std::string> PackageList;
auto setColor = APT::Configuration::color(colorName);
auto resetColor = not setColor.empty() ? APT::Configuration::color("neutral") : "";
for (auto const &Pkg: cont)
{
if (Predicate(Pkg) == false)
continue;
if (printedTitle == false)
{
out << Title;
printedTitle = true;
}
if (ShowVersions == true)
{
out << std::endl << " " << setColor << PkgDisplay(Pkg) << resetColor;
std::string const verbose = VerboseDisplay(Pkg);
if (verbose.empty() == false)
out << " (" << verbose << ")";
}
else
{
std::string const PkgName = PkgDisplay(Pkg);
if (ListColumns)
PackageList.push_back(PkgName);
else
{
if (ScreenUsed == 0 || (ScreenUsed + PkgName.length()) >= ScreenWidth)
{
out << std::endl
<< " ";
ScreenUsed = 0;
}
else if (ScreenUsed != 0)
{
out << " ";
++ScreenUsed;
}
out << setColor << PkgName << resetColor;
ScreenUsed += PkgName.length();
}
}
}
if (printedTitle == true)
{
out << std::endl;
if (ListColumns && not PackageList.empty()) {
out << setColor;
ShowWithColumns(out, PackageList, 2, ScreenWidth);
out << resetColor;
}
if (not Note.empty())
out << Note << std::endl;
if (_config->FindI("APT::Output-Version") >= 30)
out << std::endl;
return false;
}
return true;
}
void ShowNew(std::ostream &out,CacheFile &Cache);
void ShowDel(std::ostream &out,CacheFile &Cache);
void ShowKept(std::ostream &out,CacheFile &Cache, APT::PackageVector const &HeldBackPackages);
void ShowPhasing(std::ostream &out, CacheFile &Cache, APT::PackageVector const &HeldBackPackages);
void ShowUpgraded(std::ostream &out,CacheFile &Cache);
bool ShowDowngraded(std::ostream &out,CacheFile &Cache);
bool ShowHold(std::ostream &out,CacheFile &Cache);
bool ShowEssential(std::ostream &out,CacheFile &Cache);
void Stats(std::ostream &out, pkgDepCache &Dep, APT::PackageVector const &HeldBackPackages);
// prompting
APT_PUBLIC bool YnPrompt(char const *const Question, bool Default = true);
bool YnPrompt(char const * const Question, bool const Default, bool const ShowGlobalErrors, std::ostream &c1o, std::ostream &c2o);
APT_PUBLIC std::string PrettyFullName(pkgCache::PkgIterator const &Pkg);
std::string CurrentVersion(pkgCacheFile * const Cache, pkgCache::PkgIterator const &Pkg);
std::function<std::string(pkgCache::PkgIterator const &)> CurrentVersion(pkgCacheFile * const Cache);
std::string CandidateVersion(pkgCacheFile * const Cache, pkgCache::PkgIterator const &Pkg);
std::function<std::string(pkgCache::PkgIterator const &)> CandidateVersion(pkgCacheFile * const Cache);
std::string CurrentToCandidateVersion(pkgCacheFile * const Cache, pkgCache::PkgIterator const &Pkg);
std::function<std::string(pkgCache::PkgIterator const &)> CurrentToCandidateVersion(pkgCacheFile * const Cache);
std::string EmptyString(pkgCache::PkgIterator const &);
bool AlwaysTrue(pkgCache::PkgIterator const &);
#endif
|