X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=util%2Fxftlsfonts.cc;h=4f33737f168e66e59881ef807c3ece9253e477e0;hb=91b078433073e674c0844de44124dbce4d1e2b82;hp=1e0075edf89e7460b52ee953ff933e6332aa511c;hpb=fb7b6b37615cafa5d553560d78f931e0003fb6cc;p=chaz%2Fopenbox diff --git a/util/xftlsfonts.cc b/util/xftlsfonts.cc index 1e0075ed..4f33737f 100644 --- a/util/xftlsfonts.cc +++ b/util/xftlsfonts.cc @@ -15,7 +15,7 @@ using std::cout; using std::endl; int main(int argc, char **argv) { - if (argc > 1) { + if (argc > 1) for (int i = 1; i < argc; ++i) if (string(argv[i]) == "-help" || string(argv[i]) == "--help" || @@ -24,16 +24,52 @@ int main(int argc, char **argv) { cout << NAME << " version " << VERSION << endl; cout << "Copyright (c) 2002, Ben Jansens " << endl; cout << endl; + cout << "Usage: " << argv[0] << " [options]" << endl; + cout << " -style Show possible styles for each font" << endl; + cout << " -slant Show the slant for each font" << endl; + cout << " -weight Show the weight for each font" << endl; + cout << " -file Show which files contain each font" << endl; + cout << endl; return 1; } - } Display *display = XOpenDisplay(NULL); + if (! display) { + cout << "Failed to open connection to X display\n"; + return 2; + } - XftFontSet *set = XftListFonts(display, DefaultScreen(display), - 0, XFT_FAMILY, 0); + XftObjectSet *obj = XftObjectSetCreate(); + if (! obj) { + cout << "Failed to create an XftObjectSet\n"; + return 2; + } + + XftObjectSetAdd(obj, XFT_FAMILY); - cout << "Found " << set->nfont << " fonts:" << endl; + if (argc > 1) + for (int i = 1; i < argc; ++i) { + if (string(argv[i]) == "-style") XftObjectSetAdd(obj, XFT_STYLE); + else if (string(argv[i]) == "-file") XftObjectSetAdd(obj, XFT_FILE); + else if (string(argv[i]) == "-slant") XftObjectSetAdd(obj, XFT_SLANT); + else if (string(argv[i]) == "-weight") XftObjectSetAdd(obj, XFT_WEIGHT); + } + + XftPattern *pat = XftPatternCreate(); + if (! pat) { + cout << "Failed to create an XftPattern\n"; + exit(2); + } + + XftFontSet *set = XftListFontsPatternObjects(display, DefaultScreen(display), + pat, obj); + if (! set) { + cout << "Failed to find a matching XftFontSet\n"; + exit(2); + } + + XFree(pat); + XFree(obj); for (int i = 0; i < set->nfont; ++i) { for (int e = 0; e < set->fonts[i]->num; ++e) { @@ -85,6 +121,8 @@ int main(int argc, char **argv) { cout << endl; } } + + cout << endl << "Found " << set->nfont << " matches." << endl; XFree(set);